diff --git a/dist/muze.js b/dist/muze.js index f583306a..1e9810cc 100644 --- a/dist/muze.js +++ b/dist/muze.js @@ -1,2 +1,2 @@ -!function webpackUniversalModuleDefinition(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define("muze",[],factory):"object"==typeof exports?exports.muze=factory():root.muze=factory()}(window,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=7)}([function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.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 a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));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=JSON.parse('{"name":"datamodel","description":"Relational algebra compliant in-memory tabular data store","homepage":"https://github.com/chartshq/datamodel","version":"2.2.1","license":"MIT","main":"dist/datamodel.js","keywords":["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],"author":"Muzejs.org (https://muzejs.org/)","repository":{"type":"git","url":"https://github.com/chartshq/datamodel.git"},"contributors":[{"name":"Akash Goswami","email":"akashgoswami90s@gmail.com"},{"name":"Subhash Haldar"},{"name":"Rousan Ali","email":"rousanali786@gmail.com","url":"https://rousan.io"},{"name":"Ujjal Kumar Dutta","email":"duttaujjalkumar@live.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":"npm run build:prod","build:dev":"webpack --mode development","build:prod":"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 l}),n.d(r,"GROUP_BY_FUNCTIONS",function(){return s});var a={};n.r(a),n.d(a,"DSVArr",function(){return rt}),n.d(a,"DSVStr",function(){return mt}),n.d(a,"FlatJSON",function(){return yt}),n.d(a,"Auto",function(){return bt});var i={};n.r(i),n.d(i,"sum",function(){return un}),n.d(i,"avg",function(){return cn}),n.d(i,"min",function(){return fn}),n.d(i,"max",function(){return ln}),n.d(i,"first",function(){return sn}),n.d(i,"last",function(){return dn}),n.d(i,"count",function(){return pn}),n.d(i,"sd",function(){return hn});var o={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},u={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo",BINNED:"binned"},c={CONTINUOUS:"continuous"},f={MEASURE:"measure",DIMENSION:"dimension"},l={NORMAL:"normal",INVERSE:"inverse",ALL:"all"},s={SUM:"sum",AVG:"avg",MIN:"min",MAX:"max",FIRST:"first",LAST:"last",COUNT:"count",STD:"std"};function d(e){return e instanceof Date?e:new Date(e)}function p(e){return e<10?"0"+e:e}function h(e){this.format=e,this.dtParams=void 0,this.nativeDate=void 0}RegExp.escape=function(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},h.TOKEN_PREFIX="%",h.DATETIME_PARAM_SEQUENCE={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6},h.defaultNumberParser=function(e){return function(t){var n;return isFinite(n=parseInt(t,10))?n:e}},h.defaultRangeParser=function(e,t){return function(n){var r,a=void 0;if(!n)return t;var i=n.toLowerCase();for(a=0,r=e.length;aa.getFullYear()&&(t=""+(i-1)+r),d(t).getFullYear()},formatter:function formatter(e){var t=d(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:"Y",index:0,extract:function extract(){return"(\\d{4})"},parser:h.defaultNumberParser(),formatter:function formatter(e){return d(e).getFullYear().toString()}}}},h.getTokenFormalNames=function(){var e=h.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},h.tokenResolver=function(){var e=h.getTokenDefinitions(),t=function t(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[i+1],-1!==r.indexOf(o)&&a.push({index:i,token:o});return a},h.formatAs=function(e,t){var n,r=d(e),a=h.findTokens(t),i=h.getTokenDefinitions(),o=String(t),u=h.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=a.length;l=0;d--)(f=i[d].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(d=0;d0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],a=+(n[1]||n[0]);if(a>=r)for(var i=r;i<=a;i+=1)t(i)})}var R=function(){function e(e,t){for(var n=0;n3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:L.CROSS,i=[],o=[],u=n||H,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,d=c.name+"."+f.name,p=B(c,f);if(l===s)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=_({},e.schema());-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),i.push(t)}),f.fields.forEach(function(e){var t=_({},e.schema());-1!==p.indexOf(t.name)?r||(t.name=f.name+"."+t.name,i.push(t)):i.push(t)}),T(e._rowDiffset,function(n){var d=!1,h=void 0;T(t._rowDiffset,function(v){var m=[],y={};y[l]={},y[s]={},c.fields.forEach(function(e){m.push(e.partialField.data[n]),y[l][e.name()]={rawValue:e.partialField.data[n],formattedValue:e.formattedData()[n]}}),f.fields.forEach(function(e){-1!==p.indexOf(e.schema().name)&&r||m.push(e.partialField.data[v]),y[s][e.name()]={rawValue:e.partialField.data[v],formattedValue:e.formattedData()[v]}});var g=At(y[l]),b=At(y[s]);if(u(g,b,function(){return e.detachedRoot()},function(){return t.detachedRoot()},{})){var w={};m.forEach(function(e,t){w[i[t].name]=e}),d&&L.CROSS!==a?o[h]=w:(o.push(w),d=!0,h=n)}else if((a===L.LEFTOUTER||a===L.RIGHTOUTER)&&!d){var O={},_=c.fields.length-1;m.forEach(function(e,t){O[i[t].name]=t<=_?e:null}),d=!0,h=n,o.push(O)}})}),new on(o,i,{name:d})}function J(e,t){var n=""+e,r=""+t;return nr?1:0}function z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J;return e.length>1&&function e(t,n,r,a){if(r===n)return t;var i=n+Math.floor((r-n)/2);return e(t,n,i,a),e(t,i+1,r,a),function(e,t,n,r,a){for(var i=e,o=[],u=t;u<=r;u+=1)o[u]=i[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(i[l]=o[f],f+=1):f>r?(i[l]=o[c],c+=1):a(o[c],o[f])<=0?(i[l]=o[c],c+=1):(i[l]=o[f],f+=1)}(t,n,i,r,a),t}(e,0,e.length-1,t),e}var K=function K(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function W(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt?1:-1}:function(e,t){return(e=""+e)==(t=""+t)?0:e>t?-1:1}}return n}(e.type,n)}function q(e,t){var n=new Map,r=[];return e.forEach(function(e){var a=e[t];n.has(a)?r[n.get(a)][1].push(e):(r.push([a,[e]]),n.set(a,r.length-1))}),r}function Z(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,a){return t[r]=e[1].map(function(e){return e[n[a].index]}),t},r),r}function $(e,t,n){for(var r=void 0,a=void 0,i=void 0,o=n.length-1;o>=0;o--)r=n[o][0],a=n[o][1],(i=Ht(t,r))&&("function"==typeof a?z(e,function(e,t){return a(e[i.index],t[i.index])}):E(a)?function(){var n=q(e,i.index),r=a[a.length-1],o=a.slice(0,a.length-1),u=o.map(function(e){return Ht(t,e)});n.forEach(function(e){e.push(Z(e,o,u))}),z(n,function(e,t){var n=e[2],a=t[2];return r(n,a)}),e.length=0,n.forEach(function(t){e.push.apply(e,W(t[1]))})}():function(){var t=X(i,a);z(e,function(e,n){return t(e[i.index],n[i.index])})}())}var Q,ee=function e(t,n,r,a){if(0===t.length)return n;var i=t[0],o=new Map;n.reduce(function(e,t){var n=t[i.index];return e.has(n)?e.get(n).push(t):e.set(n,[t]),e},o);var u=!0,c=!1,f=void 0;try{for(var l,s=o[Symbol.iterator]();!(u=(l=s.next()).done);u=!0){var d=l.value,p=K(d,2),h=p[0],v=p[1],m=e(t.slice(1),v,r,a);o.set(h,m),Array.isArray(m)&&$(m,r,a)}}catch(e){c=!0,f=e}finally{try{!u&&s.return&&s.return()}finally{if(c)throw f}}return o};function ne(e,t,n,r,a){var i={schema:[],data:[],uids:[]},o=(a=Object.assign({},{addUid:!1,columnWise:!1},a)).addUid,u=r&&r.length>0,c=[];if(n.split(",").forEach(function(t){for(var n=0;nn&&(n=a))}),[t,n]}}]),t}(),He=function(){function e(e,t){for(var n=0;n=i?c=!0:(r=e.charCodeAt(o++))===ut?f=!0:r===ct&&(f=!0,e.charCodeAt(o)===ut&&++o),e.slice(a+1,t-1).replace(/""/g,'"')}for(;o9999?"+"+st(t,6):st(t,4))+"-"+st(e.getUTCMonth()+1,2)+"-"+st(e.getUTCDate(),2)+(i?"T"+st(n,2)+":"+st(r,2)+":"+st(a,2)+"."+st(i,3)+"Z":a?"T"+st(n,2)+":"+st(r,2)+":"+st(a,2)+"Z":r||n?"T"+st(n,2)+":"+st(r,2)+"Z":"")}(e):t.test(e+="")?'"'+e.replace(/"/g,'""')+'"':e}return{parse:function parse(e,t){var n,a,i=r(e,function(e,r){if(n)return n(e,r-1);a=e,n=t?function(e,t){var n=ft(e);return function(r,a){return t(n(r),a,e)}}(e,t):ft(e)});return i.columns=a||[],i},parseRows:r,format:function format(t,n){return null==n&&(n=lt(t)),[n.map(o).join(e)].concat(a(t,n)).join("\n")},formatBody:function formatBody(e,t){return null==t&&(t=lt(e)),a(e,t).join("\n")},formatRows:function formatRows(e){return e.map(i).join("\n")}}},ht=pt(","),vt=(ht.parse,ht.parseRows,ht.format,ht.formatBody,ht.formatRows,pt("\t"));vt.parse,vt.parseRows,vt.format,vt.formatBody,vt.formatRows;var gt,mt=function mt(e,t,n){n=Object.assign({},{firstRowHeader:!0,fieldSeparator:","},n);var r=pt(n.fieldSeparator);return rt(r.parseRows(e),t,n)},yt=function yt(e,t){if(!Array.isArray(t))throw new Error("Schema missing or is in an unsupported format");var n={},r=0,a=void 0,i=[],o=v(i),u=t.map(function(e){return e.name});return e.forEach(function(e){var t=[];u.forEach(function(i){i in n?a=n[i]:(n[i]=r++,a=r-1),t[a]=e[i]}),o.apply(void 0,t)}),[Object.keys(n),i]},bt=function bt(e,t,n){var r={FlatJSON:yt,DSVStr:mt,DSVArr:rt},a=D(e);if(!a)throw new Error("Couldn't detect the data format");return r[a](e,t,n)},wt=function wt(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function Ot(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _t(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},a=arguments[3];t===U.COMPOSE?(e._derivation.length=0,(n=e._derivation).push.apply(n,_t(a))):e._derivation.push({op:t,meta:r,criteria:a})})(t,n,arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},arguments[4]),function Dt(e,t){var n;(n=t._ancestorDerivation).push.apply(n,_t(e._ancestorDerivation).concat(_t(e._derivation)))}(e,t)},Nt=(Ot(gt={},l.NORMAL,{diffIndex:["rowDiffset"],calcDiff:[!0,!1]}),Ot(gt,l.INVERSE,{diffIndex:["rejectRowDiffset"],calcDiff:[!1,!0]}),Ot(gt,l.ALL,{diffIndex:["rowDiffset","rejectRowDiffset"],calcDiff:[!0,!0]}),gt),kt=function kt(e,t,n){if(-1!==n&&t===n+1){var r=e.length-1;e[r]=e[r].split("-")[0]+"-"+t}else e.push(""+t)},Tt=function Tt(e,t,n){var r=[],a=[],i=wt(Nt[n].calcDiff,2),o=i[0],u=i[1];return T(e,function(e){var n=t(e);n&&o&&kt(r,e,-1),!n&&u&&kt(a,e,-1)}),{rowDiffset:r.join(","),rejectRowDiffset:a.join(",")}},Ct=function Ct(e,t,n,r,a){var i={},o=function o(){return r.detachedRoot()},u=n.mode,c=e._rowDiffset,f=e.getPartialFieldspace().fields,l=f.map(function(e){return e.formattedData()}),s=f.map(function(e){return e.data()});return a(c,function(e){return t(Et(f,l,s,e),e,o,i)},u)},It=function It(e,t,n){for(var r=n(e,t,0),a=1,i=e.length;a2&&void 0!==arguments[2]?arguments[2]:{},r=[],a=n.operation||"and",i=n.filterByMeasure||!1,o=function Mt(e){var t=e.clone(!1),n=e.getPartialFieldspace();return t._colIdentifier=n.fields.map(function(e){return e.name()}).join(","),n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,t.__calculateFieldspace().calculateFieldsConfig(),t}(e),u=o.getFieldsConfig();return r=t.length?t.map(function(e){return n=void 0,r=(t=e).getData(),a=t.getFieldsConfig(),o=Object.keys(t.getFieldspace().getDimension()).filter(function(e){return e in u}),c=o.length,f=o.map(function(e){return a[e].index}),l=Object.keys(t.getFieldspace().getMeasure()).filter(function(e){return e in u}),s=t.getFieldspace().fieldsObj(),d=r.data,p=l.reduce(function(e,t){return e[t]=s[t].domain(),e},{}),h={},n=function n(e,t,_n){return t[e[_n]]},c&&d.forEach(function(e){var t=It(f,e,n);h[t]=1}),n=function n(e,t,_n2){return t[e[_n2]].internalValue},d.length?function(e){var t=!c||h[It(o,e,n)];return i?l.every(function(t){return e[t].internalValue>=p[t][0]&&e[t].internalValue<=p[t][1]})&&t:t}:function(){return!1};var t,n,r,a,o,c,f,l,s,d,p,h}):[function(){return!1}],"and"===a?o.select(function(e){return r.every(function(t){return t(e)})},{saveChild:!1}):o.select(function(e){return r.some(function(t){return t(e)})},{saveChild:!1})},xt=function xt(e,t,n,r,a){e._rowDiffset=t,e.__calculateFieldspace().calculateFieldsConfig(),Ft(n,e,U.SELECT,{config:r},a)},Ut=function Ut(e,t,n,r){var a=e.clone(n.saveChild),i=t;return n.mode===l.INVERSE&&(i=r.filter(function(e){return-1===t.indexOf(e)})),a._colIdentifier=i.join(","),a.__calculateFieldspace().calculateFieldsConfig(),Ft(e,a,U.PROJECT,{projField:t,config:n,actualProjField:i},null),a},Vt=function Vt(e){if((e=_({},e)).type||(e.type=f.DIMENSION),!e.subtype)switch(e.type){case f.MEASURE:e.subtype=c.CONTINUOUS;break;default:case f.DIMENSION:e.subtype=u.CATEGORICAL}return e},Yt=function Yt(e){return e.map(function(e){return function(e){var t=[c.CONTINUOUS],n=[u.CATEGORICAL,u.BINNED,u.TEMPORAL,u.GEO],r=e.type,a=e.subtype,i=e.name;switch(r){case f.DIMENSION:if(-1===n.indexOf(a))throw new Error("DataModel doesn't support dimension field subtype "+a+" used for "+i+" field");break;case f.MEASURE:if(-1===t.indexOf(a))throw new Error("DataModel doesn't support measure field subtype "+a+" used for "+i+" field");break;default:throw new Error("DataModel doesn't support field type "+r+" used for "+i+" field")}}(e=Vt(e)),e})},Bt=function Bt(e,t,n,r){n=Yt(n),r=Object.assign(Object.assign({},nt),r);var i=a[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var u=i(t,n,r),c=wt(u,2),f=c[0],l=c[1];!function(e,t){n.forEach(function(e){var n=e.as;if(n){var r=t.indexOf(e.name);t[r]=n,e.name=n,delete e.as}})}(0,f);var s=tt(l,n,f),d=F.createNamespace(s,r.name);e._partialFieldspace=d,e._rowDiffset=l.length&&l[0].length?"0-"+(l[0].length-1):"";var p=[],h=d.fields,v=h.map(function(e){return e.data()}),m=h.map(function(e){return e.formattedData()});return T(e._rowDiffset,function(e){p[e]=Et(h,m,v,e)}),d._cachedValueObjects=p,e._colIdentifier=n.map(function(e){return e.name}).join(),e._dataFormat=r.dataFormat===o.AUTO?D(t):r.dataFormat,e},Ht=function Ht(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a.nonTraversingModel,o=a.excludeModels||[];t!==i&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var i=Gt(n,t);e(t,i,r,a)}))},Xt=function Xt(e,t,n,r){var a=void 0,i=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}],a=[];else{var s,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),(a=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:a,models:e.model,path:function Wt(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t}(e.model)}))})}a=(s=[]).concat.apply(s,[].concat(_t(p),[e])).filter(function(e){return null!==e}),l.push({criteria:a,excludeModels:[].concat(h,_t(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(i=Pt(g,a,{filterByMeasure:f}),Jt(g,i,y)),l.forEach(function(e){var t=Pt(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n1?(a=e.clone(r.saveChild),xt(a,u[c[1]],e,n,t),[o,a]):o}(this,e,t,{saveChild:t.saveChild})}},{key:"isEmpty",value:function value(){return!this._rowDiffset.length||!this._colIdentifier.length}},{key:"clone",value:function value(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=new this.constructor(this);return e?t.setParent(this):t.setParent(null),t}},{key:"project",value:function value(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),a=Object.keys(r),i=t.mode,o=$t(e,a,r);return i===l.ALL?[Ut(this,o,{mode:l.NORMAL,saveChild:t.saveChild},a),Ut(this,o,{mode:l.INVERSE,saveChild:t.saveChild},a)]:Ut(this,o,t,a)}},{key:"getFieldsConfig",value:function value(){return this._fieldConfig}},{key:"calculateFieldsConfig",value:function value(){return this._fieldConfig=this._fieldspace.fields.reduce(function(e,t,n){return e[t.name()]={index:n,def:t.schema()},e},{}),this}},{key:"dispose",value:function value(){this._parent&&this._parent.removeChild(this),this._parent=null,this._children.forEach(function(e){e._parent=null}),this._children=[]}},{key:"removeChild",value:function value(e){var t=this._children.findIndex(function(t){return t===e});-1===t||this._children.splice(t,1)}},{key:"setParent",value:function value(e){this._parent&&this._parent.removeChild(this),this._parent=e,e&&e._children.push(this)}},{key:"getParent",value:function value(){return this._parent}},{key:"getChildren",value:function value(){return this._children}},{key:"getDerivations",value:function value(){return this._derivation}},{key:"getAncestorDerivations",value:function value(){return this._ancestorDerivation}}]),e}(),nn=function nn(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},rn=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=function Ae(e,t,n,r){var a=function(e,t){var n=[],r=e.getFieldspace().getDimension();return Object.entries(r).forEach(function(e){var r=Ee(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),n}(e,t),i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=e.getFieldspace().getMeasure(),a=_e.defaultReducer();return Object.keys(r).forEach(function(e){"string"!=typeof t[e]&&(t[e]=r[e].defAggFn());var i=_e.resolve(t[e]);i?n[e]=i:(n[e]=a,t[e]=ge)}),n}(e,n),o=e.getFieldspace(),u=o.fieldsObj(),c=o.name,l=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=Ee(e,2),n=t[0],r=t[1];if(-1!==a.indexOf(n)||i[n])switch(d.push(_({},r.schema())),r.schema().type){case f.MEASURE:s.push(n);break;default:case f.DIMENSION:l.push(n)}});var m=0;T(e._rowDiffset,function(e){var t="";l.forEach(function(n){t=t+"-"+u[n].partialField.data[e]}),void 0===p[t]?(p[t]=m,h.push({}),l.forEach(function(t){h[m][t]=u[t].partialField.data[e]}),s.forEach(function(t){h[m][t]=[u[t].partialField.data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].partialField.data[e])})});var y={},g=function g(){return e.detachedRoot()};return h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=i[n](e[n],g,y)})}),r?(r.__calculateFieldspace(),v=r):v=new yn(h,d,{name:c}),v}.apply(void 0,[this,e,t]);return Ft(this,i,U.GROUPBY,{fieldsArr:e,groupByString:r,defaultReducer:_e.defaultReducer()},t),n.saveChild?i.setParent(this):i.setParent(null),i}},{key:"sort",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{saveChild:!1},n=this.getData({order:"row",sort:e}),a=[n.schema.map(function(e){return e.name})].concat(n.data),i=new this.constructor(a,n.schema,{dataFormat:"DSVArr"});return Ft(this,i,U.SORT,t,e),t.saveChild?i.setParent(this):i.setParent(null),i}},{key:"serialize",value:function value(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:","},t);var n=this.getFieldspace().fields,r=n.map(function(e){return e.formattedData()}),a=r[0].length,i=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(i=[],u=0;u=0&&(n.fields[o]=e)}else n.fields.push(e),r.forEach(function(t,n){t[e.name()]=new k(a[n],i[n],e)});return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t,n){var r=this;e=Vt(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var a=this.getFieldsConfig(),i=t.slice(0,t.length-1),o=t[t.length-1];if(a[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in datamodel");var u=i.map(function(e){var t=a[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),c=this.clone(n.saveChild),f=c.getFieldspace().fields,l=u.map(function(e){return f[e]}),s={},d=function d(){return r.detachedRoot()},p=[];T(c._rowDiffset,function(e){var t=l.map(function(t){return t.partialField.data[e]});p[e]=o.apply(void 0,an(t).concat([e,d,s]))});var h=tt([p],[e],[e.name]),v=nn(h,1)[0];return c.addField(v),Ft(this,c,U.CAL_VAR,{config:e,fields:i},o),c}},{key:"propagate",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=t.isMutableAction,i=t.sourceId,o=t.payload,u=function Kt(e){for(;e._parent;)e=e._parent;return e}(this),c=u._propagationNameSpace,l={groupByModel:function zt(e){for(;e._parent&&e._derivation.find(function(e){return e.op!==U.GROUPBY});)e=e._parent;return e}(this),model:u};return n&&function Zt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,a=t.isMutableAction,i=t.criteria,o=t.action+"-"+t.sourceId;r=a?e.mutableActions:e.immutableActions,null===i?delete r[o]:r[o]={model:n,config:t}}(c,t,this),Xt(e,l,{propagationNameSpace:c,sourceId:i},Object.assign({payload:o},t)),a&&function qt(e,t,n){var r=e.immutableActions;for(var a in r){var i=r[a].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(i,n.config);if(i.sourceId!==o&&u){var c=i.criteria;Xt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},i)}}}(c,l,{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,t){var n=this.getFieldsConfig();if(!n[e])throw new Error("Field "+e+" doesn't exist");var r=t.name||e+"_binned";if(n[r])throw new Error("Field "+r+" already exists");var a=function(e,t,n){var r=n.buckets,a=n.binsCount,i=n.binSize,o=n.start,u=n.end,f=function I(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}(e.domain(),2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var d=[],p=0;p=(i=e[a=n+Math.floor((r-n)/2)]).start&&t=i.end?n=a+1:t2&&void 0!==arguments[2]?arguments[2]:function(e){return e},r=arguments[3],a=r.saveChild,i=e.getFieldspace().fieldsObj(),o=Ct(e.clone(a),n,r,e,function(){for(var e=arguments.length,n=Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments[2],r={mode:l.NORMAL,saveChild:!0},a=this.getFieldsConfig(),i=Object.keys(a),o=[[t]];return n=Object.assign({},r,n),(e=e.length?e:[[]]).forEach(function(e,n){o[n]=$t([].concat(an(e),an(t)),i,a)}),function Lt(e,t,n,r){return t.map(function(t){return Ut(e,t,n,r)})}(this,o,n,i)}}],[{key:"configureInvalidAwareTypes",value:function value(e){return M.invalidAwareVals(e)}},{key:"Reducers",get:function get(){return _e}}]),t}(),un=ye.sum,cn=ye.avg,fn=ye.min,ln=ye.max,sn=ye.first,dn=ye.last,pn=ye.count,hn=ye.std,vn={compose:function compose(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0},r=e,a=void 0,i=[];return t.forEach(function(e){r=e(r),i.push.apply(i,function Y(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t/gi),smartlabel},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(text,calculateDifference,length){if(!this._init)return!1;var size,csArr,tw,twi,cachedStyle,asymmetricDifference,maxAdvancedCacheLimit=this.options.maxCacheLimit,container=this._container,style=this.style||{},cache=this._advancedCache||(this._advancedCache={}),advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]),cacheName=text+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||""),cacheInitName=text+"init"+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||"");return htmlSplCharSpace[text]&&(text=htmlSplCharSpace[text]),calculateDifference?void 0===(asymmetricDifference=cache[cacheInitName])&&(container.innerHTML=text.repeat?text.repeat(length):Array(length+1).join(text),tw=container.offsetWidth,container.innerHTML=text,twi=container.offsetWidth,asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1),advancedCacheKey.push(cacheInitName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()]):asymmetricDifference=0,(cachedStyle=cache[cacheName])?(csArr=cachedStyle.split(","),{width:parseFloat(csArr[0],10),height:parseFloat(csArr[1],10)}):(container.innerHTML=text,size={height:container.offsetHeight,width:container.offsetWidth+asymmetricDifference},cache[cacheName]=size.width+","+size.height,advancedCacheKey.push(cacheName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()],size)},SmartLabelManager.prototype._getWidthFn=function(){var contObj=this._containerObj,container=this._container,svgText=contObj.svgText;return svgText?function(str){var bbox,width;return svgText.textContent=str,(width=(bbox=svgText.getBBox()).width-SVG_BBOX_CORRECTION)<1&&(width=bbox.width),width}:function(str){return container.innerHTML=str,container.offsetWidth}},SmartLabelManager.prototype.setStyle=function(style){return this._init?style!==this.style||this._styleNotSet?(style||(style=this.style),slLib.setLineHeight(style),this.style=style,this._containerObj=sCont=this._containerManager.get(style),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var sCont},SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){return this._init?(this._showNoEllipses=!useEllipses,this):this},SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag=!1,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?"":"...",lineHeight=this._lineHeight,context=this._context,container=this._container,sCont=this._containerObj,ellipsesWidth=sCont.ellipsesWidth,dotWidth=sCont.dotWidth,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,fastTrim=function fastTrim(str){for(var ws=/\s/,i=(str=str.replace(/^\s\s*/,"")).length;ws.test(str.charAt(i-=1)););return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:!1};if(getWidth=this._getWidthFn(),maxHeight===lineHeight&&(maxHeight*=1.2),container){if(!documentSupport.isBrowserLess){if((hasHTMLTag=slLib.xmlTagRegEx.test(text))?(container.innerHTML=text,smartLabel.oriTextWidth=oriWidth=container.offsetWidth,smartLabel.oriTextHeight=oriHeight=container.offsetHeight):(tmpText=text.replace(slLib.ltgtRegex,function(match){return"<"===match?"<":">"}),getOriSizeImproveObj=this.getOriSize(tmpText,!0),smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width,smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height),oriHeight<=maxHeight&&oriWidth<=maxWidth)return smartLabel.width=smartLabel.oriTextWidth=oriWidth,smartLabel.height=smartLabel.oriTextHeight=oriHeight,smartLabel;if(lineHeight>maxHeight)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=0,smartLabel.height=smartLabel.oriTextHeight=0,smartLabel}if(text=fastTrim(text).replace(/(\s+)/g," "),maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth,!hasHTMLTag){if(len=(oriTextArr=text.split("")).length,trimStr="",tempArr=[],tempChar=oriTextArr[0],this._cache[tempChar]?minWidth=this._cache[tempChar].width:(minWidth=getWidth(tempChar),this._cache[tempChar]={width:minWidth}),maxWidthWithEll>minWidth)i=(tempArr=text.substr(0,slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split("")).length;else{if(minWidth>maxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;ellipsesStr&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr=""))}if(strWidth=getWidth(tempArr.join("")),strHeight=this._lineHeight,noWrap){for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth))return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=getWidth(smartLabel.text),smartLabel.height=this._lineHeight,smartLabel;return smartLabel.text=tempArr.join(""),smartLabel.width=strWidth,smartLabel.height=this._lineHeight,smartLabel}for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth)){if(lastSpace=text.substr(0,tempArr.length).lastIndexOf(" "),lastDash=text.substr(0,tempArr.length).lastIndexOf("-"),lastSpace>lastIndexBroken?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastSpace,1,"
"),lastIndexBroken=lastSpace,newCharIndex=lastSpace+1):lastDash>lastIndexBroken?(lastDash===tempArr.length-1?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"
-")):(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"-
")),lastIndexBroken=lastDash,newCharIndex=lastDash+1):(tempArr.splice(tempArr.length-1,1,"
"+oriTextArr[i]),lastLineBreak=tempArr.length-2,strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join("")),lastIndexBroken=lastLineBreak,newCharIndex=i),(strHeight+=this._lineHeight)>maxHeight)return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=maxWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel;maxStrWidth=max(maxStrWidth,strWidth),trimStr=null,nearestChar=slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this),strWidth=getWidth(text.substr(newCharIndex,nearestChar||1)),tempArr.length)/g,'$1'),container.innerHTML=text,x=0,y=(spanArr=container[documentSupport.childRetriverFn](documentSupport.childRetriverString)).length;xmaxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;if(minWidth>maxWidthWithEll&&!this._showNoEllipses&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr="")),initialLeft=characterArr[0].elem.offsetLeft,initialTop=characterArr[0].elem.offsetTop,noWrap)for(;imaxWidthWithEll&&(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),container.offsetWidth>maxWidth&&(removeFromIndex=i,i=len));else for(;imaxWidthWithEll?(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),elemRightMostPoint>maxWidth&&(lastSpace=characterArr[i].spaceIdx,lastDash=characterArr[i].dashIdx,lastSpace>lastIndexBroken?(characterArr[lastSpace].elem.innerHTML="
",lastIndexBroken=lastSpace):lastDash>lastIndexBroken?(characterArr[lastDash].elem.innerHTML=lastDash===i?"
-":"-
",lastIndexBroken=lastDash):elem.parentNode.insertBefore(lastBR=doc.createElement("br"),elem),elem.offsetHeight+elem.offsetTop>maxHeight?(lastBR?lastBR.parentNode.removeChild(lastBR):lastIndexBroken===lastDash?characterArr[lastDash].elem.innerHTML="-":characterArr[lastSpace].elem.innerHTML=" ",removeFromIndex=i,i=len):removeFromIndexForEllipses=null)):elemLowestPoint>maxHeight&&(removeFromIndex=i,i=len);if(removeFromIndex=removeFromIndexForEllipses;i-=1)(elem=characterArr[i].elem).parentNode.removeChild(elem);for(;i>=0;i-=1)elem=characterArr[i].elem,slLib.classNameBrReg.test(elem.className)?elem.parentNode.removeChild(elem):i=0}return smartLabel.text=container.innerHTML.replace(slLib.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),smartLabel.isTruncated&&(smartLabel.text+=ellipsesStr,smartLabel.tooltext=toolText),smartLabel.height=container.offsetHeight,smartLabel.width=container.offsetWidth,smartLabel}return smartLabel.error=new Error("Body Tag Missing!"),smartLabel},SmartLabelManager.prototype.getOriSize=function(text,detailedCalculationFlag){if(!this._init)return!1;var textArr,letter,lSize,i,l,cumulativeSize=0,height=0,indiSizeStore={};if(!detailedCalculationFlag)return this._calCharDimWithCache(text);for(i=0,l=(textArr=text.split("")).length;i]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+classNameWithTag+"[^\\>]{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 childRetriverFn,childRetriverString,noClassTesting;return doc.getElementsByClassName?(childRetriverFn="getElementsByClassName",childRetriverString=classNameWithTag,noClassTesting=!0):(childRetriverFn="getElementsByTagName",childRetriverString="span",noClassTesting=!1),{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(userAgent),isWebKit:new RegExp(" AppleWebKit/").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild)return containerParent.appendChild(container=doc.createElement("DIV")),container.className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),container}else if((body=doc.getElementsByTagName("body")[0])&&body.appendChild)return(container=doc.createElement("DIV")).className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),1,body.appendChild(container),container},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length)return 0;var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;if(difference=maxWidth,charLen=ceil(maxWidth/avgWidth),oriWidthtext.length&&(difference=maxWidth-oriWidth,charLen=text.length);difference>0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}for(;difference<0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}return charLen},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize=styleObj.fontSize||"12px";return styleObj.lineHeight=styleObj.lineHeight||styleObj["line-height"]||1.2*parseInt(fSize,10)+"px",styleObj}}}};exports.default=lib,module.exports=exports.default},function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";r.r(t);var n=function(){function e(e,t){for(var r=0;r2?(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 value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"next",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(n,P(e)),o}},{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,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 value(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i5?maxContainers:5)<20?maxContainers:20,this.maxContainers=maxContainers,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=parentContainer,isBrowserLess&&((svg=doc.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),svg.setAttributeNS("http://www.w3.org/2000/svg","height","0"),svg.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=svg,this.rootNode.appendChild(svg))}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr="";for(key in slLib.supportedStyle)void 0!==style[key]&&(keyStr+=slLib.supportedStyle[key]+":"+style[key]+";");if(!keyStr)return!1;if(containerObj=containers[keyStr])this.first!==containerObj&&(containerObj.prev&&(containerObj.prev.next=containerObj.next),containerObj.next&&(containerObj.next.prev=containerObj.prev),containerObj.next=this.first,containerObj.next.prev=containerObj,this.last===containerObj&&(this.last=containerObj.prev),containerObj.prev=null,this.first=containerObj);else{if(len>=max)for(diff=len-max+1;diff--;)this.removeContainer(this.last);containerObj=this.addContainer(keyStr)}return containerObj},ContainerManager.prototype.addContainer=function(keyStr){var node,container;return this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}},container.next=this.first,container.next&&(container.next.prev=container),this.first=container,this.last||(this.last=container),this.length+=1,node=container.node=doc.createElement("div"),this.rootNode.appendChild(node),documentSupport.isIE&&!documentSupport.hasSVG?node.style.setAttribute("cssText",keyStr):node.setAttribute("style",keyStr),node.setAttribute("aria-hidden","true"),node.setAttribute("role","presentation"),node.style.display="inline-block",node.innerHTML=slLib.testStrAvg,container.lineHeight=node.offsetHeight,container.avgCharWidth=node.offsetWidth/3,documentSupport.isBrowserLess?((node=container.svgText=doc.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",keyStr),this.svgRoot.appendChild(node),node.textContent=slLib.testStrAvg,container.lineHeight=node.getBBox().height,container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3,node.textContent="...",container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION,node.textContent=".",container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION):(node.innerHTML="...",container.ellipsesWidth=node.offsetWidth,node.innerHTML=".",container.dotWidth=node.offsetWidth,node.innerHTML=""),container},ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;keyStr&&this.length&&cObj&&(this.length-=1,cObj.prev&&(cObj.prev.next=cObj.next),cObj.next&&(cObj.next.prev=cObj.prev),this.first===cObj&&(this.first=cObj.next),this.last===cObj&&(this.last=cObj.prev),cObj.node.parentNode.removeChild(cObj.node),delete this.containers[keyStr])},ContainerManager.prototype.dispose=function(){var key,containers=this.containers;for(key in this.maxContainers=null,containers)this.removeContainer(containers[key]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},module.exports=ContainerManager},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var scales_namespaceObject={};__webpack_require__.r(scales_namespaceObject),__webpack_require__.d(scales_namespaceObject,"scaleLinear",function(){return linear_linear}),__webpack_require__.d(scales_namespaceObject,"scaleThreshold",function(){return threshold_threshold}),__webpack_require__.d(scales_namespaceObject,"scaleLog",function(){return log}),__webpack_require__.d(scales_namespaceObject,"scalePow",function(){return pow}),__webpack_require__.d(scales_namespaceObject,"scaleIdentity",function(){return identity_identity}),__webpack_require__.d(scales_namespaceObject,"scaleOrdinal",function(){return ordinal}),__webpack_require__.d(scales_namespaceObject,"scaleSequential",function(){return sequential}),__webpack_require__.d(scales_namespaceObject,"scaleQuantize",function(){return quantize_quantize}),__webpack_require__.d(scales_namespaceObject,"scaleQuantile",function(){return quantile_quantile}),__webpack_require__.d(scales_namespaceObject,"schemeCategory10",function(){return category10}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20",function(){return category20}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20b",function(){return category20b}),__webpack_require__.d(scales_namespaceObject,"scaleBand",function(){return band}),__webpack_require__.d(scales_namespaceObject,"scaleTime",function(){return src_time});var color_schemes_namespaceObject={};__webpack_require__.r(color_schemes_namespaceObject),__webpack_require__.d(color_schemes_namespaceObject,"schemeDark2",function(){return Dark2}),__webpack_require__.d(color_schemes_namespaceObject,"schemePaired",function(){return Paired}),__webpack_require__.d(color_schemes_namespaceObject,"schemeAccent",function(){return Accent}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel1",function(){return Pastel1}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel2",function(){return Pastel2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet1",function(){return Set1}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet2",function(){return Set2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet3",function(){return Set3}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBlues",function(){return Blues_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBrBG",function(){return BrBG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePRGn",function(){return PRGn_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePiYG",function(){return PiYG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBrBG",function(){return BrBG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePRGn",function(){return PRGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePiYG",function(){return PiYG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuOr",function(){return PuOr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdBu",function(){return RdBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdGy",function(){return RdGy}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlBu",function(){return RdYlBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlGn",function(){return RdYlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateSpectral",function(){return Spectral}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBlues",function(){return Blues}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreens",function(){return Greens}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreys",function(){return Greys}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOranges",function(){return Oranges}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePurples",function(){return Purples}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateReds",function(){return Reds}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateViridis",function(){return sequential_multi_viridis}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateInferno",function(){return viridis_inferno}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateMagma",function(){return viridis_magma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePlasma",function(){return viridis_plasma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateWarm",function(){return rainbow_warm}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCool",function(){return rainbow_cool}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCubehelixDefault",function(){return sequential_multi_cubehelix}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuGn",function(){return BuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuPu",function(){return BuPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGnBu",function(){return GnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOrRd",function(){return OrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBuGn",function(){return PuBuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBu",function(){return PuBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuRd",function(){return PuRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdPu",function(){return RdPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGnBu",function(){return YlGnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGn",function(){return YlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrBr",function(){return YlOrBr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrRd",function(){return YlOrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRainbow",function(){return sequential_multi_rainbow});var namespace_namespaceObject={};__webpack_require__.r(namespace_namespaceObject),__webpack_require__.d(namespace_namespaceObject,"UNIT_GLOBAL_NAMESPACE",function(){return UNIT_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"UNIT_LOCAL_NAMESPACE",function(){return UNIT_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_LOCAL_NAMESPACE",function(){return LAYER_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_GLOBAL_NAMESPACE",function(){return LAYER_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_GLOBAL_NAMESPACE",function(){return GROUP_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_LOCAL_NAMESPACE",function(){return GROUP_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_LOCAL_NAMESPACE",function(){return CANVAS_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_GLOBAL_NAMESPACE",function(){return CANVAS_GLOBAL_NAMESPACE});var actions_namespaceObject={};__webpack_require__.r(actions_namespaceObject),__webpack_require__.d(actions_namespaceObject,"DRAG",function(){return DRAG}),__webpack_require__.d(actions_namespaceObject,"HOVER",function(){return HOVER}),__webpack_require__.d(actions_namespaceObject,"SELECTIONDRAG",function(){return SELECTIONDRAG}),__webpack_require__.d(actions_namespaceObject,"CLICK",function(){return CLICK}),__webpack_require__.d(actions_namespaceObject,"LONGTOUCH",function(){return LONGTOUCH}),__webpack_require__.d(actions_namespaceObject,"TOUCHDRAG",function(){return TOUCHDRAG}),__webpack_require__.d(actions_namespaceObject,"ALL_ACTIONS",function(){return ALL_ACTIONS});var enums_selection_namespaceObject={};__webpack_require__.r(enums_selection_namespaceObject),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_ENTRY",function(){return SELECTION_NEW_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_EXIT",function(){return SELECTION_NEW_EXIT}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NULL",function(){return SELECTION_NULL}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_ENTRY",function(){return SELECTION_OLD_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_EXIT",function(){return SELECTION_OLD_EXIT});var behaviours_namespaceObject={};__webpack_require__.r(behaviours_namespaceObject),__webpack_require__.d(behaviours_namespaceObject,"BRUSH",function(){return BRUSH}),__webpack_require__.d(behaviours_namespaceObject,"HIGHLIGHT",function(){return HIGHLIGHT}),__webpack_require__.d(behaviours_namespaceObject,"TOOLTIP",function(){return behaviours_TOOLTIP}),__webpack_require__.d(behaviours_namespaceObject,"FILTER",function(){return FILTER}),__webpack_require__.d(behaviours_namespaceObject,"SELECT",function(){return SELECT});var behavioural_namespaceObject={};__webpack_require__.r(behavioural_namespaceObject),__webpack_require__.d(behavioural_namespaceObject,"HighlightBeahviour",function(){return highlight_HighlightBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"BrushBehaviour",function(){return brush_BrushBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"FilterBehaviour",function(){return filter_FilterBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"SelectBehaviour",function(){return select_SelectBehaviour});var side_effects_namespaceObject={};__webpack_require__.r(side_effects_namespaceObject),__webpack_require__.d(side_effects_namespaceObject,"ANCHORS",function(){return side_effects_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"BRUSH_ANCHORS",function(){return side_effects_BRUSH_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"PERSISTENT_ANCHORS",function(){return side_effects_PERSISTENT_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"FILTER",function(){return side_effects_FILTER}),__webpack_require__.d(side_effects_namespaceObject,"HIGHLIGHTER",function(){return side_effects_HIGHLIGHTER}),__webpack_require__.d(side_effects_namespaceObject,"CROSSLINE",function(){return CROSSLINE}),__webpack_require__.d(side_effects_namespaceObject,"TOOLTIP",function(){return side_effects_TOOLTIP});var src_side_effects_namespaceObject={};__webpack_require__.r(src_side_effects_namespaceObject),__webpack_require__.d(src_side_effects_namespaceObject,"SelectionBox",function(){return selection_box}),__webpack_require__.d(src_side_effects_namespaceObject,"Tooltip",function(){return side_effects_tooltip_Tooltip}),__webpack_require__.d(src_side_effects_namespaceObject,"Crossline",function(){return crossline_Crossline}),__webpack_require__.d(src_side_effects_namespaceObject,"PlotHighlighter",function(){return plot_highlighter_PlotHighlighter}),__webpack_require__.d(src_side_effects_namespaceObject,"FilterEffect",function(){return FilterEffect}),__webpack_require__.d(src_side_effects_namespaceObject,"PersistentAnchors",function(){return persistent_anchors_PersistentAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"BrushAnchors",function(){return brush_anchors_BrushAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"AnchorEffect",function(){return anchors_AnchorEffect});var axis_orientation_namespaceObject={};__webpack_require__.r(axis_orientation_namespaceObject),__webpack_require__.d(axis_orientation_namespaceObject,"BOTTOM",function(){return axis_orientation_BOTTOM}),__webpack_require__.d(axis_orientation_namespaceObject,"TOP",function(){return axis_orientation_TOP}),__webpack_require__.d(axis_orientation_namespaceObject,"LEFT",function(){return axis_orientation_LEFT}),__webpack_require__.d(axis_orientation_namespaceObject,"RIGHT",function(){return axis_orientation_RIGHT}),__webpack_require__.d(axis_orientation_namespaceObject,"axisOrientationMap",function(){return axisOrientationMap});var scale_type_namespaceObject={};__webpack_require__.r(scale_type_namespaceObject),__webpack_require__.d(scale_type_namespaceObject,"LINEAR",function(){return LINEAR}),__webpack_require__.d(scale_type_namespaceObject,"BAND",function(){return BAND}),__webpack_require__.d(scale_type_namespaceObject,"TIME",function(){return TIME}),__webpack_require__.d(scale_type_namespaceObject,"COLOR",function(){return scale_type_COLOR}),__webpack_require__.d(scale_type_namespaceObject,"ORDINAL",function(){return ORDINAL}),__webpack_require__.d(scale_type_namespaceObject,"QUANTIZE",function(){return QUANTIZE}),__webpack_require__.d(scale_type_namespaceObject,"QUANTILE",function(){return QUANTILE}),__webpack_require__.d(scale_type_namespaceObject,"LOG",function(){return LOG}),__webpack_require__.d(scale_type_namespaceObject,"POW",function(){return POW}),__webpack_require__.d(scale_type_namespaceObject,"IDENTITY",function(){return scale_type_IDENTITY}),__webpack_require__.d(scale_type_namespaceObject,"SEQUENTIAL",function(){return SEQUENTIAL}),__webpack_require__.d(scale_type_namespaceObject,"THRESHOLD",function(){return THRESHOLD});var layer_types_namespaceObject={};__webpack_require__.r(layer_types_namespaceObject),__webpack_require__.d(layer_types_namespaceObject,"AREA_LAYER",function(){return layer_types_AREA_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"ARC_LAYER",function(){return layer_types_ARC_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"LINE_LAYER",function(){return layer_types_LINE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TEXT_LAYER",function(){return layer_types_TEXT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"POINT_LAYER",function(){return layer_types_POINT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BAR_LAYER",function(){return layer_types_BAR_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TICK_LAYER",function(){return layer_types_TICK_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"SIMPLE_LAYER",function(){return layer_types_SIMPLE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BASE_LAYER",function(){return layer_types_BASE_LAYER});var firebolt_behavioural_namespaceObject={};__webpack_require__.r(firebolt_behavioural_namespaceObject),__webpack_require__.d(firebolt_behavioural_namespaceObject,"SelectBehaviour",function(){return behavioural_select_SelectBehaviour});var firebolt_side_effects_namespaceObject={};__webpack_require__.r(firebolt_side_effects_namespaceObject),__webpack_require__.d(firebolt_side_effects_namespaceObject,"SelectionBox",function(){return side_effects_selection_box}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendHighlighter",function(){return legend_highlighter_LegendHighlighter});var operators_namespaceObject={};__webpack_require__.r(operators_namespaceObject),__webpack_require__.d(operators_namespaceObject,"share",function(){return operators_share}),__webpack_require__.d(operators_namespaceObject,"html",function(){return operators_html});var dist_datamodel=__webpack_require__(0),datamodel_default=__webpack_require__.n(dist_datamodel),ascending=function(a,b){return ab?1:a>=b?0:NaN},bisector=function(compare){return 1===compare.length&&(compare=function ascendingComparator(f){return function(d,x){return ascending(f(d),x)}}(compare)),{left:function left(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)<0?lo=mid+1:hi=mid}return lo},right:function right(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)>0?hi=mid:lo=mid+1}return lo}}};var ascendingBisect=bisector(ascending),bisectRight=ascendingBisect.right,bisect=(ascendingBisect.left,bisectRight);var number=function(x){return null===x?NaN:+x},array_array=Array.prototype,src_range=(array_array.slice,array_array.map,function(start,stop,step){start=+start,stop=+stop,step=(n=arguments.length)<2?(stop=start,start=0,1):n<3?1:+step;for(var i=-1,n=0|Math.max(0,Math.ceil((stop-start)/step)),range=new Array(n);++i0)return[start];if((reverse=stop0)for(start=Math.ceil(start/step),stop=Math.floor(stop/step),ticks=new Array(n=Math.ceil(stop-start+1));++i=0?(error>=e10?10:error>=e5?5:error>=e2?2:1)*Math.pow(10,power):-Math.pow(10,-power)/(error>=e10?10:error>=e5?5:error>=e2?2:1)}function tickStep(start,stop,count){var step0=Math.abs(stop-start)/Math.max(0,count),step1=Math.pow(10,Math.floor(Math.log(step0)/Math.LN10)),error=step0/step1;return error>=e10?step1*=10:error>=e5?step1*=5:error>=e2&&(step1*=2),stop=1)return+valueof(values[n-1],n-1,values);var n,i=(n-1)*p,i0=Math.floor(i),value0=+valueof(values[i0],i0,values);return value0+(+valueof(values[i0+1],i0+1,values)-value0)*(i-i0)}};function map_Map(){}function map_map(object,f){var map=new map_Map;if(object instanceof map_Map)object.each(function(value,key){map.set(key,value)});else if(Array.isArray(object)){var o,i=-1,n=object.length;if(null==f)for(;++i=keys.length)return null!=_sortValues&&array.sort(_sortValues),null!=_rollup?_rollup(array):array;for(var keyValue,value,values,i=-1,n=array.length,key=keys[depth++],valuesByKey=src_map(),result=createResult();++ikeys.length)return map;var array,sortKey=_sortKeys[depth-1];return null!=_rollup&&depth>=keys.length?array=map.entries():(array=[],map.each(function(v,k){array.push({key:k,values:_entries(v,depth)})})),null!=sortKey?array.sort(function(a,b){return sortKey(a.key,b.key)}):array}(apply(array,0,createMap,setMap),0)},key:function key(d){return keys.push(d),nest},sortKeys:function sortKeys(order){return _sortKeys[keys.length-1]=order,nest},sortValues:function sortValues(order){return _sortValues=order,nest},rollup:function rollup(f){return _rollup=f,nest}}};function createObject(){return{}}function setObject(object,key,value){object[key]=value}function createMap(){return src_map()}function setMap(map,key,value){map.set(key,value)}function set_Set(){}var proto=src_map.prototype;function set_set(object,f){var set=new set_Set;if(object instanceof set_Set)object.each(function(value){set.add(value)});else if(object){var i=-1,n=object.length;if(null==f)for(;++i1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo)),hiIndex=getClosestIndexOf(values,hi),b=lo===hi?a:Math.max(a,hiIndex-1),reverse&&(t=a,a=n-b,b=n-t),a>b?void 0:domain().slice(a,b+1)},scale.invert=function(r0,r1){var a,t,lo=+r0,hi=arguments.length>1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo,"left")),domain()[reverse?n-a:a]},rescale()}function getClosestIndexOf(arr,value,side){for(var highVal,mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1:high}var define=function(constructor,factory,prototype){constructor.prototype=factory.prototype=prototype,prototype.constructor=constructor};function extend(parent,definition){var prototype=Object.create(parent.prototype);for(var key in definition)prototype[key]=definition[key];return prototype}function Color(){}var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex3=/^#([0-9a-f]{3})$/,reHex6=/^#([0-9a-f]{6})$/,reRgbInteger=new RegExp("^rgb\\("+[reI,reI,reI]+"\\)$"),reRgbPercent=new RegExp("^rgb\\("+[reP,reP,reP]+"\\)$"),reRgbaInteger=new RegExp("^rgba\\("+[reI,reI,reI,reN]+"\\)$"),reRgbaPercent=new RegExp("^rgba\\("+[reP,reP,reP,reN]+"\\)$"),reHslPercent=new RegExp("^hsl\\("+[reN,reP,reP]+"\\)$"),reHslaPercent=new RegExp("^hsla\\("+[reN,reP,reP,reN]+"\\)$"),named={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_formatHex(){return this.rgb().formatHex()}function color_formatRgb(){return this.rgb().formatRgb()}function color_color(format){var m;return format=(format+"").trim().toLowerCase(),(m=reHex3.exec(format))?new Rgb((m=parseInt(m[1],16))>>8&15|m>>4&240,m>>4&15|240&m,(15&m)<<4|15&m,1):(m=reHex6.exec(format))?rgbn(parseInt(m[1],16)):(m=reRgbInteger.exec(format))?new Rgb(m[1],m[2],m[3],1):(m=reRgbPercent.exec(format))?new Rgb(255*m[1]/100,255*m[2]/100,255*m[3]/100,1):(m=reRgbaInteger.exec(format))?rgba(m[1],m[2],m[3],m[4]):(m=reRgbaPercent.exec(format))?rgba(255*m[1]/100,255*m[2]/100,255*m[3]/100,m[4]):(m=reHslPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,1):(m=reHslaPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,m[4]):named.hasOwnProperty(format)?rgbn(named[format]):"transparent"===format?new Rgb(NaN,NaN,NaN,0):null}function rgbn(n){return new Rgb(n>>16&255,n>>8&255,255&n,1)}function rgba(r,g,b,a){return a<=0&&(r=g=b=NaN),new Rgb(r,g,b,a)}function rgbConvert(o){return o instanceof Color||(o=color_color(o)),o?new Rgb((o=o.rgb()).r,o.g,o.b,o.opacity):new Rgb}function color_rgb(r,g,b,opacity){return 1===arguments.length?rgbConvert(r):new Rgb(r,g,b,null==opacity?1:opacity)}function Rgb(r,g,b,opacity){this.r=+r,this.g=+g,this.b=+b,this.opacity=+opacity}function rgb_formatHex(){return"#"+hex(this.r)+hex(this.g)+hex(this.b)}function rgb_formatRgb(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"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===a?")":", "+a+")")}function hex(value){return((value=Math.max(0,Math.min(255,Math.round(value)||0)))<16?"0":"")+value.toString(16)}function hsla(h,s,l,a){return a<=0?h=s=l=NaN:l<=0||l>=1?h=s=NaN:s<=0&&(h=NaN),new Hsl(h,s,l,a)}function hslConvert(o){if(o instanceof Hsl)return new Hsl(o.h,o.s,o.l,o.opacity);if(o instanceof Color||(o=color_color(o)),!o)return new Hsl;if(o instanceof Hsl)return o;var r=(o=o.rgb()).r/255,g=o.g/255,b=o.b/255,min=Math.min(r,g,b),max=Math.max(r,g,b),h=NaN,s=max-min,l=(max+min)/2;return s?(h=r===max?(g-b)/s+6*(g0&&l<1?0:h,new Hsl(h,s,l,o.opacity)}function hsl(h,s,l,opacity){return 1===arguments.length?hslConvert(h):new Hsl(h,s,l,null==opacity?1:opacity)}function Hsl(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function hsl2rgb(h,m1,m2){return 255*(h<60?m1+(m2-m1)*h/60:h<180?m2:h<240?m1+(m2-m1)*(240-h)/60:m1)}define(Color,color_color,{copy:function copy(channels){return Object.assign(new this.constructor,this,channels)},displayable:function displayable(){return this.rgb().displayable()},hex:color_formatHex,formatHex:color_formatHex,formatHsl:function color_formatHsl(){return hslConvert(this).formatHsl()},formatRgb:color_formatRgb,toString:color_formatRgb}),define(Rgb,color_rgb,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:rgb_formatHex,formatHex:rgb_formatHex,formatRgb:rgb_formatRgb,toString:rgb_formatRgb})),define(Hsl,hsl,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=this.h%360+360*(this.h<0),s=isNaN(h)||isNaN(this.s)?0:this.s,l=this.l,m2=l+(l<.5?l:1-l)*s,m1=2*l-m2;return new Rgb(hsl2rgb(h>=240?h-240:h+120,m1,m2),hsl2rgb(h,m1,m2),hsl2rgb(h<120?h+240:h-120,m1,m2),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},formatHsl:function formatHsl(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===a?")":", "+a+")")}}));var deg2rad=Math.PI/180,rad2deg=180/Math.PI,Xn=.96422,Yn=1,Zn=.82521,lab_t0=4/29,lab_t1=6/29,t2=3*lab_t1*lab_t1,t3=lab_t1*lab_t1*lab_t1;function labConvert(o){if(o instanceof Lab)return new Lab(o.l,o.a,o.b,o.opacity);if(o instanceof Hcl)return hcl2lab(o);o instanceof Rgb||(o=rgbConvert(o));var x,z,r=rgb2lrgb(o.r),g=rgb2lrgb(o.g),b=rgb2lrgb(o.b),y=xyz2lab((.2225045*r+.7168786*g+.0606169*b)/Yn);return r===g&&g===b?x=z=y:(x=xyz2lab((.4360747*r+.3850649*g+.1430804*b)/Xn),z=xyz2lab((.0139322*r+.0971045*g+.7141733*b)/Zn)),new Lab(116*y-16,500*(x-y),200*(y-z),o.opacity)}function lab(l,a,b,opacity){return 1===arguments.length?labConvert(l):new Lab(l,a,b,null==opacity?1:opacity)}function Lab(l,a,b,opacity){this.l=+l,this.a=+a,this.b=+b,this.opacity=+opacity}function xyz2lab(t){return t>t3?Math.pow(t,1/3):t/t2+lab_t0}function lab2xyz(t){return t>lab_t1?t*t*t:t2*(t-lab_t0)}function lrgb2rgb(x){return 255*(x<=.0031308?12.92*x:1.055*Math.pow(x,1/2.4)-.055)}function rgb2lrgb(x){return(x/=255)<=.04045?x/12.92:Math.pow((x+.055)/1.055,2.4)}function hclConvert(o){if(o instanceof Hcl)return new Hcl(o.h,o.c,o.l,o.opacity);if(o instanceof Lab||(o=labConvert(o)),0===o.a&&0===o.b)return new Hcl(NaN,0180||d<-180?d-360*Math.round(d/360):d):src_constant(isNaN(a)?b:a)}function gamma(y){return 1==(y=+y)?nogamma:function(a,b){return b-a?function exponential(a,b,y){return a=Math.pow(a,y),b=Math.pow(b,y)-a,y=1/y,function(t){return Math.pow(a+t*b,y)}}(a,b,y):src_constant(isNaN(a)?b:a)}}function nogamma(a,b){var d=b-a;return d?linear(a,d):src_constant(isNaN(a)?b:a)}var src_rgb=function rgbGamma(y){var color=gamma(y);function rgb(start,end){var r=color((start=color_rgb(start)).r,(end=color_rgb(end)).r),g=color(start.g,end.g),b=color(start.b,end.b),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.r=r(t),start.g=g(t),start.b=b(t),start.opacity=opacity(t),start+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(spline){return function(colors){var i,color,n=colors.length,r=new Array(n),g=new Array(n),b=new Array(n);for(i=0;i=1?(t=1,n-1):Math.floor(t*n),v1=values[i],v2=values[i+1],v0=i>0?values[i-1]:2*v1-v2,v3=ibi&&(bs=b.slice(bi,bs),s[i]?s[i]+=bs:s[++i]=bs),(am=am[0])===(bm=bm[0])?s[i]?s[i]+=bm:s[++i]=bm:(s[++i]=null,q.push({i:i,x:src_number(am,bm)})),bi=reB.lastIndex;return bi180?b+=360:b-a>180&&(a+=360),q.push({i:s.push(pop(s)+"rotate(",null,degParen)-2,x:src_number(a,b)})):b&&s.push(pop(s)+"rotate("+b+degParen)}(a.rotate,b.rotate,s,q),function skewX(a,b,s,q){a!==b?q.push({i:s.push(pop(s)+"skewX(",null,degParen)-2,x:src_number(a,b)}):b&&s.push(pop(s)+"skewX("+b+degParen)}(a.skewX,b.skewX,s,q),function scale(xa,ya,xb,yb,s,q){if(xa!==xb||ya!==yb){var i=s.push(pop(s)+"scale(",null,",",null,")");q.push({i:i-4,x:src_number(xa,xb)},{i:i-2,x:src_number(ya,yb)})}else 1===xb&&1===yb||s.push(pop(s)+"scale("+xb+","+yb+")")}(a.scaleX,a.scaleY,b.scaleX,b.scaleY,s,q),a=b=null,function(t){for(var o,i=-1,n=q.length;++i2?polymap:bimap,output=input=null,scale}function scale(x){return(output||(output=piecewise(domain,range,clamp?function deinterpolateClamp(deinterpolate){return function(a,b){var d=deinterpolate(a=+a,b=+b);return function(x){return x<=a?0:x>=b?1:d(x)}}}(deinterpolate):deinterpolate,interpolate)))(+x)}return scale.invert=function(y){return(input||(input=piecewise(range,domain,deinterpolateLinear,clamp?function reinterpolateClamp(reinterpolate){return function(a,b){var r=reinterpolate(a=+a,b=+b);return function(t){return t<=0?a:t>=1?b:r(t)}}}(reinterpolate):reinterpolate)))(+y)},scale.domain=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),rescale()):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),rescale()):range.slice()},scale.rangeRound=function(_){return range=array_slice.call(_),interpolate=src_round,rescale()},scale.clamp=function(_){return arguments.length?(clamp=!!_,rescale()):clamp},scale.interpolate=function(_){return arguments.length?(interpolate=_,rescale()):interpolate},rescale()}var formatDecimal=function(x,p){if((i=(x=p?x.toExponential(p-1):x.toExponential()).indexOf("e"))<0)return null;var i,coefficient=x.slice(0,i);return[coefficient.length>1?coefficient[0]+coefficient.slice(2):coefficient,+x.slice(i+1)]},src_exponent=function(x){return(x=formatDecimal(Math.abs(x)))?x[1]:NaN},re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(specifier){return new FormatSpecifier(specifier)}function FormatSpecifier(specifier){if(!(match=re.exec(specifier)))throw new Error("invalid format: "+specifier);var match;this.fill=match[1]||" ",this.align=match[2]||">",this.sign=match[3]||"-",this.symbol=match[4]||"",this.zero=!!match[5],this.width=match[6]&&+match[6],this.comma=!!match[7],this.precision=match[8]&&+match[8].slice(1),this.trim=!!match[9],this.type=match[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 prefixExponent,defaultLocale_locale,defaultLocale_format,defaultLocale_formatPrefix,formatTrim=function(s){out:for(var i1,n=s.length,i=1,i0=-1;i0){if(!+s[i])break out;i0=0}}return i0>0?s.slice(0,i0)+s.slice(i1+1):s},formatRounded=function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1];return exponent<0?"0."+new Array(-exponent).join("0")+coefficient:coefficient.length>exponent+1?coefficient.slice(0,exponent+1)+"."+coefficient.slice(exponent+1):coefficient+new Array(exponent-coefficient.length+2).join("0")},formatTypes={"%":function _(x,p){return(100*x).toFixed(p)},b:function b(x){return Math.round(x).toString(2)},c:function c(x){return x+""},d:function d(x){return Math.round(x).toString(10)},e:function e(x,p){return x.toExponential(p)},f:function f(x,p){return x.toFixed(p)},g:function g(x,p){return x.toPrecision(p)},o:function o(x){return Math.round(x).toString(8)},p:function p(x,_p){return formatRounded(100*x,_p)},r:formatRounded,s:function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1],i=exponent-(prefixExponent=3*Math.max(-8,Math.min(8,Math.floor(exponent/3))))+1,n=coefficient.length;return i===n?coefficient:i>n?coefficient+new Array(i-n+1).join("0"):i>0?coefficient.slice(0,i)+"."+coefficient.slice(i):"0."+new Array(1-i).join("0")+formatDecimal(x,Math.max(0,p+i-1))[0]},X:function X(x){return Math.round(x).toString(16).toUpperCase()},x:function x(_x){return Math.round(_x).toString(16)}},src_identity=function(x){return x},prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],src_locale=function(locale){var group=locale.grouping&&locale.thousands?function(grouping,thousands){return function(value,width){for(var i=value.length,t=[],j=0,g=grouping[0],length=0;i>0&&g>0&&(length+g+1>width&&(g=Math.max(1,width-length)),t.push(value.substring(i-=g,i+g)),!((length+=g+1)>width));)g=grouping[j=(j+1)%grouping.length];return t.reverse().join(thousands)}}(locale.grouping,locale.thousands):src_identity,currency=locale.currency,decimal=locale.decimal,numerals=locale.numerals?function(numerals){return function(value){return value.replace(/[0-9]/g,function(i){return numerals[+i]})}}(locale.numerals):src_identity,percent=locale.percent||"%";function newFormat(specifier){var fill=(specifier=formatSpecifier(specifier)).fill,align=specifier.align,sign=specifier.sign,symbol=specifier.symbol,zero=specifier.zero,width=specifier.width,comma=specifier.comma,precision=specifier.precision,trim=specifier.trim,type=specifier.type;"n"===type?(comma=!0,type="g"):formatTypes[type]||(null==precision&&(precision=12),trim=!0,type="g"),(zero||"0"===fill&&"="===align)&&(zero=!0,fill="0",align="=");var prefix="$"===symbol?currency[0]:"#"===symbol&&/[boxX]/.test(type)?"0"+type.toLowerCase():"",suffix="$"===symbol?currency[1]:/[%p]/.test(type)?percent:"",formatType=formatTypes[type],maybeSuffix=/[defgprs%]/.test(type);function format(value){var i,n,c,valuePrefix=prefix,valueSuffix=suffix;if("c"===type)valueSuffix=formatType(value)+valueSuffix,value="";else{var valueNegative=(value=+value)<0;if(value=formatType(Math.abs(value),precision),trim&&(value=formatTrim(value)),valueNegative&&0==+value&&(valueNegative=!1),valuePrefix=(valueNegative?"("===sign?sign:"-":"-"===sign||"("===sign?"":sign)+valuePrefix,valueSuffix=("s"===type?prefixes[8+prefixExponent/3]:"")+valueSuffix+(valueNegative&&"("===sign?")":""),maybeSuffix)for(i=-1,n=value.length;++i(c=value.charCodeAt(i))||c>57){valueSuffix=(46===c?decimal+value.slice(i+1):value.slice(i))+valueSuffix,value=value.slice(0,i);break}}comma&&!zero&&(value=group(value,1/0));var length=valuePrefix.length+value.length+valueSuffix.length,padding=length>1)+valuePrefix+value+valueSuffix+padding.slice(length);break;default:value=padding+valuePrefix+value+valueSuffix}return numerals(value)}return precision=null==precision?6:/[gprs]/.test(type)?Math.max(1,Math.min(21,precision)):Math.max(0,Math.min(20,precision)),format.toString=function(){return specifier+""},format}return{format:newFormat,formatPrefix:function formatPrefix(specifier,value){var f=newFormat(((specifier=formatSpecifier(specifier)).type="f",specifier)),e=3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3))),k=Math.pow(10,-e),prefix=prefixes[8+e/3];return function(value){return f(k*value)+prefix}}}};!function defaultLocale(definition){return defaultLocale_locale=src_locale(definition),defaultLocale_format=defaultLocale_locale.format,defaultLocale_formatPrefix=defaultLocale_locale.formatPrefix,defaultLocale_locale}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var src_tickFormat=function(domain,count,specifier){var precision,start=domain[0],stop=domain[domain.length-1],step=tickStep(start,stop,null==count?10:count);switch((specifier=formatSpecifier(null==specifier?",f":specifier)).type){case"s":var value=Math.max(Math.abs(start),Math.abs(stop));return null!=specifier.precision||isNaN(precision=function(step,value){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3)))-src_exponent(Math.abs(step)))}(step,value))||(specifier.precision=precision),defaultLocale_formatPrefix(specifier,value);case"":case"e":case"g":case"p":case"r":null!=specifier.precision||isNaN(precision=function(step,max){return step=Math.abs(step),max=Math.abs(max)-step,Math.max(0,src_exponent(max)-src_exponent(step))+1}(step,Math.max(Math.abs(start),Math.abs(stop))))||(specifier.precision=precision-("e"===specifier.type));break;case"f":case"%":null!=specifier.precision||isNaN(precision=function(step){return Math.max(0,-src_exponent(Math.abs(step)))}(step))||(specifier.precision=precision-2*("%"===specifier.type))}return defaultLocale_format(specifier)};function linearish(scale){var domain=scale.domain;return scale.ticks=function(count){var d=domain();return src_ticks(d[0],d[d.length-1],null==count?10:count)},scale.tickFormat=function(count,specifier){return src_tickFormat(domain(),count,specifier)},scale.nice=function(count){null==count&&(count=10);var step,d=domain(),i0=0,i1=d.length-1,start=d[i0],stop=d[i1];return stop0?step=tickIncrement(start=Math.floor(start/step)*step,stop=Math.ceil(stop/step)*step,count):step<0&&(step=tickIncrement(start=Math.ceil(start*step)/step,stop=Math.floor(stop*step)/step,count)),step>0?(d[i0]=Math.floor(start/step)*step,d[i1]=Math.ceil(stop/step)*step,domain(d)):step<0&&(d[i0]=Math.ceil(start*step)/step,d[i1]=Math.floor(stop*step)/step,domain(d)),scale},scale}function linear_linear(){var scale=continuous(deinterpolateLinear,src_number);return scale.copy=function(){return copy(scale,linear_linear())},linearish(scale)}function identity_identity(){var domain=[0,1];function scale(x){return+x}return scale.invert=scale,scale.domain=scale.range=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),scale):domain.slice()},scale.copy=function(){return identity_identity().domain(domain)},linearish(scale)}var nice=function(domain,interval){var t,i0=0,i1=(domain=domain.slice()).length-1,x0=domain[i0],x1=domain[i1];return x10){for(;iv)break;z.push(t)}}else for(;i=1;--k)if(!((t=p*k)v)break;z.push(t)}}else z=src_ticks(i,j,Math.min(j-i,n)).map(pows);return r?z.reverse():z},scale.tickFormat=function(count,specifier){if(null==specifier&&(specifier=10===base?".0e":","),"function"!=typeof specifier&&(specifier=defaultLocale_format(specifier)),count===1/0)return specifier;null==count&&(count=10);var k=Math.max(1,base*count/scale.ticks().length);return function(d){var i=d/pows(Math.round(logs(d)));return i*base0?thresholds[i-1]:domain[0],i=n?[domain[n-1],x1]:[domain[i-1],domain[i]]},scale.copy=function(){return quantize_quantize().domain([x0,x1]).range(range)},linearish(scale)}function threshold_threshold(){var domain=[.5],range=[0,1],n=1;function scale(x){if(x<=x)return range[bisect(domain,x,0,n)]}return scale.domain=function(_){return arguments.length?(domain=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):range.slice()},scale.invertExtent=function(y){var i=range.indexOf(y);return[domain[i-1],domain[i]]},scale.copy=function(){return threshold_threshold().domain(domain).range(range)},scale}var interval_t0=new Date,interval_t1=new Date;function newInterval(floori,offseti,count,field){function interval(date){return floori(date=new Date(+date)),date}return interval.floor=interval,interval.ceil=function(date){return floori(date=new Date(date-1)),offseti(date,1),floori(date),date},interval.round=function(date){var d0=interval(date),d1=interval.ceil(date);return date-d00))return range;do{range.push(previous=new Date(+start)),offseti(start,step),floori(start)}while(previous=date)for(;floori(date),!test(date);)date.setTime(date-1)},function(date,step){if(date>=date)if(step<0)for(;++step<=0;)for(;offseti(date,-1),!test(date););else for(;--step>=0;)for(;offseti(date,1),!test(date););})},count&&(interval.count=function(start,end){return interval_t0.setTime(+start),interval_t1.setTime(+end),floori(interval_t0),floori(interval_t1),Math.floor(count(interval_t0,interval_t1))},interval.every=function(step){return step=Math.floor(step),isFinite(step)&&step>0?step>1?interval.filter(field?function(d){return field(d)%step==0}:function(d){return interval.count(0,d)%step==0}):interval:null}),interval}var millisecond_millisecond=newInterval(function(){},function(date,step){date.setTime(+date+step)},function(start,end){return end-start});millisecond_millisecond.every=function(k){return k=Math.floor(k),isFinite(k)&&k>0?k>1?newInterval(function(date){date.setTime(Math.floor(date/k)*k)},function(date,step){date.setTime(+date+step*k)},function(start,end){return(end-start)/k}):millisecond_millisecond:null};var src_millisecond=millisecond_millisecond,durationMinute=(millisecond_millisecond.range,6e4),durationWeek=6048e5,second_second=newInterval(function(date){date.setTime(date-date.getMilliseconds())},function(date,step){date.setTime(+date+1e3*step)},function(start,end){return(end-start)/1e3},function(date){return date.getUTCSeconds()}),src_second=second_second,minute_minute=(second_second.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds())},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getMinutes()})),src_minute=minute_minute,hour_hour=(minute_minute.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds()-date.getMinutes()*durationMinute)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getHours()})),src_hour=hour_hour,day_day=(hour_hour.range,newInterval(function(date){date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/864e5},function(date){return date.getDate()-1})),src_day=day_day;day_day.range;function weekday(i){return newInterval(function(date){date.setDate(date.getDate()-(date.getDay()+7-i)%7),date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+7*step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/durationWeek})}var sunday=weekday(0),monday=weekday(1),tuesday=weekday(2),wednesday=weekday(3),thursday=weekday(4),friday=weekday(5),saturday=weekday(6),month_month=(sunday.range,monday.range,tuesday.range,wednesday.range,thursday.range,friday.range,saturday.range,newInterval(function(date){date.setDate(1),date.setHours(0,0,0,0)},function(date,step){date.setMonth(date.getMonth()+step)},function(start,end){return end.getMonth()-start.getMonth()+12*(end.getFullYear()-start.getFullYear())},function(date){return date.getMonth()})),src_month=month_month,year_year=(month_month.range,newInterval(function(date){date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step)},function(start,end){return end.getFullYear()-start.getFullYear()},function(date){return date.getFullYear()}));year_year.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setFullYear(Math.floor(date.getFullYear()/k)*k),date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step*k)}):null};var src_year=year_year,utcMinute=(year_year.range,newInterval(function(date){date.setUTCSeconds(0,0)},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getUTCMinutes()})),utcHour=(utcMinute.range,newInterval(function(date){date.setUTCMinutes(0,0,0)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getUTCHours()})),utcDay=(utcHour.range,newInterval(function(date){date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+step)},function(start,end){return(end-start)/864e5},function(date){return date.getUTCDate()-1})),src_utcDay=utcDay;utcDay.range;function utcWeekday(i){return newInterval(function(date){date.setUTCDate(date.getUTCDate()-(date.getUTCDay()+7-i)%7),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+7*step)},function(start,end){return(end-start)/durationWeek})}var utcSunday=utcWeekday(0),utcMonday=utcWeekday(1),utcTuesday=utcWeekday(2),utcWednesday=utcWeekday(3),utcThursday=utcWeekday(4),utcFriday=utcWeekday(5),utcSaturday=utcWeekday(6),utcMonth=(utcSunday.range,utcMonday.range,utcTuesday.range,utcWednesday.range,utcThursday.range,utcFriday.range,utcSaturday.range,newInterval(function(date){date.setUTCDate(1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCMonth(date.getUTCMonth()+step)},function(start,end){return end.getUTCMonth()-start.getUTCMonth()+12*(end.getUTCFullYear()-start.getUTCFullYear())},function(date){return date.getUTCMonth()})),utcYear=(utcMonth.range,newInterval(function(date){date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step)},function(start,end){return end.getUTCFullYear()-start.getUTCFullYear()},function(date){return date.getUTCFullYear()}));utcYear.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setUTCFullYear(Math.floor(date.getUTCFullYear()/k)*k),date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step*k)}):null};var src_utcYear=utcYear;utcYear.range;function localDate(d){if(0<=d.y&&d.y<100){var date=new Date(-1,d.m,d.d,d.H,d.M,d.S,d.L);return date.setFullYear(d.y),date}return new Date(d.y,d.m,d.d,d.H,d.M,d.S,d.L)}function utcDate(d){if(0<=d.y&&d.y<100){var date=new Date(Date.UTC(-1,d.m,d.d,d.H,d.M,d.S,d.L));return date.setUTCFullYear(d.y),date}return new Date(Date.UTC(d.y,d.m,d.d,d.H,d.M,d.S,d.L))}function newYear(y){return{y:y,m:0,d:1,H:0,M:0,S:0,L:0}}var src_defaultLocale_locale,timeFormat,utcFormat,utcParse,pads={"-":"",_:" ",0:"0"},numberRe=/^\s*\d+/,percentRe=/^%/,requoteRe=/[\\^$*+?|[\]().{}]/g;function locale_pad(value,fill,width){var sign=value<0?"-":"",string=(sign?-value:value)+"",length=string.length;return sign+(length68?1900:2e3),i+n[0].length):-1}function parseZone(d,string,i){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i,i+6));return n?(d.Z=n[1]?0:-(n[2]+(n[3]||"00")),i+n[0].length):-1}function parseMonthNumber(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.m=n[0]-1,i+n[0].length):-1}function parseDayOfMonth(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.d=+n[0],i+n[0].length):-1}function parseDayOfYear(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.m=0,d.d=+n[0],i+n[0].length):-1}function parseHour24(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.H=+n[0],i+n[0].length):-1}function parseMinutes(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.M=+n[0],i+n[0].length):-1}function parseSeconds(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.S=+n[0],i+n[0].length):-1}function parseMilliseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.L=+n[0],i+n[0].length):-1}function parseMicroseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+6));return n?(d.L=Math.floor(n[0]/1e3),i+n[0].length):-1}function parseLiteralPercent(d,string,i){var n=percentRe.exec(string.slice(i,i+1));return n?i+n[0].length:-1}function parseUnixTimestamp(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=+n[0],i+n[0].length):-1}function parseUnixTimestampSeconds(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=1e3*+n[0],i+n[0].length):-1}function formatDayOfMonth(d,p){return locale_pad(d.getDate(),p,2)}function formatHour24(d,p){return locale_pad(d.getHours(),p,2)}function formatHour12(d,p){return locale_pad(d.getHours()%12||12,p,2)}function formatDayOfYear(d,p){return locale_pad(1+src_day.count(src_year(d),d),p,3)}function formatMilliseconds(d,p){return locale_pad(d.getMilliseconds(),p,3)}function formatMicroseconds(d,p){return formatMilliseconds(d,p)+"000"}function formatMonthNumber(d,p){return locale_pad(d.getMonth()+1,p,2)}function formatMinutes(d,p){return locale_pad(d.getMinutes(),p,2)}function formatSeconds(d,p){return locale_pad(d.getSeconds(),p,2)}function formatWeekdayNumberMonday(d){var day=d.getDay();return 0===day?7:day}function formatWeekNumberSunday(d,p){return locale_pad(sunday.count(src_year(d),d),p,2)}function formatWeekNumberISO(d,p){var day=d.getDay();return d=day>=4||0===day?thursday(d):thursday.ceil(d),locale_pad(thursday.count(src_year(d),d)+(4===src_year(d).getDay()),p,2)}function formatWeekdayNumberSunday(d){return d.getDay()}function formatWeekNumberMonday(d,p){return locale_pad(monday.count(src_year(d),d),p,2)}function locale_formatYear(d,p){return locale_pad(d.getFullYear()%100,p,2)}function formatFullYear(d,p){return locale_pad(d.getFullYear()%1e4,p,4)}function formatZone(d){var z=d.getTimezoneOffset();return(z>0?"-":(z*=-1,"+"))+locale_pad(z/60|0,"0",2)+locale_pad(z%60,"0",2)}function formatUTCDayOfMonth(d,p){return locale_pad(d.getUTCDate(),p,2)}function formatUTCHour24(d,p){return locale_pad(d.getUTCHours(),p,2)}function formatUTCHour12(d,p){return locale_pad(d.getUTCHours()%12||12,p,2)}function formatUTCDayOfYear(d,p){return locale_pad(1+src_utcDay.count(src_utcYear(d),d),p,3)}function formatUTCMilliseconds(d,p){return locale_pad(d.getUTCMilliseconds(),p,3)}function formatUTCMicroseconds(d,p){return formatUTCMilliseconds(d,p)+"000"}function formatUTCMonthNumber(d,p){return locale_pad(d.getUTCMonth()+1,p,2)}function formatUTCMinutes(d,p){return locale_pad(d.getUTCMinutes(),p,2)}function formatUTCSeconds(d,p){return locale_pad(d.getUTCSeconds(),p,2)}function formatUTCWeekdayNumberMonday(d){var dow=d.getUTCDay();return 0===dow?7:dow}function formatUTCWeekNumberSunday(d,p){return locale_pad(utcSunday.count(src_utcYear(d),d),p,2)}function formatUTCWeekNumberISO(d,p){var day=d.getUTCDay();return d=day>=4||0===day?utcThursday(d):utcThursday.ceil(d),locale_pad(utcThursday.count(src_utcYear(d),d)+(4===src_utcYear(d).getUTCDay()),p,2)}function formatUTCWeekdayNumberSunday(d){return d.getUTCDay()}function formatUTCWeekNumberMonday(d,p){return locale_pad(utcMonday.count(src_utcYear(d),d),p,2)}function formatUTCYear(d,p){return locale_pad(d.getUTCFullYear()%100,p,2)}function formatUTCFullYear(d,p){return locale_pad(d.getUTCFullYear()%1e4,p,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(d){return+d}function formatUnixTimestampSeconds(d){return Math.floor(+d/1e3)}!function defaultLocale_defaultLocale(definition){return src_defaultLocale_locale=function formatLocale(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_weekdays=locale.days,locale_shortWeekdays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths,periodRe=formatRe(locale_periods),periodLookup=formatLookup(locale_periods),weekdayRe=formatRe(locale_weekdays),weekdayLookup=formatLookup(locale_weekdays),shortWeekdayRe=formatRe(locale_shortWeekdays),shortWeekdayLookup=formatLookup(locale_shortWeekdays),monthRe=formatRe(locale_months),monthLookup=formatLookup(locale_months),shortMonthRe=formatRe(locale_shortMonths),shortMonthLookup=formatLookup(locale_shortMonths),formats={a:function formatShortWeekday(d){return locale_shortWeekdays[d.getDay()]},A:function formatWeekday(d){return locale_weekdays[d.getDay()]},b:function formatShortMonth(d){return locale_shortMonths[d.getMonth()]},B:function formatMonth(d){return locale_months[d.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(d){return locale_periods[+(d.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},utcFormats={a:function formatUTCShortWeekday(d){return locale_shortWeekdays[d.getUTCDay()]},A:function formatUTCWeekday(d){return locale_weekdays[d.getUTCDay()]},b:function formatUTCShortMonth(d){return locale_shortMonths[d.getUTCMonth()]},B:function formatUTCMonth(d){return locale_months[d.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(d){return locale_periods[+(d.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},parses={a:function parseShortWeekday(d,string,i){var n=shortWeekdayRe.exec(string.slice(i));return n?(d.w=shortWeekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},A:function parseWeekday(d,string,i){var n=weekdayRe.exec(string.slice(i));return n?(d.w=weekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},b:function parseShortMonth(d,string,i){var n=shortMonthRe.exec(string.slice(i));return n?(d.m=shortMonthLookup[n[0].toLowerCase()],i+n[0].length):-1},B:function parseMonth(d,string,i){var n=monthRe.exec(string.slice(i));return n?(d.m=monthLookup[n[0].toLowerCase()],i+n[0].length):-1},c:function parseLocaleDateTime(d,string,i){return parseSpecifier(d,locale_dateTime,string,i)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(d,string,i){var n=periodRe.exec(string.slice(i));return n?(d.p=periodLookup[n[0].toLowerCase()],i+n[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(d,string,i){return parseSpecifier(d,locale_date,string,i)},X:function parseLocaleTime(d,string,i){return parseSpecifier(d,locale_time,string,i)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(specifier,formats){return function(date){var c,pad,format,string=[],i=-1,j=0,n=specifier.length;for(date instanceof Date||(date=new Date(+date));++i53)return null;"w"in d||(d.w=1),"Z"in d?(week=(day=(week=utcDate(newYear(d.y))).getUTCDay())>4||0===day?utcMonday.ceil(week):utcMonday(week),week=src_utcDay.offset(week,7*(d.V-1)),d.y=week.getUTCFullYear(),d.m=week.getUTCMonth(),d.d=week.getUTCDate()+(d.w+6)%7):(week=(day=(week=newDate(newYear(d.y))).getDay())>4||0===day?monday.ceil(week):monday(week),week=src_day.offset(week,7*(d.V-1)),d.y=week.getFullYear(),d.m=week.getMonth(),d.d=week.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),day="Z"in d?utcDate(newYear(d.y)).getUTCDay():newDate(newYear(d.y)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(day+5)%7:d.w+7*d.U-(day+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,utcDate(d)):newDate(d)}}function parseSpecifier(d,specifier,string,j){for(var c,parse,i=0,n=specifier.length,m=string.length;i=m)return-1;if(37===(c=specifier.charCodeAt(i++))){if(c=specifier.charAt(i++),!(parse=parses[c in pads?specifier.charAt(i++):c])||(j=parse(d,string,j))<0)return-1}else if(c!=string.charCodeAt(j++))return-1}return j}return formats.x=newFormat(locale_date,formats),formats.X=newFormat(locale_time,formats),formats.c=newFormat(locale_dateTime,formats),utcFormats.x=newFormat(locale_date,utcFormats),utcFormats.X=newFormat(locale_time,utcFormats),utcFormats.c=newFormat(locale_dateTime,utcFormats),{format:function format(specifier){var f=newFormat(specifier+="",formats);return f.toString=function(){return specifier},f},parse:function parse(specifier){var p=newParse(specifier+="",localDate);return p.toString=function(){return specifier},p},utcFormat:function utcFormat(specifier){var f=newFormat(specifier+="",utcFormats);return f.toString=function(){return specifier},f},utcParse:function utcParse(specifier){var p=newParse(specifier,utcDate);return p.toString=function(){return specifier},p}}}(definition),timeFormat=src_defaultLocale_locale.format,src_defaultLocale_locale.parse,utcFormat=src_defaultLocale_locale.utcFormat,utcParse=src_defaultLocale_locale.utcParse,src_defaultLocale_locale}({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||utcFormat("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||utcParse("%Y-%m-%dT%H:%M:%S.%LZ");var time_durationSecond=1e3,time_durationMinute=60*time_durationSecond,time_durationHour=60*time_durationMinute,time_durationDay=24*time_durationHour,time_durationWeek=7*time_durationDay,durationMonth=30*time_durationDay,durationYear=365*time_durationDay;function time_date(t){return new Date(t)}function time_number(t){return t instanceof Date?+t:+new Date(+t)}function calendar(year,month,week,day,hour,minute,second,millisecond,format){var scale=continuous(deinterpolateLinear,src_number),invert=scale.invert,domain=scale.domain,formatMillisecond=format(".%L"),formatSecond=format(":%S"),formatMinute=format("%I:%M"),formatHour=format("%I %p"),formatDay=format("%a %d"),formatWeek=format("%b %d"),formatMonth=format("%B"),formatYear=format("%Y"),tickIntervals=[[second,1,time_durationSecond],[second,5,5*time_durationSecond],[second,15,15*time_durationSecond],[second,30,30*time_durationSecond],[minute,1,time_durationMinute],[minute,5,5*time_durationMinute],[minute,15,15*time_durationMinute],[minute,30,30*time_durationMinute],[hour,1,time_durationHour],[hour,3,3*time_durationHour],[hour,6,6*time_durationHour],[hour,12,12*time_durationHour],[day,1,time_durationDay],[day,2,2*time_durationDay],[week,1,time_durationWeek],[month,1,durationMonth],[month,3,3*durationMonth],[year,1,durationYear]];function tickFormat(date){return(second(date)1)&&(t-=Math.floor(t));var ts=Math.abs(t-.5);return rainbow_c.h=360*t-100,rainbow_c.s=1.5-1.5*ts,rainbow_c.l=.8-.9*ts,rainbow_c+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(range){var n=range.length;return function(t){return range[Math.max(0,Math.min(n-1,Math.floor(t*n)))]}}var sequential_multi_viridis=viridis_ramp(d3_scale_chromatic_src_colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),viridis_magma=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),viridis_inferno=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),viridis_plasma=viridis_ramp(d3_scale_chromatic_src_colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),UNIT_GLOBAL_NAMESPACE="app.units",UNIT_LOCAL_NAMESPACE="local.units",LAYER_LOCAL_NAMESPACE="local.layers",LAYER_GLOBAL_NAMESPACE="app.layers",GROUP_GLOBAL_NAMESPACE="app.group",GROUP_LOCAL_NAMESPACE="local.group",CANVAS_LOCAL_NAMESPACE="local.canvas",CANVAS_GLOBAL_NAMESPACE="app.canvas",reserved_fields={ROW_ID:"__id__"},common_props={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onLayerDraw",MATRIX_CREATED:"matrixCreated"},COORD_TYPES_POLAR="polar",COORD_TYPES_CARTESIAN="cartesian",DATA_TYPE_FUNCTION="function",DATA_TYPE_STRING="string",src_array_slice=Array.prototype.slice,d3_axis_src_identity=function(x){return x},axis_top=1,axis_right=2,axis_bottom=3,axis_left=4,epsilon=1e-6;function translateX(x){return"translate("+(x+.5)+",0)"}function translateY(y){return"translate(0,"+(y+.5)+")"}function entering(){return!this.__axis}function axis_axis(orient,scale){var tickArguments=[],tickValues=null,tickFormat=null,tickTransform=null,tickSizeInner=6,tickSizeOuter=6,tickPadding=3,k=orient===axis_top||orient===axis_left?-1:1,x=orient===axis_left||orient===axis_right?"x":"y",transform=orient===axis_top||orient===axis_bottom?translateX:translateY;function axis(context){var values=null==tickValues?scale.ticks?scale.ticks.apply(scale,tickArguments):scale.domain():tickValues,format=null==tickFormat?scale.tickFormat?scale.tickFormat.apply(scale,tickArguments):d3_axis_src_identity:tickFormat,spacing=Math.max(tickSizeInner,0)+tickPadding,range=scale.range(),range0=+range[0]+.5,range1=+range[range.length-1]+.5,position=(scale.bandwidth?function axis_center(scale){var offset=Math.max(0,scale.bandwidth()-1)/2;return scale.round()&&(offset=Math.round(offset)),function(d){return+scale(d)+offset}}:function axis_number(scale){return function(d){return+scale(d)}})(scale.copy()),selection=context.selection?context.selection():context,path=selection.selectAll(".domain").data([null]),tick=selection.selectAll(".tick").data(values,scale).order(),tickExit=tick.exit(),tickEnter=tick.enter().append("g").attr("class","tick"),line=tick.select("line"),text=tick.select("text");path=path.merge(path.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),tick=tick.merge(tickEnter),line=line.merge(tickEnter.append("line").attr("stroke","#000").attr(x+"2",k*tickSizeInner)),text=text.merge(tickEnter.append("text").attr("fill","#000").attr(x,k*spacing).attr("dy",orient===axis_top?"0em":orient===axis_bottom?"0.71em":"0.32em")).style("transform",tickTransform),context!==selection&&(path=path.transition(context),tick=tick.transition(context),line=line.transition(context),text=text.transition(context),tickExit=tickExit.transition(context).attr("opacity",epsilon).attr("transform",function(d){return isFinite(d=position(d))?transform(d):this.getAttribute("transform")}),tickEnter.attr("opacity",epsilon).attr("transform",function(d){var p=this.parentNode.__axis;return transform(p&&isFinite(p=p(d))?p:position(d))})),tickExit.remove(),path.attr("d",orient===axis_left||orient==axis_right?"M"+k*tickSizeOuter+","+range0+"H0.5V"+range1+"H"+k*tickSizeOuter:"M"+range0+","+k*tickSizeOuter+"V0.5H"+range1+"V"+k*tickSizeOuter),tick.attr("opacity",1).attr("transform",function(d){return transform(position(d))}),line.attr(x+"2",k*tickSizeInner),text.attr(x,k*spacing).text(format),selection.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",orient===axis_right?"start":orient===axis_left?"end":"middle"),selection.each(function(){this.__axis=position})}return axis.scale=function(_){return arguments.length?(scale=_,axis):scale},axis.tickTransform=function(_){return arguments.length?(tickTransform=_,axis):tickTransform},axis.ticks=function(){return tickArguments=src_array_slice.call(arguments),axis},axis.tickArguments=function(_){return arguments.length?(tickArguments=null==_?[]:src_array_slice.call(_),axis):tickArguments.slice()},axis.tickValues=function(_){return arguments.length?(tickValues=null==_?null:src_array_slice.call(_),axis):tickValues&&tickValues.slice()},axis.tickFormat=function(_){return arguments.length?(tickFormat=_,axis):tickFormat},axis.tickSize=function(_){return arguments.length?(tickSizeInner=tickSizeOuter=+_,axis):tickSizeInner},axis.tickSizeInner=function(_){return arguments.length?(tickSizeInner=+_,axis):tickSizeInner},axis.tickSizeOuter=function(_){return arguments.length?(tickSizeOuter=+_,axis):tickSizeOuter},axis.tickPadding=function(_){return arguments.length?(tickPadding=+_,axis):tickPadding},axis}var pi=Math.PI,tau=2*pi,tauEpsilon=tau-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(x,y){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(x,y){this._+="L"+(this._x1=+x)+","+(this._y1=+y)},quadraticCurveTo:function quadraticCurveTo(x1,y1,x,y){this._+="Q"+ +x1+","+ +y1+","+(this._x1=+x)+","+(this._y1=+y)},bezierCurveTo:function bezierCurveTo(x1,y1,x2,y2,x,y){this._+="C"+ +x1+","+ +y1+","+ +x2+","+ +y2+","+(this._x1=+x)+","+(this._y1=+y)},arcTo:function arcTo(x1,y1,x2,y2,r){x1=+x1,y1=+y1,x2=+x2,y2=+y2,r=+r;var x0=this._x1,y0=this._y1,x21=x2-x1,y21=y2-y1,x01=x0-x1,y01=y0-y1,l01_2=x01*x01+y01*y01;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=x1)+","+(this._y1=y1);else if(l01_2>1e-6)if(Math.abs(y01*x21-y21*x01)>1e-6&&r){var x20=x2-x0,y20=y2-y0,l21_2=x21*x21+y21*y21,l20_2=x20*x20+y20*y20,l21=Math.sqrt(l21_2),l01=Math.sqrt(l01_2),l=r*Math.tan((pi-Math.acos((l21_2+l01_2-l20_2)/(2*l21*l01)))/2),t01=l/l01,t21=l/l21;Math.abs(t01-1)>1e-6&&(this._+="L"+(x1+t01*x01)+","+(y1+t01*y01)),this._+="A"+r+","+r+",0,0,"+ +(y01*x20>x01*y20)+","+(this._x1=x1+t21*x21)+","+(this._y1=y1+t21*y21)}else this._+="L"+(this._x1=x1)+","+(this._y1=y1);else;},arc:function arc(x,y,r,a0,a1,ccw){x=+x,y=+y,ccw=!!ccw;var dx=(r=+r)*Math.cos(a0),dy=r*Math.sin(a0),x0=x+dx,y0=y+dy,cw=1^ccw,da=ccw?a0-a1:a1-a0;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+x0+","+y0:(Math.abs(this._x1-x0)>1e-6||Math.abs(this._y1-y0)>1e-6)&&(this._+="L"+x0+","+y0),r&&(da<0&&(da=da%tau+tau),da>tauEpsilon?this._+="A"+r+","+r+",0,1,"+cw+","+(x-dx)+","+(y-dy)+"A"+r+","+r+",0,1,"+cw+","+(this._x1=x0)+","+(this._y1=y0):da>1e-6&&(this._+="A"+r+","+r+",0,"+ +(da>=pi)+","+cw+","+(this._x1=x+r*Math.cos(a1))+","+(this._y1=y+r*Math.sin(a1))))},rect:function rect(x,y,w,h){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)+"h"+ +w+"v"+ +h+"h"+-w+"Z"},toString:function toString(){return this._}};var src_path=path_path,d3_shape_src_constant=function(x){return function constant(){return x}},abs=Math.abs,atan2=Math.atan2,cos=Math.cos,math_max=Math.max,math_min=Math.min,sin=Math.sin,math_sqrt=Math.sqrt,math_epsilon=1e-12,math_pi=Math.PI,halfPi=math_pi/2,math_tau=2*math_pi;function asin(x){return x>=1?halfPi:x<=-1?-halfPi:Math.asin(x)}function arcInnerRadius(d){return d.innerRadius}function arcOuterRadius(d){return d.outerRadius}function arcStartAngle(d){return d.startAngle}function arcEndAngle(d){return d.endAngle}function arcPadAngle(d){return d&&d.padAngle}function cornerTangents(x0,y0,x1,y1,r1,rc,cw){var x01=x0-x1,y01=y0-y1,lo=(cw?rc:-rc)/math_sqrt(x01*x01+y01*y01),ox=lo*y01,oy=-lo*x01,x11=x0+ox,y11=y0+oy,x10=x1+ox,y10=y1+oy,x00=(x11+x10)/2,y00=(y11+y10)/2,dx=x10-x11,dy=y10-y11,d2=dx*dx+dy*dy,r=r1-rc,D=x11*y10-x10*y11,d=(dy<0?-1:1)*math_sqrt(math_max(0,r*r*d2-D*D)),cx0=(D*dy-dx*d)/d2,cy0=(-D*dx-dy*d)/d2,cx1=(D*dy+dx*d)/d2,cy1=(-D*dx+dy*d)/d2,dx0=cx0-x00,dy0=cy0-y00,dx1=cx1-x00,dy1=cy1-y00;return dx0*dx0+dy0*dy0>dx1*dx1+dy1*dy1&&(cx0=cx1,cy0=cy1),{cx:cx0,cy:cy0,x01:-ox,y01:-oy,x11:cx0*(r1/r-1),y11:cy0*(r1/r-1)}}function Linear(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:this._context.lineTo(x,y)}}};var curve_linear=function(context){return new Linear(context)};function point_x(p){return p[0]}function point_y(p){return p[1]}var src_line=function(){var x=point_x,y=point_y,defined=d3_shape_src_constant(!0),context=null,curve=curve_linear,output=null;function line(data){var i,d,buffer,n=data.length,defined0=!1;for(null==context&&(output=curve(buffer=src_path())),i=0;i<=n;++i)!(i=j;--k)output.point(x0z[k],y0z[k]);output.lineEnd(),output.areaEnd()}defined0&&(x0z[i]=+x0(d,i,data),y0z[i]=+y0(d,i,data),output.point(x1?+x1(d,i,data):x0z[i],y1?+y1(d,i,data):y0z[i]))}if(buffer)return output=null,buffer+""||null}function arealine(){return src_line().defined(defined).curve(curve).context(context)}return area.x=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),x1=null,area):x0},area.x0=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),area):x0},area.x1=function(_){return arguments.length?(x1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):x1},area.y=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),y1=null,area):y0},area.y0=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),area):y0},area.y1=function(_){return arguments.length?(y1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):y1},area.lineX0=area.lineY0=function(){return arealine().x(x0).y(y0)},area.lineY1=function(){return arealine().x(x0).y(y1)},area.lineX1=function(){return arealine().x(x1).y(y0)},area.defined=function(_){return arguments.length?(defined="function"==typeof _?_:d3_shape_src_constant(!!_),area):defined},area.curve=function(_){return arguments.length?(curve=_,null!=context&&(output=curve(context)),area):curve},area.context=function(_){return arguments.length?(null==_?context=output=null:output=curve(context=_),area):context},area},src_descending=function(a,b){return ba?1:b>=a?0:NaN},d3_shape_src_identity=function(d){return d};curveRadial(curve_linear);function Radial(curve){this._curve=curve}function curveRadial(curve){function radial(context){return new Radial(curve(context))}return radial._curve=curve,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(a,r){this._curve.point(r*Math.sin(a),r*-Math.cos(a))}};var d3_shape_src_array_slice=Array.prototype.slice;var symbol_circle={draw:function draw(context,size){var r=Math.sqrt(size/math_pi);context.moveTo(r,0),context.arc(0,0,r,0,math_tau)}},symbol_cross={draw:function draw(context,size){var r=Math.sqrt(size/5)/2;context.moveTo(-3*r,-r),context.lineTo(-r,-r),context.lineTo(-r,-3*r),context.lineTo(r,-3*r),context.lineTo(r,-r),context.lineTo(3*r,-r),context.lineTo(3*r,r),context.lineTo(r,r),context.lineTo(r,3*r),context.lineTo(-r,3*r),context.lineTo(-r,r),context.lineTo(-3*r,r),context.closePath()}},tan30=Math.sqrt(1/3),tan30_2=2*tan30,diamond={draw:function draw(context,size){var y=Math.sqrt(size/tan30_2),x=y*tan30;context.moveTo(0,-y),context.lineTo(x,0),context.lineTo(0,y),context.lineTo(-x,0),context.closePath()}},kr=Math.sin(math_pi/10)/Math.sin(7*math_pi/10),kx=Math.sin(math_tau/10)*kr,ky=-Math.cos(math_tau/10)*kr,star={draw:function draw(context,size){var r=Math.sqrt(.8908130915292852*size),x=kx*r,y=ky*r;context.moveTo(0,-r),context.lineTo(x,y);for(var i=1;i<5;++i){var a=math_tau*i/5,c=Math.cos(a),s=Math.sin(a);context.lineTo(s*r,-c*r),context.lineTo(c*x-s*y,s*x+c*y)}context.closePath()}},square={draw:function draw(context,size){var w=Math.sqrt(size),x=-w/2;context.rect(x,x,w,w)}},sqrt3=Math.sqrt(3),triangle={draw:function draw(context,size){var y=-Math.sqrt(size/(3*sqrt3));context.moveTo(0,2*y),context.lineTo(-sqrt3*y,-y),context.lineTo(sqrt3*y,-y),context.closePath()}},wye_s=Math.sqrt(3)/2,wye_k=1/Math.sqrt(12),wye_a=3*(wye_k/2+1),wye={draw:function draw(context,size){var r=Math.sqrt(size/wye_a),x0=r/2,y0=r*wye_k,x1=x0,y1=r*wye_k+r,x2=-x1,y2=y1;context.moveTo(x0,y0),context.lineTo(x1,y1),context.lineTo(x2,y2),context.lineTo(-.5*x0-wye_s*y0,wye_s*x0+-.5*y0),context.lineTo(-.5*x1-wye_s*y1,wye_s*x1+-.5*y1),context.lineTo(-.5*x2-wye_s*y2,wye_s*x2+-.5*y2),context.lineTo(-.5*x0+wye_s*y0,-.5*y0-wye_s*x0),context.lineTo(-.5*x1+wye_s*y1,-.5*y1-wye_s*x1),context.lineTo(-.5*x2+wye_s*y2,-.5*y2-wye_s*x2),context.closePath()}},noop=function(){};function _point(that,x,y){that._context.bezierCurveTo((2*that._x0+that._x1)/3,(2*that._y0+that._y1)/3,(that._x0+2*that._x1)/3,(that._y0+2*that._y1)/3,(that._x0+4*that._x1+x)/6,(that._y0+4*that._y1+y)/6)}function Basis(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);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,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisClosed(context){this._context=context}BasisClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x2=x,this._y2=y;break;case 1:this._point=2,this._x3=x,this._y3=y;break;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;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisOpen(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1;break;case 1:this._point=2;break;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;case 3:this._point=4;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function Bundle(context,beta){this._basis=new Basis(context),this._beta=beta}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var x=this._x,y=this._y,j=x.length-1;if(j>0)for(var t,x0=x[0],y0=y[0],dx=x[j]-x0,dy=y[j]-y0,i=-1;++i<=j;)t=i/j,this._basis.point(this._beta*x[i]+(1-this._beta)*(x0+t*dx),this._beta*y[i]+(1-this._beta)*(y0+t*dy));this._x=this._y=null,this._basis.lineEnd()},point:function point(x,y){this._x.push(+x),this._y.push(+y)}};(function custom(beta){function bundle(context){return 1===beta?new Basis(context):new Bundle(context,beta)}return bundle.beta=function(beta){return custom(+beta)},bundle})(.85);function cardinal_point(that,x,y){that._context.bezierCurveTo(that._x1+that._k*(that._x2-that._x0),that._y1+that._k*(that._y2-that._y0),that._x2+that._k*(that._x1-x),that._y2+that._k*(that._y1-y),that._x2,that._y2)}function Cardinal(context,tension){this._context=context,this._k=(1-tension)/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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2,this._x1=x,this._y1=y;break;case 2:this._point=3;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new Cardinal(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalClosed(context,tension){this._context=context,this._k=(1-tension)/6}CardinalClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalClosed(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalOpen(context,tension){this._context=context,this._k=(1-tension)/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(x,y){switch(x=+x,y=+y,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,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalOpen(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function catmullRom_point(that,x,y){var x1=that._x1,y1=that._y1,x2=that._x2,y2=that._y2;if(that._l01_a>math_epsilon){var a=2*that._l01_2a+3*that._l01_a*that._l12_a+that._l12_2a,n=3*that._l01_a*(that._l01_a+that._l12_a);x1=(x1*a-that._x0*that._l12_2a+that._x2*that._l01_2a)/n,y1=(y1*a-that._y0*that._l12_2a+that._y2*that._l01_2a)/n}if(that._l23_a>math_epsilon){var b=2*that._l23_2a+3*that._l23_a*that._l12_a+that._l12_2a,m=3*that._l23_a*(that._l23_a+that._l12_a);x2=(x2*b+that._x1*that._l23_2a-x*that._l12_2a)/m,y2=(y2*b+that._y1*that._l23_2a-y*that._l12_2a)/m}that._context.bezierCurveTo(x1,y1,x2,y2,that._x2,that._y2)}function CatmullRom(context,alpha){this._context=context,this._alpha=alpha}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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};var curve_catmullRom=function custom(alpha){function catmullRom(context){return alpha?new CatmullRom(context,alpha):new Cardinal(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom}(.5);function CatmullRomClosed(context,alpha){this._context=context,this._alpha=alpha}CatmullRomClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:catmullRom_point(this,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomClosed(context,alpha):new CardinalClosed(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function CatmullRomOpen(context,alpha){this._context=context,this._alpha=alpha}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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,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,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomOpen(context,alpha):new CardinalOpen(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function LinearClosed(context){this._context=context}LinearClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(x,y){x=+x,y=+y,this._point?this._context.lineTo(x,y):(this._point=1,this._context.moveTo(x,y))}};function monotone_sign(x){return x<0?-1:1}function slope3(that,x2,y2){var h0=that._x1-that._x0,h1=x2-that._x1,s0=(that._y1-that._y0)/(h0||h1<0&&-0),s1=(y2-that._y1)/(h1||h0<0&&-0),p=(s0*h1+s1*h0)/(h0+h1);return(monotone_sign(s0)+monotone_sign(s1))*Math.min(Math.abs(s0),Math.abs(s1),.5*Math.abs(p))||0}function slope2(that,t){var h=that._x1-that._x0;return h?(3*(that._y1-that._y0)/h-t)/2:t}function monotone_point(that,t0,t1){var x0=that._x0,y0=that._y0,x1=that._x1,y1=that._y1,dx=(x1-x0)/3;that._context.bezierCurveTo(x0+dx,y0+dx*t0,x1-dx,y1-dx*t1,x1,y1)}function MonotoneX(context){this._context=context}function MonotoneY(context){this._context=new ReflectContext(context)}function ReflectContext(context){this._context=context}function Natural(context){this._context=context}function controlPoints(x){var i,m,n=x.length-1,a=new Array(n),b=new Array(n),r=new Array(n);for(a[0]=0,b[0]=2,r[0]=x[0]+2*x[1],i=1;i=0;--i)a[i]=(r[i]-a[i+1])/b[i];for(b[n-1]=(x[n]+a[n-1])/2,i=0;i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,y),this._context.lineTo(x,y);else{var x1=this._x*(1-this._t)+x*this._t;this._context.lineTo(x1,this._y),this._context.lineTo(x1,y)}}this._x=x,this._y=y}};var curve_step=function(context){return new Step(context,.5)};function stepBefore(context){return new Step(context,0)}function stepAfter(context){return new Step(context,1)}var none=function(series,order){if((n=series.length)>1)for(var j,s0,n,i=1,s1=series[order[0]],m=s1.length;i=0;)o[n]=n;return o};function stackValue(d,key){return d[key]}var order_ascending=function(series){var sums=series.map(ascending_sum);return order_none(series).sort(function(a,b){return sums[a]-sums[b]})};function ascending_sum(series){for(var v,s=0,i=-1,n=series.length;++i0)){if(r/=dx,dx<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=x1-ax,dx||!(r<0)){if(r/=dx,dx<0){if(r>t1)return;r>t0&&(t0=r)}else if(dx>0){if(r0)){if(r/=dy,dy<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=y1-ay,dy||!(r<0)){if(r/=dy,dy<0){if(r>t1)return;r>t0&&(t0=r)}else if(dy>0){if(r0||t1<1)||(t0>0&&(edge[0]=[ax+t0*dx,ay+t0*dy]),t1<1&&(edge[1]=[ax+t1*dx,ay+t1*dy]),!0)}}}}}function connectEdge(edge,x0,y0,x1,y1){var v1=edge[1];if(v1)return!0;var fm,fb,v0=edge[0],left=edge.left,right=edge.right,lx=left[0],ly=left[1],rx=right[0],ry=right[1],fx=(lx+rx)/2,fy=(ly+ry)/2;if(ry===ly){if(fx=x1)return;if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[fx,y0];v1=[fx,y1]}else{if(v0){if(v0[1]1)if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[(y0-fb)/fm,y0];v1=[(y1-fb)/fm,y1]}else{if(v0){if(v0[1]=x1)return}else v0=[x0,fm*x0+fb];v1=[x1,fm*x1+fb]}else{if(v0){if(v0[0]=-Diagram_epsilon2)){var ha=ax*ax+ay*ay,hc=cx*cx+cy*cy,x=(cy*ha-ay*hc)/d,y=(ax*hc-cx*ha)/d,circle=circlePool.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};circle.arc=arc,circle.site=cSite,circle.x=x+bx,circle.y=(circle.cy=y+by)+Math.sqrt(x*x+y*y),arc.circle=circle;for(var before=null,node=circles._;node;)if(circle.yDiagram_epsilon)node=node.L;else{if(!((dxr=x-rightBreakPoint(node,directrix))>Diagram_epsilon)){dxl>-Diagram_epsilon?(lArc=node.P,rArc=node):dxr>-Diagram_epsilon?(lArc=node,rArc=node.N):lArc=rArc=node;break}if(!node.R){lArc=node;break}node=node.R}!function createCell(site){return Diagram_cells[site.index]={site:site,halfedges:[]}}(site);var newArc=createBeach(site);if(beaches.insert(lArc,newArc),lArc||rArc){if(lArc===rArc)return detachCircle(lArc),rArc=createBeach(lArc.site),beaches.insert(newArc,rArc),newArc.edge=rArc.edge=createEdge(lArc.site,newArc.site),attachCircle(lArc),void attachCircle(rArc);if(rArc){detachCircle(lArc),detachCircle(rArc);var lSite=lArc.site,ax=lSite[0],ay=lSite[1],bx=site[0]-ax,by=site[1]-ay,rSite=rArc.site,cx=rSite[0]-ax,cy=rSite[1]-ay,d=2*(bx*cy-by*cx),hb=bx*bx+by*by,hc=cx*cx+cy*cy,vertex=[(cy*hb-by*hc)/d+ax,(bx*hc-cx*hb)/d+ay];setEdgeEnd(rArc.edge,lSite,rSite,vertex),newArc.edge=createEdge(lSite,site,null,vertex),rArc.edge=createEdge(site,rSite,null,vertex),attachCircle(lArc),attachCircle(rArc)}else newArc.edge=createEdge(lArc.site,newArc.site)}}function leftBreakPoint(arc,directrix){var site=arc.site,rfocx=site[0],rfocy=site[1],pby2=rfocy-directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return-1/0;var lfocx=(site=lArc.site)[0],lfocy=site[1],plby2=lfocy-directrix;if(!plby2)return lfocx;var hl=lfocx-rfocx,aby2=1/pby2-1/plby2,b=hl/plby2;return aby2?(-b+Math.sqrt(b*b-2*aby2*(hl*hl/(-2*plby2)-lfocy+plby2/2+rfocy-pby2/2)))/aby2+rfocx:(rfocx+lfocx)/2}function rightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return leftBreakPoint(rArc,directrix);var site=arc.site;return site[1]===directrix?site[0]:1/0}var beaches,Diagram_cells,circles,Diagram_edges,Diagram_epsilon=1e-6,Diagram_epsilon2=1e-12;function triangleArea(a,b,c){return(a[0]-c[0])*(b[1]-a[1])-(a[0]-b[0])*(c[1]-a[1])}function lexicographic(a,b){return b[1]-a[1]||b[0]-a[0]}function Diagram(sites,extent){var x,y,circle,site=sites.sort(lexicographic).pop();for(Diagram_edges=[],Diagram_cells=new Array(sites.length),beaches=new src_RedBlackTree,circles=new src_RedBlackTree;;)if(circle=firstCircle,site&&(!circle||site[1]Diagram_epsilon||Math.abs(edge[0][1]-edge[1][1])>Diagram_epsilon)||delete Diagram_edges[i]}(x0,y0,x1,y1),function clipCells(x0,y0,x1,y1){var iCell,cell,site,iHalfedge,halfedges,nHalfedges,start,startX,startY,end,endX,endY,nCells=Diagram_cells.length,cover=!0;for(iCell=0;iCellDiagram_epsilon||Math.abs(endY-startY)>Diagram_epsilon)&&(halfedges.splice(iHalfedge,0,Diagram_edges.push(createBorderEdge(site,end,Math.abs(endX-x0)Diagram_epsilon?[x0,Math.abs(startX-x0)Diagram_epsilon?[Math.abs(startY-y1)Diagram_epsilon?[x1,Math.abs(startX-x1)Diagram_epsilon?[Math.abs(startY-y0)=n)return null;var dx=x-cell.site[0],dy=y-cell.site[1],d2=dx*dx+dy*dy;do{cell=that.cells[i0=i1],i1=null,cell.halfedges.forEach(function(e){var edge=that.edges[e],v=edge.left;if(v!==cell.site&&v||(v=edge.right)){var vx=x-v[0],vy=y-v[1],v2=vx*vx+vy*vy;v20?0:domain[0],domain[1]=domain[1]>0?domain[1]:0),domain},unionDomain=function unionDomain(domains,fieldType){var _ref2,domain=[];(domains=domains.filter(function(dom){return dom&&dom.length})).length&&(domain=fieldType===CATEGORICAL?(_ref2=[]).concat.apply(_ref2,common_utils_toConsumableArray(domains)):[Math.min.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[0]}))),Math.max.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[1]})))]);return domain},symbolFns={circle:symbol_circle,cross:symbol_cross,diamond:diamond,square:square,star:star,wye:wye,triangle:triangle},easeFns={cubic:cubicInOut,bounce:bounceOut,linear:function src_linear_linear(t){return+t},elastic:elasticOut,back:backInOut,poly:polyInOut,circle:function circleInOut(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}},common_utils_getClosestIndexOf=function getClosestIndexOf(arr,value,side){for(var mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1},getNearestValue=function getNearestValue(data,key){var filterData=data.filter(function(d){return"number"==typeof d});return filterData[common_utils_getClosestIndexOf(filterData,key)]},getWindow=function getWindow(){return window},getQualifiedClassName=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(cls,id,prefix){return cls=cls.replace(/^\.*/,""),["".concat(prefix,"-").concat(cls),"".concat(prefix,"-").concat(cls,"-").concat(id)]}),defaultValue=function defaultValue(param,value){return void 0===param||"object"===common_utils_typeof(param)&&!param?value:param},objectIterator=function objectIterator(obj,fn){for(var key in obj)Object.hasOwnProperty.call(obj,key)&&fn(key,obj)},common_utils_Voronoi=function(){function Voronoi(){var data=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];!function common_utils_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Voronoi),this._voronoi=src_voronoi().x(function(d){return d.x}).y(function(d){return d.y}),this.data(data)}return function common_utils_createClass(Constructor,protoProps,staticProps){return protoProps&&common_utils_defineProperties(Constructor.prototype,protoProps),staticProps&&common_utils_defineProperties(Constructor,staticProps),Constructor}(Voronoi,[{key:"data",value:function data(_data){return _data&&(this._voronoiFn=this._voronoi(_data)),this}},{key:"find",value:function find(x,y,radius){return this._voronoiFn.find(x,y,radius)}}]),Voronoi}(),getObjProp=function getObjProp(obj){if(void 0===obj||null===obj)return obj;for(var retObj=obj,_len=arguments.length,fields=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)fields[_key-1]=arguments[_key];for(var i=0,len=fields.length;i=0;i--)if(arr1[i]!==arr2[i])return!1;return!0}(oldVal,newVal):"Object"===type?Object.is(oldVal,newVal):oldVal===newVal}},ERROR_MSG={INTERFACE_IMPL:"Method not implemented"},mergeRecursive=function mergeRecursive(source,sink){for(var prop in sink)isSimpleObject(source[prop])&&isSimpleObject(sink[prop])?mergeRecursive(source[prop],sink[prop]):sink[prop]instanceof Object&&sink[prop].constructor===Object?(source[prop]={},mergeRecursive(source[prop],sink[prop])):source[prop]=sink[prop];return source},common_utils_createSelection=function createSelection(sel,appendObj,data,idFn){var selection=sel||function dataSelect(idFn){return new DataSystem_selection(idFn)}(idFn),mergedSelection=(selection=selection.data(data)).enter().append(appendObj).merge(selection),exitSelection=selection.exit();return exitSelection.getObjects().forEach(function(inst){return inst.remove()}),exitSelection.remove(),mergedSelection},common_utils_interpolator=function interpolator(){return src_value},common_utils_numberInterpolator=function numberInterpolator(){return src_number},common_utils_piecewiseInterpolator=function piecewiseInterpolator(){return piecewise_piecewise};var rgbToHsv=function rgbToHsv(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r=+r,g=+g,b=+b,a=+a,r/=255,g/=255,b/=255;var h,s,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;switch(s=l>.5?d/(2-max-min):d/(max+min),max){case r:h=(g-b)/d+(g=range[0]&&val<=range[1]})},{saveChild:!1,mode:mode})},common_utils_getDataModelFromIdentifiers=function getDataModelFromIdentifiers(dataModel,identifiers,mode){var filteredDataModel;if(identifiers instanceof Array){var fieldsConfig=dataModel.getFieldsConfig(),dataArr=identifiers.slice(1,identifiers.length);if(identifiers instanceof Function)filteredDataModel=identifiers(dataModel,{},!1);else if(identifiers instanceof Array&&identifiers[0].length){var filteredSchema=identifiers[0].filter(function(d){return d in fieldsConfig});filteredDataModel=dataModel.select(function(fields){var include=!0;return filteredSchema.forEach(function(propField,idx){var value=fields[propField].internalValue,index=dataArr.findIndex(function(d){return d[idx]===value});include=include&&-1!==index}),include},{saveChild:!1,mode:mode})}else filteredDataModel=dataModel.select(function(){return!1},{saveChild:!1,mode:mode})}else filteredDataModel=getDataModelFromRange(dataModel,identifiers,mode);return filteredDataModel},isValidValue=function isValidValue(value){return!isNaN(value)&&value!==-1/0&&value!==1/0},toArray=function toArray(arr){return arr instanceof Array?arr:[arr]},common_utils_getSymbol=function getSymbol(type){return function(){var type=d3_shape_src_constant(symbol_circle),size=d3_shape_src_constant(64),context=null;function symbol(){var buffer;if(context||(context=buffer=src_path()),type.apply(this,arguments).draw(context,+size.apply(this,arguments)),buffer)return context=null,buffer+""||null}return symbol.type=function(_){return arguments.length?(type="function"==typeof _?_:d3_shape_src_constant(_),symbol):type},symbol.size=function(_){return arguments.length?(size="function"==typeof _?_:d3_shape_src_constant(+_),symbol):size},symbol.context=function(_){return arguments.length?(context=null==_?null:_,symbol):context},symbol}().type(symbolFns[type])},stackOrders=(_defineProperty(_stackOrders={},"none",order_none),_defineProperty(_stackOrders,"ascending",order_ascending),_defineProperty(_stackOrders,"descending",function(series){return order_ascending(series).reverse()}),_stackOrders),stackOffsets=(_defineProperty(_stackOffsets={},"diverging",function(series,order){if((n=series.length)>0)for(var i,d,dy,yp,yn,n,j=0,m=series[order[0]].length;j=0?(d[0]=yp,d[1]=yp+=dy):dy<0?(d[1]=yn,d[0]=yn+=dy):d[0]=yp}),_defineProperty(_stackOffsets,"none",none),_defineProperty(_stackOffsets,"expand",function(series,order){if((n=series.length)>0){for(var i,n,y,j=0,m=series[0].length;j0&&(m=(s0=series[order[0]]).length)>0){for(var s0,m,n,y=0,j=1;j0&&(sum+=v);for(null!=sortValues?index.sort(function(i,j){return sortValues(arcs[i],arcs[j])}):null!=sort&&index.sort(function(i,j){return sort(data[i],data[j])}),i=0,k=sum?(da-n*pa)/sum:0;i0?v*k:0)+pa,arcs[j]={data:data[j],index:i,value:v,startAngle:a0,endAngle:a1,padAngle:p};return arcs}return pie.value=function(_){return arguments.length?(value="function"==typeof _?_:d3_shape_src_constant(+_),pie):value},pie.sortValues=function(_){return arguments.length?(sortValues=_,sort=null,pie):sortValues},pie.sort=function(_){return arguments.length?(sort=_,sortValues=null,pie):sort},pie.startAngle=function(_){return arguments.length?(startAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):startAngle},pie.endAngle=function(_){return arguments.length?(endAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):endAngle},pie.padAngle=function(_){return arguments.length?(padAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):padAngle},pie},arc:function(){var innerRadius=arcInnerRadius,outerRadius=arcOuterRadius,cornerRadius=d3_shape_src_constant(0),padRadius=null,startAngle=arcStartAngle,endAngle=arcEndAngle,padAngle=arcPadAngle,context=null;function arc(){var buffer,r,r0=+innerRadius.apply(this,arguments),r1=+outerRadius.apply(this,arguments),a0=startAngle.apply(this,arguments)-halfPi,a1=endAngle.apply(this,arguments)-halfPi,da=abs(a1-a0),cw=a1>a0;if(context||(context=buffer=src_path()),r1math_epsilon)if(da>math_tau-math_epsilon)context.moveTo(r1*cos(a0),r1*sin(a0)),context.arc(0,0,r1,a0,a1,!cw),r0>math_epsilon&&(context.moveTo(r0*cos(a1),r0*sin(a1)),context.arc(0,0,r0,a1,a0,cw));else{var t0,t1,a01=a0,a11=a1,a00=a0,a10=a1,da0=da,da1=da,ap=padAngle.apply(this,arguments)/2,rp=ap>math_epsilon&&(padRadius?+padRadius.apply(this,arguments):math_sqrt(r0*r0+r1*r1)),rc=math_min(abs(r1-r0)/2,+cornerRadius.apply(this,arguments)),rc0=rc,rc1=rc;if(rp>math_epsilon){var p0=asin(rp/r0*sin(ap)),p1=asin(rp/r1*sin(ap));(da0-=2*p0)>math_epsilon?(a00+=p0*=cw?1:-1,a10-=p0):(da0=0,a00=a10=(a0+a1)/2),(da1-=2*p1)>math_epsilon?(a01+=p1*=cw?1:-1,a11-=p1):(da1=0,a01=a11=(a0+a1)/2)}var x01=r1*cos(a01),y01=r1*sin(a01),x10=r0*cos(a10),y10=r0*sin(a10);if(rc>math_epsilon){var oc,x11=r1*cos(a11),y11=r1*sin(a11),x00=r0*cos(a00),y00=r0*sin(a00);if(da1?0:x<-1?math_pi:Math.acos(x)}((ax*bx+ay*by)/(math_sqrt(ax*ax+ay*ay)*math_sqrt(bx*bx+by*by)))/2),lc=math_sqrt(oc[0]*oc[0]+oc[1]*oc[1]);rc0=math_min(rc,(r0-lc)/(kc-1)),rc1=math_min(rc,(r1-lc)/(kc+1))}}da1>math_epsilon?rc1>math_epsilon?(t0=cornerTangents(x00,y00,x01,y01,r1,rc1,cw),t1=cornerTangents(x11,y11,x10,y10,r1,rc1,cw),context.moveTo(t0.cx+t0.x01,t0.cy+t0.y01),rc1math_epsilon&&da0>math_epsilon?rc0>math_epsilon?(t0=cornerTangents(x10,y10,x11,y11,r0,-rc0,cw),t1=cornerTangents(x01,y01,x00,y00,r0,-rc0,cw),context.lineTo(t0.cx+t0.x01,t0.cy+t0.y01),rc01?_len3-1:0),_key3=1;_key3<_len3;_key3++)measureFieldNames[_key3-1]=arguments[_key3];var filteredReducers={};if(dataModel instanceof datamodel_default.a){var derivations=[].concat(common_utils_toConsumableArray(dataModel.getDerivations().reverse()),common_utils_toConsumableArray(dataModel.getAncestorDerivations().reverse())),nearestReducers=defaultValue(getObjProp(derivations.find(function(derv){return derv.op===dist_datamodel.DM_DERIVATIVES.GROUPBY}),"criteria"),{}),measures=dataModel.getFieldspace().getMeasure();(measureFieldNames=measureFieldNames.length?measureFieldNames:Object.keys(measures)).forEach(function(measureName){if(nearestReducers[measureName])filteredReducers[measureName]=nearestReducers[measureName];else{var measureField=measures[measureName];measureField&&(filteredReducers[measureName]=measureField.defAggFn())}})}return filteredReducers},retrieveFieldDisplayName=function retrieveFieldDisplayName(dm,fieldName){return dm.getFieldspace().fieldsObj()[fieldName].displayName()},sortOrderMap=(_defineProperty(_sortOrderMap={},"asc",function(firstVal,secondVal){return firstVal.localeCompare(secondVal)}),_defineProperty(_sortOrderMap,"desc",function(firstVal,secondVal){return secondVal.localeCompare(firstVal)}),_sortOrderMap),common_utils_intersect=function intersect(arr1,arr2){var _accessors=_slicedToArray(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[function(v){return v},function(v){return v}],2),fn1=_accessors[0],fn2=_accessors[1],set=new Set(arr2.map(function(v){return fn2(v)}));return arr1.filter(function(value){return set.has(fn1(value))})},xhtml="http://www.w3.org/1999/xhtml",src_namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},src_namespace=function(name){var prefix=name+="",i=prefix.indexOf(":");return i>=0&&"xmlns"!==(prefix=name.slice(0,i))&&(name=name.slice(i+1)),src_namespaces.hasOwnProperty(prefix)?{space:src_namespaces[prefix],local:name}:name};var creator=function(name){var fullname=src_namespace(name);return(fullname.local?function creatorFixed(fullname){return function(){return this.ownerDocument.createElementNS(fullname.space,fullname.local)}}:function creatorInherit(name){return function(){var document=this.ownerDocument,uri=this.namespaceURI;return uri===xhtml&&document.documentElement.namespaceURI===xhtml?document.createElement(name):document.createElementNS(uri,name)}})(fullname)};function selector_none(){}var src_selector=function(selector){return null==selector?selector_none:function(){return this.querySelector(selector)}};function selectorAll_empty(){return[]}var selectorAll=function(selector){return null==selector?selectorAll_empty:function(){return this.querySelectorAll(selector)}},matcher=function(selector){return function(){return this.matches(selector)}},sparse=function(update){return new Array(update.length)};function EnterNode(parent,datum){this.ownerDocument=parent.ownerDocument,this.namespaceURI=parent.namespaceURI,this._next=null,this._parent=parent,this.__data__=datum}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(child){return this._parent.insertBefore(child,this._next)},insertBefore:function insertBefore(child,next){return this._parent.insertBefore(child,next)},querySelector:function querySelector(selector){return this._parent.querySelector(selector)},querySelectorAll:function querySelectorAll(selector){return this._parent.querySelectorAll(selector)}};var keyPrefix="$";function bindIndex(parent,group,enter,update,exit,data){for(var node,i=0,groupLength=group.length,dataLength=data.length;ib?1:a>=b?0:NaN}var src_window=function(node){return node.ownerDocument&&node.ownerDocument.defaultView||node.document&&node||node.defaultView};function styleValue(node,name){return node.style.getPropertyValue(name)||src_window(node).getComputedStyle(node,null).getPropertyValue(name)}function classArray(string){return string.trim().split(/^|\s+/)}function classList(node){return node.classList||new ClassList(node)}function ClassList(node){this._node=node,this._names=classArray(node.getAttribute("class")||"")}function classedAdd(node,names){for(var list=classList(node),i=-1,n=names.length;++i=0&&(this._names.splice(i,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(name){return this._names.indexOf(name)>=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 parent=this.parentNode;parent&&parent.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 filterEvents={},on_event=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(filterEvents={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(listener,index,group){return listener=contextListener(listener,index,group),function(event){var related=event.relatedTarget;related&&(related===this||8&related.compareDocumentPosition(this))||listener.call(this,event)}}function contextListener(listener,index,group){return function(event1){var event0=on_event;on_event=event1;try{listener.call(this,this.__data__,index,group)}finally{on_event=event0}}}function onRemove(typename){return function(){var on=this.__on;if(on){for(var o,j=0,i=-1,m=on.length;j=i1&&(i1=i0+1);!(next=updateGroup[i1])&&++i1=0;)(node=group[i])&&(next&&4^node.compareDocumentPosition(next)&&next.parentNode.insertBefore(node,next),next=node);return this},sort:function(compare){function compareNode(a,b){return a&&b?compare(a.__data__,b.__data__):!a-!b}compare||(compare=sort_ascending);for(var groups=this._groups,m=groups.length,sortgroups=new Array(m),j=0;j1?this.each((null==value?function styleRemove(name){return function(){this.style.removeProperty(name)}}:"function"==typeof value?function styleFunction(name,value,priority){return function(){var v=value.apply(this,arguments);null==v?this.style.removeProperty(name):this.style.setProperty(name,v,priority)}}:function styleConstant(name,value,priority){return function(){this.style.setProperty(name,value,priority)}})(name,value,null==priority?"":priority)):styleValue(this.node(),name)},property:function(name,value){return arguments.length>1?this.each((null==value?function propertyRemove(name){return function(){delete this[name]}}:"function"==typeof value?function propertyFunction(name,value){return function(){var v=value.apply(this,arguments);null==v?delete this[name]:this[name]=v}}:function propertyConstant(name,value){return function(){this[name]=value}})(name,value)):this.node()[name]},classed:function(name,value){var names=classArray(name+"");if(arguments.length<2){for(var list=classList(this.node()),i=-1,n=names.length;++i=0&&(name=t.slice(i+1),t=t.slice(0,i)),{type:t,name:name}})}(typename+""),n=typenames.length;if(!(arguments.length<2)){for(on=value?onAdd:onRemove,null==capture&&(capture=!1),i=0;i=0&&(name=t.slice(i+1),t=t.slice(0,i)),t&&!types.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:name}})}(typename+"",_),i=-1,n=T.length;if(!(arguments.length<2)){if(null!=callback&&"function"!=typeof callback)throw new Error("invalid callback: "+callback);for(;++i0)for(var n,t,args=new Array(n),i=0;iclickDistance2}gestures.mouse("drag")}function mouseupped(){src_select(on_event.view).on("mousemove.drag mouseup.drag",null),function yesdrag(view,noclick){var root=view.document.documentElement,selection=src_select(view).on("dragstart.drag",null);noclick&&(selection.on("click.drag",noevent,!0),setTimeout(function(){selection.on("click.drag",null)},0)),"onselectstart"in root?selection.on("selectstart.drag",null):(root.style.MozUserSelect=root.__noselect,delete root.__noselect)}(on_event.view,mousemoving),noevent(),gestures.mouse("end")}function touchstarted(){if(filter.apply(this,arguments)){var i,gesture,touches=on_event.changedTouches,c=container.apply(this,arguments),n=touches.length;for(i=0;i=0&&t._call.call(null,e),t=t._next;--timer_frame}()}finally{timer_frame=0,function nap(){var t0,t2,t1=taskHead,time=1/0;for(;t1;)t1._call?(time>t1._time&&(time=t1._time),t0=t1,t1=t1._next):(t2=t1._next,t1._next=null,t1=t0?t0._next=t2:taskHead=t2);taskTail=t0,sleep(time)}(),clockNow=0}}function poke(){var now=clock.now(),delay=now-clockLast;delay>pokeDelay&&(clockSkew-=delay,clockLast=now)}function sleep(time){timer_frame||(timeout&&(timeout=clearTimeout(timeout)),time-clockNow>24?(time<1/0&&(timeout=setTimeout(wake,time-clock.now()-clockSkew)),timer_interval&&(timer_interval=clearInterval(timer_interval))):(timer_interval||(clockLast=clock.now(),timer_interval=setInterval(poke,pokeDelay)),timer_frame=1,setFrame(wake)))}Timer.prototype=timer_timer.prototype={constructor:Timer,restart:function restart(callback,delay,time){if("function"!=typeof callback)throw new TypeError("callback is not a function");time=(null==time?now():+time)+(null==delay?0:+delay),this._next||taskTail===this||(taskTail?taskTail._next=this:taskHead=this,taskTail=this),this._call=callback,this._time=time,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var src_timeout=function(callback,delay,time){var t=new Timer;return delay=null==delay?0:+delay,t.restart(function(elapsed){t.stop(),callback(elapsed+delay)},delay,time),t},emptyOn=src_dispatch("start","end","cancel","interrupt"),emptyTween=[],CREATED=0,SCHEDULED=1,STARTING=2,STARTED=3,RUNNING=4,ENDING=5,ENDED=6,transition_schedule=function(node,name,id,index,group,timing){var schedules=node.__transition;if(schedules){if(id in schedules)return}else node.__transition={};!function schedule_create(node,id,self){var tween,schedules=node.__transition;function start(elapsed){var i,j,n,o;if(self.state!==SCHEDULED)return stop();for(i in schedules)if((o=schedules[i]).name===self.name){if(o.state===STARTED)return src_timeout(start);o.state===RUNNING?(o.state=ENDED,o.timer.stop(),o.on.call("interrupt",node,node.__data__,o.index,o.group),delete schedules[i]):+iCREATED)throw new Error("too late; already scheduled");return schedule}function schedule_set(node,id){var schedule=schedule_get(node,id);if(schedule.state>STARTED)throw new Error("too late; already running");return schedule}function schedule_get(node,id){var schedule=node.__transition;if(!schedule||!(schedule=schedule[id]))throw new Error("transition not found");return schedule}function tweenValue(transition,name,value){var id=transition._id;return transition.each(function(){var schedule=schedule_set(this,id);(schedule.value||(schedule.value={}))[name]=value.apply(this,arguments)}),function(node){return schedule_get(node,id).value[name]}}var transition_interpolate=function(a,b){var c;return("number"==typeof b?src_number:b instanceof color_color?src_rgb:(c=color_color(b))?(b=c,src_rgb):src_string)(a,b)};var transition_selection_Selection=src_selection.prototype.constructor;function style_styleRemove(name){return function(){this.style.removeProperty(name)}}var transition_id=0;function Transition(groups,parents,name,id){this._groups=groups,this._parents=parents,this._name=name,this._id=id}function newId(){return++transition_id}var selection_prototype=src_selection.prototype;Transition.prototype=function src_transition_transition(name){return src_selection().transition(name)}.prototype={constructor:Transition,select:function(select){var name=this._name,id=this._id;"function"!=typeof select&&(select=src_selector(select));for(var groups=this._groups,m=groups.length,subgroups=new Array(m),j=0;j=0&&(t=t.slice(0,i)),!t||"start"===t})}(name)?init:schedule_set;return function(){var schedule=sit(this,id),on=schedule.on;on!==on0&&(on1=(on0=on).copy()).on(name,listener),schedule.on=on1}}(id,name,listener))},attr:function(name,value){var fullname=src_namespace(name),i="transform"===fullname?interpolateTransformSvg:transition_interpolate;return this.attrTween(name,"function"==typeof value?(fullname.local?function attr_attrFunctionNS(fullname,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttributeNS(fullname.space,fullname.local))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttribute(name))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttribute(name)}})(fullname,i,tweenValue(this,"attr."+name,value)):null==value?(fullname.local?function attr_attrRemoveNS(fullname){return function(){this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrRemove(name){return function(){this.removeAttribute(name)}})(fullname):(fullname.local?function attr_attrConstantNS(fullname,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttributeNS(fullname.space,fullname.local);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}:function attr_attrConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttribute(name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}})(fullname,i,value))},attrTween:function(name,value){var key="attr."+name;if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;var fullname=src_namespace(name);return this.tween(key,(fullname.local?function attrTweenNS(fullname,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolateNS(fullname,i){return function(t){this.setAttributeNS(fullname.space,fullname.local,i(t))}}(fullname,i)),t0}return tween._value=value,tween}:function attrTween(name,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolate(name,i){return function(t){this.setAttribute(name,i(t))}}(name,i)),t0}return tween._value=value,tween})(fullname,value))},style:function(name,value,priority){var i="transform"==(name+="")?interpolateTransformCss:transition_interpolate;return null==value?this.styleTween(name,function styleNull(name,interpolate){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),string1=(this.style.removeProperty(name),styleValue(this,name));return string0===string1?null:string0===string00&&string1===string10?interpolate0:interpolate0=interpolate(string00=string0,string10=string1)}}(name,i)).on("end.style."+name,style_styleRemove(name)):"function"==typeof value?this.styleTween(name,function style_styleFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),value1=value(this),string1=value1+"";return null==value1&&(this.style.removeProperty(name),string1=value1=styleValue(this,name)),string0===string1?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1))}}(name,i,tweenValue(this,"style."+name,value))).each(function styleMaybeRemove(id,name){var on0,on1,listener0,remove,key="style."+name,event="end."+key;return function(){var schedule=schedule_set(this,id),on=schedule.on,listener=null==schedule.value[key]?remove||(remove=style_styleRemove(name)):void 0;on===on0&&listener0===listener||(on1=(on0=on).copy()).on(event,listener0=listener),schedule.on=on1}}(this._id,name)):this.styleTween(name,function style_styleConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=styleValue(this,name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}(name,i,value),priority).on("end.style."+name,null)},styleTween:function(name,value,priority){var key="style."+(name+="");if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function styleTween(name,value,priority){var t,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t=(i0=i)&&function styleInterpolate(name,i,priority){return function(t){this.style.setProperty(name,i(t),priority)}}(name,i,priority)),t}return tween._value=value,tween}(name,value,null==priority?"":priority))},text:function(value){return this.tween("text","function"==typeof value?function text_textFunction(value){return function(){var value1=value(this);this.textContent=null==value1?"":value1}}(tweenValue(this,"text",value)):function text_textConstant(value){return function(){this.textContent=value}}(null==value?"":value+""))},remove:function(){return this.on("end.remove",function removeFunction(id){return function(){var parent=this.parentNode;for(var i in this.__transition)if(+i!==id)return;parent&&parent.removeChild(this)}}(this._id))},tween:function(name,value){var id=this._id;if(name+="",arguments.length<2){for(var t,tween=schedule_get(this.node(),id).tween,i=0,n=tween.length;iSTARTING&&schedule.state4&&void 0!==arguments[4]?arguments[4]:{},keyFn=arguments.length>5?arguments[5]:void 0;(parent instanceof HTMLElement||parent instanceof SVGElement)&&(parent=renderer_utils_selectElement(parent));var filter,selectorVal=selector?selector[0]:null,selectorType=null,actualSelector=null,element=null,enterSel=null,mergeSel=null;selectorVal?"#"===selectorVal?(selectorType="id",actualSelector=selector):(selectorType="class",actualSelector="."===selector[0]?selector:".".concat(selector)):(actualSelector=elemType,filter=!0),element=parent.selectAll(actualSelector),filter&&(element=element.filter(function(){return this.parentNode===parent.node()})),enterSel=(element=element.data(data,keyFn)).enter().append(elemType||"div"),callbacks.enter&&enterSel.each(function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];callbacks.enter.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),mergeSel=enterSel.merge(element),callbacks.update&&mergeSel.each(function(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];callbacks.update.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),"class"===selectorType?mergeSel.classed("."===selectorVal?selector.substring(1,selector.length):selector,!0):"id"===selectorType&&mergeSel.attr("id",selector.substring(1,selector.length));var exitSel=element.exit();return callbacks.exit?exitSel.each(function(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];callbacks.exit.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}):exitSel.remove(),mergeSel},applyStyle=function applyStyle(elem,styleObj){return Object.entries(styleObj).forEach(function(d){elem.style(d[0],d[1])},void 0),elem},setElementAttrs=function setElementAttrs(element,attrs){for(var key in attrs)({}).hasOwnProperty.call(attrs,key)&&element.attr(key,attrs[key])},renderer_utils_setAttrs=function setAttrs(element,attrs,className){return element instanceof src_selection||(element=renderer_utils_selectElement(element)),void 0!==className?element.selectAll(".".concat(className)).each(function(){setElementAttrs(src_select(this),attrs)}):setElementAttrs(element,attrs),element},renderer_utils_setStyles=function setStyles(element,styles){for(var key in element instanceof src_selection||(element=renderer_utils_selectElement(element)),styles)({}).hasOwnProperty.call(styles,key)&&element.style(key,styles[key]);return element},renderer_utils_createElements=function createElements(params){var data,sel,container=src_select(params.container);"number"==typeof(data=params.data)&&(data=Array(data).fill().map(function(d,i){return i})),sel=container.selectAll(params.selector).data(data),(sel=container.selectAll(params.selector).filter(function(){return this.parentNode===container.node()}).data(params.data)).enter().append(params.append).merge(sel).each(function(d,i){params.each(d,src_select(this),i)}).attr("class",params.className||""),sel.exit().remove()},renderer_utils_getClientPoint=function getClientPoint(){var pos=src_point.apply(void 0,arguments);return{x:pos[0],y:pos[1]}},renderer_utils_getEvent=function getEvent(){return on_event},renderer_utils_getD3Drag=function getD3Drag(){return src_drag},renderer_utils_getSmartComputedStyle=function getSmartComputedStyle(group,css){var textEl,mandatoryStyle={"fill-opacity":0},className="string"==typeof css?css:css instanceof Array?css.join(" "):void 0;textEl=group.node()instanceof HTMLElement?group.append("div").html("W"):group.append("text").text("W"),className?textEl.attr("class",className):"object"===renderer_utils_typeof(css)&&(delete css["fill-opacity"],mergeRecursive(mandatoryStyle,css)),textEl.style(mandatoryStyle);var computedStyle=window.getComputedStyle(textEl.node()),styleForSmartLabel={fontSize:computedStyle.fontSize,fontFamily:computedStyle.fontFamily,fontWeight:computedStyle.fontWeight,fontStyle:computedStyle.fontStyle};return textEl.remove(),styleForSmartLabel},hasTouch=function hasTouch(){return"ontouchstart"in document.documentElement},hyperdis=__webpack_require__(5),hyperdis_default=__webpack_require__.n(hyperdis);function store_slicedToArray(arr,i){return function store_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function store_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function store_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function store_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:function(){return{}};return props.forEach(function(prop){obj[prop]||(obj[prop]=val()),obj=obj[prop]}),obj},fetchPropValues=function fetchPropValues(propNames,params,deps){return params.map(function(param,i){var prop=propNames[i];return param.map(function(val){return void 0===val||null===val?val:val[deps[prop]]})})},setContexts=function setContexts(contexts,propObj,contextMap){var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,_iterator=propObj.keys()[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0){var key=_step.value;contexts[key]={context:contextMap[key],deps:propObj.get(key).depProps}}}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{_iteratorNormalCompletion||null==_iterator.return||_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}return contexts},store_registerListener=function registerListener(context,type){for(var _len=arguments.length,options=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)options[_key-2]=arguments[_key];var propList=options[0],callBack=options[1],instantCall=options[2],_options$=options[3],namespaceInf=void 0===_options$?{}:_options$,props=propList;Array.isArray(propList)||(props=[propList]);var ns=namespaceInf.namespace,callbackFn=function(propNames,namespaceVal){return function(){var commits=context._savedCommits,propListenerMap=context._propListenerMap;if(!propNames.some(function(prop){return getObjProp(propListenerMap,prop,"disabled")})){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];if(namespaceVal){var listenersObj=context._registeredListeners[namespaceVal],contextMap=context._contextMap[namespaceVal],contextsObj={};for(var key in propNames.forEach(function(prop){var commitsObj=defaultValue(getObjProp(commits,prop,type),{}),listeners=listenersObj[prop].subNamespaces,propDeps=propListenerMap[prop][type];for(var nm in commitsObj){var fnInf=defaultValue(propDeps[nm],{fns:0}),fns=fnInf.fns;fns>0&&(setContexts(contextsObj,listeners[nm],contextMap),fns--),fns<=0&&delete commitsObj[nm],fnInf.fns=fns}}),contextsObj){var obj=contextsObj[key];callBack.apply(void 0,[obj.context].concat(store_toConsumableArray(fetchPropValues(propNames,params,obj.deps))))}}else callBack.apply(void 0,params)}}}(props,ns),fn=context.model[type](props,callbackFn,instantCall);ns&&function registerPropInMaps(store,props,namespaceInf,type){var registeredListeners=store._registeredListeners,propListenerMap=store._propListenerMap,subNamespace=namespaceInf.subNamespace,ns=namespaceInf.namespace;initProp(registeredListeners,[ns]),props.forEach(function(prop){var subNamespaces=defaultValue(getObjProp(registeredListeners,ns,prop,"subNamespace"),[]),fns=defaultValue(getObjProp(propListenerMap,prop,type,"fns"),0);fns++,subNamespace&&subNamespaces.push(subNamespace),registeredListeners[ns][prop]={subNamespace:subNamespaces,allProps:props,subNamespaces:{}},initProp(propListenerMap,[prop,type]),propListenerMap[prop][type]={fns:fns,_fnCount:fns}})}(context,props,namespaceInf,type),function addListenerToNamespace(namespaceInf,fn,context){var key=namespaceInf.key,namespace=namespaceInf.id,listeners=context._listeners;if(namespace){!listeners.get(namespace)&&listeners.set(namespace,new Map);var namespaceListeners=listeners.get(namespace);key||(key=namespaceListeners.size),namespaceListeners.set(key,fn)}else key=key||listeners.size,listeners.set(key,fn)}(namespaceInf,fn,context)},store_createMap=function createMap(){return new Map},listenerTypes=["next","on"],removePropValue=function removePropValue(context,map,propInf){var sns=propInf.subNamespace,prop=propInf.prop,propObj=propInf.propListenerMap[prop];if(listenerTypes.forEach(function(type){type in propObj&&delete propObj[type][sns]}),map.has(sns)){var value=context.get(prop);value instanceof Object&&sns in value&&delete value[sns],map.delete(sns)}},store_Store=function(){function Store(config){!function store_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Store),this.model=hyperdis_default.a.create(config),this._listeners=new Map,this._registeredListeners={},this._contextMap={},this._commits={},this._savedCommits={},this._queuedProps={},this._propListenerMap={},this._locked=!1}return function store_createClass(Constructor,protoProps,staticProps){return protoProps&&store_defineProperties(Constructor.prototype,protoProps),staticProps&&store_defineProperties(Constructor,staticProps),Constructor}(Store,[{key:"lockModel",value:function lockModel(){return this.model.lock(),this._locked=!0,this}},{key:"unlockModel",value:function unlockModel(){return this._locked=!1,this.model.unlock(),this}},{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"lockCommits",value:function lockCommits(props){var _this=this;return props.forEach(function(prop){_this._commits[prop]={locked:!0,queue:[]}}),this}},{key:"unlockCommits",value:function unlockCommits(props){var _this2=this,commitsObj=this._commits;return this.lockModel(),props.forEach(function(prop){commitsObj[prop].locked=!1;var queuedProps={},queue=commitsObj[prop].queue;queue.forEach(function(params){var _params=store_slicedToArray(params,3),propName=_params[0],value=_params[1],namespace=_params[2];if(namespace){var propObj=initProp(queuedProps,[propName,namespace]);Object.assign(propObj,value)}}),queue.forEach(function(params){var _params2=store_slicedToArray(params,3),propName=_params2[0],value=_params2[1],namespace=_params2[2];_this2.commit(propName,propName in queuedProps?queuedProps[propName][namespace]:value,namespace)}),delete commitsObj[prop]}),this.unlockModel(),this}},{key:"addSubNamespace",value:function addSubNamespace(sns,namespace,context){var listeners=this._registeredListeners[namespace],propListenerMap=this._propListenerMap;initProp(this._contextMap,[namespace]),this._contextMap[namespace][sns]=context;var _loop=function _loop(key){var obj=listeners[key],propObj=propListenerMap[key],propFns=listenerTypes.reduce(function(acc,type){var val=defaultValue(getObjProp(propObj,type,"fns"),0);return val&&(acc[type]=val),acc},{}),allProps=obj.allProps,subNamespaces=obj.subNamespaces,subNamespace=obj.subNamespace;(subNamespace.length?subNamespace:[sns]).forEach(function(ns){var nsObj=ns instanceof Function?ns(context):ns,names=function retrieveNamespaces(names,key){return names instanceof Object?[names[key]]:names instanceof Array?names:[names]}(nsObj,key),depProps=allProps.reduce(function(acc,prop){return acc[prop]=ns instanceof Function?nsObj[prop]:ns,acc},{});names.forEach(function(nm){for(var type in initProp(subNamespaces,[nm],store_createMap).set(sns,{depProps:depProps}),propFns){initProp(propObj,[type,nm]);var fns=propFns[type];propObj[type][nm]={fns:fns,_fnCount:fns}}})})};for(var key in listeners)_loop(key);return this}},{key:"commit",value:function commit(propName,value,namespace){var disableListener=arguments.length>3&&void 0!==arguments[3]&&arguments[3],sanitizedVal=value,commits=this._commits,savedCommits=this._savedCommits,locked=getObjProp(commits,propName,"locked"),propListenerMap=this._propListenerMap[propName]||{};if(propListenerMap.disabled=disableListener,locked)return commits[propName].queue.push([propName,value,namespace]),this;if(namespace){if(this._locked){var queuedProps=initProp(this._queuedProps,[propName]);queuedProps[namespace]=value,sanitizedVal=queuedProps}else(sanitizedVal=defaultValue(this.get(propName),{}))[namespace]=value;listenerTypes.forEach(function(type){initProp(savedCommits,[propName,type]),savedCommits[propName][type][namespace]=!0,getObjProp(propListenerMap,type,namespace)&&(propListenerMap[type][namespace].fns=propListenerMap[type][namespace]._fnCount)})}return this.model.prop(propName,sanitizedVal),this}},{key:"registerChangeListener",value:function registerChangeListener(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];return store_registerListener.apply(void 0,[this,"next"].concat(params)),this}},{key:"registerImmediateListener",value:function registerImmediateListener(){for(var _len4=arguments.length,params=new Array(_len4),_key4=0;_key4<_len4;_key4++)params[_key4]=arguments[_key4];store_registerListener.apply(void 0,[this,"on"].concat(params))}},{key:"get",value:function get(propName,subNamespace){var value=this.model.prop(propName);return subNamespace?value&&value[subNamespace]:value}},{key:"computed",value:function computed(propName,callBack){return this.model.calculatedProp(propName,callBack)}},{key:"append",value:function append(){var _this$model;return(_this$model=this.model).append.apply(_this$model,arguments),this}},{key:"unsubscribeAll",value:function unsubscribeAll(){return Object.values(this._listeners).forEach(function(fn){return fn()}),this}},{key:"unsubscribe",value:function unsubscribe(){var namespaceInf=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},id=namespaceInf.id,key=namespaceInf.key,listenersMap=this._listeners,listeners=listenersMap.get(id);if(key){var fn=listenersMap.get(key);fn&&fn()}else{var _iteratorNormalCompletion2=!0,_didIteratorError2=!1,_iteratorError2=void 0;try{for(var _step2,_iterator2=listeners.values()[Symbol.iterator]();!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=!0){(0,_step2.value)()}}catch(err){_didIteratorError2=!0,_iteratorError2=err}finally{try{_iteratorNormalCompletion2||null==_iterator2.return||_iterator2.return()}finally{if(_didIteratorError2)throw _iteratorError2}}listenersMap.set(id,[])}return this}},{key:"removeSubNamespace",value:function removeSubNamespace(subNamespace,namespace){var listenerMap=this._registeredListeners,contextMap=this._contextMap,propListenerMap=this._propListenerMap,listenersObj=listenerMap[namespace];for(var prop in listenersObj){var subNamespaces=listenersObj[prop].subNamespaces,propInf={subNamespace:subNamespace,prop:prop,propListenerMap:propListenerMap};if(subNamespaces[subNamespace])removePropValue(this,subNamespaces[subNamespace],propInf),delete subNamespaces[subNamespace];else for(var ns in subNamespaces){var snsMap=subNamespaces[ns];removePropValue(this,snsMap,propInf),snsMap.size||delete subNamespaces[ns]}}return delete contextMap[namespace][subNamespace],this}}]),Store}(),store_transactor=function transactor(holder,options,model){var conf,namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},store=model instanceof store_Store?model:new store_Store({}),stateProps={},namespace=namespaceInf.namespace,subNamespace=namespaceInf.subNamespace;for(var prop in options)if({}.hasOwnProperty.call(options,prop)){conf=options[prop];var nameSpaceProp=namespace?"".concat(namespace,".").concat(prop):prop;if(subNamespace){var value=defaultValue(store.get(nameSpaceProp),{});value[subNamespace]=conf.value,stateProps[nameSpaceProp]=value}else stateProps[prop]=conf.value;holder[prop]=function(context,meta,nsProp){return function(){for(var _len5=arguments.length,params=new Array(_len5),_key5=0;_key5<_len5;_key5++)params[_key5]=arguments[_key5];if(params.length){var _ref$takesMultiplePar=(meta||{}).takesMultipleParams,takesMultipleParams=void 0!==_ref$takesMultiplePar&&_ref$takesMultiplePar,val=takesMultipleParams?params:params[0];if(meta){var values,prevVal=context.get(nsProp,subNamespace),sanitization=meta.sanitization,typeCheck=meta.typeCheck,typeExpected=meta.typeExpected;if("function"==typeof sanitization&&(val=sanitization(val,prevVal,holder)),"function"==typeof typeCheck)typeCheck(val)&&(values=val);else"string"==typeof typeCheck&&"constructor"===typeCheck?val&&val.constructor.name===typeExpected&&(values=val):values=val;var preset=meta.preset,oldValues=toArray(context.get(nsProp,subNamespace));preset&&preset(values,holder),takesMultipleParams&&oldValues.forEach(function(value,i){void 0===values[i]&&(values[i]=value)}),values&&context.commit(nsProp,values,subNamespace)}else context.commit(nsProp,val,subNamespace);return holder}return context.get(nsProp,subNamespace)}}(store,conf.meta,nameSpaceProp,Array.isArray(conf.value))}if(subNamespace)for(var key in stateProps)store.commit(key,stateProps[key][subNamespace],subNamespace);else void 0===namespace?store.append(stateProps):store.append(namespace,stateProps);return[holder,store]},SmartlabelManager=__webpack_require__(3),SmartlabelManager_default=__webpack_require__.n(SmartlabelManager),events=["initialized","beforeupdate","updated","beforedraw","drawn","beforeremove","removed","animationend"],EVENT_LIST=[];["canvas","unit","layer","axis","facet-headers","legend","caption"].forEach(function(composition){events.forEach(function(event){EVENT_LIST.push("".concat(composition,".").concat(event))})});var event_list=EVENT_LIST;function lifecycle_manager_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=lifeCycles,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(eventName){var _this4=this;setTimeout(function(){_this4._notifiers[eventName]=lifecycle_manager_resolver,_this4._promises.set(eventName,_this4._makeNotifierPromise(eventName))},0)}}]),LifeCycleManager}(),src_InvalidAwareTypes=datamodel_default.a.InvalidAwareTypes,DRAG="drag",HOVER="hover",SELECTIONDRAG="selectiondrag",CLICK="click",LONGTOUCH="longtouch",TOUCHDRAG="touchdrag",ALL_ACTIONS="*",SELECTION_NEW_ENTRY=1,SELECTION_NEW_EXIT=-1,SELECTION_NULL=0,SELECTION_OLD_ENTRY=2,SELECTION_OLD_EXIT=-2;function selection_set_defineProperties(target,props){for(var i=0;i0?(set[key]===SELECTION_OLD_ENTRY&&retObj.entrySet[0].push(key),set[key]===SELECTION_NEW_ENTRY&&retObj.entrySet[1].push(key)):set[key]<0&&(set[key]===SELECTION_OLD_EXIT&&retObj.exitSet[0].push(key),set[key]===SELECTION_NEW_EXIT&&retObj.exitSet[1].push(key)),retObj.completeSet.push(key);return["entrySet","exitSet"].forEach(function(type){retObj[type]=retObj[type].map(function(e){return e.map(Number)})}),retObj.completeSet=retObj.completeSet.map(Number),retObj}},{key:"reset",value:function reset(ids){var set=this._set;if(ids)ids.forEach(function(i){set[i]=SELECTION_NULL});else{var lockedSel=this._lockedSelection;for(var key in set)key in lockedSel||(set[key]=SELECTION_NULL)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var set=this._set,addSet=[];for(var key in set)set[key]===SELECTION_NEW_ENTRY&&addSet.push(key);return addSet}},{key:"getExistingEntrySet",value:function getExistingEntrySet(addSet){var set=this._set;return addSet.filter(function(d){return set[d]===SELECTION_NEW_ENTRY||set[d]===SELECTION_OLD_ENTRY})}},{key:"getExistingExitSet",value:function getExistingExitSet(removeSet){var set=this._set;return removeSet.filter(function(d){return set[d]===SELECTION_NEW_EXIT||set[d]===SELECTION_OLD_EXIT})}},{key:"getOldEntry",value:function getOldEntry(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_ENTRY&&updateSet.push(key);return updateSet}},{key:"getOldExit",value:function getOldExit(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_EXIT&&updateSet.push(key);return updateSet}},{key:"getExitSet",value:function getExitSet(){var set=this._set,removeSet=[];for(var key in set)set[key]===SELECTION_NEW_EXIT&&removeSet.push(key);return removeSet}},{key:"getCompleteSet",value:function getCompleteSet(){var set=this._set,completeSet=[];for(var key in set)completeSet.push(key);return completeSet}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var set=this._set;for(var key in set)set[key]===SELECTION_NEW_ENTRY?set[key]=SELECTION_NEW_EXIT:set[key]===SELECTION_NEW_EXIT?set[key]=SELECTION_NEW_ENTRY:set[key]===SELECTION_OLD_ENTRY?set[key]=SELECTION_OLD_EXIT:set[key]=SELECTION_OLD_ENTRY;return this}}]),SelectionSet}();function helper_toConsumableArray(arr){return function helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},sideEffectStore=this.sideEffects(),sideEffect=sideEffectStore[name],disable=!1;options.filter&&options.filter(sideEffect)&&(disable=!0),!disable&&sideEffectStore[name].apply(selectionSet,payload,options)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(map){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,map||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(behaviour,payload){var propagationInfo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},propagate=void 0===propagationInfo.propagate||propagationInfo.propagate,action=this._actions.behavioural[behaviour],sideEffects=function getSideEffects(behaviour,behaviourEffectMap){var sideEffects=[];for(var key in behaviourEffectMap){var behaviours=key.split(",");behaviours.some(function(d){return d===behaviour})&&sideEffects.push({effects:behaviourEffectMap[key],behaviours:behaviours})}return sideEffects}(behaviour,this._behaviourEffectMap);if(this._propagationInf=propagationInfo,action){var selectionSet=action.dispatch(payload),propagationSelectionSet=this.getPropagationSelectionSet(selectionSet);this._entryExitSet[behaviour]=propagationSelectionSet;var shouldApplySideEffects=this.shouldApplySideEffects(propagate);if(propagate&&this.propagate(behaviour,payload,selectionSet.find(function(d){return d.sourceSelectionSet}),sideEffects),shouldApplySideEffects){var applicableSideEffects=this.getApplicableSideEffects(sideEffects,payload,propagationInfo);this.applySideEffects(applicableSideEffects,propagationSelectionSet,payload)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(selectionSet){return selectionSet.find(function(d){return!d.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(behaviour,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",behaviourConditions=this._sourceBehaviours[behaviour]||(this._sourceBehaviours[behaviour]={});return value instanceof Function?behaviourConditions[key]=value:behaviourConditions[key]=function(){return value},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(sideEffect,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",sideEffectConditions=this._sourceSideEffects[sideEffect]||(this._sourceSideEffects[sideEffect]={});value instanceof Function?sideEffectConditions[key]=value:sideEffectConditions[key]=function(){return value}}},{key:"removeSideEffectPolicy",value:function removeSideEffectPolicy(sideEffect,key){return delete this._sourceSideEffects[sideEffect][key],this}},{key:"removeBehaviourPolicy",value:function removeBehaviourPolicy(behaviour,key){return delete this._sourceBehaviours[behaviour][key],this}},{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(fn){return changeSideEffectAvailability(this,fn,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(fn){return changeSideEffectAvailability(this,fn,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(behaviour,physicalAction){var actionBehaviourMap=this._actionBehaviourMap;for(var key in actionBehaviourMap)if(key===physicalAction){var behaviourMap=actionBehaviourMap[key];behaviourMap.behaviours=behaviourMap.behaviours.filter(function(d){return d!==behaviour}),this.mapActionsAndBehaviour(key)}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(sideEffect,behaviour){var behaviourEffectMap=this._behaviourEffectMap;return behaviourEffectMap[behaviour]=behaviourEffectMap[behaviour].filter(function(d){return(d.name||d)!==sideEffect}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects){return sideEffects}},{key:"attachPropagationListener",value:function attachPropagationListener(dataModel){return dataModel.unsubscribe("propagation"),dataModel.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var _this2=this;return function(propValue){var payload=propValue.payload,action=payload.action;_this2.dispatchBehaviour(action,payload,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(uniqueIds,behaviouralActions){var behaviours=behaviouralActions||this._actions.behavioural,selectionSet=this._selectionSet,volatileSelectionSet=this._volatileSelectionSet;for(var key in behaviours)({}).hasOwnProperty.call(behaviours,key)&&(selectionSet[key]=new src_selection_set(uniqueIds),volatileSelectionSet[key]=new src_selection_set(uniqueIds,!0),this._entryExitSet[key]=null);return this._volatileSelectionSet=volatileSelectionSet,this.selectionSet(selectionSet),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 sideEffectDefinitions=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(context,sideEffects){var sideEffectsMap=context._sideEffects;return(sideEffects=sideEffects instanceof Array?sideEffects:Object.values(sideEffects)).forEach(function(SideEffect){var formalName=SideEffect.formalName(),sideEffectInstance=sideEffectsMap[formalName];sideEffectsMap[formalName]=sideEffectInstance||new SideEffect(context)}),sideEffectsMap}(this,sideEffectDefinitions)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(actions){var initedActions=function initializePhysicalActions(context,actions){var physicalActions={};for(var name in actions)({}).hasOwnProperty.call(name,actions)||(physicalActions[name]=actions[name](context));return physicalActions}(this,actions);return Object.assign(this._actions.physical,initedActions),this}},{key:"propagateWith",value:function propagateWith(action,fields){var append=arguments.length>2&&void 0!==arguments[2]&&arguments[2],behaviouralActions=this._actions.behavioural;if(action===ALL_ACTIONS)for(var key in behaviouralActions)this._propagationFields[key]={fields:fields,append:append};else this._propagationFields[action]={fields:fields,append:append};return this}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(phyAction){var initedPhysicalActions=this._actions.physical,map=this._actionBehaviourMap;for(var action in map)if(!{}.hasOwnProperty.call(action,map)&&action===(phyAction||action)){var target=void 0,mapObj=map[action];target=mapObj.target;var touch=mapObj.touch;target||(target=this.context.getDefaultTargetContainer()),(hasTouch()?!0===touch||void 0===touch:!touch)&&this.bindActionWithBehaviour(initedPhysicalActions[action],target,mapObj.behaviours)}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(map){return this._actionBehaviourMap=mergeRecursive(this._actionBehaviourMap,map),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(action,targets,behaviourList){var _this3=this;return"string"==typeof targets&&(targets=[targets]),targets.forEach(function(target){var mount=_this3.context.mount(),nodes=target.node instanceof Function?target:renderer_utils_selectElement(mount).selectAll(target);nodes.empty()||(nodes instanceof Array?nodes.forEach(function(node){action(renderer_utils_selectElement(node),behaviourList)}):action(nodes,behaviourList))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(criteria){var propagationInf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=this.context,filteredDataModel=propagationInf.data?propagationInf.data:context.getDataModelFromIdentifiers(criteria,"all");return{model:filteredDataModel,uids:null===criteria?null:propagationInf.data?propagationInf.entryRowIds:filteredDataModel[0].getUids()}}},{key:"getSelectionSets",value:function getSelectionSets(action){var sourceId=this.context.id(),propagationSource=(this._propagationInf||{}).sourceId,applicableSelectionSets=[];return propagationSource!==sourceId&&(applicableSelectionSets=[this._volatileSelectionSet[action]]),propagationSource&&applicableSelectionSets.push(this.selectionSet()[action]),applicableSelectionSets}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(behaviour){return this._entryExitSet[behaviour]}}]),Firebolt}();function generic_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},sourceIdentifiers=propagationInf.sourceIdentifiers;return sourceIdentifiers?sourceIdentifiers.getSchema().map(function(d){return d.name}):criteria instanceof Array?criteria[0]:Object.keys(criteria||{})}(propagationInf,payload.criteria),sourceSelectionSet:!0===selectionSet._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}();function volatile_typeof(obj){return(volatile_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function volatile_defineProperties(target,props){for(var i=0;iydom[0]?ydom:xdom,max=min===ydom?xdom:ydom;min[1]100&&Math.abs(startPos.x-endPos.x)<=5)){endPos.x=Math.max(0,Math.min(endPos.x,drawingInf.width)),endPos.y=Math.max(0,Math.min(endPos.y,drawingInf.height));var payload=drag_action_config(firebolt.context.getSourceInfo(),{startPos:startPos,endPos:endPos,snap:!0},firebolt.context.data().getFieldsConfig());payload.dragEnd=!0,behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)})}}))},physical_hover=function hover(firebolt){return function(targetEl,behaviours){var dispatchBehaviour=function dispatchBehaviour(args){var event=renderer_utils_getEvent(),context=firebolt.context,mode=context.config().interaction.tooltip.mode,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{getAllPoints:"consolidated"===mode||"fragmented"===mode,data:args,event:event}),payload={criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos,mode:mode};behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()};targetEl.on("mouseover",dispatchBehaviour).on("mousemove",dispatchBehaviour).on("mouseout",function(){behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})})})}},helpers_generatePayloadFromEvent=function generatePayloadFromEvent(args,event,firebolt){var context=firebolt.context,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event.touches?event.touches[0]:event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{data:args,event:event});return{criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos}},physical_click=function click(firebolt){return function(targetEl,behaviours){targetEl.on("click",function dispatchBehaviour(args){var event=renderer_utils_getEvent(),payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()})}};function physical_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var physicalActions=(physical_defineProperty(_physicalActions={},DRAG,function drag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt)}}),physical_defineProperty(_physicalActions,HOVER,physical_hover),physical_defineProperty(_physicalActions,CLICK,physical_click),physical_defineProperty(_physicalActions,LONGTOUCH,function longtouch(firebolt){return function(targetEl,behaviours){var event,touchEnd;touchEnd=!1,event=renderer_utils_getEvent(),targetEl.on("touchstart",function(args){event=renderer_utils_getEvent(),touchEnd=!1,setTimeout(function(){touchEnd?behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})}):function dispatchBehaviour(args){var payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()}(args)},100)}).on("touchend",function(){touchEnd=!0})}}),physical_defineProperty(_physicalActions,TOUCHDRAG,function touchdrag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt,!0)}}),_physicalActions),side_effects_ANCHORS="anchors",side_effects_TOOLTIP="tooltip",side_effects_BRUSH_ANCHORS="brush-anchors",side_effects_PERSISTENT_ANCHORS="persistent-anchors",side_effects_FILTER="filter",side_effects_HIGHLIGHTER="highlighter",CROSSLINE="crossline",PROPS={valueParser:{defaultValue:function defaultValue(val){return val}}};function generic_sideeffect_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];var interactionType=arguments.length>2?arguments[2]:void 0,apply=arguments.length>3?arguments[3]:void 0;return this.firebolt.context.layers().forEach(function(layer){return!1!==layer.config().interactive&&layer.applyInteractionStyle(interactionType,set.uids,apply)}),this}}]),SurrogateSideEffect}();function spawnable_typeof(obj){return(spawnable_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function spawnable_defineProperties(target,props){for(var i=0;i=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2}},context.data().getFieldsConfig());onDrag(payload)}}).on("end",function(){var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2},snap:!0},context.data().getFieldsConfig());payload.dragEnd=!0,onDrag(payload)}}))}}(firebolt)(renderer_utils_selectElement(this),["brush"],sideEffect)}).merge(selection).each(function(attrs){var element=renderer_utils_selectElement(this);for(var key in transition&&(element=element.transition().duration(transition.duration)),attrs)({}).hasOwnProperty.call(attrs,key)&&isValidValue(attrs[key])&&element.attr(key,attrs[key])}),boxClassName=getQualifiedClassName(boxConf.defClassName,this._id,classPrefix);return selectionBox.classed(boxClassName.join(" "),!0),selectionBox.classed(boxConf.className,!0),this}},{key:"hide",value:function hide(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!1)}},{key:"show",value:function show(drawingInf){helper_changeVisibility(this,drawingInf.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}(),INITIAL_STYLE={position:"absolute",width:0,height:0},default_config_defaultConfig={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"4px 0 4px 0",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)"}},helper_getArrowPos=function getArrowPos(orient,dim,measurement,config){var arrowPos,x=measurement.x,y=measurement.y,boxHeight=measurement.boxHeight,boxWidth=measurement.boxWidth,arrowWidth=config.arrow.disabled?0:config.arrow.size;if("left"===orient||"right"===orient){var start=0,diff=boxHeight/2,plotBottom=dim.y+dim.height,boxBottom=y+boxHeight;dim.y>y?(start=dim.y-y,diff=(plotBottom>=boxBottom?boxBottom-dim.y:dim.height)/2):boxBottom>plotBottom&&(diff=Math.abs(y-(dim.y+dim.height))/2),arrowPos=start+diff-arrowWidth/2}else{var _start=0,_diff=boxWidth/2,plotRight=dim.x+dim.width,boxRight=x+boxWidth;dim.x>x?(_start=dim.x-x,_diff=(plotRight>=boxRight?boxRight-dim.x:dim.width)/2):boxRight>plotRight&&(_diff=Math.abs(x-(dim.x+dim.width))/2),arrowPos=_start+_diff-arrowWidth/2}return arrowPos},helper_placeArrow=function placeArrow(context,position,arrowPos){var tooltipArrow=context._tooltipArrow,tooltipBackground=context._tooltipBackground,config=context._config,classPrefix=config.classPrefix,arrowConf=config.arrow,className=getQualifiedClassName(arrowConf.defClassName,context._id,config.classPrefix);tooltipArrow.style("display","block"),tooltipArrow.attr("class","".concat(className.join(" "))),"left"===position||"right"===position?(tooltipArrow.style("top","".concat(arrowPos,"px")),tooltipArrow.style("left",""),tooltipBackground.style("top","".concat(arrowPos,"px")),tooltipBackground.style("left","")):("bottom"===position?tooltipArrow.style("top","100%"):tooltipArrow.style("top","-".concat(arrowConf.size,"px")),tooltipArrow.style("left","".concat(arrowPos,"px")),"bottom"===position?tooltipBackground.style("top","100%"):tooltipBackground.style("top","-".concat(arrowConf.size+3,"px")),tooltipBackground.style("left","".concat(arrowPos,"px"))),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow"),!0),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(context._arrowOrientation),!1),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(position),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow"),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(context._arrowOrientation),!1),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(position),!0)};__webpack_require__(10);function content_defineProperties(target,props){for(var i=0;i0?(this._config=mergeRecursive(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(item){return this._model=item.model,this._formatter=item.formatter,this}},{key:"context",value:function context(ctx){return this._context=ctx,this}},{key:"render",value:function render(mount){var data,config=this._config,iconContainerSize=config.iconContainerSize,formatter=this._formatter,rowMargin=config.rowMargin,model=this._model,classPrefix=config.classPrefix;if(this._mount=mount,(data=model instanceof Array?model:formatter(this._model,this.config(),this._context))instanceof Function){makeElement(mount,"div",[1],"".concat(classPrefix,"-tooltip-html-container")).html(data())}else{var content=data,displayFormat="default";isSimpleObject(data)&&(content=data.content,displayFormat=data.displayFormat);var body=makeElement(mount,"div",[displayFormat],"".concat(classPrefix,"-tooltip-content"),{},function(d){return d});if("table"===displayFormat){var table=makeElement(body,"table",[1],"".concat(classPrefix,"-tooltip-table")),tbody=makeElement(table,"tbody",[1],"".concat(classPrefix,"-tooltip-table-tbody")),rows=makeElement(tbody,"tr",content,"".concat(classPrefix,"-tooltip-table-row"));rows.each(function(d,i){renderer_utils_selectElement(this).classed("".concat(classPrefix,"-tooltip-table-row-").concat(i),!0)}),makeElement(rows,"td",function(d){return d},"".concat(classPrefix,"-tooltip-table-cell")).each(function(d){renderer_utils_selectElement(this).html(d)})}else{var _rows=makeElement(body,"div",content,"",{update:function update(elem,elemData){return elem.attr("class",elemData.className)}}),_cells=makeElement(_rows,"span",function(d){return d.data},"".concat(classPrefix,"-tooltip-content"));_cells.attr("class","".concat(classPrefix,"-tooltip-content")),renderer_utils_setStyles(_rows,{margin:rowMargin}),renderer_utils_setStyles(_cells,{display:"inline-block"}),_cells.each(function(d){var el=renderer_utils_selectElement(this);if(el.html(""),d instanceof Object)if("icon"===d.type){var svg=makeElement(el,"svg",[1]),path=makeElement(svg,"path",[1]),shape=d.shape instanceof Function?d.shape:common_utils_getSymbol(d.shape);renderer_utils_setAttrs(svg,{x:0,y:0,width:iconContainerSize,height:iconContainerSize}),renderer_utils_setAttrs(path,{d:shape.size(d.size)(),transform:"translate(".concat(iconContainerSize/2,", ").concat(iconContainerSize/2,")")}),renderer_utils_setStyles(path,{fill:d.color}),renderer_utils_setStyles(svg,{width:"".concat(iconContainerSize,"px"),height:"".concat(iconContainerSize,"px")})}else el.html(d.value),d.className&&el.classed(d.className,!0),renderer_utils_setStyles(el,d.style);else el.html(d)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var config=default_config_defaultConfig.content;return config.classPrefix=default_config_defaultConfig.classPrefix,config}}]),Content}();function tooltip_defineProperties(target,props){for(var i=0;i0){var defConf=mergeRecursive({},this.constructor.defaultConfig());return this._config=mergeRecursive(defConf,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(className){return this._tooltipContainer.classed(className,!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(name,data){var contentConfig=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},config=this.config(),classPrefix=config.classPrefix,contentClass=config.content.className,formatter=config.formatter,className=contentConfig.className||"".concat(classPrefix,"-").concat(contentClass,"-").concat(name),content=this._contents[name]=this._contents[name]||new content_Content,container=makeElement(this._contentContainer,"div",[contentConfig.order],className);container.attr("class","".concat(classPrefix,"-").concat(contentClass," ").concat(className)),function reorderContainers(parentContainer,className){parentContainer.selectAll(className).sort(function(a,b){return a-b})}(this._contentContainer,".".concat(classPrefix,"-").concat(contentClass));var contentConf=config.content;return contentConfig.classPrefix=this._config.classPrefix,content.config(contentConf),null===data?(content.clear(),container.remove(),delete this._contents[name]):(content.update({model:data,formatter:contentConfig.formatter||formatter}),content.context(this._context),content.render(container)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(x,y){var conf=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var target=this._target,repositionArrow=conf.repositionArrow;if(target&&repositionArrow){var node=this._tooltipContainer.node(),config=this._config,arrowDisabled=config.arrow.disabled,arrowWidth=arrowDisabled?0:config.arrow.size,arrowOrient=this._arrowOrientation,outsidePlot="left"===arrowOrient||"right"===arrowOrient?y+node.offsetHeight-arrowWidthtarget.y+target.height:x+node.offsetWidth-arrowWidthtarget.x+target.width;if(!arrowDisabled)if(outsidePlot){var path;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var connector=this._tooltipConnectorContainer.selectAll("path").data([1]),enter=connector.enter().append("path");"left"===arrowOrient?path="M ".concat(x," ").concat(y+node.offsetHeight/2," L ").concat(target.x+target.width)+" ".concat(target.y+target.height/2):"right"===arrowOrient?path="M ".concat(x+node.offsetWidth," ").concat(y+node.offsetHeight/2)+" L ".concat(target.x," ").concat(target.y+target.height/2):"bottom"===arrowOrient&&(path="M ".concat(x+node.offsetWidth/2," ").concat(y+node.offsetHeight)+" L ".concat(target.x+target.width/2," ").concat(target.y)),enter.merge(connector).attr("d",path).style("display","block")}else{var arrowPos=helper_getArrowPos(arrowOrient,target,{x:x,y:y,boxHeight:node.offsetHeight,boxWidth:node.offsetWidth},this._config);helper_placeArrow(this,this._arrowOrientation,arrowPos),this._tooltipConnectorContainer.style("display","none")}}var offset=this._offset||{x:0,y:0};return this._tooltipContainer.style("left","".concat(offset.x+x,"px")).style("top","".concat(offset.y+y,"px")),this}},{key:"positionRelativeTo",value:function positionRelativeTo(dim){var obj,_this=this,tooltipConf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},orientation=tooltipConf.orientation;if(this.show(),!dim)return this.hide(),this;var extent=this._extent,node=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var offsetWidth=node.offsetWidth+2,offsetHeight=node.offsetHeight+2,config=this._config,offset=this._offset,arrowDisabled=config.arrow.disabled,arrowSize=arrowDisabled?0:config.arrow.size,draw=void 0===tooltipConf.draw||tooltipConf.draw,topSpace=dim.y,dimX=dim.x+dim.width+offset.x,rightSpace=extent.width-dimX,leftSpace=dim.x+offset.x-extent.x,positionTop=topSpace>offsetHeight+arrowSize,positionRight=rightSpace>=offsetWidth+arrowSize,positionLeft=leftSpace>=offsetWidth+arrowSize;return this._target=dim,orientation||(orientation=positionTop?"vertical":positionRight||positionLeft?"horizontal":"vertical"),"horizontal"===orientation?obj=function positionHorizontal(){var position,x=dim.x+dim.width,y=dim.y;return positionRight?(position="left",x+=arrowSize):positionLeft?(x=dim.x-offsetWidth,position="right",x-=arrowSize):(position="left",x+=arrowSize),dim.height1;hasMultipleMeasures&&content.push({data:[icon,formattedRetinalValue]});var isSelected=target[1][target[0].indexOf(retField)]===retinalFieldValue;measuresArr.forEach(function(measure){var measureIndex=fieldsConfig[measure].index,_fieldInf$measure=fieldInf[measure],dName=_fieldInf$measure.displayName,value=(0,_fieldInf$measure.fn)(valueArr[measureIndex]),keyValue=getKeyValue({field:hasMultipleMeasures?"".concat(dName).concat(separator):formattedRetinalValue,value:value,classPrefix:classPrefix,margin:hasMultipleMeasures?margin:void 0,isSelected:isSelected});hasMultipleMeasures||(keyValue.data=[icon].concat(strategies_toConsumableArray(keyValue.data))),content.push(keyValue)})}};for(var retField in retinalFields)_loop(retField)},strategies_buildTooltipData=function buildTooltipData(dataModel){var nestedDataObj,displayFormat,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=arguments.length>2?arguments[2]:void 0,fieldValues=[],_dataModel$getData=dataModel.getData(),data=_dataModel$getData.data,schema=_dataModel$getData.schema,fieldspace=dataModel.getFieldspace(),fieldsConfig=dataModel.getFieldsConfig(),_context$firebolt$con=context.firebolt.context.retinalFields(),color=_context$firebolt$con.color,shape=_context$firebolt$con.shape,size=_context$firebolt$con.size,detailFields=context.detailFields||[],dimensions=schema.filter(function(d){return d.type===dist_datamodel.FieldType.DIMENSION}),measures=schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),containsDetailField=!!common_utils_intersect(schema,detailFields).length,dataLen=data.length,dimensionMeasureMap=context.dimensionMeasureMap,axes=context.axes,fieldInf=function getFieldInf(schema,dataModel,context){var valueParser=context.valueParser,timeDiffs=context.timeDiffs,fieldsObj=dataModel.getFieldspace().fieldsObj(),defFormatter=strategies_formatters(null,null,valueParser)[dist_datamodel.DimensionSubtype.CATEGORICAL];return schema.reduce(function(inf,field){var subtype=field.subtype,name=field.name,type=field.type,interval=subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[name]:0,nf=type===dist_datamodel.FieldType.MEASURE?fieldsObj[name].numberFormat():function(val){return val};return inf[name]={fn:defaultValue(strategies_formatters(nf,interval,valueParser)[subtype],defFormatter),displayName:"".concat(retrieveFieldDisplayName(dataModel,name))},inf},{})}(schema,dataModel,context);if(dataLen>1&&containsDetailField)fieldValues=function getTabularData(dataObj,fieldInf){var rows=[],data=dataObj.data,schema=dataObj.schema;return rows.push(schema.map(function(d){return fieldInf[d.name].displayName})),data.forEach(function(d){var row=[];schema.forEach(function(fieldObj,i){var value=fieldInf[fieldObj.name].fn(d[i]);row.push(value)}),rows.push(row)}),rows}({data:data,schema:schema,fieldspace:fieldspace},fieldInf),displayFormat="table";else{var retinalFields=[color.field,shape.field,size.field].reduce(function(acc,field){return field&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION&&(acc[field]=1),acc},{}),indices=dimensions.filter(function(field){return!retinalFields[field.name]}).map(function(dim){return fieldsConfig[dim.name].index}),allMeasures=strategies_toConsumableArray(_construct(Set,strategies_toConsumableArray(Object.values(dimensionMeasureMap)))),filteredMeasures=dataLen>1?measures.filter(function(d){return-1===allMeasures.indexOf(d.name)}):measures;nestedDataObj=common_utils_nestCollection({data:data,keys:indices});!function generateTooltipContent(nestedData){for(var index=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,content=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],classPrefix=config.classPrefix,separator=config.separator,i=0,len=nestedData.length;i1;content.push(getKeyValue({field:"".concat(displayName).concat(separator),value:formattedValue,classPrefix:classPrefix,margin:margin,isSelected:void 0,removeKey:removeKey}))}if(values[0]&&values[0].key)generateTooltipContent(values,index+1,content);else for(var _loop2=function _loop2(j,len2){var valueArr=values[j];generateRetinalFieldsValues(valueArr,retinalFields,content,{fieldInf:fieldInf,axes:axes,config:config,fieldsConfig:fieldsConfig,dimensionMeasureMap:dimensionMeasureMap,dataLen:dataLen,target:context.payload.target}),filteredMeasures.forEach(function(measure){var name=measure.name,_fieldInf$name=fieldInf[name],displayName=_fieldInf$name.displayName,fn=_fieldInf$name.fn;content.push(getKeyValue({field:"".concat(displayName).concat(separator),value:fn(valueArr[fieldsConfig[name].index]),classPrefix:classPrefix,margin:10}))})},j=0,len2=values.length;j2&&void 0!==arguments[2]?arguments[2]:{},totalHeight=0,totalWidth=0,dataModel=selectionSet.mergedEnter.model,context=this.firebolt.context,drawingInf=this.drawingContext();if(dataModel.isEmpty()||null===payload.criteria)return this.hide(options,null),this;var tooltips=this._tooltips,config=this.config(),boundBox={width:drawingInf.width,height:drawingInf.height},showInPosition=payload.showInPosition,pad=config.padding,dataModels=[],fragmented="fragmented"===config.mode,sourceInf=context.getSourceInfo(),fields=sourceInf.fields,showVertically=!!(!!fields.x[0]&&fields.x[0].type()===dist_datamodel.FieldType.DIMENSION),tooltipPos=payload.position,boxes=[],enter={},uids=dataModel.getData().uids;fragmented?dataModels.push.apply(dataModels,tooltip_toConsumableArray(uids.map(function(d){return dataModel.select(function(fieldsArr,i){return i===d},{saveChild:!1})}))):dataModels.push(dataModel);var target=payload.target,targetFields=[];if(target){targetFields=target[0]||[];for(var sourceFields=payload.sourceFields,indices=[],i=0,len=targetFields.length;idrawingInf.height:totalWidth>drawingInf.width)break;boxes.push({x:position.x,y:position.y,width:tooltipBoundBox.width,height:tooltipBoundBox.height,tooltip:tooltipInst})}}for(var key in tooltips)if(!enter[key]){var tooltip=tooltips[key];tooltip.content(payload.action,null),tooltip.getContents().length||(tooltip.remove(),delete tooltips[key])}return fragmented&&(!function spaceOutBoxes(boxes,extent,showVertically){var y,height,x,width,i,len=boxes.length,spaceOutIfOverlap=function spaceOutIfOverlap(firstBox,secondBox,opposite){x=firstBox.x,width=firstBox.width,y=firstBox.y,height=firstBox.height;var bottom=y+height,right=x+width;showVertically?(opposite?ysecondBox.y)&&(secondBox.y=opposite?firstBox.y-secondBox.height-5:bottom+5):(opposite?xsecondBox.x)&&(secondBox.x=opposite?firstBox.x-secondBox.width-5:right+5)};for(boxes.sort(function(a,b){return showVertically?a.y-b.y:a.x-b.x}),i=0,i=0;iextent.height||boxes[i].x+boxes[i].width>extent.width)for(showVertically?boxes[i].y-=boxes[i].height+boxes[i].y-extent.height:boxes[i].x-=boxes[i].width+boxes[i].x-extent.width,i=len-1;i>0;i--)spaceOutIfOverlap(boxes[i],boxes[i-1],!0)}(boxes,boundBox,showVertically),boxes.forEach(function(box){return box.tooltip.position(box.x,box.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var strategy=options.strategy||this._strategy;tooltips[key].content(strategy,null),tooltips[key].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0},highlightSummary:{dataTransform:function dataTransform(dt,fields){return fields?dt.project(fields,{saveChild:!1}):dt}},selectionSummary:{dataTransform:function dataTransform(dt,fields){var fieldspace=dt.getFieldspace(),dimensions=Object.keys(fieldspace.getDimension()),measures=Object.keys(fieldspace.getMeasure()),projectedFields=defaultValue(fields,measures.length?[measures[0]]:[]);return dt.project([].concat(tooltip_toConsumableArray(dimensions),tooltip_toConsumableArray(projectedFields)),{saveChild:!1})}}}}},{key:"formalName",value:function formalName(){return side_effects_TOOLTIP}}]),Tooltip}();__webpack_require__(12);function crossline_typeof(obj){return(crossline_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function crossline_toConsumableArray(arr){return function crossline_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{};return(0,this._strategies[options.strategy||this._strategy])(selectionSet,this,options.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return side_effects_HIGHLIGHTER}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}();function side_effects_filter_typeof(obj){return(side_effects_filter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function side_effects_filter_defineProperties(target,props){for(var i=0;i67.5&&rotationNormalizer<=90||(yShift+=2*height),xShift=width,xShift=90===rotation?height:270===rotation?-height:0,orientation===axis_orientation_TOP?(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift+xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(-xShift+tickSize,"\n ").concat(-yShift-tickSize,") rotate(").concat(rotation,")"))):(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift-xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(xShift-tickSize,"\n ").concat(yShift+tickSize,") rotate(").concat(rotation,")"))),renderer_utils_selectElement(this).transition().duration(1e3).text(datum)}),tickText},axis_renderer_changeTickOrientation=function changeTickOrientation(selectContainer,axisInstance,tickSize){var _smartTicks=axisInstance._smartTicks,config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,orientation=config.orientation,classPrefix=config.classPrefix,labels=renderConfig.labels,rotation=labels.rotation,isSmartTicks=labels.smartTicks,tickText=selectContainer.selectAll(".tick text");if(tickText.selectAll("tspan").remove(),!rotation||"top"!==orientation&&"bottom"!==orientation)if(rotation||isSmartTicks){if(tickText.text(""),"top"===orientation||"bottom"===orientation)tickText.attr("y",0).attr("x",0).attr("transform","").text(""),makeElement(tickText,"tspan",function(d,i){return _smartTicks[i]?_smartTicks[i].lines:[]},"".concat(classPrefix,"-smart-text")).attr("dy","0").style("opacity","0").transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).attr("dy",function(d,i){return"bottom"===orientation||0!==i?_smartTicks[0].oriTextHeight:-_smartTicks[0].oriTextHeight*(_smartTicks[0].lines.length-1)-tickSize}).style("opacity",1).text(function(e){return e}).attr("x",0);else makeElement(tickText,"tspan",function(d,i){return _smartTicks[i].lines},"".concat(classPrefix,"-smart-text")).text(function(e){return e})}else tickText.attr("transform","");else axis_renderer_rotateAxis(axisInstance,tickText,labelManager);return tickText},axis_renderer_setFixedBaseline=function setFixedBaseline(axisInstance){var fixedBaseline=axisInstance.config().fixedBaseline,showInnerTicks=axisInstance.renderConfig().showInnerTicks,domain=axisInstance.domain();fixedBaseline&&domain.length&&showInnerTicks&&axisInstance.setFixedBaseline()},axis_renderer_setAxisNamePos=function setAxisNamePos(textNode,orientation,measures){var axisNameHeight=measures.axisNameHeight,availableSpace=measures.availableSpace;switch(orientation){case axis_orientation_LEFT:textNode.attr("transform","translate(".concat(-(availableSpace.width-axisNameHeight),",").concat(availableSpace.height/2,")rotate(-90)"));break;case axis_orientation_RIGHT:textNode.attr("transform","translate(".concat(availableSpace.width-axisNameHeight,",").concat(availableSpace.height/2,")rotate(90)"));break;case axis_orientation_TOP:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(-availableSpace.height+axisNameHeight,")"));break;case axis_orientation_BOTTOM:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(availableSpace.height-axisNameHeight/2,")"))}return textNode};var _rangeAdjustmentMap,longestWord={month:"September",quarter:"October",halfYearly:"July",year:9999,day:"September",hour:"24 AM",mintues:"60:60",seconds:":60",week:"Wed 31"},skip_ticks_tickIntervals=[[1,1,"milliseconds",src_millisecond.every(1),"seconds"],[1,1e3,"seconds",src_second.every(1),"seconds"],[5,5e3,"five seconds",src_second.every(5),"seconds"],[10,1e4,"ten seconds",src_second.every(10),"seconds"],[15,15e3,"fifteen seconds",src_second.every(15),"seconds"],[30,3e4,"thirty seconds",src_second.every(30),"seconds"],[1,6e4,"minute",src_minute.every(1),"minutes"],[5,3e5,"five minutes",src_minute.every(5),"minutes"],[10,6e5,"ten minutes",src_minute.every(10),"minutes"],[15,9e5,"fifteen minutes",src_minute.every(15),"minutes"],[30,18e5,"thirty minutes",src_minute.every(30),"minutes"],[1,36e5,"hour",src_hour.every(1),"hour"],[3,108e5,"three hours",src_hour.every(3),"hour"],[6,216e5,"six hours",src_hour.every(6),"hour"],[12,432e5,"twelve hours",src_hour.every(12),"hour"],[1,864e5,"daily",src_day.every(1),"day"],[1,6048e5,"weekly",sunday.every(1),"week"],[1,2592e6,"monthly",src_month.every(1),"week"],[3,7776e6,"quaterly",src_month.every(3),"quarter"],[6,15552e6,"half yearly",src_month.every(6),"halfYearly"],[1,31536e6,"yearly",src_year.every(1),"year"],[2,63072e6,"2 year",src_year.every(2),"year"],[3,94608e6,"3 year",src_year.every(3),"year"],[5,15768e7,"5 year",src_year.every(5),"year"],[10,31536e7,"decade",src_year.every(10),"year"],[100,31536e8,"century",src_year.every(100),"year"],[1e3,31536e9,"millenium",src_year.every(1e3),"year"]],getTickIntervalFnBasedOnNumberOfTicks=function getTickIntervalFnBasedOnNumberOfTicks(interval,count,context){for(var possibleTickLevelIndex=skip_ticks_tickIntervals.length-1,maxPossibleTicks=1,tickIntervalLevelInfo=null,i=skip_ticks_tickIntervals.length-1;i>=0;i--){var tickIntervalInfo=skip_ticks_tickIntervals[i],numOfPossibleTicks=Math.floor(interval/tickIntervalInfo[1]);numOfPossibleTicks<=count&&(possibleTickLevelIndex=i,maxPossibleTicks=numOfPossibleTicks)}return tickIntervalLevelInfo=skip_ticks_tickIntervals[possibleTickLevelIndex],function getActualTickInterval(context,noOfTicks){var minWidthBetweenTicks=context._minTickDistance.width,width=context.availableSpace().width;return Math.floor((width-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)}(context,maxPossibleTicks)=numOfTicksAccordingToMinDiff&&(actualNumberOfTicks=numOfTicksAccordingToMinDiff),getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval,actualNumberOfTicks,context)}(context,maxTicks));context.renderConfig({tickValues:ticks})},adjustHorizontalRange=function adjustHorizontalRange(range,diff){return range[0]+=diff,range[1]-=diff,range},adjustVerticalRange=function adjustVerticalRange(range,diff){return range[0]-=diff,range[1]+=diff,range},rangeAdjustmentMap=(space_setter_defineProperty(_rangeAdjustmentMap={},axis_orientation_TOP,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_BOTTOM,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_LEFT,adjustVerticalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_RIGHT,adjustVerticalRange),_rangeAdjustmentMap),setAxisRange=function setAxisRange(context,type,rangeBounds,offset){context.range(rangeBounds),offset&&context.renderConfig(space_setter_defineProperty({},"".concat(type,"Offset"),offset))},getAdjustedRange=function getAdjustedRange(minDiff,range,domain,config){var orientation=config.orientation,adjustRange=config.adjustRange,diff=function getAxisOffset(timeDiff,range,domain){var avWidth=Math.abs(range[1]-range[0]),bars=avWidth/(avWidth/(domain[1]-domain[0])*timeDiff);return(avWidth-avWidth/(bars+1)*bars)/2}(minDiff,range,domain);return adjustRange?rangeAdjustmentMap[orientation](range,diff):range},space_setter_spaceSetter=function spaceSetter(context,spaceConfig){var _ref,tickInterval,heightForTicks,config=context.config(),_context$availableSpa2=context.availableSpace(),availWidth=_context$availableSpa2.width,availHeight=_context$availableSpa2.height,padding=_context$availableSpa2.padding,top=padding.top,left=padding.left,bottom=padding.bottom,right=padding.right,isOffset=spaceConfig.isOffset,_context$renderConfig2=context.renderConfig(),showAxisName=_context$renderConfig2.showAxisName,labels=_context$renderConfig2.labels,rotation=labels.rotation,fixedBaseline=config.fixedBaseline,axisNamePadding=config.axisNamePadding,tickValues=config.tickValues,_context$getAxisDimen=context.getAxisDimensions(),tickDimensions=_context$getAxisDimen.tickDimensions,allTickDimensions=_context$getAxisDimen.allTickDimensions,axisNameDimensions=_context$getAxisDimen.axisNameDimensions,tickSize=_context$getAxisDimen.tickSize,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width,namePadding=showAxisName?axisNamePadding:0,labelConfig={smartTicks:!0,rotation:labels.rotation},minTickDistance=context._minTickDistance,minTickSpace=context._minTickSpace,minDiff=context._minDiff,domain=context.domain(),axisNameHeight=axisNameDimensions.height,minWidthBetweenTicks=minTickDistance.width,minTickWidth=Math.min(minTickSpace.width,tickDimWidth),minTickHeight=Math.min(minTickSpace.height,tickDimHeight);return space_setter_defineProperty(_ref={},TIME,{x:function x(){!tickValues&&context.applyTickSkipping();var noOfTicks=context.getTickValues().length;heightForTicks=availHeight-axisNameHeight-tickSize-namePadding,(tickInterval=(availWidth-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)axisNameHeight?(labelConfig.rotation=null,context.renderConfig({showInnerTicks:!0,showAxisName:!0})):(labelConfig.rotation=-90,context.renderConfig({showInnerTicks:!0,showAxisName:!1}))),availHeight0&&void 0!==arguments[0]?arguments[0]:0,width=arguments.length>1?arguments[1]:void 0,height=arguments.length>2?arguments[2]:void 0,rotatedHeight=height,rotatedWidth=width;if(rotation){var angle=(rotation||0)*Math.PI/180;rotatedWidth=Math.abs(height*Math.sin(angle))+Math.abs(width*Math.cos(angle)),rotatedHeight=Math.abs(width*Math.sin(angle))+Math.abs(height*Math.cos(angle))}return{width:rotatedWidth,height:rotatedHeight}},helper_setOffset=function setOffset(context){var x=0,y=0,logicalSpace=context.logicalSpace(),config=context.config(),orientation=config.orientation,xOffset=config.xOffset,yOffset=config.yOffset;orientation===axis_orientation_LEFT&&(x=void 0===xOffset?logicalSpace.width:xOffset),orientation===axis_orientation_TOP&&(y=void 0===yOffset?logicalSpace.height:yOffset),context.renderConfig({xOffset:x,yOffset:y})},getAxisComponentDimensions=function getAxisComponentDimensions(context){var axisTicks,largestTick="",largestTickDimensions={width:0,height:0},smartTick={},allTickDimensions=[],scale=context.scale(),_context$renderConfig=context.renderConfig(),tickValues=_context$renderConfig.tickValues,showAxisName=_context$renderConfig.showAxisName,name=context.config().name,labelManager=context.dependencies().labelManager,labelFunc=scale.ticks||scale.quantile||scale.domain;return labelManager.setStyle(context._tickLabelStyle),axisTicks=(axisTicks=tickValues||labelFunc()).map(function(originalLabel,i){var label=context.getFormattedText(originalLabel,i,axisTicks),tickDimensions=labelManager.getOriSize(label);return allTickDimensions.push(tickDimensions),tickDimensions.width>largestTickDimensions.width&&(largestTick=label,smartTick=context.smartTicks()?context.smartTicks()[i]:{},largestTickDimensions=tickDimensions,smartTick=smartTick||tickDimensions),label}),labelManager.setStyle(context._axisNameStyle),{axisNameDimensions:showAxisName?labelManager.getOriSize(name):{width:0,height:0},largestTick:largestTick,largestTickDimensions:largestTickDimensions,allTickDimensions:allTickDimensions,axisTicks:axisTicks,smartTick:smartTick,tickSize:context.getTickSize()}},getHorizontalAxisSpace=function getHorizontalAxisSpace(context,axisDimensions,range){var width,height,domain=context.domain(),minTickDistance=context._minTickDistance.width,tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config2=context.config(),axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width;if(width=range&&range.length?range[1]-range[0]:3*(tickDimWidth+minTickDistance),height=0,tickValues){var minTickDiff=context.getMinTickDifference(),_ref=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];width=(_ref[1]-_ref[0])/Math.abs(minTickDiff)*(tickDimWidth+context._minTickDistance.width)}return height=range&&range.length?tickDimHeight:Math.max(tickDimWidth,tickDimHeight),{width:width,height:height+=(showAxisName?axisDimHeight+axisNamePadding:0)+tickSize}},getVerticalAxisSpace=function getVerticalAxisSpace(context,axisDimensions){var height,width,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config3=context.config(),axisNamePadding=_context$config3.axisNamePadding,tickValues=_context$config3.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height;if(height=0,width=tickDimensions.width,tickValues){var minTickDiff=context.getMinTickDifference(),_ref2=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];height=(_ref2[1]-_ref2[0])/Math.abs(minTickDiff)*tickDimHeight}return{height:height,width:width+=(showAxisName?axisDimHeight:0)+tickSize+axisNamePadding}},helper_calculateBandSpace=function calculateBandSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,show=context.renderConfig().show,largestTickDimensions=axisDimensions.largestTickDimensions,axisTicks=axisDimensions.axisTicks,allTickDimensions=axisDimensions.allTickDimensions,largestDimHeight=largestTickDimensions.height,minTickWidth=context._minTickDistance.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa=getHorizontalAxisSpace(context,axisDimensions,range),_width=_getHorizontalAxisSpa.width,_height=_getHorizontalAxisSpa.height;return range&&range.length||(_width=allTickDimensions.reduce(function(t,n){return t+Math.min(n.width,n.height)+minTickWidth},0)),!1===show&&(_height=0,_width=0),{width:_width,height:_height}}var _getVerticalAxisSpace=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace.width,height=_getVerticalAxisSpace.height;return height&&0!==height||(height=axisTicks.length*(largestDimHeight+context._minTickDistance.height)),!1===show&&(width=0),{width:width,height:height}},helper_getValidDomain=function getValidDomain(context,domain){var userDom=context.config().domain;return userDom&&(domain=userDom),defaultValue(domain,[])},setContinousAxisDomain=function setContinousAxisDomain(context,domain){var nice=context.config().nice,scale=context.scale.bind(context);scale().domain(domain),nice&&scale().nice(),context._domain=scale().domain()},props_PROPS={availableSpace:{},axisDimensions:{},axisComponentDimensions:{},config:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._config||{}),mockedOldConfig=mergeRecursive({},oldConfig);(value=mergeRecursive(mockedOldConfig,value)).axisNamePadding=Math.max(value.axisNamePadding,0);var shouldAxesScaleUpdate=function hasAxesConfigChanged(){var obj=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},obj1=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},properties=arguments.length>2?arguments[2]:void 0;return!(!Object.keys(obj).length||!Object.keys(obj1).length)&&properties.some(function(key){return obj[key]!==obj1[key]})}(value,oldConfig,["interpolator","exponent","base","orientation"]),tickFormatter=context.sanitizeTickFormatter(value);return shouldAxesScaleUpdate&&(context._scale=context.createScale(value),context._axis=context.createAxis(value)),context._tickFormatter=function(ticks){return tickFormatter(ticks)},context.resetRenderConfig(value),value}},renderConfig:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._renderConfig||{});return value=mergeRecursive(oldConfig,value)}},logicalSpace:{},mount:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.logicalSpace(null),value}},smartTicks:{},tickSize:{},maxTickSpaces:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._maxTickSpaces||{});return value=mergeRecursive(oldConfig,value)}},valueParser:{defaultValue:function defaultValue(val){return val}}};function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function simple_axis_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function simple_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;this.availableSpace({width:width,height:height,padding:padding});var type=this.constructor.type();return labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?space_setter_spaceSetter(this,{isOffset:isOffset})[type].x():space_setter_spaceSetter(this,{isOffset:isOffset})[type].y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.setSmartAxisName(),this}},{key:"setSmartAxisName",value:function setSmartAxisName(){var _this$config2=this.config(),orientation=_this$config2.orientation,name=_this$config2.name,dimType=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?"width":"height",widthDim=this.availableSpace()[dimType],labelManager=this.dependencies().labelManager;return labelManager.setStyle(this._axisNameStyle),this.renderConfig({smartAxisName:function getSmartAxisName(name,width,labelManager){var oriSize=labelManager.getOriSize(name);return labelManager.useEllipsesOnOverflow(!0),labelManager.getSmartText(name,width,oriSize.height,!0)}(name,widthDim,labelManager)}),this}},{key:"setTickConfig",value:function setTickConfig(){return this}},{key:"getScaleValue",value:function getScaleValue(domainVal){if(null!==domainVal&&void 0!==domainVal)return this.scale()(domainVal)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return this.axisDimensions(function computeAxisDimensions(context){var tickDimensions={},labels=context.renderConfig().labels,smartTicks=labels.smartTicks,rotation=labels.rotation,_getAxisComponentDime=getAxisComponentDimensions(context),largestTickDimensions=_getAxisComponentDime.largestTickDimensions,axisTicks=_getAxisComponentDime.axisTicks,smartTick=_getAxisComponentDime.smartTick,axisNameDimensions=_getAxisComponentDime.axisNameDimensions,allTickDimensions=_getAxisComponentDime.allTickDimensions,tickSize=_getAxisComponentDime.tickSize,labelHeight=largestTickDimensions.height,labelWidth=largestTickDimensions.width;return 0===context.domain().length?null:(tickDimensions=getRotatedSpaces(rotation,(tickDimensions=smartTicks?smartTick:{width:labelWidth,height:labelHeight}).width,tickDimensions.height),0===tickSize&&(tickDimensions={width:0,height:0}),{allTickDimensions:allTickDimensions,tickSize:tickSize,tickDimensions:tickDimensions,axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks})}.apply(void 0,[this].concat(params))),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||this.logicalSpace(function calculateContinousSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,_context$renderConfig6=context.renderConfig(),show=_context$renderConfig6.show,showAxisName=_context$renderConfig6.showAxisName,axisNameDimensions=axisDimensions.axisNameDimensions;if(!1===show)return{width:0,height:0};var axisNameWidth=axisNameDimensions.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa2=getHorizontalAxisSpace(context,axisDimensions,range),_width2=_getHorizontalAxisSpa2.width,_height2=_getHorizontalAxisSpa2.height;return{width:Math.max(_width2,axisNameWidth),height:_height2}}var _getVerticalAxisSpace2=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace2.width,height=_getVerticalAxisSpace2.height;return{width:width,height:Math.max(height,showAxisName?axisNameWidth:0)}}(this)),helper_setOffset(this),this.logicalSpace()}},{key:"invert",value:function invert(value){return this.scale().invert(value)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){return[v1,v2]}},{key:"invertExtent",value:function invertExtent(v1,v2){return[this.invert(v1),this.invert(v2)]}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(tickValues){return tickValues}},{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:"render",value:function render(){return this.mount()&&(this.setTickConfig(),function renderAxis(axisInstance){var config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,mount=axisInstance.mount(),range=axisInstance.range(),axis=axisInstance.axis(),scale=axisInstance.scale(),tickLabelStyle=axisInstance._tickLabelStyle,axisTickFormatter=axisInstance._tickFormatter,orientation=config.orientation,axisNamePadding=config.axisNamePadding,className=config.className,id=config.id,classPrefix=config.classPrefix,show=renderConfig.show,xOffset=renderConfig.xOffset,yOffset=renderConfig.yOffset,showAxisName=renderConfig.showAxisName,labels=renderConfig.labels,smartAxisName=renderConfig.smartAxisName;if(show){var tickSize=axisInstance.getTickSize(),selectContainer=makeElement(renderer_utils_selectElement(mount),"g",[axisInstance],"".concat(className),{},function(key){return key.config().id});labelManager.setStyle(tickLabelStyle);var labelFunc=scale.ticks||scale.quantile||scale.domain,ticks=axis.tickValues()||labelFunc();axis.tickFormat(axisTickFormatter(ticks));var availableSpace=Math.abs(range[0]-range[1]),labelProps=axisInstance.axisComponentDimensions().largestTickDimensions;selectContainer.attr("transform","translate(".concat(xOffset,",").concat(yOffset,")")),axis_renderer_setFixedBaseline(axisInstance),!1===labels.smartTicks||0===tickSize?selectContainer.transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).call(axis):selectContainer.call(axis),selectContainer.selectAll(".tick").classed("".concat(classPrefix,"-ticks"),!0),selectContainer.selectAll(".tick line").classed("".concat(classPrefix,"-tick-lines"),!0),selectContainer.selectAll(".tick text").classed("".concat(classPrefix,"-ticks"),!0).classed("".concat(classPrefix,"-ticks-").concat(id),!0),axis_renderer_changeTickOrientation(selectContainer,axisInstance,tickSize);var textNode=makeElement(selectContainer,"text",[smartAxisName],"".concat(classPrefix,"-axis-name")).attr("text-anchor","middle").classed("".concat(classPrefix,"-axis-name-").concat(id),!0).text(function(d){return d.text});textNode.classed(HIDDEN,!showAxisName);var labelOffset=availableSpace/2,measures={labelProps:labelProps,tickSize:tickSize,axisNamePadding:axisNamePadding,axisNameHeight:smartAxisName.height,yOffset:yOffset,xOffset:xOffset,labelOffset:labelOffset,availableSpace:axisInstance.availableSpace()};axis_renderer_setAxisNamePos(textNode,orientation,measures)}}(this)),this}},{key:"remove",value:function remove(){return renderer_utils_selectElement(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this}},{key:"isReverse",value:function isReverse(){var range=this.range();return range[0]>range[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var scale=this.scale(),range=scale.range(),domain=scale.domain();return Math.abs(range[1]-range[0])/(domain[1]-domain[0])}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return cartesian_axis_default_config_defaultConfig}}]),SimpleAxis}();function linear_defineProperties(target,props){for(var i=0;iavailableSpace&&(numberOfValues=Math.floor(availableSpace/(labelDim+minTickDistance))),numberOfTicks=numberOfTicks||numberOfValues,numberOfValues=Math.min(numberOfTicks,Math.max(2,numberOfValues)),(tickValues=axis.scale().ticks(numberOfValues)).length>numberOfValues&&(tickValues=tickValues.filter(function(e,i){return i%2==0})),2===numberOfValues&&(tickValues=[(tickValues=axis.scale().ticks(10))[0],tickValues[tickValues.length-1]]),tickValues}(availableSpace,labelProps[orientation===axis_orientation_BOTTOM||orientation===axis_orientation_TOP?"width":"height"],axis,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return getSmallestDiff(this.renderConfig().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(tickText){var orientation=this.config().orientation,rotation=this.renderConfig().labels.rotation,axis=this.axis(),ticks=axis.tickValues(),smartTicks=this.smartTicks();if(smartTicks&&smartTicks.length){var _this$smartTicks$=this.smartTicks()[0],width=_this$smartTicks$.width,height=_this$smartTicks$.height;axis.tickTransform(function(d){if(d===ticks[0]){if(orientation===axis_orientation_LEFT||orientation===axis_orientation_RIGHT)return"translate(0, -".concat(height/3,"px)");if((orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM)&&!rotation)return"translate(".concat(width/2,"px, ",0,"px)")}return""})}return tickText}}],[{key:"type",value:function type(){return LINEAR}}]),ContinousAxis}();function band_axis_typeof(obj){return(band_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function band_axis_defineProperties(target,props){for(var i=0;irange[1],extent=this.invertExtent(v1,v2);return[scale(reverse?extent[extent.length-1]:extent[0]),scale(reverse?extent[0]:extent[extent.length-1])+scale.bandwidth()]}}],[{key:"type",value:function type(){return BAND}}]),BandAxis}();function time_axis_typeof(obj){return(time_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function time_axis_defineProperties(target,props){for(var i=0;i1?config.range:[DEFAULT_GRADIENT_COLOR].concat(props_toConsumableArray(config.range)));var oldConfig=mergeRecursive(defCon,context.config()),newConfig=mergeRecursive(oldConfig,config);return newConfig.range instanceof Array&&(newConfig.range=newConfig.range.map(function(e,i){return props_getActualHslColor(e,palette[i])}),newConfig.stops=config.stops||newConfig.range.length),newConfig.value=props_getActualHslColor(newConfig.value,newConfig.value),newConfig}},domain:{},scale:{},uniqueValues:{}},helper_treatNullMeasures=function treatNullMeasures(domainVal,scaledVal,minDomainScaledVal){return domainVal instanceof src_InvalidAwareTypes?minDomainScaledVal:scaledVal},helper_resolveAxisConfig=function resolveAxisConfig(propVal,defaultVal,context){switch(getObjProp(propVal,"constructor")){case Function:return propVal(defaultVal,context);case Array:return propVal;default:return defaultVal}};function color_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function color_strategy_toConsumableArray(arr){return function color_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);iMath.min(range.length,18))for(var interpolator=common_utils_piecewiseInterpolator()(function hslInterpolator(){return hslLong}(),range.map(function(e){return props_getHslString(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(domain.length){var scale=this.scale(),range=scale.range?scale.range():null,scaleInfo=this._colorStrategy.domainRange()(domain,this.config().stops,range);this.domain(scaleInfo.domain),scaleInfo.range&&this.scale().range(scaleInfo.range),this.uniqueValues(scaleInfo.uniqueVals),this.scale().domain(scaleInfo.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(color,transformationArr){var h=360*color[0],s=100*color[1],l=100*color[2],a=Math.min(defaultValue(color[3],0),1),newH=h+transformationArr[0],newS=s+transformationArr[1],newL=l+transformationArr[2],newA=Math.min(a+transformationArr[3]||0,1);return{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH/360,newS/100,newL/100,newA]}}},{key:"id",value:function id(){return this._id}},{key:"getHslArray",value:function getHslArray(color){return props_getActualHslColor(color)}}],[{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIG}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),defaults_DEFAULT_CONFIG={value:36,range:[36,1e3]};function size_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function size_strategy_toConsumableArray(arr){return function size_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:0,value=this.config().value,scale=this.scale(),domain=this.domain()||[1,1];return scale&&domain[0]!==domain[1]?this._sizeStrategy.range(domainVal,scale,this.domain(),this.uniqueValues()):value}},{key:"updateDomain",value:function updateDomain(domain){if(domain){var domainInfo=(0,this._sizeStrategy.domain)(domain,this.config().intervals);this.domain(domainInfo.domain),this.uniqueValues(domainInfo.uniqueVals),this.scale().domain(domainInfo.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 defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),shape_axis_defaults_DEFAULT_CONFIG={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},shape_axis_props_PROPS={config:{},domain:{},scale:{},uniqueValues:{},generator:{}};function shape_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[];return domain.length&&(this.uniqueValues(domain),this.domain(domain),this.scale().domain(domain),this.config().generator&&(this._generatedShapes=function shapeGenerator(domain,generatorFn){var generatedShapes={};return domain.forEach(function(value){generatedShapes[value]=generatorFn(value)}),generatedShapes}(domain,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 shape_axis_defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}(),polar_axis_props_PROPS={config:{sanitization:function sanitization(context,config){return mergeRecursive(context.config(),config)},preset:function preset(context,config){var range=config.range,domain=config.domain;range&&context.range(range),domain&&context.domain(domain)}},domain:{},range:{}};function angle_axis_slicedToArray(arr,i){return function angle_axis_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function angle_axis_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function angle_axis_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function angle_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function angle_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AngleAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._range=[0,360],this._angleFn=angle_axis_pie().value(function(d){return"string"==typeof d?1:d}).sortValues(null),this._angleValues={}}return function angle_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&angle_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&angle_axis_defineProperties(Constructor,staticProps),Constructor}(AngleAxis,[{key:"createScale",value:function createScale(strategy){var range=this.config().range;return scale_creator_createScale({type:strategy.scale,range:range})}},{key:"getScaleValue",value:function getScaleValue(domainVal){return this._angleValues[domainVal]}},{key:"padAngle",value:function padAngle(angle){this._angleFn=this._angleFn.padAngle(angle)}},{key:"domain",value:function domain(){for(var _len=arguments.length,domainVal=new Array(_len),_key=0;_key<_len;_key++)domainVal[_key]=arguments[_key];if(domainVal.length){var customDomain=this.config().domain,domain=domainVal[0].length?domainVal[0]:DEFAULT_ANGLE_DOMAIN;return this._domain=helper_resolveAxisConfig(customDomain,domain,this),createAngleValues(this),this}return this._domain}},{key:"range",value:function range(){if(arguments.length){var customRange=this.config().range;this._range=helper_resolveAxisConfig(customRange,arguments.length<=0?void 0:arguments[0],this);var domain=this.domain(),_this$_range=angle_axis_slicedToArray(this._range,2),startAngle=_this$_range[0],endAngle=_this$_range[1];return this._angleFn.startAngle(startAngle/180*Math.PI).endAngle(Math.PI*endAngle/180),domain&&domain.length&&createAngleValues(this),this}return this._range}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),AngleAxis}(),X="x",Y="y",MEASURE="measure",ROWS="rows",COLUMNS="columns",COL="col",ROW="row",enums_constants_COLOR="color",enums_constants_SHAPE="shape",enums_constants_SIZE="size",enums_constants_LINEAR="linear",constants_LEFT="left",constants_RIGHT="right",CELL="cell",X_AXES="xAxes",Y_AXES="yAxes",ENTRY_CELLS="entryCell",EXIT_CELLS="exitCell",enums_constants_RADIUS="radius",enums_constants_ANGLE="angle",ANGLE0="angle0",PRIMARY="Primary",SECONDARY="Secondary";function radius_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function radius_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RadiusAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._range=[],this._radiusFactor=1,this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._scale=this.createScale({scale:enums_constants_LINEAR})}return function radius_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&radius_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&radius_axis_defineProperties(Constructor,staticProps),Constructor}(RadiusAxis,[{key:"config",value:function config(){if(arguments.length){var config=mergeRecursive(this.config(),arguments.length<=0?void 0:arguments[0]);return this._config=config,this}return this._config}},{key:"createScale",value:function createScale(strategy){return scale_creator_createScale({type:strategy.scale,range:this.range()})}},{key:"domain",value:function domain(){if(arguments.length){var customDomain=this.config().domain,domain=helper_resolveAxisConfig(customDomain,arguments.length<=0?void 0:arguments[0],this);domain=sanitizeDomainWhenEqual(domain),this._scale.domain(domain),this._domain=domain,adjustDomain(this)}return this._domain}},{key:"getInnerRadius",value:function getInnerRadius(domainVal){return void 0===domainVal?this.range()[0]:this._scale(domainVal)}},{key:"getOuterRadius",value:function getOuterRadius(domainVal){return void 0===domainVal?this.range()[1]:this._scale(domainVal)*this._radiusFactor}},{key:"range",value:function range(){for(var _len=arguments.length,_range=new Array(_len),_key=0;_key<_len;_key++)_range[_key]=arguments[_key];if(_range.length){var _this$config2=this.config(),padding=_this$config2.padding,customRange=_this$config2.range,sanitizedRange=_range[0].map(function(v,i){return v+(i?-padding[i]:padding[i])}),rangeVal=helper_resolveAxisConfig(customRange,sanitizedRange,this);this._range=rangeVal,this._scale.range(rangeVal),adjustDomain(this)}return this._range}},{key:"setRadiusFactor",value:function setRadiusFactor(val){return this._radiusFactor=val,this}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:[0,1],minOuterRadius:10}}}]),RadiusAxis}();function data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DATA_TYPES_MEASURE="measure",DATA_TYPES_TEMPORAL="temporal",group_transform=(data_type_scale_map_defineProperty(_dataTypeScaleMap={},"dimension",BAND),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_MEASURE,LINEAR),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_TEMPORAL,TIME),function(schema,data,config){var groupBy=config.groupBy instanceof Array?config.groupBy:[config.groupBy],groupByIndices=groupBy.map(function(fieldName){return schema.findIndex(function(d){return d.name===fieldName})});if(void 0!==groupByIndices.find(function(d){return-1===d}))throw new Error("Groupby field ".concat(groupBy," not found in schema"));var groupedData=common_utils_nestCollection({keys:groupByIndices,data:data});return groupedData.forEach(function(d){var key=d.key;src_InvalidAwareTypes.isInvalid(key)&&(d.key=src_InvalidAwareTypes.getInvalidType(key))}),groupedData});var _transformMap;function transform_factory_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var transformMap=(transform_factory_defineProperty(_transformMap={},"identity",function identityTransform(schema,data,config){return data}),transform_factory_defineProperty(_transformMap,"group",group_transform),transform_factory_defineProperty(_transformMap,"stack",function(schema,data,config){var uniqueField=config.uniqueField,valueField=config.value,groupBy=config.groupBy,sort=config.sort||"descending",normalizedData=function normalizeData(data,schema,valueField,uniqueField,groupBy){var groupedData=group_transform(schema,data,{groupBy:uniqueField}),uniqueFieldIndex=schema.findIndex(function(d){return d.name===uniqueField}),valueFieldIndex=schema.findIndex(function(d){return d.name===valueField}),seriesKeyIndex=schema.findIndex(function(d){return d.name===groupBy}),seriesKeys=data.map(function(d){return d[seriesKeyIndex]}).filter(function(item,pos,arr){return arr.indexOf(item)===pos}).sort(),fieldNames=schema.reduce(function(acc,obj,i){return acc[i]=obj.name,acc},{});return{data:groupedData.map(function(arr){var tuples={},rowObj=arr.values.reduce(function(acc,row){return acc=row.reduce(function(obj,value,i){return i===seriesKeyIndex?(obj[value]=row[valueFieldIndex],tuples[value]=row):i!==valueFieldIndex&&(obj[fieldNames[i]]=value),obj},acc)},{});return rowObj._tuple=tuples,seriesKeys.forEach(function(seriesKey){if(void 0===rowObj[seriesKey]){rowObj[seriesKey]=0;var newArr=new Array(arr.values[0].length);newArr[uniqueFieldIndex]=arr.key,newArr[seriesKeyIndex]=seriesKey,rowObj._tuple[seriesKey]=newArr}}),rowObj}),keys:seriesKeys}}(data,schema,valueField,uniqueField,groupBy),keys=normalizedData.keys,map={},orderBy=config.orderBy,orderIndex=schema.findIndex(function(d){return d.name===orderBy}),groupByIndex=schema.findIndex(function(d){return d.name===groupBy});-1!==orderIndex&&(keys.forEach(function(key){var name=data.find(function(d){return d[groupByIndex]===key});map[key]=name[orderIndex]}),normalizedData.keys.sort(function(a,b){return map[a].localeCompare(map[b])}));var stackData=common_utils_stack({keys:normalizedData.keys,offset:config.offset||"diverging",order:sort,data:normalizedData.data});return stackData.forEach(function(seriesData){seriesData.forEach(function(dataObj){dataObj.data=dataObj.data._tuple[seriesData.key]})}),stackData}),_transformMap);var _encodingFieldInfRetr,_dataNormalizers,_domainCalculator,transform_factory=function transformFactory(type){var transform=transformMap[type];if("function"!=typeof transform)throw new Error("Invalid transform type supplied.");return transform};function helpers_toConsumableArray(arr){return function helpers_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=d[0]?(y=x0=d[1],x=y0=d[0]):(y=x0=d[0],x=y0=d[1]),(pointObj=xFieldType===dist_datamodel.FieldType.MEASURE?{x:x,x0:x0,y:tuple[yFieldIndex],y0:tuple[yFieldIndex]}:{x:tuple[xFieldIndex],x0:tuple[xFieldIndex],y:y,y0:y0}).source=tuple,pointObj.rowId=tuple[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=tuple[encodingFieldInf["".concat(enc,"FieldIndex")]]})):((pointObj={x:d[xFieldIndex],y:d[yFieldIndex],x0:d[x0FieldIndex],y0:d[y0FieldIndex]}).source=d,pointObj.rowId=d[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=d[encodingFieldInf["".concat(enc,"FieldIndex")]]}));return pointObj})}).filter(function(d){return d.length})}),_dataNormalizers),domainCalculator=(helpers_defineProperty(_domainCalculator={},POLAR,function(data,layerInst){var config=layerInst.config(),sort=config.sort,angleValues=data[0],radius0Field=getObjProp(config.encoding.radius0,"field");return sort&&(angleValues=angleValues.sort(function(a,b){return"asc"===sort?a.radius-b.radius:b.radius-a.radius})),{radius:getDomainFromData(data,[ENCODING.RADIUS,radius0Field?ENCODING.RADIUS0:ENCODING.RADIUS]),angle:angleValues.map(function(d){return d.angle}),angle0:angleValues.map(function(d){return d.angle0})}}),helpers_defineProperty(_domainCalculator,helpers_CARTESIAN,function(data,layerInst){var transformType=layerInst.transformType(),encodingFieldInf=layerInst.encodingFieldsInf(),xFieldSubType=encodingFieldInf.xFieldSubType,yFieldSubType=encodingFieldInf.yFieldSubType,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,x0Field=encodingFieldInf.x0Field,y0Field=encodingFieldInf.y0Field,domains={},yEnc=ENCODING.Y,xEnc=ENCODING.X;return xField&&(domains.x=getDomainFromData(data,x0Field||"stack"===transformType?[xEnc,ENCODING.X0]:[xEnc,xEnc],xFieldSubType)),yField&&(domains.y=getDomainFromData(data,y0Field||"stack"===transformType?[ENCODING.Y0,ENCODING.Y]:[yEnc,yEnc],yFieldSubType)),domains}),_domainCalculator),attachDataToVoronoi=function attachDataToVoronoi(voronoi,points){var _ref3;voronoi.data((_ref3=[]).concat.apply(_ref3,helpers_toConsumableArray(points)).filter(function(d){return void 0!==d.rowId}).map(function(d){var point=d.update;return{x:point.x,y:point.y,data:d}}))},helpers_updateStyle=function updateStyle(target,styles,remove){for(var key in styles)({}).hasOwnProperty.call(styles,key)&&target.style(key,remove?null:styles[key])},positionPoints=function positionPoints(context,points){var positioner=context.encodingTransform();return positioner?positioner(points,context,{smartLabel:context._dependencies.smartLabel}):points},helpers_getPlotMeasurement=function getPlotMeasurement(context,dimensionalValues){var fieldInfo=context.encodingFieldsInf(),axes=context.axes(),transformType=context.transformType(),config=context.config(),bandScale=context._bandScale;return["x","y"].map(function(type){var span=0,groupSpan=0,padding=0,offsetValues=[];if(fieldInfo["".concat(type,"FieldType")]===dist_datamodel.FieldType.DIMENSION){var actualGroupWidth,timeDiff=fieldInfo["".concat(type,"FieldSubType")]===dist_datamodel.DimensionSubtype.TEMPORAL?context.dataProps().timeDiffs[type]:0,axis=axes[type],pad=config["pad".concat(type.toUpperCase())],innerPadding=config.innerPadding,keys=dimensionalValues,scale=axis.scale();groupSpan=function getGroupSpan(axis,minDiff){var width=axis.getUnitWidth(),scale=axis.scale(),range=scale.range(),domain=scale.domain();return width||Math.abs(range[1]-range[0])/Math.abs(domain[1]-domain[0])*minDiff}(axis,timeDiff);var isAxisBandScale=axis.constructor.type()===helpers_BAND,axisPadding=axis.config().padding;if("group"===transformType){var groupPadding=isAxisBandScale?0:axisPadding*groupSpan/2;bandScale.range([groupPadding,groupSpan-groupPadding]).domain(keys).paddingInner(innerPadding),span=bandScale.bandwidth(),actualGroupWidth=groupSpan-(isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(key){return bandScale(key)-(isAxisBandScale?0:groupSpan/2)})}else if(void 0!==pad){var offset;if(isAxisBandScale){var step=scale.step();offset=scale.padding()*step,span=scale.bandwidth()+offset}else span=groupSpan;offsetValues=keys.map(function(){return isAxisBandScale?-offset/2:-span/2})}else actualGroupWidth=span=groupSpan-(padding=isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(){return isAxisBandScale?0:-span/2});groupSpan=actualGroupWidth,padding=isAxisBandScale?axisPadding*axis.scale().step():axisPadding*groupSpan}return{span:span,offsetValues:offsetValues,groupSpan:groupSpan,padding:padding}})},helpers_resolveInvalidTransformType=function resolveInvalidTransformType(context){return function transformResolverPredicates(encodingFieldInf,context,groupByField){var fieldsConfig=context.data().getFieldsConfig(),xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,dimensionField=["xField","yField"].find(function(type){return encodingFieldInf["".concat(type,"Type")]===dist_datamodel.FieldType.DIMENSION});return[!xField,!yField,!groupByField,getObjProp(fieldsConfig[groupByField],"def","type")===dist_datamodel.FieldType.MEASURE,xFieldType===dist_datamodel.FieldType.DIMENSION&&yFieldType===dist_datamodel.FieldType.DIMENSION,dimensionField&&encodingFieldInf[dimensionField]===groupByField]}(context.encodingFieldsInf(),context,context.config().transform.groupBy).some(function(value){return value})?"identity":null},helpers_getValidTransformForAggFn=function getValidTransformForAggFn(context){var resolvedInvalidTransformType=helpers_resolveInvalidTransformType(context);if(resolvedInvalidTransformType)return resolvedInvalidTransformType;var _context$encodingFiel=context.encodingFieldsInf(),xField=_context$encodingFiel.xField,yField=_context$encodingFiel.yField,xFieldType=_context$encodingFiel.xFieldType,yFieldType=_context$encodingFiel.yFieldType,groupByField=context.config().transform.groupBy,isCustomTransformTypeProvided=!!getObjProp(context._customConfig,"transform","type"),transformType=context.config().transform.type;if(!isCustomTransformTypeProvided&&groupByField&&xFieldType!==yFieldType){var measureField=xFieldType===dist_datamodel.FieldType.MEASURE?xField:yField;transformType="sum"===common_utils_retrieveNearestGroupByReducers(context.data(),measureField)[measureField]?"stack":"group"}return transformType},helpers_resolveEncodingValues=function resolveEncodingValues(data,i,dataArr,layerInst){var transformedValues={},values=data.values,encoding=layerInst.config().encoding;for(var key in values){var value=getObjProp(encoding[key],"value");value instanceof Function?transformedValues[key]=value(values,i,dataArr,layerInst):transformedValues[key]=values[key]}return transformedValues},getColorMetaInf=function getColorMetaInf(colorInf,colorAxis){return{originalColor:Object.keys(colorInf).reduce(function(acc,key){return colorInf[key]&&(acc[key]=colorAxis.getHslArray(colorInf[key])),acc},{}),stateColor:{},colorTransform:{}}},getCoordValue=function getCoordValue(radius,trig,angle,offset){return radius*Math[trig](angle)+offset},coordValueGetter=function coordValueGetter(radius,angle,xOffset,yOffset){return{x:getCoordValue(radius,"cos",angle,xOffset),y:getCoordValue(radius,"sin",angle,yOffset)}},toCartesianCoordinates=function toCartesianCoordinates(points,measurement){for(var rangePlot=arguments.length>2&&void 0!==arguments[2]&&arguments[2],xOffset=measurement.width/2,yOffset=measurement.height/2,i=0,len=points.length;i3&&void 0!==arguments[3]?arguments[3]:{};return function base_layer_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,BaseLayer),_this=function base_layer_possibleConstructorReturn(self,call){return!call||"object"!==base_layer_typeof(call)&&"function"!=typeof call?base_layer_assertThisInitialized(self):call}(this,base_layer_getPrototypeOf(BaseLayer).call(this)),generateGetterSetters(base_layer_assertThisInitialized(_this),props_props),_this.axes(axes),_this.alias(_this.constructor.formalName()+getUniqueId()),_this.dependencies(dependencies),_this._points=[],_this._cachedData=[],_this._id=getUniqueId(),_this._measurement={},_this._animationDonePromises=[],_this._graphicElems={},_this._customConfig=null,_this}return function base_layer_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&base_layer_setPrototypeOf(subClass,superClass)}(BaseLayer,simple_layer_SimpleLayer),function base_layer_createClass(Constructor,protoProps,staticProps){return protoProps&&base_layer_defineProperties(Constructor.prototype,protoProps),staticProps&&base_layer_defineProperties(Constructor,staticProps),Constructor}(BaseLayer,[{key:"store",value:function store(){if(arguments.length){var store=this._store=arguments.length<=0?void 0:arguments[0],namespace=this.metaInf().namespace;return store.addSubNamespace(namespace,BaseLayer.formalName(),this),store_transactor(this,localOptions,store,{subNamespace:namespace,namespace:"".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE)}),this}return this._store}},{key:"domain",value:function domain(){var prop="".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain"),store=this.store();if(arguments.length){var _this$metaInf2=this.metaInf(),parentNamespace=_this$metaInf2.parentNamespace,namespace=_this$metaInf2.namespace,domain=defaultValue(store.get(prop,parentNamespace),{});return domain[namespace]=arguments.length<=0?void 0:arguments[0],this.store().commit(prop,domain,parentNamespace),this}return this.store().get(prop,this.metaInf().namespace)}},{key:"encodingFieldsInf",value:function encodingFieldsInf(){return arguments.length?(this._encodingFieldsInf=arguments.length<=0?void 0:arguments[0],this):this._encodingFieldsInf}},{key:"encodingTransform",value:function encodingTransform(){return arguments.length?(this._encodingTransform=arguments.length<=0?void 0:arguments[0],this):this._encodingTransform}},{key:"alias",value:function alias(){return arguments.length?(this._alias=arguments.length<=0?void 0:arguments[0],this):this._alias||this.constructor.formalName()}},{key:"dependencies",value:function dependencies(){return arguments.length?(this._dependencies=arguments.length<=0?void 0:arguments[0],this):this._dependencies}},{key:"enableCaching",value:function enableCaching(){return this._cacheEnabled=!0,this}},{key:"clearCaching",value:function clearCaching(){return this._cacheEnabled=!1,this.data(this._cachedData[0])}},{key:"serialize",value:function serialize(){return this.config()}},{key:"id",value:function id(){return this._id}},{key:"getTransformedData",value:function getTransformedData(dataModel,config,transformType,encodingFieldsInf){return function transformData(dataModel,config,transformType,encodingFieldInf){var data=dataModel.getData({withUid:!0}),schema=data.schema,transform=config.transform,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,uniqueField=xFieldType===dist_datamodel.FieldType.MEASURE?yField:xField;return transform_factory(transformType)(schema,data.data,{groupBy:transform.groupBy,uniqueField:uniqueField,sort:transform.sort||"none",offset:transform.offset,orderBy:transform.orderBy,value:yFieldType===dist_datamodel.FieldType.MEASURE?yField:xField},data.uids)}(dataModel,config,transformType,encodingFieldsInf)}},{key:"calculateDomainFromData",value:function calculateDomainFromData(data){var domains={};return this.data().isEmpty()||(domains=domainCalculator[this.coord()](data,this)),domains}},{key:"getDataDomain",value:function getDataDomain(encodingType){var _this$metaInf3=this.metaInf(),parentNamespace=_this$metaInf3.parentNamespace,namespace=_this$metaInf3.namespace,domains=getObjProp(this.store().get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain"),parentNamespace),namespace);return void 0!==encodingType?domains[encodingType]||[]:domains}},{key:"getNormalizedData",value:function getNormalizedData(transformedData){return function getNormalizedData(transformedData,context){var transformType=context.transformType(),transformedDataArr="identity"===transformType?[transformedData]:transformedData,encodingFieldInf=context.encodingFieldsInf(),fieldsConfig=context.data().getFieldsConfig();return dataNormalizers[context.coord()](transformedDataArr,encodingFieldInf,fieldsConfig,transformType)}(transformedData,this)}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(interactionType,selectionSet,apply,styles){var interactionStyles=(this.config().interaction||{})[interactionType];(interactionStyles=styles||interactionStyles)&&helpers_applyInteractionStyle(this,selectionSet,interactionStyles,{apply:apply,interactionType:interactionType})}},{key:"disableUpdate",value:function disableUpdate(){return this._updateLock=!0,this}},{key:"enableUpdate",value:function enableUpdate(){return this._updateLock=!1,this}},{key:"resolveTransformType",value:function resolveTransformType(){this._transformType=function getValidTransform(context){return helpers_resolveInvalidTransformType(context)||context.config().transform.type}(this)}},{key:"transformType",value:function transformType(){return this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){var _this$metaInf4=this.metaInf(),namespace=_this$metaInf4.namespace,parentNamespace=_this$metaInf4.parentNamespace,store=this.store();store.removeSubNamespace(namespace,BaseLayer.formalName());var unitDom=store.get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".domain"))[parentNamespace];return unitDom&&delete unitDom[namespace],renderer_utils_selectElement(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(key,data){if(null===key)return this;var pointMap=this._pointMap;return!pointMap[key]&&(pointMap[key]=[]),pointMap[key].push(data),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(data){var schema=this.data().getSchema(),fieldsConfig=this.data().getFieldsConfig(),identifiers=[[],[]],_this$encodingFieldsI=this.encodingFieldsInf(),xFieldType=_this$encodingFieldsI.xFieldType,yFieldType=_this$encodingFieldsI.yFieldType,xField=_this$encodingFieldsI.xField,yField=_this$encodingFieldsI.yField,_map2=base_layer_slicedToArray([xFieldType,yFieldType].map(function(type){return type===dist_datamodel.FieldType.MEASURE}),2),xMeasure=_map2[0],yMeasure=_map2[1];if(schema.forEach(function(d,i){var name=d.name;fieldsConfig[name].def.type===dist_datamodel.FieldType.DIMENSION&&(identifiers[0].push(name),identifiers[1].push(data[i]))}),xMeasure&&yMeasure){var _identifiers$,_identifiers$2,xMeasureIndex=fieldsConfig[xField].index,yMeasureIndex=fieldsConfig[yField].index;(_identifiers$=identifiers[0]).push.apply(_identifiers$,[xField,yField]),(_identifiers$2=identifiers[1]).push.apply(_identifiers$2,[data[xMeasureIndex],data[yMeasureIndex]])}return identifiers}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!1}},{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(identifiers){var _ref,fieldNames,values,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},getAllAttrs=config.getAllAttrs,getBBox=config.getBBox;if(!this.data())return[];if(identifiers instanceof datamodel_default.a){var dataObj=identifiers.getData();fieldNames=dataObj.schema.map(function(d){return d.name}),values=dataObj.data}else fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length);var points=this._points,fieldsConfig=this.data().getFieldsConfig(),filteredPoints=(_ref=[]).concat.apply(_ref,base_layer_toConsumableArray(points)).filter(function(point){var source=point.source,rowId=point.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})});return getAllAttrs?filteredPoints:filteredPoints.map(function(d){var obj=clone(d);if(getBBox){var update=obj.update||obj;if(void 0!==obj.size){var sizeVal=2*Math.sqrt(obj.size/Math.PI);update.width=sizeVal,update.height=sizeVal,update.x-=sizeVal/2,update.y-=sizeVal/2}else void 0===update.width&&(update.width=2),void 0===update.height&&(update.height=2)}return obj.update||obj}).sort(function(a,b){return a.y-b.y})}},{key:"getTransformedDataFromIdentifiers",value:function getTransformedDataFromIdentifiers(identifiers){var measureIndex,enc,_identifiers$getData=identifiers.getData(),identifierData=_identifiers$getData.data,identifierSchema=_identifiers$getData.schema,normalizedData=this._normalizedData,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI2=this.encodingFieldsInf(),yField=_this$encodingFieldsI2.yField,xField=_this$encodingFieldsI2.xField,yFieldType=_this$encodingFieldsI2.yFieldType;_this$encodingFieldsI2.xFieldType===dist_datamodel.FieldType.MEASURE?(measureIndex=fieldsConfig[xField].index,enc="x"):yFieldType===dist_datamodel.FieldType.MEASURE&&(measureIndex=fieldsConfig[yField].index,enc="y");var transformedData=[];return normalizedData.forEach(function(dataArr){dataArr.forEach(function(dataObj){var tupleArr=dataObj.source;if(identifierSchema.every(function(obj,i){return-1!==identifierData.findIndex(function(d){return tupleArr[fieldsConfig[obj.name].index]===d[i]})})){var transformedVal=dataObj[enc],row=dataObj.source,tuple={};for(var key in fieldsConfig){var index=fieldsConfig[key].index;tuple[key]=row[index],index===measureIndex&&(tuple[key]=transformedVal)}transformedData.push(tuple)}})}),[transformedData,this.data().getSchema()]}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){for(var graphicElems=this._graphicElems,elems=[],i=0,len=set.length;i2&&void 0!==arguments[2]?arguments[2]:{},dataPoint=renderer_utils_selectElement(config.event.target).data()[0];if(isSimpleObject(dataPoint)){var source=dataPoint.source,rowId=dataPoint.rowId;return{id:this.getIdentifiersFromData(source,rowId),layerId:this.id()}}return null}},{key:"translatePoints",value:function translatePoints(data){var _this2=this,_this$axes=this.axes(),angle=_this$axes.angle,colorAxis=_this$axes.color,radiusAxis=_this$axes.radius,pieIndex={},prevData=this._points[0]||[],points=[],angleV={};return this._prevPieData={},prevData.forEach(function(e,index){_this2._prevPieData[e.rowId]=[e,index],pieIndex[e.index]=e}),data.forEach(function(d,i){var angles=angle.getScaleValue(d.angle);if(angles){!angleV[d.angle]&&(angleV[d.angle]=0);var _angles=angles[angleV[d.angle]++],startAngle=_angles.startAngle,endAngle=_angles.endAngle,uid=d.rowId,resolvedEncodings=helpers_resolveEncodingValues({values:{radius:radiusAxis.getOuterRadius(d.radius),radius0:radiusAxis.getInnerRadius(d.radius0),color:colorAxis.getColor(d.color),angle0:startAngle,angle:endAngle,startAngle:startAngle,endAngle:endAngle,startAngle0:startAngle,endAngle0:endAngle},data:d},i,data,_this2),color=resolvedEncodings.color;points.push({source:d.source,index:i,enter:{},update:{angle0:resolvedEncodings.angle0,angle:resolvedEncodings.angle,radius0:resolvedEncodings.radius0,radius:resolvedEncodings.radius},color:color,meta:getColorMetaInf({fill:color},colorAxis),rowId:uid,_previousInfo:_this2._prevPieData[uid]?_this2._prevPieData[uid][0]:function getPreviousPoint(prevData,currIndex,context){var prevArc=prevData[currIndex-1],nextArc=prevData[currIndex],_context$axes$angle$r2=arc_helper_slicedToArray(context.axes().angle.range(),2),startAngle=_context$axes$angle$r2[0],endAngle=_context$axes$angle$r2[1];return prevArc&&nextArc?{update:{angle0:getObjProp(prevArc,"update","angle"),angle:getObjProp(nextArc,"update","angle0")}}:nextArc?{update:{angle0:(startAngle-90)*Math.PI*2/360,angle:(startAngle-90)*Math.PI*2/360}}:{update:{angle0:(endAngle-90)*Math.PI*2/360,angle:(endAngle-90)*Math.PI*2/360}}}(pieIndex,i,_this2)})}}),points}},{key:"render",value:function render(container){var _this3=this,measurement=this.measurement(),_this$config=this.config(),classPrefix=_this$config.classPrefix,defClassName=_this$config.defClassName,cornerRadius=_this$config.cornerRadius,padAngle=_this$config.padAngle,padRadius=_this$config.padRadius,transition=_this$config.transition,qualClassName=getQualifiedClassName(defClassName,this.id(),classPrefix),path=this._arcFn=arc_arc().cornerRadius(cornerRadius).startAngle(function(d){return d.update.angle0+Math.PI/2}).endAngle(function(d){return d.update.angle+Math.PI/2}).padAngle(padAngle).padRadius(padRadius).outerRadius(function(d){return d.update.radius}).innerRadius(function(d){return d.update.radius0});this._points=this._normalizedData.map(function(arr){return _this3.translatePoints(arr)});var graphicElems=this._graphicElems={},g=makeElement(renderer_utils_selectElement(container),"g",this._points,"".concat(qualClassName[0],"-group")).classed("".concat(qualClassName[1],"-group"),!0).attr("transform","translate(".concat(measurement.width/2,",\n ").concat(measurement.height/2,")")),consecutiveExits=[],exitCounter=0;return makeElement(g,"g",function(d){return d},"".concat(qualClassName[0]),{update:function tween(elem){makeElement(elem,"path",function(d){return[d]},"".concat(qualClassName[0],"-path")).style("fill",function(d){return d.color}).each(function(d){graphicElems[d.rowId]=renderer_utils_selectElement(this)}).transition().duration(transition.duration).on("end",_this3.registerAnimationDoneHook()).attrTween("d",function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return function tweenPie(path,b){var datum=b[0];return function(t){return path(common_utils_interpolator()(datum._previousInfo,datum)(t))}}(path,params)}).attr("class",function(d,i){var individualClass=getIndividualClassName(d,i,_this3._points,_this3);return"".concat(qualClassName[0],"-path ").concat(qualClassName[1],"-path-").concat(d.index,"\n ").concat(individualClass)})},exit:function tweenExit(elem,d){var exitArr=consecutiveExits[exitCounter],oldExitCounter=exitCounter;exitArr?exitArr[exitArr.length-1].datum.index===d.index-1?exitArr.push({elem:elem,datum:d}):exitCounter++:exitArr=[{elem:elem,datum:d}],consecutiveExits[oldExitCounter]=exitArr}}).attr("class",function(d,i){return"".concat(qualClassName[0]," ").concat(qualClassName[1],"-").concat(i)}),function tweenExitPie(consecutiveExits,transition,path){consecutiveExits.length>0&&consecutiveExits.forEach(function(consecutiveExitArr){var startAngle=consecutiveExitArr[0].datum.update.angle0,endAngle=consecutiveExitArr[consecutiveExitArr.length-1].datum.update.angle,mid=2*Math.PI*startAngle/(2*Math.PI+startAngle-endAngle);consecutiveExitArr.forEach(function(e){var elem=e.elem,datum=e.datum;elem.each(function(){var gElem=renderer_utils_selectElement(this);gElem.selectAll("path").transition().duration(transition.duration).attrTween("d",function(){return function(t){return path(common_utils_interpolator()(datum,{update:{angle0:mid,angle:mid,radius:datum.radius,radius0:datum.radius0}})(t))}}).remove(),gElem.remove()})})})}(consecutiveExits,transition,path),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){if(!this.data())return[];var fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length),pieSlices=renderer_utils_selectElement(this.mount()).selectAll("path").data(),fieldsConfig=this.data().getFieldsConfig(),pieSliceInf=pieSlices.filter(function(tData){var source=tData.source,rowId=tData.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})})[0];if(pieSliceInf){var measurement=this.measurement(),centroid=this._arcFn.centroid(pieSliceInf);return[{x:centroid[0]+measurement.width/2,y:centroid[1]+measurement.height/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return arc_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),text_renderer=function drawText(container,data,config,layerInst){var selection=renderer_utils_selectElement(container).selectAll("g").data(data),smartLabel=layerInst._dependencies.smartLabel,graphicElems=layerInst._graphicElems,selectionMerge=selection.enter().append("g").each(function(dataObj){renderer_utils_setAttrs(this,dataObj.enter)}).merge(selection),style=renderer_utils_getSmartComputedStyle(renderer_utils_selectElement(container),config.className),fontSize=parseInt(style.fontSize,10);return smartLabel.setStyle(style),selectionMerge.each(function(dataObj){var element=renderer_utils_selectElement(this);graphicElems[dataObj.rowId]=element;var backgroundVal,update=dataObj.update,text=dataObj.text,color=dataObj.color,textanchor=dataObj.textanchor,textStyle=dataObj.style,background=dataObj.background;if(backgroundVal=background.value){var diff,backgroundPadding=background.padding,_smartLabel$getOriSiz=smartLabel.getOriSize(dataObj.text),width=_smartLabel$getOriSiz.width,height=_smartLabel$getOriSiz.height,backgroundEl=makeElement(element,"rect",[1]);diff="end"===textanchor?width:"start"===textanchor?0:width/2,renderer_utils_setAttrs(backgroundEl.node(),{x:update.x-diff-backgroundPadding/2,y:update.y-fontSize-backgroundPadding/2,width:width+backgroundPadding,height:height+backgroundPadding}),background&&renderer_utils_setStyles(backgroundEl,{background:backgroundVal})}var textEl=makeElement(element,"text",function(d){return[d]}).text(text),textNode=textEl.node();textStyle&&renderer_utils_setStyles(textNode,textStyle),color&&renderer_utils_setStyles(textNode,{fill:color}),dataObj.className&&textEl.classed(dataObj.className,!0),renderer_utils_setAttrs(textNode,update),textEl.attr("text-anchor",textanchor),textEl.attr("alignment-baseline",dataObj["alignment-baseline"]),textEl.attr("transform","rotate(".concat(dataObj.rotation," ").concat(update.x," ").concat(update.y,")"))}),selection.exit().remove(),selection},text_default_config_defaultConfig={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:{},size:{},radius:{},angle:{},text:{value:"",formatter:function formatter(val,i,data,context){return context.valueParser()(val)},background:{padding:10}},rotation:{value:0},"alignment-baseline":{value:"middle"}},states:{highlight:{className:"".concat("muze","-layer-text-highlight")},fadeout:{className:"".concat("muze","-layer-text-fadeout")},selected:{className:"".concat("muze","-layer-text-selected")}}};__webpack_require__(18);function text_typeof(obj){return(text_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function text_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var _this=this,config=this.config(),normalizedData=this._normalizedData,className=config.className,qualifiedClassName=getQualifiedClassName(config.defClassName,this.id(),config.classPrefix);return renderer_utils_selectElement(container).classed("".concat(qualifiedClassName.join(" ")," ").concat(className),!0),this._graphicElems={},renderer_utils_createElements({data:normalizedData,append:"g",selector:"g",container:container,each:function each(dataArr,group){var node=group.node(),points=_this.translatePoints(dataArr,{},_this);renderer_utils_setStyles(node,{"text-anchor":"middle"}),text_renderer(node,points,{className:qualifiedClassName[0]},_this)}}),this}}],[{key:"defaultConfig",value:function defaultConfig(){return text_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"text"}}]),TextLayer}(),point_renderer=function drawSymbols(params){var layer=params.layer,container=params.container,points=params.points,transition=params.transition,className=params.className,duration=transition.duration,effect=transition.effect,disabled=transition.disabled,mount=renderer_utils_selectElement(container),graphicElems=layer._graphicElems;return mount.attr("class",className),makeElement(mount,"g",points,null,{enter:function enter(group,d){var enter=d.enter;group.attr("transform","translate(".concat(enter.x,",").concat(enter.y,")"))},update:function update(group,d){!function createShape(d,groupElement){var shape=d.shape,size=d.size,update=d.update;if(shape instanceof Promise)shape.then(function(res){d.shape=res,createShape(d,groupElement)});else if(shape instanceof Element){var newShape=shape.cloneNode(!0);if("img"===newShape.nodeName.toLowerCase()){var src=newShape.src||newShape.href;(newShape=document.createElementNS("http://www.w3.org/2000/svg","image")).setAttribute("href",src)}var shapeElement=renderer_utils_selectElement(newShape);"path"===newShape.nodeName||"image"===newShape.nodeName?shapeElement.attr("transform","scale(".concat(size/100,")")):(shapeElement.attr("height",size),shapeElement.attr("width",size)),shapeElement.attr("x",-size/2),shapeElement.attr("y",-size/2),makeElement(groupElement,function(){return newShape},[1])}else if("string"==typeof shape){var pathStr;pathStr=function checkPath(str){return!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(str)&&/[\dz]$/i.test(str)&&str.length>4)}(shape)?shape:common_utils_getSymbol(shape).size(size)(update),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}else d.shape="circle",createShape(d,groupElement)}(d,group),graphicElems[d.rowId]=group;var update=d.update,style=d.style;objectIterator(style,function(key){return group.style(key,style[key])}),group.attr("class",className),group.classed(d.className,!0),disabled||(group=group.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),group.attr("transform","translate(".concat(update.x,",").concat(update.y,")"))},exit:function exit(exitGroup){disabled?exitGroup.remove():exitGroup.transition().ease(easeFns[effect]).duration(duration).on("end",function(){return exitGroup.remove()}).style("fill-opacity",0).style("stroke-opacity",0)}},params.keyFn)},point_default_config_defaultConfig={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"stroke",intensity:[0,0,0,1]}],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:{},stroke:{value:"hsla(0,0%,0%,0)"},fill:{},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]};__webpack_require__(19);function point_typeof(obj){return(point_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function point_toConsumableArray(arr){return function point_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},points=[],encoding=this.config().encoding,axes=this.axes(),x=encoding.x,y=encoding.y,xField=x.field,yField=y.field,sizeAxis=axes.size,shapeAxis=axes.shape,fieldsConfig=this.data().getFieldsConfig(),isXDim=fieldsConfig[xField]&&fieldsConfig[xField].def.type===dist_datamodel.FieldType.DIMENSION,isYDim=fieldsConfig[yField]&&fieldsConfig[yField].def.type===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=this.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,stroke=encoding.stroke.value,_loop=function _loop(i,len){var d=data[i],size=sizeAxis.getSize(d.size),shape=shapeAxis.getShape(d.shape),_map2=point_slicedToArray([ENCODING.X,ENCODING.Y].map(function(type){var value=null===d[type]?void 0:d[type],measure=type===ENCODING.X?measurement.width:measurement.height;return encoding[type].field?axes[type].getScaleValue(value):measure/2}),2),xPx=_map2[0],yPx=_map2[1];xPx+=offsetX,yPx+=offsetY;var color=colorAxis.getColor(d.color),resolvedEncodings=helpers_resolveEncodingValues({values:{x:xPx,y:yPx,color:color,shape:shape,size:size,data:d},data:d},i,data,_this2),style={fill:color=resolvedEncodings.color,stroke:stroke},pos={x:resolvedEncodings.x,y:resolvedEncodings.y};if(!isNaN(xPx)&&!isNaN(yPx)){var point={enter:pos,update:pos,shape:resolvedEncodings.shape,size:Math.abs(resolvedEncodings.size),meta:getColorMetaInf(style,colorAxis),style:style,source:d.source,rowId:d.rowId};point.className=getIndividualClassName(d,i,data,_this2),points.push(point),_this2.cachePoint(d[key],point)}},i=0,len=data.length;i=update.x&&x<=update.width+update.x&&y>=update.y&&y<=update.height+update.y){pointFound=point;break}pointFound=null}var values=pointFound&&pointFound.source;return values&&(identifiers=this.getIdentifiersFromData(values,pointFound.rowId)),pointFound?{dimensions:[pointFound.update],id:identifiers,layerId:this.id()}:pointFound}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!0}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return bar_default_config_defaultConfig}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){var config=base_layer_BaseLayer.defaultPolicy(conf,userConf),colorField=config.encoding.color.field,transform=config.transform;return colorField&&(transform.groupBy=colorField),config}}]),BarLayer}(),tick_default_config_defaultConfig={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},interpolate:"linear",encoding:{color:{},x:{},y:{},x0:{},y0:{},radius:{},radius0:{},angle:{},angle0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"".concat("muze","-layer-tick-highlight")},fadeout:{className:"".concat("muze","-layer-tick-fadeout")},selected:{className:"".concat("muze","-layer-tick-selected")}}},tick_renderer_line=Symbols.line,tick_renderer=function(params){var points=params.points,container=params.container,keyFn=params.keyFn,className=params.className,interpolate=params.interpolate,layer=params.layer,mount=renderer_utils_selectElement(container),ticks=mount.selectAll("path").data(points,keyFn),ticksEnter=ticks.enter().append("path"),graphicElems=layer._graphicElems;return mount.attr("class",className||""),ticksEnter.each(function(d){var selection=renderer_utils_selectElement(this),enter=d.enter||{};Object.entries(enter).forEach(function(attr){return!isNaN(attr[1])&&selection.attr(attr[0],attr[1])})}),ticks.exit().remove(),ticks.merge(ticksEnter).each(function(d){var selection=renderer_utils_selectElement(this);graphicElems[d.rowId]=selection;var update=d.update,updateStyle=d.style||{},x0=void 0!==update.x0?update.x0:update.x,y0=void 0!==update.y0?update.y0:update.y,curveInterpolatorFn=pathInterpolators[interpolate],linepath=tick_renderer_line().curve(curveInterpolatorFn).x(function(e){return e[0]}).y(function(e){return e[1]});d.className&&selection.classed(d.className,!0),selection.attr("d",linepath([[update.x,update.y],[x0,y0]])),Object.entries(updateStyle).forEach(function(styleObj){return selection.style(styleObj[0],styleObj[1])})})};__webpack_require__(21);function tick_typeof(obj){return(tick_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function tick_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];for(var layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],radiusAxis=axes.radius,angleAxis=axes.angle,angle0Axis=axes.angle0,measurement=layerInst.measurement(),colorAxis=axes.color,angleV={},angle0V={},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{},layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],_getAxesScales=helpers_getAxesScales(axes),xAxis=_getAxesScales.xAxis,yAxis=_getAxesScales.yAxis,_layerInst$encodingFi=layerInst.encodingFieldsInf(),xField=_layerInst$encodingFi.xField,yField=_layerInst$encodingFi.yField,x0Field=_layerInst$encodingFi.x0Field,y0Field=_layerInst$encodingFi.y0Field,xFieldType=_layerInst$encodingFi.xFieldType,yFieldType=_layerInst$encodingFi.yFieldType,isXDim=xFieldType===dist_datamodel.FieldType.DIMENSION,isYDim=yFieldType===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_config$span=config.span,xSpan=_config$span.x,ySpan=_config$span.y,i=0,len=data.length;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];var layerRegistry=factoryObj._layerRegistry,instances=(layerDef=layerDef instanceof Array?layerDef:[layerDef]).map(function(layerObj){var layerConstructor=layerRegistry[layerObj.mark];return layerConstructor.create.apply(layerConstructor,params)});return 1===instances.length?instances[0]:instances},getLayerClass:function getLayerClass(mark){return factoryObj._layerRegistry[mark]},composeLayers:function composeLayers(layerType,layerDefs){compositeLayers[layerType]=layerDefs},sanitizeLayerConfig:function sanitizeLayerConfig(layerDef){var newConf=mergeRecursive({},layerDef);return sanitizeEncoding(newConf.encoding),newConf}};return factoryObj}();function defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _CONFIG$ROWS$COLUMNS$,DEFAULT_LAYERS=(defaults_defineProperty(_DEFAULT_LAYERS={},layer_types_AREA_LAYER,area_AreaLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_ARC_LAYER,arc_ArcLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_LINE_LAYER,line_LineLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TEXT_LAYER,text_TextLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_POINT_LAYER,point_PointLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TICK_LAYER,tick_TickLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BAR_LAYER,bar_BarLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BASE_LAYER,base_layer_BaseLayer),_DEFAULT_LAYERS),muze_package=__webpack_require__(6);function visual_group_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options=(visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$={},"config",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,ROWS,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,COLUMNS,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_COLOR,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SHAPE,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SIZE,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"detail",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"layers",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"transform",{}),_CONFIG$ROWS$COLUMNS$);function simple_group_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{},innerRadius=config.innerRadius,outerRadius=config.outerRadius;return[innerRadius||0,outerRadius||Math.min(height,width)/2]}(context.width(),context.height()))})},helper_isXandYMeasures=function isXandYMeasures(context){var _context$fields=context.fields(),_map2=src_helper_slicedToArray([_context$fields.x,_context$fields.y].map(function(fields){return fields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE})}),2),xMeasures=_map2[0],yMeasures=_map2[1];return xMeasures&&yMeasures},getKey=function getKey(arr,row){for(var key=row[arr[0]],i=1,len=arr.length;i=0?axisInf[key]:axisArr.length-1;axes[key]&&(axesObj[key]=defaultValue(axes[key][axisIndex]))}}),Object.keys(axesObj).length&&layer.axes(axesObj)})}(axesVal,layers,layerAxisIndexVal),context._lifeCycleManager.notify({client:layers,action:"updated",formalName:"layer"}))}}];function src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var src_props_PROPS=(src_props_defineProperty(_PROPS={},"facetByFields",{}),src_props_defineProperty(_PROPS,"retinalFields",{}),src_props_defineProperty(_PROPS,"parentAlias",{}),src_props_defineProperty(_PROPS,"cachedData",{}),src_props_defineProperty(_PROPS,"detailFields",{}),src_props_defineProperty(_PROPS,"axes",{defaultValue:{x:[],y:[]}}),src_props_defineProperty(_PROPS,"fields",{defaultValue:{x:[],y:[]},sanitization:function sanitization(context,value){return mergeRecursive({x:[],y:[]},value)}}),src_props_defineProperty(_PROPS,"metaInf",{}),src_props_defineProperty(_PROPS,"registry",{}),src_props_defineProperty(_PROPS,"parentContainerInf",{}),src_props_defineProperty(_PROPS,"valueParser",{defaultValue:function defaultValue(val){return val}}),src_props_defineProperty(_PROPS,"coord",{}),_PROPS);function payload_generator_toConsumableArray(arr){return function payload_generator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},payload=config.payload,selectionSet=config.selectionSet,propagationFieldInf=config.propagationFields[action]||{},propagationFields=propagationFieldInf.fields||[],append=propagationFieldInf.append,criteria=payload.criteria,context=instance.context,dataModel=context.cachedData()[0],sourceId=context.id(),sideEfffects=instance.sideEffects(),behaviourEffectMap=instance._behaviourEffectMap,mergedModel=selectionSet.mergedEnter.model,fieldsConfig=dataModel.getFieldsConfig();payload.sourceUnit=sourceId,payload.action=action,payload.sourceCanvas=context.parentAlias();var propagationBehaviour=instance._propagationBehaviourMap[action]||action,propFields=[];null===criteria?propagationData=null:isSimpleObject(criteria)?(propFields=Object.keys(criteria||{}),propagationData=mergedModel?mergedModel.project(propFields):null):(propFields=criteria[0],propagationData=mergedModel?mergedModel.project(propFields):null);var facetByFields=context.facetByFields();if(null!==propagationData&&propagationFields.length){var fields=propagationData.getData().schema.map(function(d){return d.name});propagationData=function getModelWithFacetData(dm,data){var dataObj=dm.getData(),schema1=dataObj.schema,data1=dataObj.data,jsonData=[],derivedSchema=data[0].map(function(d){return{name:"".concat(d),type:dist_datamodel.FieldType.DIMENSION,subtype:d.subtype()}}),dataAtFirstPos=data[1];return data1.forEach(function(d){var tuple={};schema1.forEach(function(obj,i){tuple[obj.name]=d[i]}),derivedSchema.forEach(function(obj,i){tuple[obj.name]=dataAtFirstPos[i]}),jsonData.push(tuple)}),new datamodel_default.a(jsonData,[].concat(data_propagator_toConsumableArray(schema1),data_propagator_toConsumableArray(derivedSchema)))}(propagationData,facetByFields),propFields=append?[].concat(data_propagator_toConsumableArray(fields),data_propagator_toConsumableArray(propagationFields)):propagationFields,propagationData=propagationData.project(propFields)}var propagateInterpolatedValues=!1;propFields.length&&propFields.every(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.MEASURE})&&(propagateInterpolatedValues=!0);var groupId=context.parentAlias();payload.action=action;var behaviourInstance=instance._actions.behavioural[propagationBehaviour],isMutableAction=!!behaviourInstance&&behaviourInstance.constructor.mutates(),filterFn=function filterFn(entry,propagationConf){var effects=behaviourEffectMap[entry.config.action],mutates=!entry.config.groupId||effects.some(function(d){return sideEfffects[d.name||d].constructor.mutates()});return entry.config.groupId!==propagationConf.groupId&&mutates},sourceBehaviour=instance._actions.behavioural[action],mutates=!!sourceBehaviour&&sourceBehaviour.constructor.mutates(),propConfig={payload:payload,action:action,criteria:propagationData,isMutableAction:mutates,propagateInterpolatedValues:propagateInterpolatedValues,groupId:groupId,sourceId:mutates?groupId:sourceId,filterFn:filterFn,enabled:function enabled(propConf,firebolt){return action===propagationBehaviour||propConf.payload.sourceCanvas===firebolt.context.parentAlias()}};dataModel.propagate(propagationData,propConfig,!0),action!==propagationBehaviour&&(propConfig={payload:payload,sourceId:isMutableAction?groupId:sourceId,criteria:propagationData,isMutableAction:isMutableAction,propagateInterpolatedValues:propagateInterpolatedValues,action:propagationBehaviour,groupId:groupId,applyOnSource:action===propagationBehaviour,enabled:function enabled(propConf,firebolt){return propConf.payload.sourceCanvas!==firebolt.context.parentAlias()},filterFn:filterFn},dataModel.propagate(propagationData,propConfig,!0,{filterImmutableAction:function filterImmutableAction(actionInf,propInf){return actionInf.groupId!==propInf.groupId}}))};function src_firebolt_typeof(obj){return(src_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function src_firebolt_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},points=[],parsedIdentifiers=identifiers;if(null===identifiers)return[];var layers=this.layers(),len=layers.length;isSimpleObject(identifiers)&&(parsedIdentifiers=[Object.keys(identifiers)],parsedIdentifiers=[].concat(visual_unit_toConsumableArray(parsedIdentifiers),visual_unit_toConsumableArray(function transposeArray(arr){return arr[0].map(function(col,i){return arr.map(function(row){return row[i]})})}(Object.values(identifiers)))));for(var i=0;i0&&(dimensionArr[0]=[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),dimensionArr[1]=[]),{fields:dimensionArr.map(function(list,i){return 1===i?measureArr[i].concat(dimensionArr[i]):dimensionArr[i].concat(measureArr[i])}),dimensions:[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),measures:[].concat(field_sanitizer_toConsumableArray(measureArr[0]),field_sanitizer_toConsumableArray(measureArr[1])),temporal:[].concat(field_sanitizer_toConsumableArray(temporalArr[0]),field_sanitizer_toConsumableArray(temporalArr[1])),categorical:[].concat(field_sanitizer_toConsumableArray(categoricalArr[0]),field_sanitizer_toConsumableArray(categoricalArr[1]))}}(norFields,fields)}),2),rowsInfo=_map2[0],columnsInfo=_map2[1],rows=rowsInfo.fields,rowDimensions=rowsInfo.dimensions,rowMeasures=rowsInfo.measures,rowTemporalFields=rowsInfo.temporal,rowCategoricalFields=rowsInfo.categorical,columns=columnsInfo.fields,columnDimensions=columnsInfo.dimensions,columnMeasures=columnsInfo.measures;return{rows:rows,rowDimensions:rowDimensions,rowMeasures:rowMeasures,rowTemporalFields:rowTemporalFields,rowCategoricalFields:rowCategoricalFields,columns:columns,columnTemporalFields:columnsInfo.temporal,columnCategoricalFields:columnsInfo.categorical,columnDimensions:columnDimensions,columnMeasures:columnMeasures}};function visual_encoder_slicedToArray(arr,i){return function visual_encoder_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function visual_encoder_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function visual_encoder_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function visual_encoder_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},fields=arguments.length>1?arguments[1]:void 0,_getHeaderAxisFrom2=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(ROW,fields.rows,axisFrom),2),rowHeader=_getHeaderAxisFrom2[0],rowAxis=_getHeaderAxisFrom2[1],_getHeaderAxisFrom4=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom("column",fields.columns,axisFrom),2),colHeader=_getHeaderAxisFrom4[0],colAxis=_getHeaderAxisFrom4[1];return this.axisFrom({row:rowAxis,column:colAxis}),this.headerFrom({row:rowHeader,column:colHeader}),this}}]),VisualEncoder}(),scaleMaps={linear:continous_axis_ContinousAxis,band:band_axis_BandAxis,temporal:time_axis_TimeAxis,size:size_axis_SizeAxis,color:color_axis_ColorAxis,shape:shape_axis_ShapeAxis},data_type_scale_map_dataTypeScaleMap={dimension:scale_type_namespaceObject.BAND,categorical:scale_type_namespaceObject.BAND,temporal:scale_type_namespaceObject.TIME,measure:scale_type_namespaceObject.LINEAR,continuous:scale_type_namespaceObject.LINEAR};function encoder_helper_toConsumableArray(arr){return function encoder_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?axesCreators.position="both":axesCreators.position=_this.axisFrom()[type],geomCellAxes[axis]=encoder_helper_generateAxisFromMap(axis,axisFields[i],axesCreators,{groupAxes:axis===X?xAxes:yAxes,valueParser:resolver.valueParser()},indices,facetFields)}),geomCell.axes(geomCellAxes),geomCellAxes}},{key:"unionUnitDomains",value:function unionUnitDomains(context){for(var store=context.store(),resolver=context.resolver(),units=resolver.units(),domains={0:{},1:{}},config=context.config(),fieldsObj={0:{},1:{}},_loop=function _loop(rIdx,len){for(var unitsArr=units[rIdx],_loop2=function _loop2(cIdx,len2){var unit=unitsArr[cIdx],axisFields=unit.fields(),encodingDomains=unit.getDataDomain();["x","y"].forEach(function(axisType,axisTypeIndex){axisFields[axisType].forEach(function(field,axisIndex){var key=axisTypeIndex?"".concat(rIdx,"0").concat(axisIndex):"0".concat(cIdx).concat(axisIndex),dom=encodingDomains[axisType],typeOfField=field.subtype();fieldsObj[axisTypeIndex][key]=field,dom&&0!==Object.keys(dom).length&&(domains[axisTypeIndex][key]=unionDomain([domains[axisTypeIndex]&&domains[axisTypeIndex][key]||[],dom["".concat(field)]],typeOfField))})})},cIdx=0,len2=unitsArr.length;cIdx1&&typeOfAxis===scale_type_namespaceObject.LINEAR&&axes[0].config().alignZeroLine)axes.forEach(function(axis,i){key=axisType?"".concat(idx,"0").concat(i):"0".concat(idx).concat(i),domain=domains[axisType][key],min[i]=domain[0],max[i]=domain[1]}),adjustedDomain=function getAdjustedDomain(max,min){var y1ratio=max[0]/(max[0]-min[0]),y2ratio=max[1]/(max[1]-min[1]),allSameSign=!1;return min[0]>0&&min[1]>0&&min[1]>0&&max[1]>0&&(allSameSign=!0,min[0]=0,min[1]=0),min[0]<0&&min[1]<0&&min[1]<0&&max[1]<0&&(allSameSign=!0,max[0]=0,max[1]=0),allSameSign||y1ratio===y2ratio||(y1ratiocounter)for(var _i=counter;_i-1&&(projections=[[_facet,_facet]],primaryFacets.splice(_existIndex,1)),secondaryFacets.splice(0,1)}else{var axisFromIndex=primaryFacets.length-1,facet=primaryFacets[axisFromIndex];projections=[[facet]];var existIndex=getIndex(secondaryFacets,facet);existIndex>-1&&(projections=[[facet,facet]],secondaryFacets.splice(existIndex,1)),primaryFacets.splice(axisFromIndex,1)}return{facets:facets=(facets=[].concat(primaryFacets,secondaryFacets)).filter(function(el,index,self){return index===self.findIndex(function(t){return t.toString()===el.toString()})}),projections:projections}}},{key:"fieldSanitizer",value:function fieldSanitizer(datamodel,config){return cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,datamodel,config)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(dataModels,encoding){var groupedModel=dataModels.groupedModel,domains={};for(var key in encoding)if({}.hasOwnProperty.call(encoding,key)){var encodingObj=encoding[key],field=encodingObj.field;if(!encodingObj.domain&&field){var domain=retriveDomainFromData(groupedModel,field);domains[field]=domain}}return domains}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer,i){var def=src_layer_factory.sanitizeLayerConfig(layer);def.order=i,serializedLayers.push(def)}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),layerConfig.push(config)}),layerConfig}},{key:"getLayerConfig",value:function getLayerConfig(fields,userLayerConfig,retinalConfig){var layerConfig=[],columnFields=fields.columnFields,rowFields=fields.rowFields;return columnFields.forEach(function(colField){var colFieldName=colField.toString();rowFields.forEach(function(rowField){var configs=[],rowFieldName=rowField.toString(),encoding={x:{field:colFieldName},y:{field:rowFieldName}},rowFieldType=rowField.subtype(),mark=function getDefaultMark(colFieldType,rowFieldType){return"categorical"===colFieldType||"categorical"===rowFieldType?"bar":"temporal"===colFieldType||"temporal"===rowFieldType?"line":"point"}(colField.subtype(),rowFieldType),defConfigs=[{mark:mark,def:{mark:mark,encoding:encoding}}],layerConfigs=function getLayerConfFromFields(colFields,rowFields,userLayerConfig){return userLayerConfig.filter(function(conf){var _ref,_ref2,_ref3,userConf=conf instanceof Array?conf:[conf],encodingArr=(_ref=[]).concat.apply(_ref,encoder_helper_toConsumableArray(userConf.map(function(d){return d.encoding}).filter(function(d){return void 0!==d})));if(!encodingArr.length)return!0;var xFields=(_ref2=[]).concat.apply(_ref2,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.x&&d.x.field,d.x0&&d.x0.field]}))).filter(function(d){return void 0!==d&&null!==d}),yFields=(_ref3=[]).concat.apply(_ref3,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.y&&d.y.field,d.y0&&d.y0.field]}))).filter(function(d){return void 0!==d&&null!==d});if(!xFields.length&&!yFields.length)return!0;var colFieldExist=!!xFields.length&&xFields.every(function(d){return-1!==colFields.indexOf(d)}),rowFieldExist=!!yFields.length&&yFields.every(function(d){return-1!==rowFields.indexOf(d)});return xFields.length&&yFields.length?colFieldExist&&rowFieldExist:colFieldExist||rowFieldExist})}(colField.getMembers(),rowField.getMembers(),userLayerConfig||[]);configs=layerConfigs.length?layerConfigs.map(function(layerConf){var mergedLayerConf=mergeRecursive(mergeRecursive({},defConfigs[0].def),layerConf),serializedLayerConfig=src_layer_factory.getSerializedConf(mergedLayerConf.mark,mergedLayerConf);return{mark:mergedLayerConf.mark,order:mergedLayerConf.order,def:serializedLayerConfig}}):defConfigs,layerConfig.push.apply(layerConfig,cartesian_encoder_toConsumableArray(configs))})}),this.sanitizeLayerConfig(retinalConfig,layerConfig)}}],[{key:"type",value:function type(){return cartesian_encoder_CARTESIAN}}]),CartesianEncoder}();function polar_encoder_typeof(obj){return(polar_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function polar_encoder_toConsumableArray(arr){return function polar_encoder_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);icounter)for(var _i=counter;_i0&&(config=mergeRecursive(config,userLayerConfig[0])),layerConfig.push(config)}),0===layerConfig.length&&(layerConfig=userLayerConfig);var sanitizedConfig=this.sanitizeLayerConfig(retinalConfig,layerConfig);return this.layers(sanitizedConfig),sanitizedConfig}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer){var def=src_layer_factory.getSerializedConf(layer.mark,layer);serializedLayers.push({mark:layer.mark,def:def})}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),def.forEach(function(conf){var encoding=conf.encoding||(conf.encoding={});!encoding.angle&&(encoding.angle={});var angleField=getObjProp(encoding.angle,"field"),angle0Field=getObjProp(encoding.angle0,"field");angleField||Object.assign(encoding.angle,{field:encodingConfigs.color&&encodingConfigs.color.field}),angle0Field||(!encoding.angle0&&(encoding.angle0={}),Object.assign(encoding.angle0,{field:encoding.angle.field}))}),layerConfig.push(config)}),layerConfig}}],[{key:"type",value:function type(){return polar_encoder_POLAR}}]),PolarEncoder}();function retinal_encoder_typeof(obj){return(retinal_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function retinal_encoder_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},axisType=axesCreators.axisType,fieldsConfig=axesCreators.fieldsConfig,field=fieldProps.field,axis=[],Cls=scaleMaps[axisType];return fieldProps.type=fieldProps.type?fieldProps.type:group_utils_getAxisType(fieldsConfig,field||null),axis.push(new Cls(fieldProps)),axis}({axisType:axisType,fieldsConfig:fieldsConfig},config[axisType])}),newAxes}},{key:"setCommonDomain",value:function setCommonDomain(context){var domains=context.domains,axes=context.axes,encoding=context.encoding;return Object.entries(encoding).forEach(function(enc){if(enc[1]&&enc[1].field){var encType=enc[0],field=enc[1].field;field&&axes[encType].forEach(function(axis){var domain=domains[field];!enc[1].domain&&axis.updateDomain(domain)})}}),axes}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),group_utils_this=void 0;function group_utils_slicedToArray(arr,i){return function group_utils_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function group_utils_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function group_utils_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function group_utils_toConsumableArray(arr){return function group_utils_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];return"".concat(axisName,"-axis-").concat(params.join("-"))},group_utils_headerCreator=function headerCreator(fields,fieldHeaders,TextCell,_ref2){var classPrefix=_ref2.classPrefix,labelManager=_ref2.labelManager;return fields.length>0?fields[0].map(function(cell,i){return new TextCell({type:"header",className:"".concat(classPrefix,"-grid-headers")},{labelManager:labelManager}).source(function getHeaderText(headers,index,rowLength){var header="";if(index===rowLength-1&&headers.length>rowLength){for(var i=index;i1||right.length>1)&&(borders.top=!0,borders.bottom=!0),borders}(leftRows,rightRows),showColBorders=function getColumnsBorders(top,bottom){var borders={left:!1,right:!1};return(top.length||bottom.length)&&(top[0]&&top[0].length>1||bottom[0]&&bottom[0].length>1)&&(borders.left=!0,borders.right=!0),borders}(topColumns,bottomColumns),showValueBorders=function getValueBorders(rows,columns){var borders={top:!0,left:!0,bottom:!0,right:!0},borderTypeRow=[constants_LEFT,constants_RIGHT],borderTypeCol=["top","bottom"];return rows.forEach(function(e,i){e[0]&&e[0].length?borders[borderTypeRow[i]]=!0:borders[borderTypeRow[i]]=!1}),columns.forEach(function(e,i){e.length?borders[borderTypeCol[i]]=!0:borders[borderTypeCol[i]]=!1}),borders}([leftRows,rightRows],[topColumns,bottomColumns]),valueMatrix.length>1&&(showValueBorders.top=!0,showValueBorders.bottom=!0),valueMatrix.length&&valueMatrix[0].length>1&&(showValueBorders.left=!0,showValueBorders.right=!0),{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}},group_utils_sortFacetFields=function sortFacetFields(facets,keys,config){var schema=[],sortInfo=[],sortConfig=config.sort;return facets.forEach(function(facet){var name="".concat(facet),facetSortConfig=sortConfig[name];facetSortConfig?sortInfo.push([name,facetSortConfig]):sortInfo.push([name,null]),schema.push(facet.getSchemaDef())}),new datamodel_default.a([[]].concat(group_utils_toConsumableArray(keys)),schema).getData({sort:sortInfo}).data};function matrix_model_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function matrix_model_objectSpread(target){for(var i=1;i0?formattedColKeys[0].map(function(col,i){return formattedColKeys.map(function(row){return row[i]})}):formattedColKeys}};function cell_creator_slicedToArray(arr,i){return function cell_creator_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function cell_creator_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function cell_creator_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cell_creator_toConsumableArray(arr){return function cell_creator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?rowProjections.length:1):(keys=columnKeys,length=colProjections.length>0?colProjections.length:1),keys=keys.map(function(arr){return arr.map(function(val){return resolver.valueParser()(val)})}),section.length&&headerFrom===type&&axis&&keys.length){var hContext={axis:axis,length:length,type:type},headers=[];index<2?(hContext.keys=keys,hContext.facet=facet.rows,headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)):(hContext.facet=facet.columns,hContext.keys=keys[0].map(function(key,i){return keys.map(function(e){return e[i]})}),headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)),selectionObj["".concat(type,"Headers")]=headers}else selectionObj["".concat(type,"Headers")]=null}),selectionObj},cell_creator_getAxisFields=function getAxisFields(projections){var fieldHolder=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return projections.reduce(function(acc,item){return[].concat(cell_creator_toConsumableArray(acc),cell_creator_toConsumableArray(item.reduce(function(ac,field){return field instanceof simple_var_SimpleVariable?[].concat(cell_creator_toConsumableArray(ac),[field.oneVar()]):ac},[])))},fieldHolder)},cell_creator_transformDataModel=function transformDataModel(dataModel,config,resolver){var groupedModel,fieldsConfig=dataModel.getFieldsConfig(),resolvedData=resolver.data(),groupBy=config.groupBy,suppliedLayers=config.suppliedLayers,facetsAndProjections=config.facetsAndProjections;if(resolvedData instanceof datamodel_default.a&&resolvedData.dispose(),groupedModel=dataModel.project(dataModel.getSchema().map(function(d){return d.name})),resolver.data(groupedModel),!groupBy.disabled){var allFields=function extractFields(facetsAndProjections,layerFields){var _ref6,fields=Object.values(facetsAndProjections).map(function(arr){var _ref4,_ref5,flattenArray=(_ref4=[]).concat.apply(_ref4,group_utils_toConsumableArray(arr));return(_ref5=[]).concat.apply(_ref5,group_utils_toConsumableArray(flattenArray.map(function(field){return field instanceof variable_Variable?field.getMembers():field})))});return(_ref6=[]).concat.apply(_ref6,group_utils_toConsumableArray(fields).concat(group_utils_toConsumableArray(layerFields)))}(facetsAndProjections,function getFieldsFromSuppliedLayers(suppliedLayerConfig,fieldsConfig){var _ref3,fields=[],encodingArr=suppliedLayerConfig.map(function(conf){return conf.encoding||{}});return fields=(fields=[].concat(group_utils_toConsumableArray(fields),[(_ref3=[]).concat.apply(_ref3,group_utils_toConsumableArray(encodingArr.map(function(enc){return Object.values(enc).map(function(d){return d.field})})))])).filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION})}(suppliedLayers,groupedModel.getFieldsConfig())),dimensions=allFields.filter(function(field){return getObjProp(fieldsConfig,field,"def","type")===dist_datamodel.FieldType.DIMENSION}),aggregationFns=groupBy.measures,measureNames=Object.keys(groupedModel.getFieldspace().getMeasure()),nearestAggFns=common_utils_retrieveNearestGroupByReducers.apply(void 0,[groupedModel].concat(cell_creator_toConsumableArray(measureNames))),resolvedAggFns=mergeRecursive(nearestAggFns,aggregationFns);groupedModel=groupedModel.groupBy(dimensions.length?dimensions:[""],resolvedAggFns).project(allFields)}return groupedModel=function sortDmTemporalFields(resolver,datamodel){var axisFields=[],projections=resolver.projections();axisFields=cell_creator_getAxisFields(projections.rowProjections,cell_creator_getAxisFields(projections.colProjections));var fieldConfig=datamodel.getFieldsConfig(),temporalFields=axisFields.reduce(function(acc,field){return"temporal"===fieldConfig[field].def.subtype?[].concat(cell_creator_toConsumableArray(acc),[[field]]):acc},[]);return temporalFields.length?datamodel.sort(temporalFields,{saveChild:!0}):datamodel}(resolver,groupedModel)},cell_creator_computeMatrices=function computeMatrices(context,config){var resolver=context.resolver,datamodel=context.datamodel,componentRegistry=context.componentRegistry,encoders=context.encoders,globalConfig=config.globalConfig,selection=config.selection,transform=config.transform,groupBy=globalConfig.autoGroupBy,labelManager=resolver.dependencies().smartlabel,fieldMap=datamodel.getFieldsConfig(),layerConfig=resolver.layerConfig(),registry=resolver.registry(),normalizedRows=resolver.horizontalAxis().fields,normalizedColumns=resolver.verticalAxis().fields,otherEncodings=resolver.optionalProjections(config,layerConfig),facetsAndProjections=resolver.getAllFields(),matrixGnContext={normalizedColumns:normalizedColumns,normalizedRows:normalizedRows,facetsAndProjections:facetsAndProjections,layers:layerConfig,fieldMap:fieldMap,otherEncodings:otherEncodings,encoders:encoders,facet:globalConfig.facet||{},axisFrom:globalConfig.axisFrom||{},selection:selection,resolver:resolver},cells={GeomCell:resolver.getCellDef(registry.GeomCell),AxisCell:resolver.getCellDef(registry.AxisCell),BlankCell:resolver.getCellDef(registry.BlankCell),TextCell:resolver.getCellDef(registry.TextCell)},isRowSizeEqual=group_utils_isDistributionEqual(normalizedRows),isColumnSizeEqual=group_utils_isDistributionEqual(normalizedColumns);resolver.colCells({}),resolver.rowCells({}),resolver.datamodelTransform(transform||{}),resolver.resetSimpleAxes();var newCacheMap={exitCellMap:resolver.cacheMaps().entryCellMap,entryCellMap:new Map};resolver.cacheMaps(newCacheMap);var valueCellContext={config:globalConfig,suppliedLayers:encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),resolver:resolver,cell:cells.GeomCell,encoder:encoders.simpleEncoder,newCacheMap:newCacheMap,detailFields:config.detail,retinalConfig:{color:config.color,size:config.size,shape:config.shape}},groupedModel=cell_creator_transformDataModel(datamodel,{facetsAndProjections:facetsAndProjections,suppliedLayers:valueCellContext.suppliedLayers,groupBy:groupBy},resolver),cellCreator=resolver.valueCellsCreator(valueCellContext),valueMatrixInfo=getMatrixModel(groupedModel,facetsAndProjections,cellCreator,globalConfig);!function removeExitCells(resolver){var _ref7,exitCells=resolver.cacheMaps().exitCellMap,store=resolver.store(),qualifiedStateProps=(_ref7=[]).concat.apply(_ref7,group_utils_toConsumableArray(visual_unit_VisualUnit.getQualifiedStateProps()).concat(group_utils_toConsumableArray(base_layer_BaseLayer.getQualifiedStateProps())));store.lockCommits(qualifiedStateProps),exitCells.forEach(function(placeholder){placeholder.remove()}),store.unlockCommits(qualifiedStateProps)}(resolver),resolver.cacheMaps().exitCellMap.clear(),resolver.valueMatrix(valueMatrixInfo.matrix);var _mutateAxesFromMap=function mutateAxesFromMap(cacheMaps,axes){var xAxes=null,yAxes=null,xAxesMap=cacheMaps.xAxesMap,yAxesMap=cacheMaps.yAxesMap,xAxisSet=axes.x,yAxisSet=axes.y;return xAxisSet&&xAxisSet.forEach(function(axisId){var xAxis=xAxesMap.get(axisId);(xAxes=xAxes||[]).push(xAxis)}),yAxisSet&&yAxisSet.forEach(function(axisId){var yAxis=yAxesMap.get(axisId);(yAxes=yAxes||[]).push(yAxis)}),{xAxes:xAxes,yAxes:yAxes}}(resolver.cacheMaps(),resolver.axes()),xAxes=_mutateAxesFromMap.xAxes,yAxes=_mutateAxesFromMap.yAxes;resolver.axes({x:xAxes,y:yAxes}),resolver.createUnits(componentRegistry,config);var _generateMatrices=function generateMatrices(context,matrices,cells,labelManager){var unitHeight=context.unitHeight,unitWidth=context.unitWidth,facetsAndProjections=context.facetsAndProjections,normalizedRows=context.normalizedRows,normalizedColumns=context.normalizedColumns,selection=context.selection,axisFrom=context.axisFrom,facet=context.facet,encoders=context.encoders,resolver=context.resolver,selectionObj=cell_creator_generatePlaceholders({fields:{rows:normalizedRows,columns:normalizedColumns},matrices:matrices,facetsAndProjections:facetsAndProjections,selection:selection,axisFrom:axisFrom,facet:facet,encoders:encoders,resolver:resolver},cells,labelManager),columnsPrimary=selectionObj.columnsPrimary,columnsSecondary=selectionObj.columnsSecondary,rowsPrimary=selectionObj.rowsPrimary,rowsSecondary=selectionObj.rowsSecondary,leftHeaders=selectionObj.leftHeaders,topHeaders=selectionObj.topHeaders,bottomHeaders=selectionObj.bottomHeaders,rightHeaders=selectionObj.rightHeaders,_map2=cell_creator_slicedToArray([rowsPrimary,rowsSecondary,columnsPrimary,columnsSecondary].map(function(d){return d?d.getObjects():[]}),4),rowPrime=_map2[0],rowSec=_map2[1],colPrime=_map2[2],colSec=_map2[3],_map4=cell_creator_slicedToArray([leftHeaders,rightHeaders].map(function(e){return e?e.getObjects().map(function(f){return f.getObjects()}):[]}),2),leftFacets=_map4[0],rightFacets=_map4[1],rowPriority=rowSec.length?1:-1;rowPrime.length&&rowPriority++;var colPriority=colSec.length?1:-1;colPrime.length&&colPriority++;var leftMatrix=leftFacets.length?leftFacets.map(function(d,i){return rowPrime[i]=rowPrime[i]?[rowPrime[i]]:[],[].concat(cell_creator_toConsumableArray(d),cell_creator_toConsumableArray(rowPrime[i]))}):rowPrime?rowPrime.map(function(d){return[d]}):[],rightMatrix=rowSec.length?rowSec.map(function(d,i){return[d].concat(cell_creator_toConsumableArray(rightFacets[i]||[]))}):rightFacets.length?rightFacets.map(function(d){return cell_creator_toConsumableArray(d)}):[],topMatrix=[];topHeaders&&topHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){topMatrix[i]=topMatrix[i]||[],topMatrix[i].push(x)})});colPrime.length&&topMatrix.push(colPrime);var bottomMatrix=[];colSec.length&&bottomMatrix.push(colSec);var currentBottomLength=bottomMatrix.length;bottomHeaders&&bottomHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){bottomMatrix[i+currentBottomLength]=bottomMatrix[i+currentBottomLength]||[],bottomMatrix[i+currentBottomLength].push(x)})});if(!leftMatrix.length&&!rightMatrix.length){var cell=new cells.BlankCell;cell.setAvailableSpace(unitWidth,unitHeight),leftMatrix=[[cell]]}if(!(topMatrix.length||bottomMatrix.length&&bottomMatrix[0].length)){var _cell=new cells.BlankCell;_cell.setAvailableSpace(unitWidth,unitHeight),bottomMatrix=[[_cell]]}return{rows:[leftMatrix,rightMatrix],columns:[topMatrix,bottomMatrix],selectionObj:selectionObj,colPriority:colPriority,rowPriority:rowPriority}}(matrixGnContext,{valuesMatrix:valueMatrixInfo,axesMatrix:resolver.axes()},cells,labelManager),rows=_generateMatrices.rows,columns=_generateMatrices.columns,selectionObj=_generateMatrices.selectionObj,rowPriority=_generateMatrices.rowPriority,colPriority=_generateMatrices.colPriority;return resolver.rowMatrix(rows),resolver.columnMatrix(columns),{rows:resolver.rowMatrix(),columns:resolver.columnMatrix(),values:resolver.valueMatrix(),isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,priority:{row:rowPriority,col:colPriority},selection:selectionObj,dataModels:{groupedModel:groupedModel,parentModel:datamodel}}},RESOLVER_PROPS={dependencies:{},units:{},datamodelTransform:{},layerConfig:{},matrixLayers:{},colCells:{},rowCells:{},rowMatrix:{},columnMatrix:{},valueMatrix:{},encoder:{},valueParser:{},data:{}};function matrix_resolver_slicedToArray(arr,i){return function matrix_resolver_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function matrix_resolver_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function matrix_resolver_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function matrix_resolver_toConsumableArray(arr){return function matrix_resolver_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?leftRows[0].map(blankCellCreator):[],right:rightRows.length>0?rightRows[0].map(blankCellCreator):[]},_map2=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return topCols.map(function(col,i){return i===topCols.length-1?headers[type]:footers[type]})}),2),topLeft=_map2[0],topRight=_map2[1];if(0===topCols.length){var _map4=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return bottomCols.map(function(col,i){return 0===i?headers[type]:footers[type]})}),2);bottomLeft=_map4[0],bottomRight=_map4[1]}else bottomLeft=bottomCols.map(function(){return leftRows.length>0?leftRows[0].map(blankCellCreator):[]}),bottomRight=bottomCols.map(function(){return rightRows.length>0?rightRows[0].map(blankCellCreator):[]});return lifeCycleManager.notify({client:[topLeft,topRight,bottomLeft,bottomRight],action:"initialized",formalName:"facet-headers"}),{topLeft:topLeft,topRight:topRight,bottomLeft:bottomLeft,bottomRight:bottomRight}}},{key:"getMatrices",value:function getMatrices(datamodel,config,componentRegistry,encoders){return cell_creator_computeMatrices({datamodel:datamodel,componentRegistry:componentRegistry,encoders:encoders,resolver:this},config)}},{key:"store",value:function store(){return arguments.length?(this._store=arguments.length<=0?void 0:arguments[0],this):this._store}},{key:"clear",value:function clear(){var cacheMaps=this._cacheMaps;for(var key in cacheMaps)cacheMaps[key].clear()}}]),MatrixResolver}();function value_matrix_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{},context=firebolt.context,type=context.constructor.type(),payload=config.payload,data=context.data(),metaData=context.metaData(),fieldType=metaData.getData().schema[0].type,propPayload={},sourceId=context._id;propPayload.action=action_behaviour_map_propagationBehaviourMap[action]||action,propPayload.sideEffects=propagationSideEffects[action],propPayload.sourceCanvas=context.canvasAlias();var isMutableAction=firebolt._actions.behavioural[propPayload.action].constructor.mutates();if(null===payload.criteria)propagationData=null;else{var entrySet=selectionSet.mergedEnter,values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.rawVal});if("step"===type||"discrete"===type&&"measure"===fieldType){var field=Object.keys(payload.criteria||{})[0];propagationData=(values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.range})).length?metaData.select(function(fields){for(var check=!1,i=0;i=values[i][0]&&fields[field].internalValue<=values[i][1]);i++);return check},{saveChild:!1}):null}else"gradient"===type?propagationData=getDataModelFromRange(metaData,payload.criteria):values.length?propagationData=function assembleModelFromIdentifiers(model,identifiers){var data,schema=[],fieldMap=model.getFieldsConfig();return identifiers.length?function(){for(var fields=identifiers[0],len=fields.length,i=0;i=drawingInfMeasure+offset?[axisScale.invert(drawingInfMeasure+offset-selectionBoxMeasure),axisScale.invert(drawingInfMeasure+offset)]:subjectStartPoint-offset1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-fadeout"),!0),classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)},brighten:function brighten(set){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-brighten"),!0),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-brighten"),!1)}}};function legend_highlighter_typeof(obj){return(legend_highlighter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_highlighter_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[options.strategy||this._strategy])(selectionSet,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),legend_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(context,value){var measurement=mergeRecursive(context._measurement,value);return["padding","border","margin"].forEach(function(space){measurement[space]=Math.min(measurement[space]>0?measurement[space]:0,.1*measurement.maxWidth,.1*measurement.maxHeight)}),measurement}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.resetLogicalSpace(),context.store().commit("range",value),value}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(context,value){return mergeRecursive(context._title||{},value)}},labelManager:{},minTickDistance:{},valueParser:{defaultValue:function defaultValue(val){return val}}},ALIGN_HORIZONTAL="horizontal",ALIGN_VERTICAL="vertical",DEFAULT_MEASUREMENT={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},LEGEND_TITLE={text:"",orientation:function orientation(pos){return"left"===pos||"right"===pos?"left":"center"}},legend_defaults_DEFAULT_CONFIG={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(val,i,data,context){return context.valueParser()(val)}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},defaults_ICON_MAP=function ICON_MAP(icon){return icon&&"string"==typeof icon?common_utils_getSymbol(icon):icon};function legend_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legend_helper_getScaleInfo=function getScaleInfo(scale){var scaleType=scale.constructor.type();return{scaleType:scaleType,domain:scale.uniqueValues(),steps:scale.config().stops||1,scaleFn:SCALE_FUNCTIONS[scaleType]}},legend_helper_getInterpolatedArrayData=function getInterpolatedArrayData(domainForLegend,scaleParams){var requiredWidth,requiredHeight,upperBound=domainForLegend[domainForLegend.length-1],minTickDiff=Math.ceil(domainForLegend[1]-domainForLegend[0]),maxTickDiff=Math.ceil(upperBound-domainForLegend[0]),alignment=scaleParams.alignment,smartLabelCalc=scaleParams.smartLabel,availableSpace=scaleParams.measures,minimumTickSize=scaleParams.minTickDistance,_smartLabelCalc$getOr=smartLabelCalc.getOriSize(upperBound),tickDimHeight=_smartLabelCalc$getOr.height,tickDimWidth=_smartLabelCalc$getOr.width;return Number.isInteger(upperBound)||(upperBound=upperBound.toFixed(2)),minTickDiff=minTickDiff<1?1:minTickDiff,requiredWidth=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*(tickDimWidth+minimumTickSize.width),requiredWidth-=Math.abs(maxTickDiff),requiredHeight=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*tickDimHeight,requiredHeight-=Math.abs(maxTickDiff),domainForLegend=function getcomputedArray(computationhelper,requiredMeasure,availableMeasure,domainForLegend){var currentTickValue,nextTickValue,upperBound=domainForLegend[domainForLegend.length-1],param=computationhelper.measureParam,smartLabelCalc=computationhelper.smartLabelCalc,pixelPerTick=availableMeasure[param]/upperBound;if(availableMeasure[param]>=requiredMeasure[param])return domainForLegend;currentTickValue=smartLabelCalc.getOriSize(domainForLegend[0])[param];for(var i=1;i0?titleSpace.height+effPadding:0,titleWidth=titleSpace.width+effPadding,labelSpaces=this.getLabelSpaces(effPadding,align),_computeItemSpaces=function computeItemSpaces(config,measures,data){var totalHeight=0,totalWidth=0,maxItemSpaces={width:0,height:0},effPadding=measures.effPadding,titleWidth=measures.titleWidth,labelSpaces=measures.labelSpaces,titleHeight=measures.titleHeight,maxWidth=measures.maxWidth,item=config.item,align=config.align,icon=item.icon,textOrientation=item.text.orientation,itemSpaces=[],iconSpaces=[],maxIconWidth=0;return labelSpaces.forEach(function(labelSpace,i){var itemSpace={width:0,height:0},iconSpace={width:0,height:0},datum=data[i]||{};"left"===textOrientation||"right"===textOrientation?(labelSpace.width+=effPadding,iconSpace.width=(datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),itemSpace.width=labelSpace.width+maxIconWidth,labelSpace.height=Math.max(labelSpace.height,icon.height)+effPadding,iconSpace.height=labelSpace.height,itemSpace.height=labelSpace.height):(labelSpace.width=Math.max(labelSpace.width,datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,iconSpace.width=labelSpace.width,itemSpace.width=labelSpace.width,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),labelSpace.height+=effPadding,iconSpace.height=icon.height+effPadding,itemSpace.height=labelSpace.height+iconSpace.height),"horizontal"===align?totalHeight=Math.max(totalHeight,itemSpace.height):(totalHeight+=itemSpace.height,totalWidth=Math.max(totalWidth,itemSpace.width,titleWidth)),maxItemSpaces={width:Math.max(itemSpace.width,maxItemSpaces.width),height:Math.max(itemSpace.height,maxItemSpaces.height)},itemSpaces.push(itemSpace),iconSpaces.push(iconSpace)}),itemSpaces.forEach(function(itemSpace,i){if("horizontal"===align)itemSpace.height=totalHeight,iconSpaces[i].width=maxIconWidth,"left"===textOrientation||"right"===textOrientation?(labelSpaces[i].height=totalHeight,iconSpaces[i].height=totalHeight,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth):(labelSpaces[i].width=maxIconWidth,itemSpaces[i].width=maxIconWidth,labelSpaces[i].width=maxIconWidth),totalWidth=Math.max(totalWidth+itemSpaces[i].width);else if(itemSpace.width=Math.max(totalWidth,maxWidth),"top"===textOrientation||"bottom"===textOrientation)labelSpaces[i].width=totalWidth,iconSpaces[i].width=totalWidth,maxIconWidth=totalWidth;else{var labelWidth=labelSpaces[i].width,newLabelWidth=maxItemSpaces.width-maxIconWidth;iconSpaces[i].width=maxIconWidth,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth,labelSpaces[i].width=Math.max(labelWidth,newLabelWidth),totalWidth=Math.max(totalWidth,itemSpace.width)}}),totalWidth=Math.ceil(Math.max(totalWidth,titleWidth))+effPadding,totalHeight+=titleHeight+effPadding,{totalHeight:totalHeight=Math.ceil(totalHeight),totalWidth:totalWidth,itemSpaces:itemSpaces,iconSpaces:iconSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth}}(this.config(),{effPadding:effPadding,titleWidth:titleWidth,labelSpaces:labelSpaces,titleHeight:titleHeight,maxWidth:maxWidth,maxHeight:maxHeight},this.data()),totalHeight=_computeItemSpaces.totalHeight,totalWidth=_computeItemSpaces.totalWidth,itemSpaces=_computeItemSpaces.itemSpaces,iconSpaces=_computeItemSpaces.iconSpaces,maxItemSpaces=_computeItemSpaces.maxItemSpaces,maxIconWidth=_computeItemSpaces.maxIconWidth;return this.measurement({width:Math.max(totalWidth,width)+effMargin+effBorder,height:Math.max(totalHeight,height)+effMargin+effBorder,labelSpaces:labelSpaces,iconSpaces:iconSpaces,itemSpaces:itemSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth,titleSpaces:{width:Math.min(maxWidth,this.measurement().width)-effMargin-effBorder,height:titleHeight}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(renderer_utils_getSmartComputedStyle(renderer_utils_selectElement("body"),"".concat(this.config().classPrefix,"-legend-title"))),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(container){var _this$measurement2=this.measurement(),titleSpaces=_this$measurement2.titleSpaces,border=_this$measurement2.border,padding=_this$measurement2.padding,width=_this$measurement2.width,maxWidth=_this$measurement2.maxWidth,_this$config3=this.config(),borderStyle=_this$config3.borderStyle,borderColor=_this$config3.borderColor;return function titleCreator(container,title,measurement,config){var titleWidth=Math.min(measurement.maxWidth,measurement.width),titleContainer=makeElement(container,"table",[1],"".concat(config.classPrefix,"-legend-title")).style("width","".concat(titleWidth,"px")).style("height","".concat(measurement.height,"px")).style("border-bottom","".concat(measurement.border,"px ").concat(config.borderStyle," ").concat(config.borderColor)).style("text-align",title.orientation instanceof Function?title.orientation(config.position):title.orientation);return makeElement(titleContainer,"td",[1],"".concat(config.classPrefix,"-legend-title-text")).style("width","".concat(titleWidth,"px")).style("max-width","".concat(titleWidth,"px")).style("height","100%").style("line-height",1).style("padding","".concat(measurement.padding,"px")).text(title.text).style("overflow-x","scroll").node()}(container,this.title(),{height:titleSpaces.height,width:width,maxWidth:maxWidth,border:border,padding:padding,borderStyle:borderStyle,borderColor:borderColor},this.config())}},{key:"render",value:function render(){var marginPosition,firebolt=this.firebolt(),_this$config4=this.config(),classPrefix=_this$config4.classPrefix,borderStyle=_this$config4.borderStyle,borderColor=_this$config4.borderColor,position=_this$config4.position,_this$measurement3=this.measurement(),maxWidth=_this$measurement3.maxWidth,maxHeight=_this$measurement3.maxHeight,width=_this$measurement3.width,height=_this$measurement3.height,margin=_this$measurement3.margin,border=_this$measurement3.border,legendContainer=makeElement(renderer_utils_selectElement(this.mount()),"div",[1],"".concat(classPrefix,"-legend-box"));switch(position){case"top":marginPosition="margin-".concat("bottom");break;case"left":marginPosition="margin-".concat("right");break;case"bottom":marginPosition="margin-".concat("top");break;default:marginPosition="margin-".concat("left")}return legendContainer.classed("".concat(classPrefix,"-legend-box-").concat(this._id),!0),legendContainer.style("float","left"),legendContainer.style("width","".concat(Math.min(maxWidth,width)-2*margin,"px")).style("height","".concat(Math.min(maxHeight,height)-2*margin,"px")).style("".concat(marginPosition),"".concat(margin,"px")).style("border","".concat(border,"px ").concat(borderStyle," ").concat(borderColor)),this.legendContainer(legendContainer.node()),this.renderTitle(legendContainer),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){var fieldName=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},fieldName,data.range):[[fieldName],[data.rawVal]]}}],[{key:"create",value:function create(dependencies){return new SimpleLegend(dependencies)}},{key:"defaultConfig",value:function defaultConfig(){return legend_defaults_DEFAULT_CONFIG}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENT}}]),SimpleLegend}();function position_config_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legendOrientation=(position_config_defineProperty(_legendOrientation={},"horizontal",{datasets:function datasets(data){return{row:[1],column:data}},itemContainerMeasures:function itemContainerMeasures(measurement){var itemSpaces=measurement.itemSpaces,width=measurement.width;return{row:{width:"".concat(width,"px"),padding:"".concat(0,"px")},column:{width:function width(d,i){return"".concat(itemSpaces[i].width,"px")},padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces;return{iconHeight:measurement.height,iconWidth:maxItemSpaces.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(_legendOrientation,"vertical",{datasets:function datasets(data){return{row:data,column:function column(d){return[d]}}},itemContainerMeasures:function itemContainerMeasures(measurement,config){var width=measurement.width,padding=config.padding;return{row:{width:"".concat(width,"px"),padding:"".concat(padding,"px")},column:{width:"".concat(width,"px"),padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces,width=measurement.width;return{iconHeight:maxItemSpaces.height,iconWidth:width,stepPadding:{horizontal:!1,vertical:!0}}}}),_legendOrientation),positionConfig=(position_config_defineProperty(_positionConfig={},"left",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"right",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"top",legendOrientation.horizontal),position_config_defineProperty(_positionConfig,"bottom",legendOrientation.horizontal),_positionConfig),alignmentMap=(position_config_defineProperty(_alignmentMap={},"left","end"),position_config_defineProperty(_alignmentMap,"right","start"),position_config_defineProperty(_alignmentMap,"top","center"),position_config_defineProperty(_alignmentMap,"bottom","center"),_alignmentMap),itemStack=(position_config_defineProperty(_itemStack={},"left",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"right",["shape",VALUE]),position_config_defineProperty(_itemStack,"top",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"bottom",["shape",VALUE]),_itemStack),renderer_createLegendSkeleton=function createLegendSkeleton(context,container,classPrefix,data){var gradWidth,gradHeight,maxGradHeight,maxGradWidth,measurement=context.measurement(),margin=measurement.margin,border=measurement.border,titleSpaces=measurement.titleSpaces,width=measurement.width,height=measurement.height,maxWidth=measurement.maxWidth,maxHeight=measurement.maxHeight;gradHeight=height-(titleSpaces.height+2*margin+2*border),gradWidth=width-(2*margin+2*border),maxGradHeight=maxHeight-(titleSpaces.height+2*margin+2*border),maxGradWidth=maxWidth-(2*margin+2*border);var legendBody=makeElement(container,"div",[1],"".concat(classPrefix,"-legend-body"));return legendBody.select(".".concat(classPrefix,"-legend-overflow")).remove(),maxGradWidth&&maxGradWidth4)}(shape)?shape:defaults_ICON_MAP(shape).size(size)(),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}return d[1]="circle",createShape(d,elem,"circle")}(datum,makeElement(svg,"g",[datum[1]],"".concat(classPrefix,"-legend-icon")),datum[3]?"circle":"square",iconWidth,iconHeight).attr("transform","translate(".concat(maxIconWidth/2-padding," ").concat(iconHeight/2,")")).attr("fill",datum[2]||color):makeElement(svg,"rect",[datum[1]],"".concat(classPrefix,"-legend-icon")).attr("x",0).attr("y",0).attr("width",maxIconWidth).attr("height",iconHeight).attr("fill",datum[2]||color)};function discrete_legend_typeof(obj){return(discrete_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function discrete_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function discrete_legend_toConsumableArray(arr){return function discrete_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainForLegend.push(domain[1]),domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b}),domainForLegend=legend_helper_getInterpolatedArrayData(domainForLegend,scaleParams)):domainForLegend=legend_helper_getInterpolatedData(domain,steps-1,scaleParams),(domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=domainForLegend[i];return gradient_legend_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](Math.floor(ele))),gradient_legend_defineProperty(_ref,"value",+value.toFixed(2)),gradient_legend_defineProperty(_ref,"id",i),_ref}).filter(function(d){return null!==d.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(effPadding){this.config({item:{text:{orientation:this.config().position}}});var axis=function createAxis(context){var data=context.data(),align=context.config().align,AxisCell=context._cells.AxisCell,newAxis=new continous_axis_ContinousAxis({id:"legend-".concat(context._id),orientation:align===ALIGN_VERTICAL?"right":"bottom",style:context._computedStyle,nice:!1,showAxisName:!1,tickValues:data.map(function(d){return d.value}),fixedBaseline:!1,labels:{rotation:null}},{labelManager:context._labelManager});return newAxis.domain(getGradientDomain(data)),newAxis.range([1,1]),(new AxisCell).source(newAxis).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),axisSpace=axis.getLogicalSpace(),space={width:axisSpace.width-effPadding,height:axisSpace.height-effPadding},axisDomainLength=axis.source().domain().length,labelSpaces=new Array(axisDomainLength).fill(space);return this.axis(axis),labelSpaces}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var firebolt=this.firebolt(),legendContainer=gradient_legend_get(gradient_legend_getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(context,container){var gradHeight,gradWidth,_context$config2=context.config(),align=_context$config2.align,classPrefix=_context$config2.classPrefix,item=_context$config2.item,data=context.data(),_createLegendSkeleton=gradient_helper_createLegendSkeleton(container,classPrefix,data),legendContainer=_createLegendSkeleton.legendContainer,legendGradSvg=_createLegendSkeleton.legendGradSvg,legendGradCont=_createLegendSkeleton.legendGradCont,linearGradient=_createLegendSkeleton.linearGradient,legendRect=_createLegendSkeleton.legendRect,labelDim=context.axis().source().getAxisDimensions().tickDimensions,_context$measurement=context.measurement(),padding=_context$measurement.padding,margin=_context$measurement.margin,border=_context$measurement.border,titleSpaces=_context$measurement.titleSpaces,maxItemSpaces=_context$measurement.maxItemSpaces,maxHeight=_context$measurement.maxHeight,maxWidth=_context$measurement.maxWidth,height=_context$measurement.height,width=_context$measurement.width,gradientDimensions={};gradHeight=Math.floor(Math.min(height,maxHeight)-(titleSpaces.height+2*margin+2*border)),gradWidth=Math.floor(Math.min(width,maxWidth)-(2*margin+2*border)),align===ALIGN_HORIZONTAL?(gradientDimensions.height=item.icon.height,gradientDimensions.width=gradWidth-2*padding-labelDim.width/2,linearGradient.attr("x2","100%").attr("y1","0%"),legendGradCont.attr("transform","translate( ".concat(labelDim.width/2," 0)")),gradient_helper_renderAxis(context,legendContainer,gradHeight-item.icon.height-padding,gradWidth-2*padding-1),applyStyle(legendContainer,{height:"".concat(maxItemSpaces.height+border+padding,"px"),width:"".concat(Math.min(width,maxWidth),"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height),legendRect.attr("width",gradientDimensions.width-labelDim.width/2)):(gradientDimensions.height=gradHeight-2*padding-labelDim.height/2,gradientDimensions.width=item.icon.width,linearGradient.attr("x2","0%").attr("y1","100%"),legendGradCont.attr("transform","translate(0 ".concat(labelDim.height/2,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-2*padding-1,gradWidth-item.icon.width-2*padding),applyStyle(legendContainer,{height:"".concat(Math.min(height,maxHeight),"px"),width:"".concat(maxWidth,"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height-labelDim.height/2),legendRect.attr("width",gradientDimensions.width)),applyStyle(legendGradSvg,{height:"".concat(gradientDimensions.height,"px"),width:"".concat(gradientDimensions.width,"px")}),applyStyle(legendRect,{fill:"url(#linear-gradient)"}),legendGradSvg.attr("height",gradientDimensions.height),legendGradSvg.attr("width",gradientDimensions.width),context.measurement({gradientDimensions:gradientDimensions}),context._legendGradientSvg=legendGradSvg}(this,legendContainer),legendContainer.selectAll("div").style("float","left"),firebolt.mapActionsAndBehaviour(),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){return[[this.fieldName()],[data.value]]}}],[{key:"create",value:function create(dependencies){return new GradientLegend(dependencies)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}();function step_legend_typeof(obj){return(step_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function step_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function step_legend_toConsumableArray(arr){return function step_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&(domainBounds.upper=["".concat(formatter.bounds.upper," ").concat(steps[steps.length-1])])):domainLeg=legend_helper_getInterpolatedData(domain,steps,scaleParams),domainLeg=(domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=null;return i0&&void 0!==arguments[0]?arguments[0]:{},registrableComponents=this._registrableComponents,mergedPolicy=mergeRecursive(mergeRecursive({},function defaultPolicy(registrableComponents){var aliases=registrableComponents.map(function(comp){return comp.alias()});return{behaviours:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}}}}(registrableComponents)),policy);return registrableComponents.forEach(function(canvas){canvas.firebolt().crossInteractionPolicy(mergedPolicy)}),this}}]),ActionModel}()),TITLE_CONFIG={position:"top",align:"left",padding:4,className:"".concat("muze","-title-container")},SUB_TITLE_CONFIG={position:"top",align:"left",padding:16,maxLines:2,className:"".concat("muze","-subtitle-container")},MESSAGE_CONFIG={className:"".concat("muze","-message-container")};function local_options_typeof(obj){return(local_options_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function local_options_slicedToArray(arr,i){return function local_options_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function local_options_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function local_options_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function canvas_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options_localOptions=(canvas_local_options_defineProperty(_localOptions={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"layers",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),_localOptions),canvasOptions=(canvas_local_options_defineProperty(_canvasOptions={},"title",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref){var _ref2=local_options_slicedToArray(_ref,2),arg1=_ref2[0],arg2=_ref2[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref3){var _ref4=local_options_slicedToArray(_ref3,2),title=_ref4[0],titleConfig=_ref4[1],t=title;"string"!=typeof title&&title||(t=function t(){return title});var defConfig=mergeRecursive({},TITLE_CONFIG);return[t,mergeRecursive(defConfig,titleConfig)]}}}),canvas_local_options_defineProperty(_canvasOptions,"subtitle",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref5){var _ref6=local_options_slicedToArray(_ref5,2),arg1=_ref6[0],arg2=_ref6[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref7){var _ref8=local_options_slicedToArray(_ref7,2),subtitle=_ref8[0],subtitleConfig=_ref8[1],sub=subtitle;"string"!=typeof subtitle&&subtitle||(sub=function sub(){return subtitle});var defConfig=mergeRecursive({},SUB_TITLE_CONFIG);return[sub,mergeRecursive(defConfig,subtitleConfig)]}}}),_canvasOptions);function layoutComponent_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isGridComponent=arguments.length>3&&void 0!==arguments[3]&&arguments[3],cut="",componentRatioWidth=1,leftHeight=0,leftWidth=0;if(!component)return{first:definitionModel,second:definitionModel};var _component$getLogical=component.getLogicalSpace(),componentHeight=_component$getLogical.height,componentWidth=_component$getLogical.width,position=component.position();"top"===position||"bottom"===position?(cut="h",componentRatioWidth=componentHeight/definitionModel.remainingHeight(),leftHeight=definitionModel.remainingHeight()-componentHeight,leftWidth=definitionModel.remainingWidth()):(cut="v",componentRatioWidth=componentWidth/definitionModel.remainingWidth(),leftWidth=definitionModel.remainingWidth()-componentWidth,leftHeight=definitionModel.remainingHeight()),leftOvercomponentRationWidth=1-componentRatioWidth,definitionModel.cut(cut);var firstLaneConfig={host:component.name(),cut:null,ratioWeight:componentRatioWidth,preferred:!isGridComponent&&isPreferred,lanes:[]},firstLane=new DefinitionModel(firstLaneConfig);firstLane.remainingHeight(componentHeight),firstLane.remainingWidth(componentWidth);var secondLane=new DefinitionModel({host:null,cut:null,ratioWeight:leftOvercomponentRationWidth,preferred:!isGridComponent&&!isPreferred,lanes:[]});return secondLane.remainingHeight(leftHeight),secondLane.remainingWidth(leftWidth),isPreferred?definitionModel.lanes([firstLane]):"top"===position||"left"===position?definitionModel.lanes([firstLane,secondLane]):definitionModel.lanes([secondLane,firstLane]),{first:firstLane,second:secondLane}}function tree_toConsumableArray(arr){return function tree_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?matrix[0]:matrix[1];return isTransposed?(joinedMatrix=matrix[0].length>0?utils_toConsumableArray(matrix[0]):[],joinedMatrix=matrix[1].length>0?[].concat(utils_toConsumableArray(joinedMatrix),utils_toConsumableArray(matrix[1])):joinedMatrix):joinedMatrix=joinedMatrix.map(function(row,rowIndex){var rowData=[];return matrix[0].length>0&&(rowData=utils_toConsumableArray(matrix[0][rowIndex])),matrix[1].length>0&&(rowData=[].concat(utils_toConsumableArray(rowData),utils_toConsumableArray(matrix[1][rowIndex]))),rowData}),joinedMatrix},utils_computeLogicalSpace=function computeLogicalSpace(){var item=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},config=arguments.length>1?arguments[1]:void 0,maxMeasures=arguments.length>2?arguments[2]:void 0,_config$isTransposed=config.isTransposed,isTransposed=void 0!==_config$isTransposed&&_config$isTransposed,unitMeasures=config.unitMeasures,_getMeasureInfo=function getMeasureInfo(isTransposed){return isTransposed?{firstMeasure:enums_constants_HEIGHT,secondMeasure:"width"}:{firstMeasure:"width",secondMeasure:enums_constants_HEIGHT}}(isTransposed),firstMeasure=_getMeasureInfo.firstMeasure,secondMeasure=_getMeasureInfo.secondMeasure,values=item.values,minMeasures=function getMinMeasures(isTransposed,unitMeasures){return isTransposed?{height:0,width:unitMeasures.width}:{height:unitMeasures.height,width:0}}(isTransposed,unitMeasures);if(values[0].key){var _logicalSpace,logicalSpace=(utils_defineProperty(_logicalSpace={},firstMeasure,0),utils_defineProperty(_logicalSpace,secondMeasure,0),_logicalSpace);return values.forEach(function(valueItem){var space=computeLogicalSpace(valueItem,config,maxMeasures);logicalSpace[firstMeasure]=Math.max(logicalSpace[firstMeasure],space[firstMeasure],minMeasures[firstMeasure]),logicalSpace[secondMeasure]+=+space[secondMeasure]}),item.space=logicalSpace,logicalSpace}return function getLogicalSpace(item,measures,minMeasures){var _ref,maxMeasure=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],firstMeasure=measures.firstMeasure,secondMeasure=measures.secondMeasure,firstMeasureValue=0,secondMeasureValue=0;return item.values.forEach(function(valueArray){var _item$space,fMeasure=0,sMeasure=0;valueArray.forEach(function(placeholder,colIndex){placeholder.setAvailableSpace();var space=placeholder.getLogicalSpace(),minSecondMeasure=placeholder.getMinMeasures(minMeasures[secondMeasure]);sMeasure=Math.max(sMeasure,+space[secondMeasure],minSecondMeasure),maxMeasure[colIndex]=Math.max(maxMeasure[colIndex]||0,space[firstMeasure]),fMeasure+=+maxMeasure[colIndex]}),secondMeasureValue+=sMeasure,firstMeasureValue=Math.max(firstMeasureValue,fMeasure),item.space=(utils_defineProperty(_item$space={},secondMeasure,Math.ceil(secondMeasureValue)),utils_defineProperty(_item$space,firstMeasure,Math.ceil(firstMeasureValue)),_item$space)}),utils_defineProperty(_ref={},secondMeasure,secondMeasureValue),utils_defineProperty(_ref,firstMeasure,firstMeasureValue),_ref}(item,{firstMeasure:firstMeasure,secondMeasure:secondMeasure},minMeasures,maxMeasures)},createMatrixEachLevel=function createMatrixEachLevel(item,isTransposed){if(item.values[0].key){var arr=[];return item.values.forEach(function(child){isTransposed?createMatrixEachLevel(child,isTransposed).forEach(function(e,i){var _arr$i;arr[i]=arr[i]||[],(_arr$i=arr[i]).push.apply(_arr$i,utils_toConsumableArray(e))}):arr.push.apply(arr,utils_toConsumableArray(createMatrixEachLevel(child,isTransposed)))}),item.matrix=arr,arr}return item.matrix=isTransposed?item.values[0].map(function(col,colIndex){return item.values.map(function(row){return row[colIndex]})}):item.values,item.matrix},extraCellsRemover=function extraCellsRemover(arr,beg,end){return arr.slice(beg,-end)},visual_matrix_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},visual_matrix_default_config_defaultConfig={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]};function visual_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=matrix[0]||[],this._secondaryMatrix=matrix[1]||[],this._maxMeasures=[],this._availableSpace={},generateGetterSetters(this,visual_matrix_props_PROPS);var defCon=Object.assign({},this.constructor.defaultConfig());this.config(mergeRecursive(defCon,config)),this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],this.config())}return function visual_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&visual_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&visual_matrix_defineProperties(Constructor,staticProps),Constructor}(VisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"computeViewableSpaces",value:function computeViewableSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"removeExtraCells",value:function removeExtraCells(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getPriorityDistribution",value:function getPriorityDistribution(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"calculateDepth",value:function calculateDepth(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeSpaces",value:function redistributeSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeViewSpaces",value:function redistributeViewSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getCellDimensions",value:function getCellDimensions(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{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 _createTree2=function createTree(context){var matrixTree={},lastLevelKey=0,facet="primary",nestFn=utils_nest(),keys=[],layoutMatrix=context._layoutMatrix,primaryMatrix=context.primaryMatrix(),secondaryMatrix=context.secondaryMatrix(),_context$config=context.config(),isTransposed=_context$config.isTransposed,breakPage=_context$config.breakPage;if(isTransposed){if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var _i2=0;_i20){for(var primaryMatrixLength=primaryMatrix.length,_i3=secondaryMatrix.length-1;_i3>0;_i3--)keys.push(_i3+primaryMatrixLength);keys.push(primaryMatrixLength),"primary"===facet&&(lastLevelKey=primaryMatrixLength)}var newMatrix;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),newMatrix=layoutMatrix[0].map(function(col,colIndex){return layoutMatrix.map(function(row){return row[colIndex]})}),matrixTree=nestFn.entries(newMatrix)}else{if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var i=0;i0){for(var keyLength=primaryMatrix.length>0?primaryMatrix[0].length:0,_i=secondaryMatrix[0].length-1;_i>0;_i--)keys.push(_i+keyLength);keys.push(keyLength),"primary"===facet&&(lastLevelKey=keyLength)}else lastLevelKey=primaryMatrix.length>0?primaryMatrix[0].length-1:0;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),matrixTree=nestFn.entries(layoutMatrix)}return{tree:matrixTree,lastLevelKey:lastLevelKey}}(this),tree=_createTree2.tree,lastLevelKey=_createTree2.lastLevelKey;return this._lastLevelKey=lastLevelKey,tree}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(width,height){this.availableSpace({width:width,height:height});var tree=this.tree(),heightMeasures=this.populateMaxMeasures(enums_constants_HEIGHT,tree),widthMeasures=this.populateMaxMeasures("width",tree),depth=this.calculateDepth(widthMeasures,heightMeasures);return this.viewableMatrix=this.createViewPortMatrix(depth),this.viewableMeasures=this.redistributeSpaces(width,height),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(type,matrixTree){var _this=this,depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,measures=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(measures[depth]=Math.max(measures[depth]||0,matrixTree.space[type]),matrixTree.values){var childDepth=depth+1;matrixTree.values.forEach(function(child){child.space&&(measures=_this.populateMaxMeasures(type,child,childDepth,measures))})}return measures}},{key:"getViewableSpaces",value:function getViewableSpaces(){return this.viewableMeasures}},{key:"getViewableMatrices",value:function getViewableMatrices(){return this.viewableMatrix}},{key:"createViewPortMatrix",value:function createViewPortMatrix(depth){var arr=[];return function createMatrixInstances(){var arr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],depth=arguments.length>1?arguments[1]:void 0,matrixInfo=arguments.length>2?arguments[2]:void 0,layout=arguments.length>3?arguments[3]:void 0,breakPointer=layout._breakPointer,isTransposed=layout.config().isTransposed,tree=matrixInfo.tree,layoutMatrix=matrixInfo.layoutMatrix;if(0===depth){var brokenMatrix=function breakMatrix(matrix,isTransposed,breakPointer){var primaryMatrix=[],secondaryMatrix=[];return isTransposed?matrix.forEach(function(row,rowIndex){rowIndex>=breakPointer?secondaryMatrix.push(row):primaryMatrix.push(row)}):matrix.forEach(function(row,rowIndex){row.forEach(function(column,columnIndex){columnIndex>=breakPointer?(secondaryMatrix[rowIndex]=secondaryMatrix[rowIndex]||[],secondaryMatrix[rowIndex].push(column)):(primaryMatrix[rowIndex]=primaryMatrix[rowIndex]||[],primaryMatrix[rowIndex].push(column))})}),[primaryMatrix,secondaryMatrix]}(tree.matrix,isTransposed,breakPointer);return arr.push({matrix:tree.matrix,primaryMatrix:brokenMatrix[0],secondaryMatrix:brokenMatrix[1],space:tree.space}),arr}var nextLevel=depth-1;return tree.values.forEach(function(e){createMatrixInstances(arr,nextLevel,{tree:e,layoutMatrix:layoutMatrix},layout)}),arr}(arr,depth,this.removeExtraCells(),this),arr}}],[{key:"defaultConfig",value:function defaultConfig(){return visual_matrix_default_config_defaultConfig}}]),VisualMatrix}();function row_matrix_typeof(obj){return(row_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function row_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function row_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RowVisualMatrix),(_this=row_matrix_possibleConstructorReturn(this,row_matrix_getPrototypeOf(RowVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length>0?matrix[0][0].length:0,_this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],_this.config()),_this._tree={key:ROW_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function row_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&row_matrix_setPrototypeOf(subClass,superClass)}(RowVisualMatrix,visual_matrix_VisualMatrix),function row_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&row_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&row_matrix_defineProperties(Constructor,staticProps),Constructor}(RowVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!1),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),widths=_this2$getCellDimensi.widths,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=[height,height],columnMeasures=widths;return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=extraCellsRemover(tree.matrix,begCellLen,endCellLen),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var remainingAvailWidth,remainingWidth,cWidths=[],conditions=[],maxPrioritySpace=0,matrix=measures.matrix,availableWidth=measures.width,maxWidths=measures.maxMeasures,currentWidth=measures.maxWidth,height=measures.height,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length?this.primaryMatrix()[0].length:0,dist=[];remainingAvailWidth=availableWidth,remainingWidth=currentWidth,(conditions=2===priority?[primaryMatrixLength-1,primaryMatrixLength]:0===priority?[primaryMatrixLength-1]:[primaryMatrixLength]).forEach(function(i){dist[i]=maxWidths[i],maxPrioritySpace+=maxWidths[i],remainingAvailWidth-=dist[i],remainingWidth-=dist[i]}),matrix[0].forEach(function(e,i){-1===conditions.indexOf(i)&&(dist[i]=remainingAvailWidth*(maxWidths[i]/remainingWidth))}),matrix.forEach(function(row){return row.forEach(function(col,cIdx){-1===conditions.indexOf(cIdx)?(col.setAvailableSpace(dist[cIdx],height),cWidths[cIdx]=Math.max(cWidths[cIdx]||0,Math.floor(col.getLogicalSpace().width))):cWidths[cIdx]=0})});var prioritySpace=availableWidth-cWidths.reduce(function(t,n){return t+n});return prioritySpace<0?cWidths=cWidths.map(function(){return 0}):conditions.forEach(function(i){cWidths[i]=Math.floor(prioritySpace*(dist[i]/maxPrioritySpace||1))}),cWidths}},{key:"calculateDepth",value:function calculateDepth(widthMeasures,heightMeasures){var i,height=this.availableSpace().height;for(i=0;i0?logicalWidths:maxMeasures.map(function(){return 0}),rHeights=function getDistributedHeight(context){var heightWithoutGutter,distSum=0,gutterSum=0,isTransposed=context.isTransposed,distribution=context.distribution,availableHeight=context.availableHeight,height=context.height,isDistributionEqual=context.isDistributionEqual,gutter=context.gutter,matrix=context.matrix,cIdx=context.cIdx;distribution&&void 0!==distribution[0]&&(distSum=distribution.reduce(function(t,n){return t+=n})),gutter&&void 0!==gutter[0]&&(gutterSum=gutter.reduce(function(t,n){return t+=n})),heightWithoutGutter=availableHeight-Math.floor(availableHeight*gutterSum);var colLen=matrix.length;return matrix.map(function(row,rIdx){var space=row[cIdx].getLogicalSpace().height,distHeight=space+space/height*(heightWithoutGutter-height);return isTransposed||(distribution.length>0&&colLen===distribution.length?distHeight=heightWithoutGutter*distribution[rIdx]/distSum:(isDistributionEqual||0===context.height)&&(distHeight=heightWithoutGutter/colLen)),Math.floor(distHeight)})}({matrix:matrix,cIdx:this._lastLevelKey,height:mHeight,availableHeight:height,isDistributionEqual:isDistributionEqual,distribution:distribution,isTransposed:isTransposed,gutter:gutter}),maxWidths.length>0&&(cWidths=cWidths.map(function(e,i){return Math.max(e,maxWidths[0][i]||0)})),maxWidths.push(cWidths);for(var x=0;x=breakPointer&&(columnWidths[1][cIdx-breakPointer]=colWidth,widths[1]=(widths[1]||0)+colWidth),cIdx===_this4._lastLevelKey&&(rowHeights[0][rIdx]=colHeight,rowHeights[1][rIdx]=colHeight)})}),{heights:[0,0],widths:widths,rowHeights:rowHeights,columnWidths:columnWidths}}}]),RowVisualMatrix}();function column_matrix_typeof(obj){return(column_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function column_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function column_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ColumnVisualMatrix),(_this=column_matrix_possibleConstructorReturn(this,column_matrix_getPrototypeOf(ColumnVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length,_this._tree={key:COLUMN_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function column_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&column_matrix_setPrototypeOf(subClass,superClass)}(ColumnVisualMatrix,visual_matrix_VisualMatrix),function column_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&column_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&column_matrix_defineProperties(Constructor,staticProps),Constructor}(ColumnVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!0),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height,width=measures.width;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i,height:height},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),heights=_this2$getCellDimensi.heights,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=heights,columnMeasures=[width,width];return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=tree.matrix.map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var height=measures.height,maxHeights=measures.maxHeights,remainingHeight=height,heightDist=[],conditions=[],divider=2,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length;return 2===priority?(conditions=[primaryMatrixLength-1,primaryMatrixLength],divider=2):(conditions=0===priority?[primaryMatrixLength-1]:[primaryMatrixLength],divider=1),maxHeights.forEach(function(heights,index){-1===conditions.indexOf(index)&&(heightDist[index]=heights,remainingHeight-=heights)}),remainingHeight<0?heightDist=heightDist.map(function(){return 0}):conditions.forEach(function(condition){heightDist[condition]=Math.min(maxHeights[condition],remainingHeight/divider)}),heightDist}},{key:"calculateDepth",value:function calculateDepth(widthMeasures){var j,width=this.availableSpace().width;for(j=0;j0)distWidth=availableWidth*distribution[colIndex]/distSum;else if(isDistributionEqual||0===width){var rowLen=row.length;distWidth=availableWidth/rowLen}return Math.floor(distWidth)})}({row:matrix[this._lastLevelKey],width:mWidth,availableWidth:width},this.config());matrix.forEach(function(row,rIdx){return row.forEach(function(col,cIdx){var oldLogicalSpace=col.getLogicalSpace();col.setAvailableSpace(cWidths[cIdx]-borderWidth,oldLogicalSpace.height),rHeights[rIdx]=Math.max(rHeights[rIdx]||0,Math.floor(col.getLogicalSpace().height))})}),maxHeights.length>0&&(rHeights=rHeights.map(function(e,i){return Math.max(e,maxHeights[0][i])})),maxHeights.push(rHeights);for(var x=0;x=breakPointer&&(rowHeights[1][rIdx-breakPointer]=colHeight,heights[1]=(heights[1]||0)+colHeight),rIdx===_this4._lastLevelKey&&(columnWidths[0][cIdx]=colWidth,columnWidths[1][cIdx]=colWidth)})}),{heights:heights,widths:[0,0],rowHeights:rowHeights,columnWidths:columnWidths}}}]),ColumnVisualMatrix}();function layout_helper_toConsumableArray(arr){return function layout_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);imaxMeasure&&layout.scrollInfo(computations_defineProperty({},scrollType,!0)),Math.max(maxMeasure,actualMeasure)}}(layout,paginationDetailsMap[matrixType],relatedMaxMeasure,buffer)},computations_getMatrixHeightDetails=function getMatrixHeightDetails(layout,columnMatrixWidth){var height=layout.measurement().height,buffer=layout.config().buffer,_getHeightRequiredByC=function getHeightRequiredByColMatrix(layout,columnMatrixWidth){var height=layout.measurement().height,columnMatrix=layout.columnMatrix(),maxColumnMatrixHeight=Math.min(columnMatrix.getLogicalSpace().height,height/2);columnMatrix.setAvailableSpace(columnMatrixWidth,maxColumnMatrixHeight);var columnViewSpace=columnMatrix.getViewableSpaces()[layout.config().columnPointer];return{columnMatrixHeight:columnViewSpace.height.primary+columnViewSpace.height.secondary,maxColumnMatrixHeight:maxColumnMatrixHeight}}(layout,columnMatrixWidth),columnMatrixHeight=_getHeightRequiredByC.columnMatrixHeight,maxColumnMatrixHeight=_getHeightRequiredByC.maxColumnMatrixHeight,maxHeightAvailableForRowMatrix=height-Math.min(maxColumnMatrixHeight,columnMatrixHeight);return{columnMatrixHeight:columnMatrixHeight,maxColumnMatrixHeight:maxColumnMatrixHeight,rowMatrixHeight:paginationMeasureGetter(layout,"row",maxHeightAvailableForRowMatrix,buffer),maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix}},bufferCondition={isScroll:!0,pagination:"scroll"},computations_getActualBufferFromConfig=function getActualBufferFromConfig(layout){var buffer=layout.config().buffer,_map2=computations_slicedToArray([enums_constants_HORIZONTAL,enums_constants_VERTICAL].map(function(type){return function getBufferFromCondition(layout,type){var scrollInfo=layout.scrollInfo(),currentBufferType={pagination:layout.config().pagination,isScroll:scrollInfo[type]};return Object.keys(bufferCondition).every(function(e){return bufferCondition[e]===currentBufferType[e]})}(layout,type)?buffer:0}),2);return{horizontalBuffer:_map2[0],verticalBuffer:_map2[1]}},computations_computeLayoutMeasurements=function computeLayoutMeasurements(layout){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_getMatrixWidthDetail=function getMatrixWidthDetails(layout){var rowMatrix=layout.rowMatrix(),width=layout.measurement().width,_layout$config3=layout.config(),border=_layout$config3.border,buffer=_layout$config3.buffer,borderWidth=border.width,rowMatrixWidth=getMatrixMeasurement(rowMatrix,"width"),maxRowMatrixWidth=Math.min(rowMatrixWidth+buffer,width/2),maxWidthAvailableForColumnMatrix=width-maxRowMatrixWidth-borderWidth;return{rowMatrixWidth:rowMatrixWidth,maxRowMatrixWidth:maxRowMatrixWidth,columnMatrixWidth:paginationMeasureGetter(layout,"column",maxWidthAvailableForColumnMatrix,0),maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}}(layout),rowMatrixWidth=_getMatrixWidthDetail.rowMatrixWidth,maxRowMatrixWidth=_getMatrixWidthDetail.maxRowMatrixWidth,maxWidthAvailableForColumnMatrix=_getMatrixWidthDetail.maxWidthAvailableForColumnMatrix,columnMatrixWidth=_getMatrixWidthDetail.columnMatrixWidth,_getMatrixHeightDetai=computations_getMatrixHeightDetails(layout,columnMatrixWidth),columnMatrixHeight=_getMatrixHeightDetai.columnMatrixHeight,rowMatrixHeight=_getMatrixHeightDetai.rowMatrixHeight,maxHeightAvailableForRowMatrix=_getMatrixHeightDetai.maxHeightAvailableForRowMatrix,_getActualBufferFromC=computations_getActualBufferFromConfig(layout),horizontalBuffer=_getActualBufferFromC.horizontalBuffer,verticalBuffer=_getActualBufferFromC.verticalBuffer;rowMatrix.setAvailableSpace(maxRowMatrixWidth-verticalBuffer,rowMatrixHeight-horizontalBuffer);var rowViewableSpaces=rowMatrix.getViewableSpaces(),columnViewableSpaces=columnMatrix.getViewableSpaces();return setViewSpaces(layout,"row",rowViewableSpaces),setViewSpaces(layout,"column",columnViewableSpaces),function setValueMatrixMeasurements(layout,rowViewableSpaces,columnViewableSpaces){var _ref,_ref2,_ref3,_ref4,_ref5,centerMatrix=layout.centerMatrix(),border=layout.config().border,matrices=layout.matrices(),top=matrices.top,bottom=matrices.bottom,borderWidth=border.width,rowHeights=(_ref=[]).concat.apply(_ref,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.rowHeights.primary}))),rowWidthsPrimary=(_ref2=[]).concat.apply(_ref2,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.primary}))),rowWidthsSecondary=(_ref3=[]).concat.apply(_ref3,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.secondary}))),columnWidths=(_ref4=[]).concat.apply(_ref4,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.columnWidths.primary}))),columnHeightsPrimary=columnViewableSpaces[0].rowHeights.primary,columnHeightsSecondary=(_ref5=[]).concat.apply(_ref5,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.rowHeights.secondary})));centerMatrix.forEach(function(matrix,rIdx){matrix.forEach(function(placeholder,cIdx){placeholder.setAvailableSpace(columnWidths[cIdx]-borderWidth,rowHeights[rIdx]-borderWidth)})}),computations_setAvailableSpace(top[0],rowWidthsPrimary,columnHeightsPrimary),computations_setAvailableSpace(top[2],rowWidthsSecondary,columnHeightsPrimary),computations_setAvailableSpace(bottom[0],rowWidthsPrimary,columnHeightsSecondary),computations_setAvailableSpace(bottom[2],rowWidthsSecondary,columnHeightsSecondary)}(layout,rowViewableSpaces,columnViewableSpaces),{rowMatrixHeight:rowMatrixHeight-horizontalBuffer,rowMatrixWidth:rowMatrixWidth-verticalBuffer,maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix-horizontalBuffer,columnMatrixHeight:columnMatrixHeight,columnMatrixWidth:columnMatrixWidth,maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}},measureSum=function measureSum(measureArr){return measureArr.reduce(function(total,measure){return total+measure},0)};function layout_typeof(obj){return(layout_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function layout_defineProperties(target,props){for(var i=0;i0&&(leftMatrix=[].concat(layout_helper_toConsumableArray(topLeft),layout_helper_toConsumableArray(leftRows),layout_helper_toConsumableArray(bottomLeft))),rightRows.length>0&&(rightMatrix=[].concat(layout_helper_toConsumableArray(topRight),layout_helper_toConsumableArray(rightRows),layout_helper_toConsumableArray(bottomRight))),topColumns.length>0&&topColumns[0].length>0&&(topMatrix=topColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(topLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(topRight[i]))})),bottomColumns.length>0&&bottomColumns[0].length>0&&(bottomMatrix=bottomColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(bottomLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(bottomRight[i]))})),context.rowMatrix(new row_matrix_RowVisualMatrix([leftMatrix,rightMatrix],{isDistributionEqual:isRowSizeEqual,distribution:distribution.rows,gutter:gutterSpace.rows,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.row,breakPage:breakPage.rows.map(function(e){return e+Math.max(topLeft.length,topRight.length)}),extraCellLengths:[topLeft.length,bottomLeft.length]})),begColCells=topLeft.length>0?topLeft[0].length:bottomLeft.length>0?bottomLeft[0].length:0,endColCells=topRight.length>0?topRight[0].length:bottomRight.length>0?bottomRight[0].length:0,context.columnMatrix(new column_matrix_ColumnVisualMatrix([topMatrix,bottomMatrix],{isDistributionEqual:isColumnSizeEqual,distribution:distribution.columns,gutter:gutterSpace.columns,isTransposed:!0,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.col,breakPage:breakPage.columns,extraCellLengths:[begColCells,endColCells]})),context.centerMatrix(valueMatrix),matrices}(this,_matrices),this):layout_get(layout_getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,_matrices)}},{key:"triggerReflow",value:function triggerReflow(){this.scrollInfo({horizontal:!1,vertical:!1});var _computeLayoutMeasure=computations_computeLayoutMeasurements(this),maxHeightAvailableForRowMatrix=_computeLayoutMeasure.maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix=_computeLayoutMeasure.maxWidthAvailableForColumnMatrix;return this.setViewInformation(maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix),this}},{key:"gotoPage",value:function gotoPage(type,pageNumber){var pageType=type.toLowerCase(),totalPages=this.viewInfo().viewMatricesInfo["".concat(pageType,"Pages")],pointer=Math.min(Math.max(1,pageNumber),totalPages);return this.config(function layout_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(pageType,"Pointer"),pointer-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(type){var viewMatricesInfo=this.viewInfo().viewMatricesInfo,pageType=type.toLowerCase();return{totalPages:viewMatricesInfo["".concat(pageType,"Pages")],currentPage:this.config()["".concat(pageType,"Pointer")]+1}}},{key:"viewInfo",value:function viewInfo(){return arguments.length?(this._viewInfo=arguments.length<=0?void 0:arguments[0],this):this._viewInfo}},{key:"scrollInfo",value:function scrollInfo(){return arguments.length?(this._scrollInfo=mergeRecursive(this._scrollInfo,arguments.length<=0?void 0:arguments[0]),this):this._scrollInfo}},{key:"setViewInformation",value:function setViewInformation(maxRowHeight,maxColWidth){var _this$config2=this.config(),rowPointer=_this$config2.rowPointer,columnPointer=_this$config2.columnPointer,border=_this$config2.border,viewMatricesInfo=function getViewMatrices(layout,rowPointer,columnPointer){for(var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),centerMatrix=layout.centerMatrix(),matrices=layout.matrices(),rowMatrices=rowMatrix.getViewableMatrices(),columnMatrices=columnMatrix.getViewableMatrices(),centralMatrixPointer={row:0,column:0},i=rowPointer-1;i>=0;i--){var length=Math.max(rowMatrices[i].primaryMatrix.length,rowMatrices[i].secondaryMatrix.length);centralMatrixPointer.row+=length}for(var _i=columnPointer-1;_i>=0;_i--){var matrix=columnMatrices[_i],primaryMatrix=matrix.primaryMatrix,secondaryMatrix=matrix.secondaryMatrix,_length=Math.max(primaryMatrix[0]?primaryMatrix[0].length:0,secondaryMatrix[0]?secondaryMatrix[0].length:0);centralMatrixPointer.column+=_length}matrices.top[1]=columnMatrices[columnPointer].primaryMatrix,matrices.bottom[1]=columnMatrices[columnPointer].secondaryMatrix,matrices.center[0]=rowMatrices[rowPointer].primaryMatrix,matrices.center[2]=rowMatrices[rowPointer].secondaryMatrix;var rowMatrixLen=Math.max(matrices.center[0].length,matrices.center[2].length),columnMatrixLen=Math.max(matrices.top[1][0]?matrices.top[1][0].length:0,matrices.bottom[1][0]?matrices.bottom[1][0].length:0);return matrices.center[1]=centerMatrix.slice(centralMatrixPointer.row,centralMatrixPointer.row+rowMatrixLen).map(function(matrix){return matrix.slice(centralMatrixPointer.column,centralMatrixPointer.column+columnMatrixLen)}),{matrices:matrices,rowPages:rowMatrices.length,columnPages:columnMatrices.length}}(this,rowPointer,columnPointer),layoutDimensions=function getViewMeasurements(layout,maxRowHeight,maxColWidth){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_layout$config=layout.config(),columnPointer=_layout$config.columnPointer,rowPointer=_layout$config.rowPointer,rowSpaces=rowMatrix.getViewableSpaces()[rowPointer],colSpaces=columnMatrix.getViewableSpaces()[columnPointer],rowHeights=rowSpaces.rowHeights,rowMatrixWidth=rowSpaces.width,columnWidths=colSpaces.columnWidths,columnMatrixHeight=colSpaces.height,leftWidth=rowMatrixWidth.primary,rightWidth=rowMatrixWidth.secondary,topHeight=columnMatrixHeight.primary,bottomHeight=columnMatrixHeight.secondary,centerHeight=measureSum(rowHeights.primary),centerWidth=measureSum(columnWidths.primary),viewWidth=[leftWidth,Math.min(centerWidth,maxColWidth),rightWidth],viewHeight=[topHeight,Math.min(centerHeight,maxRowHeight),bottomHeight];return{viewWidth:viewWidth,viewHeight:viewHeight,actualCenterMeasures:{height:centerHeight,width:centerWidth},totalMeasures:{width:measureSum(viewWidth),height:measureSum(viewHeight)},unitHeights:rowHeights,unitWidths:columnWidths}}(this,maxRowHeight,maxColWidth);return layoutDimensions.border=border,this.viewInfo({viewMatricesInfo:viewMatricesInfo,layoutDimensions:layoutDimensions}),this}}],[{key:"defaultViewInfo",value:function defaultViewInfo(){return Object.assign({},{layoutDimensions:{border:this.defaultConfig().border,viewHeight:[0,0,0],viewWidth:[0,0,0]},viewMatricesInfo:{columnPages:0,rowPages:0,matrices:{top:[],center:[],bottom:[]}}})}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENTS}},{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIGURATION}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}();function border_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _matrixSpanGeneratorM,_spanApplierMap,borderMap=(border_helper_defineProperty(_borderMap={},"".concat("top","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("right"),null),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("left"),"row"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("middle"),"center"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("right"),"row"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("right"),null),_borderMap),border_helper_specificBorderApplier=function specificBorderApplier(borderTypes,showBorders,cells,borderInfo){var color=borderInfo.color,width=borderInfo.width,style=borderInfo.style,borderStyle="".concat(width,"px ").concat(style);borderTypes.forEach(function(borderType){!function applySpecificBorder(cells,color,type,style){cells.style("border-".concat(type),"".concat(style," ").concat(color))}(cells,showBorders[borderType]?color:"rgba(0,0,0,0)",borderType,borderStyle)})},border_helper_applyBorders=function applyBorders(cells,border,row,column){var borderApplierFn=function borderApplier(cells,borderInfo){var showRowBorders=borderInfo.showRowBorders,showColBorders=borderInfo.showColBorders,showValueBorders=borderInfo.showValueBorders;return{row:function row(){return border_helper_specificBorderApplier(["top","bottom"],showRowBorders,cells,borderInfo)},column:function column(){return border_helper_specificBorderApplier(["left","right"],showColBorders,cells,borderInfo)},center:function center(){return border_helper_specificBorderApplier(["left","right","top","bottom"],showValueBorders,cells,borderInfo)}}}(cells,border),borderMapVal=borderMap["".concat(ROW_MATRIX_INDEX[VIEW_INDEX[row]],"-").concat(COLUMN_MATRIX_INDEX[column])];borderMapVal&&borderApplierFn[borderMapVal]()};function span_maker_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var orderMaker=function orderMaker(arr){return Array.from(Array(arr.length).keys())},nestByStack=function nestByStack(stack,updateArr){var optionalParams=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},order=optionalParams.order,keyFn=optionalParams.keyFn,arr=updateArr.slice(),currStack=stack.slice(),prevStack=currStack.slice();if(order=order||Array.from(Array(arr.length).keys()),keyFn=keyFn||function(v){return v},0===currStack.length){var _newArr=[];return order.forEach(function(e){_newArr.push(arr[e])}),{prevStack:prevStack,currStack:arr,arr:_newArr}}for(var arrVal="",stackVal="",newArr=[],i=order.length-1;i>=0;i--){var currElemIndex=order[i];if((arrVal+=keyFn(arr[currElemIndex]))===(stackVal+=keyFn(currStack[currElemIndex])))newArr[currElemIndex]=null;else{stackVal="";for(var j=i;j0&&void 0!==arguments[0]?arguments[0]:1,placeholder=arguments.length>1?arguments[1]:void 0,config=arguments.length>2?arguments[2]:void 0,index=arguments.length>3?arguments[3]:void 0,height=placeholder.availHeight(),width=placeholder.availWidth(),borderWidth=config.border.width,unitWidths=config.dimensions.unitWidths,col=index.col;return span_maker_defineProperty(_ref={},"rowSpan",function(){placeholder.setAvailableSpace(width,height*span),1===span&&renderer_utils_selectElement(this).style("height","".concat(height*span+borderWidth,"px"))}),span_maker_defineProperty(_ref,"colSpan",function(){var primaryUnitWidth=unitWidths.primary[col];if(span>1){for(var cumulativeWidth=0,i=col;i0&&void 0!==arguments[0]?arguments[0]:0}},{key:"type",get:function get(){return"simple"}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),SimpleCell}();function enums_defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var visual_cell_src_props_PROPS,enums_defaults_DEFAULT_CONFIG=(enums_defaults_defineProperty(_DEFAULT_CONFIG={},"margin",(enums_defaults_defineProperty(_CONSTANTS$MARGIN={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$MARGIN)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"spaceFixer",2),enums_defaults_defineProperty(_DEFAULT_CONFIG,"isOffset",!1),enums_defaults_defineProperty(_DEFAULT_CONFIG,"verticalAlign",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"textAlign","center"),enums_defaults_defineProperty(_DEFAULT_CONFIG,"show",!0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"maxLines",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"minCharacters",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"rotation",null),_DEFAULT_CONFIG);function visual_cell_src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_PROPS={mount:{},availHeight:{},availWidth:{},config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config,value)}},logicalSpace:{},minSpacing:{},source:{}},packages_visual_cell_src_props_PROPS=(visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS={},GEOM,mergeRecursive({data:{},caption:{},config:{},axes:{},facetByFields:{},fields:{},transform:{},layerDef:{},detailFields:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_TEXT,mergeRecursive({smartText:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_AXIS,DEFAULT_PROPS),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,BLANK,DEFAULT_PROPS),visual_cell_src_props_PROPS);function axis_cell_typeof(obj){return(axis_cell_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function axis_cell_defineProperties(target,props){for(var i=0;i(availWidth||0)&&maxLines&&(space.height=space.oriTextHeight*maxLines),availWidth&&availWidth":">",'"':""","'":"'","/":"/"};return"".concat(str).replace(/[&<>"'/]/g,function(match){return htmlEscapes[match]})}(rawContent()):rawContent()},createHeading=function createHeading(config,type,labelManager,prevCell){return config?function headerCreator(config,cellType,labelManager,prevCell){var margin={},content=config.content,classPrefix=config.classPrefix,maxLines=config.maxLines,cell=prevCell||new src_text_cell({type:"title"===cellType?"header":"text",className:"".concat(classPrefix,"-").concat(cellType,"-cell")},{labelManager:labelManager}).config({maxLines:maxLines}).minSpacing({width:0,height:0});return cell.source(content),cell._minTickDiff={height:0,width:0},margin=config.position===src_constants_TOP?{top:0,bottom:config.padding}:{top:config.padding,bottom:0},cell.config({margin:margin}),{height:cell.getLogicalSpace().height,cell:cell}}(config,type,labelManager,prevCell):""},legend_maker_legendInitializer=function legendInitializer(legendConfig,canvas,measurement,prevLegends){var legends=[],height=measurement.height,width=measurement.width,headerHeight=measurement.headerHeight,position=legendConfig.position,align=legendConfig.align,legendInfo=function legendCreator(canvas){var LegendCls,dataset=[],axes=canvas.getRetinalAxes();return Object.entries(axes).forEach(function(axisInfo){var scale=axisInfo[1][0],scaleType=axisInfo[0],scaleProps=canvas[scaleType]();if(scaleProps.field&&scale){var _scale$config=scale.config(),type=_scale$config.type,step=_scale$config.step,stepMapper="boolean"==typeof step&&step;LegendCls=LEGEND_TYPE_MAP["".concat(type,"-").concat(stepMapper,"-").concat(scaleType)],dataset.push({scale:scale,canvas:canvas,fieldName:scaleProps.field,title:retrieveFieldDisplayName(canvas.data(),scaleProps.field),LegendCls:LegendCls,scaleType:scaleType})}}),dataset}(canvas),invalidValues=canvas.config().invalidValues,parser=getValueParser(invalidValues);return legendInfo.forEach(function(dataInfo,index){var legendMeasures={},LegendCls=dataInfo.LegendCls,scale=dataInfo.scale,fieldName=dataInfo.fieldName,titleText=dataInfo.title,scaleType=dataInfo.scaleType,config=legendConfig[scaleType]||{},title=config.title||{};if(title.text=title.text||titleText,config.show){config.position=position,config.align=align;var legend=getObjProp(prevLegends[scaleType],index);legend||(legend=LegendCls.create({labelManager:canvas._dependencies.smartlabel,cells:{AxisCell:axis_cell,TextCell:src_text_cell}})),legendMeasures.maxHeight="vertical"===align?height-headerHeight:.2*height,legendMeasures.maxWidth="horizontal"===align?width:.2*width,legendMeasures.width=Math.min(legendMeasures.maxWidth,config.width),legendMeasures.height=Math.min(legendMeasures.maxHeight,config.height),[PADDING,BORDER,MARGIN].forEach(function(e){legendMeasures[e]=config[e]});var metaData=legend.metaData();metaData instanceof datamodel_default.a&&metaData.dispose(),legend.scale(scale).valueParser(parser).title(title).fieldName(fieldName).config(config).metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName])).measurement(legendMeasures).canvasAlias(canvas.alias()).setLegendMeasures(),legends.push({canvas:canvas,legend:legend,scaleType:scaleType})}}),legends};function muze_chart_component_typeof(obj){return(muze_chart_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function muze_chart_component_defineProperties(target,props){for(var i=0;icurrHeight?(sections++,currWidth=0,currHeight=legHeight):sections<0&§ions++,sectionComponents[sections]=sectionComponents[sections]||[],currHeight-=Math.min(leg.measurement().height,currHeight),currWidth=Math.max(Math.min(leg.measurement().width,leg.measurement().maxWidth),currWidth),sectionComponents[sections].push({legend:leg,legendHeight:legHeight,legendWidth:currWidth})});var mount=makeElement(legendMount,["div"],sectionComponents,"".concat(classPrefix,"-legend-section"));mount.classed("".concat(classPrefix,"-legend-vertical-section"),!0).style("width",function(d){return"".concat(d[0].legendWidth,"px")}),makeElement(mount,["div"],function(d){return d},"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legendWidth,"px")})}else{var _mount=makeElement(legendMount,"div",[1],"".concat(classPrefix,"-legend-section"));_mount.classed("".concat(classPrefix,"-legend-horizontal-section"),!0),_mount.classed("".concat(classPrefix,"-legend-section-",0),!0).style("width","".concat(legWidth,"px")),makeElement(_mount,"div",this.components,"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legend.measurement().width,"px")})}}},{key:"draw",value:function draw(container){this.renderLegend(container||document.getElementById(this.renderAt()))}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.boundBox(params.config.measurement.legendSpace),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.components=params.component,this.params=params,this.target(params.config.target),this.position(params.config.position);var _defaultAlignmentHelp=function defaultAlignmentHelper(position){var alignment=null,alignWith="".concat(ROW_MATRIX_INDEX[1],"-").concat(COLUMN_MATRIX_INDEX[1]);switch(position){case src_constants_TOP:case src_constants_BOTTOM:alignment=HORIZONTAL_CENTER;break;case src_constants_LEFT:case src_constants_RIGHT:alignment=VERTICAL_CENTER;break;default:alignment=VERTICAL_CENTER}return{alignment:alignment,alignWith:alignWith}}(params.config.position),alignWith=_defaultAlignmentHelp.alignWith,alignment=_defaultAlignmentHelp.alignment;this.className(params.config.className),this.alignWith(params.config.alignWith||alignWith),this.alignment(params.config.alignment||alignment)}}]),LegendComponent}(),helper_d3Drag=(__webpack_require__(25),renderer_utils_getD3Drag()),arrowSizeMap={left:"width",right:"width",top:"height",bottom:"height"},getUnitPositions=function getUnitPositions(unitMeasures,totalLength,viewLength){var currentLen=0;return(unitMeasures.primary&&unitMeasures.primary.length?unitMeasures.primary:unitMeasures.secondary).map(function(e){var unitPosition=100*currentLen/(totalLength-viewLength);return currentLen+=e,unitPosition})},helper_createScrollBarArrow=function createScrollBarArrow(mount,type,config){var classPrefix=config.classPrefix,thickness=config.thickness,arrow=makeElement(mount,"div",[type],"".concat(classPrefix,"-scroll-arrow-").concat(type));return arrow.classed("".concat(classPrefix,"-scroll-arrow"),!0),arrow.style(arrowSizeMap[type],"".concat(thickness,"px")),makeElement(arrow,"div",[1],"".concat(classPrefix,"-scroll-arrow-chevron")).attr("id","".concat(classPrefix,"-scroll-arrow-chevron-").concat(type)),arrow},helper_createScrollBarRect=function createScrollBarRect(mount,config){var classPrefix=config.classPrefix,rect=makeElement(mount,"div",[1],"".concat(classPrefix,"-scroll-rect"));return{rect:rect,mover:makeElement(rect,"div",[1],"".concat(classPrefix,"-scroll-mover"))}},applyScrollMouseDownAction=function applyScrollMouseDownAction(moverRect,scrollMaker,speed){var mover=moverRect.mover,rect=moverRect.rect,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y;scrollMaker.changeMoverPosition({x:x-rectX+speed,y:y-rectY+speed})},helper_registerListenerOnArrow=function registerListenerOnArrow(scrollMaker,moverRect,arrowType,speed){var timer="",arrow=scrollMaker._components[arrowType],isTouchDevice=hasTouch();arrow.on(isTouchDevice?"touchstart":"mousedown",function(){renderer_utils_getEvent().preventDefault(),timer=setInterval(function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)},100)}).on(isTouchDevice?"touchend":"mouseup",function(){renderer_utils_getEvent().preventDefault(),clearInterval(timer)}).on("click",function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)})},helper_registerListeners=function registerListeners(scrollMaker){var moverRect=scrollMaker._components.moverRect,speed=scrollMaker.config().speed;helper_registerListenerOnArrow(scrollMaker,moverRect,"prevArrow",-speed),function applyMoverDrag(scrollMaker,moverRect){var startPos={},moverStartPos=0,rectStartPos=0,endPos={},mover=moverRect.mover,rect=moverRect.rect;mover.call(helper_d3Drag().on("start",function(){var event=renderer_utils_getEvent();moverStartPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect(),startPos={x:event.x,y:event.y}}).on("drag",function(){var event=renderer_utils_getEvent(),window=getWindow(),distanceMoved_x=(endPos={x:event.x,y:event.y}).x-startPos.x,distanceMoved_y=endPos.y-startPos.y,actualPosition={x:moverStartPos.x+distanceMoved_x-rectStartPos.x+window.pageXOffset,y:moverStartPos.y+distanceMoved_y-rectStartPos.y+window.pageYOffset};scrollMaker.changeMoverPosition(actualPosition)}))}(scrollMaker,moverRect),function applyRectClick(scrollMaker,moverRect){moverRect.rect.on("click",function(){var event=renderer_utils_getEvent();scrollMaker.emptyScrollAreaClick(event)})}(scrollMaker,moverRect),helper_registerListenerOnArrow(scrollMaker,moverRect,"nextArrow",speed)},scroll_bar_maker_props_PROPS={config:{sanitization:function sanitization(context,value){return value=mergeRecursive(context._config,value)}},manager:{},unitPositions:{},logicalSpace:{}};function scroll_maker_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=horizontal_scroll_maker_get(horizontal_scroll_maker_getPrototypeOf(HorizontalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,config,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"left",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"right",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitWidths=_this$logicalSpace.unitWidths,scrollBarWithouArrowLength=width-2*height;rect.style("width","".concat(dimensions.width-2*height,"px")),rect.style("height","".concat(100,"%")),mover.style("width","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style("height","".concat(100,"%")),mover.style(src_constants_LEFT,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitWidths,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.xrectStartPos.width?rectStartPos.width-moverPos.width:newPosition.x,mover.style(src_constants_LEFT,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:0,x:moverPos.x-rectStartPos.x-delta}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.width)/100;return this.changeMoverPosition({y:0,x:movement}),this}}],[{key:"type",value:function type(){return"horizontal"}}]),HorizontalScrollMaker}(),vertical:function(_ScrollMaker){function VerticalScrollMaker(){return function vertical_scroll_maker_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VerticalScrollMaker),vertical_scroll_maker_possibleConstructorReturn(this,vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker).apply(this,arguments))}return function vertical_scroll_maker_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&vertical_scroll_maker_setPrototypeOf(subClass,superClass)}(VerticalScrollMaker,scroll_maker_ScrollMaker),function vertical_scroll_maker_createClass(Constructor,protoProps,staticProps){return protoProps&&vertical_scroll_maker_defineProperties(Constructor.prototype,protoProps),staticProps&&vertical_scroll_maker_defineProperties(Constructor,staticProps),Constructor}(VerticalScrollMaker,[{key:"createScroll",value:function createScroll(mountPoint){var dimensions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=vertical_scroll_maker_get(vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"top",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"bottom",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitHeights=_this$logicalSpace.unitHeights,scrollBarWithouArrowLength=height-2*width;rect.style("height","".concat(scrollBarWithouArrowLength,"px")),rect.style("width","".concat(100,"%")),mover.style("width","".concat(100,"%")),mover.style("height","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style(src_constants_TOP,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitHeights,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.yrectStartPos.height?rectStartPos.height-moverPos.height:newPosition.y,mover.style(src_constants_TOP,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:moverPos.y-rectStartPos.y-delta,x:0}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.height)/100;return this.changeMoverPosition({x:0,y:movement}),this}}],[{key:"type",value:function type(){return"vertical"}}]),VerticalScrollMaker}()},ScrollComponent=function(_MuzeComponent){function ScrollComponent(params){var _this;!function scroll_component_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ScrollComponent);var ScrollMaker=scrollMakerMap[params.config.type];return params.component=new ScrollMaker,params.component.config(params.config.scrollBarComponentConfig),params.component.logicalSpace(params.dimensions),(_this=scroll_component_possibleConstructorReturn(this,scroll_component_getPrototypeOf(ScrollComponent).call(this,params.name,params.component.getLogicalSpace(),0))).setParams(params),_this}return function scroll_component_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&scroll_component_setPrototypeOf(subClass,superClass)}(ScrollComponent,MuzeComponent),function scroll_component_createClass(Constructor,protoProps,staticProps){return protoProps&&scroll_component_defineProperties(Constructor.prototype,protoProps),staticProps&&scroll_component_defineProperties(Constructor,staticProps),Constructor}(ScrollComponent,[{key:"manager",value:function manager(){return arguments.length?(this.component.manager(arguments.length<=0?void 0:arguments[0]),this):this.component.manager()}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){return this.component.scrollDeltaTo(delta),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){return this.component.scrollTo(scrollPercentage),this}},{key:"scrollToUnitIndex",value:function scrollToUnitIndex(unitIndex){var unitPositions=this.component.unitPositions(),sanitizedUnitIndex=Math.min(Math.max(0,unitIndex),unitPositions.length-1);return this.component.scrollTo(unitPositions[sanitizedUnitIndex]),this}},{key:"getScrollPositionsForUnits",value:function getScrollPositionsForUnits(){return this.component.unitPositions()}},{key:"draw",value:function draw(container){return this.component.createScroll(container||document.getElementById(this.renderAt())),this}},{key:"attachScrollAction",value:function attachScrollAction(externalAction){return this.component.attachScrollAction(externalAction),this}},{key:"detachScrollAction",value:function detachScrollAction(){return this.component.detachScrollAction(),this}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.component.config(params.config.scrollBarComponentConfig),this.component.logicalSpace(params.dimensions),this.boundBox(this.component.getLogicalSpace()),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.component=params.component||this.component,this.params=params,this.target(params.config.target),this.position(params.config.position),this.className(params.config.className),this.alignWith(params.config.alignWith),this.alignment(params.config.alignment)}},{key:"remove",value:function remove(){this.component.remove()}}]),ScrollComponent}();function matrix_component_typeof(obj){return(matrix_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function matrix_component_defineProperties(target,props){for(var i=0;iMath.abs(wheelDeltaY)&&scrollBarManager.preventBrowserScroll("horizontal",event).triggerScrollBarAction("horizontal",wheelDeltaX/30),0!==wheelDeltaY&&Math.abs(wheelDeltaX)0?heightAttr:height,minHeight),availableWidthForCanvas=Math.max(widthAttr>0?widthAttr:width,minWidth),_createHeaders=function createHeaders(context,canvasHeight,canvasWidth){var headerHeight=0,headers={},subtitle=context.subtitle(),isSubtitle=title_maker_resolveTitleSubTitleContent(subtitle[0]);return canvasHeight>=200&&canvasWidth>=200&&["title","subtitle"].forEach(function(type){var headerOptions=context[type](),content=title_maker_resolveTitleSubTitleContent(headerOptions[0]);if(content){var config=headerOptions[1];config.width=context.width(),config.height=context.height(),config.classPrefix=context.config().classPrefix,config.content=content,config.padding="title"!==type||isSubtitle.length?config.padding:subtitle[1].padding;var _createHeading=createHeading(config,type,context.dependencies().smartlabel,context["".concat(type,"Cell")]),height=_createHeading.height,cell=_createHeading.cell;headers["".concat(type,"Cell")]=cell,context._composition[type]=cell,headerHeight+=height}}),{headerHeight:headerHeight,headers:headers}}(context,availableHeightForCanvas,availableWidthForCanvas),headers=_createHeaders.headers,headerHeight=_createHeaders.headerHeight,legends=function createLegend(context,headerHeight,height,width){var measurement={height:height,width:width,headerHeight:headerHeight},legend=context.config().legend,show=legend.show,position=legend.position;legend.classPrefix=context.config().classPrefix;var align=position===src_constants_LEFT||position===src_constants_RIGHT?"vertical":"horizontal";return legend.show=show?"vertical"===align&&width>200||"horizontal"===align&&height>200:show,legend.align=align,legend_maker_legendInitializer(legend,context,measurement,context.composition().legend||{})}(context,headerHeight,availableHeightForCanvas,availableWidthForCanvas);context._composition.legend={},legends.forEach(function(e){context._composition.legend[e.scaleType]=e.legend});var legendSpace=function getLegendSpace(legends,legendConfig,availableHeight,availableWidth){var legendSpace={width:0,height:0};return legends.map(function(legendInfo){return legendInfo.legend.measurement()}).forEach(function(space){var height,width;width=Math.min(space.width,space.maxWidth),height=Math.min(space.height,space.maxHeight),"horizontal"===legendConfig.align?legendSpace.width+width>availableWidth?(legendSpace.width=availableWidth,legendSpace.height+=height):(legendSpace.width+=width,legendSpace.height=Math.max(legendSpace.height,height)):legendSpace.height+height>availableHeight?(legendSpace.height=height,legendSpace.width+=width):(legendSpace.height+=height,legendSpace.width=Math.max(legendSpace.width,width))}),"horizontal"===legendConfig.align&&(legendSpace.width=availableWidth),legendSpace}(legends,legend,availableHeightForCanvas,availableWidthForCanvas),legendWidth=legendPosition===src_constants_LEFT||legendPosition===src_constants_RIGHT?legendSpace.width:0,legendHeight=legendPosition===src_constants_TOP||legendPosition===src_constants_BOTTOM?legendSpace.height:0,components={headers:headers,legends:legends,canvases:[context],rows:rows,columns:columns,values:values,cornerMatrices:visGroup.cornerMatrices()},measurement={mountSpace:{height:height,width:width},headerHeight:headerHeight,legendSpace:legendSpace,canvasWidth:availableWidthForCanvas,canvasHeight:availableHeightForCanvas,width:availableWidthForCanvas-legendWidth,height:availableHeightForCanvas-headerHeight-legendHeight,minUnitHeight:context.minUnitHeight(),minUnitWidth:context.minUnitWidth()};return{layoutConfig:layoutConfig=mergeRecursive(layoutConfig,{classPrefix:classPrefix,showHeaders:showHeaders,border:mergeRecursive(visGroup.metaData().border,context.config().border),layoutArrangement:layoutArrangement,legend:legend,buffer:scrollBar.thickness,pagination:pagination,title:titleConfig,subtitle:subtitleConfig,isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,mount:mount,priority:priority}),components:components,measurement:measurement}},componentIndexes={title:0,subtitle:1,legend:2,verticalScrollBar:3,horizontalScrollBar:4,grid:5,message:6},componentNames={0:"title",1:"subtitle",2:"legend",3:"verticalScrollBar",4:"horizontalScrollBar",5:"grid",6:"message"},layout_maker_renderLayout=function renderLayout(canvas,renderDetails){var layoutManager=canvas._layoutManager,gridLayout=canvas.layout(),grid=componentIndexes.grid,compWrappers=component_wrapper_maker_componentWrapperMaker(canvas,gridLayout,renderDetails),componentWrappers=Object.keys(componentIndexes).map(function(e){return compWrappers[e]});componentWrappers[grid]&&function createScrollManager(componentWrappers,canvas){var verticalScrollBar=componentIndexes.verticalScrollBar,grid=componentIndexes.grid,horizontalScrollWrapper=componentWrappers[componentIndexes.horizontalScrollBar],verticalScrollWrapper=componentWrappers[verticalScrollBar],gridWrapper=componentWrappers[grid],scrollBarManager=new ScrollManager,scrollBarComponents={};verticalScrollWrapper&&(scrollBarComponents.vertical=verticalScrollWrapper),horizontalScrollWrapper&&(scrollBarComponents.horizontal=horizontalScrollWrapper),scrollBarManager.scrollBarComponents(scrollBarComponents).attachedComponents({grid:gridWrapper}),canvas.composition().hScrollBar=horizontalScrollWrapper,canvas.composition().vScrollBar=verticalScrollWrapper,[horizontalScrollWrapper,verticalScrollWrapper].forEach(function(wrapper){wrapper&&wrapper.manager(scrollBarManager)}),gridWrapper.scrollBarManager(scrollBarManager)}(componentWrappers,canvas),componentWrappers.forEach(function(componentWrapper,index){if(!componentWrapper){var deleteElementName=componentNames[index];layoutManager.removeComponent(deleteElementName)}}),layoutManager.registerComponents(componentWrappers).compute(),function attachListeners(componentWrappers){componentWrappers.forEach(function(componentWrapper){componentWrapper&&componentWrapper.attachListener()})}(componentWrappers)};function group_firebolt_typeof(obj){return(group_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function group_firebolt_defineProperties(target,props){for(var i=0;ia.getFullYear()&&(t=""+(i-1)+r),d(t).getFullYear()},formatter:function formatter(e){var t=d(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:"Y",index:0,extract:function extract(){return"(\\d{4})"},parser:h.defaultNumberParser(),formatter:function formatter(e){return d(e).getFullYear().toString()}}}},h.getTokenFormalNames=function(){var e=h.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},h.tokenResolver=function(){var e=h.getTokenDefinitions(),t=function t(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[i+1],-1!==r.indexOf(o)&&a.push({index:i,token:o});return a},h.formatAs=function(e,t){var n,r=d(e),a=h.findTokens(t),i=h.getTokenDefinitions(),o=String(t),u=h.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=a.length;l=0;d--)(f=i[d].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(d=0;d0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],a=+(n[1]||n[0]);if(a>=r)for(var i=r;i<=a;i+=1)t(i)})}var R=function(){function e(e,t){for(var n=0;n3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:U.CROSS,i=[],o=[],u=n||H,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,d=c.name+"."+f.name,p=Y(c,f);if(l===s)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=_({},e.schema());-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),i.push(t)}),f.fields.forEach(function(e){var t=_({},e.schema());-1!==p.indexOf(t.name)?r||(t.name=f.name+"."+t.name,i.push(t)):i.push(t)}),T(e._rowDiffset,function(n){var d=!1,h=void 0;T(t._rowDiffset,function(v){var m=[],y={};y[l]={},y[s]={},c.fields.forEach(function(e){m.push(e.partialField.data[n]),y[l][e.name()]={rawValue:e.partialField.data[n],formattedValue:e.formattedData()[n]}}),f.fields.forEach(function(e){-1!==p.indexOf(e.schema().name)&&r||m.push(e.partialField.data[v]),y[s][e.name()]={rawValue:e.partialField.data[v],formattedValue:e.formattedData()[v]}});var g=At(y[l]),b=At(y[s]);if(u(g,b,function(){return e.detachedRoot()},function(){return t.detachedRoot()},{})){var w={};m.forEach(function(e,t){w[i[t].name]=e}),d&&U.CROSS!==a?o[h]=w:(o.push(w),d=!0,h=n)}else if((a===U.LEFTOUTER||a===U.RIGHTOUTER)&&!d){var O={},_=c.fields.length-1;m.forEach(function(e,t){O[i[t].name]=t<=_?e:null}),d=!0,h=n,o.push(O)}})}),new on(o,i,{name:d})}function J(e,t){var n=""+e,r=""+t;return nr?1:0}function z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J;return e.length>1&&function e(t,n,r,a){if(r===n)return t;var i=n+Math.floor((r-n)/2);return e(t,n,i,a),e(t,i+1,r,a),function(e,t,n,r,a){for(var i=e,o=[],u=t;u<=r;u+=1)o[u]=i[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(i[l]=o[f],f+=1):f>r?(i[l]=o[c],c+=1):a(o[c],o[f])<=0?(i[l]=o[c],c+=1):(i[l]=o[f],f+=1)}(t,n,i,r,a),t}(e,0,e.length-1,t),e}var K=function K(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function W(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt?1:-1}:function(e,t){return(e=""+e)==(t=""+t)?0:e>t?-1:1}}return n}(e.type,n)}function q(e,t){var n=new Map,r=[];return e.forEach(function(e){var a=e[t];n.has(a)?r[n.get(a)][1].push(e):(r.push([a,[e]]),n.set(a,r.length-1))}),r}function Z(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,a){return t[r]=e[1].map(function(e){return e[n[a].index]}),t},r),r}function $(e,t,n){for(var r=void 0,a=void 0,i=void 0,o=n.length-1;o>=0;o--)r=n[o][0],a=n[o][1],(i=Ht(t,r))&&("function"==typeof a?z(e,function(e,t){return a(e[i.index],t[i.index])}):E(a)?function(){var n=q(e,i.index),r=a[a.length-1],o=a.slice(0,a.length-1),u=o.map(function(e){return Ht(t,e)});n.forEach(function(e){e.push(Z(e,o,u))}),z(n,function(e,t){var n=e[2],a=t[2];return r(n,a)}),e.length=0,n.forEach(function(t){e.push.apply(e,W(t[1]))})}():function(){var t=X(i,a);z(e,function(e,n){return t(e[i.index],n[i.index])})}())}var Q,ee=function e(t,n,r,a){if(0===t.length)return n;var i=t[0],o=new Map;n.reduce(function(e,t){var n=t[i.index];return e.has(n)?e.get(n).push(t):e.set(n,[t]),e},o);var u=!0,c=!1,f=void 0;try{for(var l,s=o[Symbol.iterator]();!(u=(l=s.next()).done);u=!0){var d=l.value,p=K(d,2),h=p[0],v=p[1],m=e(t.slice(1),v,r,a);o.set(h,m),Array.isArray(m)&&$(m,r,a)}}catch(e){c=!0,f=e}finally{try{!u&&s.return&&s.return()}finally{if(c)throw f}}return o};function ne(e,t,n,r,a){var i={schema:[],data:[],uids:[]},o=(a=Object.assign({},{addUid:!1,columnWise:!1},a)).addUid,u=r&&r.length>0,c=[];if(n.split(",").forEach(function(t){for(var n=0;nn&&(n=a))}),[t,n]}}]),t}(),He=function(){function e(e,t){for(var n=0;n=i?c=!0:(r=e.charCodeAt(o++))===ut?f=!0:r===ct&&(f=!0,e.charCodeAt(o)===ut&&++o),e.slice(a+1,t-1).replace(/""/g,'"')}for(;o9999?"+"+st(t,6):st(t,4))+"-"+st(e.getUTCMonth()+1,2)+"-"+st(e.getUTCDate(),2)+(i?"T"+st(n,2)+":"+st(r,2)+":"+st(a,2)+"."+st(i,3)+"Z":a?"T"+st(n,2)+":"+st(r,2)+":"+st(a,2)+"Z":r||n?"T"+st(n,2)+":"+st(r,2)+"Z":"")}(e):t.test(e+="")?'"'+e.replace(/"/g,'""')+'"':e}return{parse:function parse(e,t){var n,a,i=r(e,function(e,r){if(n)return n(e,r-1);a=e,n=t?function(e,t){var n=ft(e);return function(r,a){return t(n(r),a,e)}}(e,t):ft(e)});return i.columns=a||[],i},parseRows:r,format:function format(t,n){return null==n&&(n=lt(t)),[n.map(o).join(e)].concat(a(t,n)).join("\n")},formatBody:function formatBody(e,t){return null==t&&(t=lt(e)),a(e,t).join("\n")},formatRows:function formatRows(e){return e.map(i).join("\n")}}},ht=pt(","),vt=(ht.parse,ht.parseRows,ht.format,ht.formatBody,ht.formatRows,pt("\t"));vt.parse,vt.parseRows,vt.format,vt.formatBody,vt.formatRows;var gt,mt=function mt(e,t,n){n=Object.assign({},{firstRowHeader:!0,fieldSeparator:","},n);var r=pt(n.fieldSeparator);return rt(r.parseRows(e),t,n)},yt=function yt(e,t){if(!Array.isArray(t))throw new Error("Schema missing or is in an unsupported format");var n={},r=0,a=void 0,i=[],o=v(i),u=t.map(function(e){return e.name});return e.forEach(function(e){var t=[];u.forEach(function(i){i in n?a=n[i]:(n[i]=r++,a=r-1),t[a]=e[i]}),o.apply(void 0,t)}),[Object.keys(n),i]},bt=function bt(e,t,n){var r={FlatJSON:yt,DSVStr:mt,DSVArr:rt},a=D(e);if(!a)throw new Error("Couldn't detect the data format");return r[a](e,t,n)},wt=function wt(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function Ot(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _t(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},a=arguments[3];t===L.COMPOSE?(e._derivation.length=0,(n=e._derivation).push.apply(n,_t(a))):e._derivation.push({op:t,meta:r,criteria:a})})(t,n,arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},arguments[4]),function Dt(e,t){var n;(n=t._ancestorDerivation).push.apply(n,_t(e._ancestorDerivation).concat(_t(e._derivation)))}(e,t)},Nt=(Ot(gt={},l.NORMAL,{diffIndex:["rowDiffset"],calcDiff:[!0,!1]}),Ot(gt,l.INVERSE,{diffIndex:["rejectRowDiffset"],calcDiff:[!1,!0]}),Ot(gt,l.ALL,{diffIndex:["rowDiffset","rejectRowDiffset"],calcDiff:[!0,!0]}),gt),kt=function kt(e,t,n){if(-1!==n&&t===n+1){var r=e.length-1;e[r]=e[r].split("-")[0]+"-"+t}else e.push(""+t)},Tt=function Tt(e,t,n){var r=[],a=[],i=wt(Nt[n].calcDiff,2),o=i[0],u=i[1];return T(e,function(e){var n=t(e);n&&o&&kt(r,e,-1),!n&&u&&kt(a,e,-1)}),{rowDiffset:r.join(","),rejectRowDiffset:a.join(",")}},Ct=function Ct(e,t,n,r,a){var i={},o=function o(){return r.detachedRoot()},u=n.mode,c=e._rowDiffset,f=e.getPartialFieldspace().fields,l=f.map(function(e){return e.formattedData()}),s=f.map(function(e){return e.data()});return a(c,function(e){return t(Et(f,l,s,e),e,o,i)},u)},It=function It(e,t,n){for(var r=n(e,t,0),a=1,i=e.length;a2&&void 0!==arguments[2]?arguments[2]:{},r=[],a=n.operation||"and",i=n.filterByMeasure||!1,o=function Mt(e){var t=e.clone(!1),n=e.getPartialFieldspace();return t._colIdentifier=n.fields.map(function(e){return e.name()}).join(","),n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,t.__calculateFieldspace().calculateFieldsConfig(),t}(e),u=o.getFieldsConfig();return r=t.length?t.map(function(e){return n=void 0,r=(t=e).getData(),a=t.getFieldsConfig(),o=Object.keys(t.getFieldspace().getDimension()).filter(function(e){return e in u}),c=o.length,f=o.map(function(e){return a[e].index}),l=Object.keys(t.getFieldspace().getMeasure()).filter(function(e){return e in u}),s=t.getFieldspace().fieldsObj(),d=r.data,p=l.reduce(function(e,t){return e[t]=s[t].domain(),e},{}),h={},n=function n(e,t,_n){return t[e[_n]]},c&&d.forEach(function(e){var t=It(f,e,n);h[t]=1}),n=function n(e,t,_n2){return t[e[_n2]].internalValue},d.length?function(e){var t=!c||h[It(o,e,n)];return i?l.every(function(t){return e[t].internalValue>=p[t][0]&&e[t].internalValue<=p[t][1]})&&t:t}:function(){return!1};var t,n,r,a,o,c,f,l,s,d,p,h}):[function(){return!1}],"and"===a?o.select(function(e){return r.every(function(t){return t(e)})},{saveChild:!1}):o.select(function(e){return r.some(function(t){return t(e)})},{saveChild:!1})},xt=function xt(e,t,n,r,a){e._rowDiffset=t,e.__calculateFieldspace().calculateFieldsConfig(),Ft(n,e,L.SELECT,{config:r},a)},Lt=function Lt(e,t,n,r){var a=e.clone(n.saveChild),i=t;return n.mode===l.INVERSE&&(i=r.filter(function(e){return-1===t.indexOf(e)})),a._colIdentifier=i.join(","),a.__calculateFieldspace().calculateFieldsConfig(),Ft(e,a,L.PROJECT,{projField:t,config:n,actualProjField:i},null),a},Vt=function Vt(e){if((e=_({},e)).type||(e.type=f.DIMENSION),!e.subtype)switch(e.type){case f.MEASURE:e.subtype=c.CONTINUOUS;break;default:case f.DIMENSION:e.subtype=u.CATEGORICAL}return e},Bt=function Bt(e){return e.map(function(e){return function(e){var t=[c.CONTINUOUS],n=[u.CATEGORICAL,u.BINNED,u.TEMPORAL,u.GEO],r=e.type,a=e.subtype,i=e.name;switch(r){case f.DIMENSION:if(-1===n.indexOf(a))throw new Error("DataModel doesn't support dimension field subtype "+a+" used for "+i+" field");break;case f.MEASURE:if(-1===t.indexOf(a))throw new Error("DataModel doesn't support measure field subtype "+a+" used for "+i+" field");break;default:throw new Error("DataModel doesn't support field type "+r+" used for "+i+" field")}}(e=Vt(e)),e})},Yt=function Yt(e,t,n,r){n=Bt(n),r=Object.assign(Object.assign({},nt),r);var i=a[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var u=i(t,n,r),c=wt(u,2),f=c[0],l=c[1];!function(e,t){n.forEach(function(e){var n=e.as;if(n){var r=t.indexOf(e.name);t[r]=n,e.name=n,delete e.as}})}(0,f);var s=tt(l,n,f),d=F.createNamespace(s,r.name);e._partialFieldspace=d,e._rowDiffset=l.length&&l[0].length?"0-"+(l[0].length-1):"";var p=[],h=d.fields,v=h.map(function(e){return e.data()}),m=h.map(function(e){return e.formattedData()});return T(e._rowDiffset,function(e){p[e]=Et(h,m,v,e)}),d._cachedValueObjects=p,e._colIdentifier=n.map(function(e){return e.name}).join(),e._dataFormat=r.dataFormat===o.AUTO?D(t):r.dataFormat,e},Ht=function Ht(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a.nonTraversingModel,o=a.excludeModels||[];t!==i&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var i=Gt(n,t);e(t,i,r,a)}))},Xt=function Xt(e,t,n,r){var a=void 0,i=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}],a=[];else{var s,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),(a=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:a,models:e.model,path:function Wt(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t}(e.model)}))})}a=(s=[]).concat.apply(s,[].concat(_t(p),[e])).filter(function(e){return null!==e}),l.push({criteria:a,excludeModels:[].concat(h,_t(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(i=Pt(g,a,{filterByMeasure:f}),Jt(g,i,y)),l.forEach(function(e){var t=Pt(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n1?(a=e.clone(r.saveChild),xt(a,u[c[1]],e,n,t),[o,a]):o}(this,e,t,{saveChild:t.saveChild})}},{key:"isEmpty",value:function value(){return!this._rowDiffset.length||!this._colIdentifier.length}},{key:"clone",value:function value(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=new this.constructor(this);return e?t.setParent(this):t.setParent(null),t}},{key:"project",value:function value(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),a=Object.keys(r),i=t.mode,o=$t(e,a,r);return i===l.ALL?[Lt(this,o,{mode:l.NORMAL,saveChild:t.saveChild},a),Lt(this,o,{mode:l.INVERSE,saveChild:t.saveChild},a)]:Lt(this,o,t,a)}},{key:"getFieldsConfig",value:function value(){return this._fieldConfig}},{key:"calculateFieldsConfig",value:function value(){return this._fieldConfig=this._fieldspace.fields.reduce(function(e,t,n){return e[t.name()]={index:n,def:t.schema()},e},{}),this}},{key:"dispose",value:function value(){this._parent&&this._parent.removeChild(this),this._parent=null,this._children.forEach(function(e){e._parent=null}),this._children=[]}},{key:"removeChild",value:function value(e){var t=this._children.findIndex(function(t){return t===e});-1===t||this._children.splice(t,1)}},{key:"setParent",value:function value(e){this._parent&&this._parent.removeChild(this),this._parent=e,e&&e._children.push(this)}},{key:"getParent",value:function value(){return this._parent}},{key:"getChildren",value:function value(){return this._children}},{key:"getDerivations",value:function value(){return this._derivation}},{key:"getAncestorDerivations",value:function value(){return this._ancestorDerivation}}]),e}(),nn=function nn(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},rn=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=function Ae(e,t,n,r){var a=function(e,t){var n=[],r=e.getFieldspace().getDimension();return Object.entries(r).forEach(function(e){var r=Ee(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),n}(e,t),i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=e.getFieldspace().getMeasure(),a=_e.defaultReducer();return Object.keys(r).forEach(function(e){"string"!=typeof t[e]&&(t[e]=r[e].defAggFn());var i=_e.resolve(t[e]);i?n[e]=i:(n[e]=a,t[e]=ge)}),n}(e,n),o=e.getFieldspace(),u=o.fieldsObj(),c=o.name,l=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=Ee(e,2),n=t[0],r=t[1];if(-1!==a.indexOf(n)||i[n])switch(d.push(_({},r.schema())),r.schema().type){case f.MEASURE:s.push(n);break;default:case f.DIMENSION:l.push(n)}});var m=0;T(e._rowDiffset,function(e){var t="";l.forEach(function(n){t=t+"-"+u[n].partialField.data[e]}),void 0===p[t]?(p[t]=m,h.push({}),l.forEach(function(t){h[m][t]=u[t].partialField.data[e]}),s.forEach(function(t){h[m][t]=[u[t].partialField.data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].partialField.data[e])})});var y={},g=function g(){return e.detachedRoot()};return h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=i[n](e[n],g,y)})}),r?(r.__calculateFieldspace(),v=r):v=new yn(h,d,{name:c}),v}.apply(void 0,[this,e,t]);return Ft(this,i,L.GROUPBY,{fieldsArr:e,groupByString:r,defaultReducer:_e.defaultReducer()},t),n.saveChild?i.setParent(this):i.setParent(null),i}},{key:"sort",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{saveChild:!1},n=this.getData({order:"row",sort:e}),a=[n.schema.map(function(e){return e.name})].concat(n.data),i=new this.constructor(a,n.schema,{dataFormat:"DSVArr"});return Ft(this,i,L.SORT,t,e),t.saveChild?i.setParent(this):i.setParent(null),i}},{key:"serialize",value:function value(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:","},t);var n=this.getFieldspace().fields,r=n.map(function(e){return e.formattedData()}),a=r[0].length,i=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(i=[],u=0;u=0&&(n.fields[o]=e)}else n.fields.push(e),r.forEach(function(t,n){t[e.name()]=new k(a[n],i[n],e)});return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t,n){var r=this;e=Vt(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var a=this.getFieldsConfig(),i=t.slice(0,t.length-1),o=t[t.length-1];if(a[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in datamodel");var u=i.map(function(e){var t=a[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),c=this.clone(n.saveChild),f=c.getFieldspace().fields,l=u.map(function(e){return f[e]}),s={},d=function d(){return r.detachedRoot()},p=[];T(c._rowDiffset,function(e){var t=l.map(function(t){return t.partialField.data[e]});p[e]=o.apply(void 0,an(t).concat([e,d,s]))});var h=tt([p],[e],[e.name]),v=nn(h,1)[0];return c.addField(v),Ft(this,c,L.CAL_VAR,{config:e,fields:i},o),c}},{key:"propagate",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=t.isMutableAction,i=t.sourceId,o=t.payload,u=function Kt(e){for(;e._parent;)e=e._parent;return e}(this),c=u._propagationNameSpace,l={groupByModel:function zt(e){for(;e._parent&&e._derivation.find(function(e){return e.op!==L.GROUPBY});)e=e._parent;return e}(this),model:u};return n&&function Zt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,a=t.isMutableAction,i=t.criteria,o=t.action+"-"+t.sourceId;r=a?e.mutableActions:e.immutableActions,null===i?delete r[o]:r[o]={model:n,config:t}}(c,t,this),Xt(e,l,{propagationNameSpace:c,sourceId:i},Object.assign({payload:o},t)),a&&function qt(e,t,n){var r=e.immutableActions;for(var a in r){var i=r[a].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(i,n.config);if(i.sourceId!==o&&u){var c=i.criteria;Xt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},i)}}}(c,l,{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,t){var n=this.getFieldsConfig();if(!n[e])throw new Error("Field "+e+" doesn't exist");var r=t.name||e+"_binned";if(n[r])throw new Error("Field "+r+" already exists");var a=function(e,t,n){var r=n.buckets,a=n.binsCount,i=n.binSize,o=n.start,u=n.end,f=function I(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}(e.domain(),2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var d=[],p=0;p=(i=e[a=n+Math.floor((r-n)/2)]).start&&t=i.end?n=a+1:t2&&void 0!==arguments[2]?arguments[2]:function(e){return e},r=arguments[3],a=r.saveChild,i=e.getFieldspace().fieldsObj(),o=Ct(e.clone(a),n,r,e,function(){for(var e=arguments.length,n=Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments[2],r={mode:l.NORMAL,saveChild:!0},a=this.getFieldsConfig(),i=Object.keys(a),o=[[t]];return n=Object.assign({},r,n),(e=e.length?e:[[]]).forEach(function(e,n){o[n]=$t([].concat(an(e),an(t)),i,a)}),function Ut(e,t,n,r){return t.map(function(t){return Lt(e,t,n,r)})}(this,o,n,i)}}],[{key:"configureInvalidAwareTypes",value:function value(e){return M.invalidAwareVals(e)}},{key:"Reducers",get:function get(){return _e}}]),t}(),un=ye.sum,cn=ye.avg,fn=ye.min,ln=ye.max,sn=ye.first,dn=ye.last,pn=ye.count,hn=ye.std,vn={compose:function compose(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0},r=e,a=void 0,i=[];return t.forEach(function(e){r=e(r),i.push.apply(i,function B(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t/gi),smartlabel},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(text,calculateDifference,length){if(!this._init)return!1;var size,csArr,tw,twi,cachedStyle,asymmetricDifference,maxAdvancedCacheLimit=this.options.maxCacheLimit,container=this._container,style=this.style||{},cache=this._advancedCache||(this._advancedCache={}),advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]),cacheName=text+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||""),cacheInitName=text+"init"+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||"");return htmlSplCharSpace[text]&&(text=htmlSplCharSpace[text]),calculateDifference?void 0===(asymmetricDifference=cache[cacheInitName])&&(container.innerHTML=text.repeat?text.repeat(length):Array(length+1).join(text),tw=container.offsetWidth,container.innerHTML=text,twi=container.offsetWidth,asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1),advancedCacheKey.push(cacheInitName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()]):asymmetricDifference=0,(cachedStyle=cache[cacheName])?(csArr=cachedStyle.split(","),{width:parseFloat(csArr[0],10),height:parseFloat(csArr[1],10)}):(container.innerHTML=text,size={height:container.offsetHeight,width:container.offsetWidth+asymmetricDifference},cache[cacheName]=size.width+","+size.height,advancedCacheKey.push(cacheName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()],size)},SmartLabelManager.prototype._getWidthFn=function(){var contObj=this._containerObj,container=this._container,svgText=contObj.svgText;return svgText?function(str){var bbox,width;return svgText.textContent=str,(width=(bbox=svgText.getBBox()).width-SVG_BBOX_CORRECTION)<1&&(width=bbox.width),width}:function(str){return container.innerHTML=str,container.offsetWidth}},SmartLabelManager.prototype.setStyle=function(style){return this._init?style!==this.style||this._styleNotSet?(style||(style=this.style),slLib.setLineHeight(style),this.style=style,this._containerObj=sCont=this._containerManager.get(style),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var sCont},SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){return this._init?(this._showNoEllipses=!useEllipses,this):this},SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag=!1,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?"":"...",lineHeight=this._lineHeight,context=this._context,container=this._container,sCont=this._containerObj,ellipsesWidth=sCont.ellipsesWidth,dotWidth=sCont.dotWidth,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,fastTrim=function fastTrim(str){for(var ws=/\s/,i=(str=str.replace(/^\s\s*/,"")).length;ws.test(str.charAt(i-=1)););return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:!1};if(getWidth=this._getWidthFn(),maxHeight===lineHeight&&(maxHeight*=1.2),container){if(!documentSupport.isBrowserLess){if((hasHTMLTag=slLib.xmlTagRegEx.test(text))?(container.innerHTML=text,smartLabel.oriTextWidth=oriWidth=container.offsetWidth,smartLabel.oriTextHeight=oriHeight=container.offsetHeight):(tmpText=text.replace(slLib.ltgtRegex,function(match){return"<"===match?"<":">"}),getOriSizeImproveObj=this.getOriSize(tmpText,!0),smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width,smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height),oriHeight<=maxHeight&&oriWidth<=maxWidth)return smartLabel.width=smartLabel.oriTextWidth=oriWidth,smartLabel.height=smartLabel.oriTextHeight=oriHeight,smartLabel;if(lineHeight>maxHeight)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=0,smartLabel.height=smartLabel.oriTextHeight=0,smartLabel}if(text=fastTrim(text).replace(/(\s+)/g," "),maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth,!hasHTMLTag){if(len=(oriTextArr=text.split("")).length,trimStr="",tempArr=[],tempChar=oriTextArr[0],this._cache[tempChar]?minWidth=this._cache[tempChar].width:(minWidth=getWidth(tempChar),this._cache[tempChar]={width:minWidth}),maxWidthWithEll>minWidth)i=(tempArr=text.substr(0,slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split("")).length;else{if(minWidth>maxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;ellipsesStr&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr=""))}if(strWidth=getWidth(tempArr.join("")),strHeight=this._lineHeight,noWrap){for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth))return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=getWidth(smartLabel.text),smartLabel.height=this._lineHeight,smartLabel;return smartLabel.text=tempArr.join(""),smartLabel.width=strWidth,smartLabel.height=this._lineHeight,smartLabel}for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth)){if(lastSpace=text.substr(0,tempArr.length).lastIndexOf(" "),lastDash=text.substr(0,tempArr.length).lastIndexOf("-"),lastSpace>lastIndexBroken?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastSpace,1,"
"),lastIndexBroken=lastSpace,newCharIndex=lastSpace+1):lastDash>lastIndexBroken?(lastDash===tempArr.length-1?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"
-")):(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"-
")),lastIndexBroken=lastDash,newCharIndex=lastDash+1):(tempArr.splice(tempArr.length-1,1,"
"+oriTextArr[i]),lastLineBreak=tempArr.length-2,strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join("")),lastIndexBroken=lastLineBreak,newCharIndex=i),(strHeight+=this._lineHeight)>maxHeight)return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=maxWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel;maxStrWidth=max(maxStrWidth,strWidth),trimStr=null,nearestChar=slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this),strWidth=getWidth(text.substr(newCharIndex,nearestChar||1)),tempArr.length)/g,'$1'),container.innerHTML=text,x=0,y=(spanArr=container[documentSupport.childRetriverFn](documentSupport.childRetriverString)).length;xmaxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;if(minWidth>maxWidthWithEll&&!this._showNoEllipses&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr="")),initialLeft=characterArr[0].elem.offsetLeft,initialTop=characterArr[0].elem.offsetTop,noWrap)for(;imaxWidthWithEll&&(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),container.offsetWidth>maxWidth&&(removeFromIndex=i,i=len));else for(;imaxWidthWithEll?(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),elemRightMostPoint>maxWidth&&(lastSpace=characterArr[i].spaceIdx,lastDash=characterArr[i].dashIdx,lastSpace>lastIndexBroken?(characterArr[lastSpace].elem.innerHTML="
",lastIndexBroken=lastSpace):lastDash>lastIndexBroken?(characterArr[lastDash].elem.innerHTML=lastDash===i?"
-":"-
",lastIndexBroken=lastDash):elem.parentNode.insertBefore(lastBR=doc.createElement("br"),elem),elem.offsetHeight+elem.offsetTop>maxHeight?(lastBR?lastBR.parentNode.removeChild(lastBR):lastIndexBroken===lastDash?characterArr[lastDash].elem.innerHTML="-":characterArr[lastSpace].elem.innerHTML=" ",removeFromIndex=i,i=len):removeFromIndexForEllipses=null)):elemLowestPoint>maxHeight&&(removeFromIndex=i,i=len);if(removeFromIndex=removeFromIndexForEllipses;i-=1)(elem=characterArr[i].elem).parentNode.removeChild(elem);for(;i>=0;i-=1)elem=characterArr[i].elem,slLib.classNameBrReg.test(elem.className)?elem.parentNode.removeChild(elem):i=0}return smartLabel.text=container.innerHTML.replace(slLib.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),smartLabel.isTruncated&&(smartLabel.text+=ellipsesStr,smartLabel.tooltext=toolText),smartLabel.height=container.offsetHeight,smartLabel.width=container.offsetWidth,smartLabel}return smartLabel.error=new Error("Body Tag Missing!"),smartLabel},SmartLabelManager.prototype.getOriSize=function(text,detailedCalculationFlag){if(!this._init)return!1;var textArr,letter,lSize,i,l,cumulativeSize=0,height=0,indiSizeStore={};if(!detailedCalculationFlag)return this._calCharDimWithCache(text);for(i=0,l=(textArr=text.split("")).length;i]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+classNameWithTag+"[^\\>]{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 childRetriverFn,childRetriverString,noClassTesting;return doc.getElementsByClassName?(childRetriverFn="getElementsByClassName",childRetriverString=classNameWithTag,noClassTesting=!0):(childRetriverFn="getElementsByTagName",childRetriverString="span",noClassTesting=!1),{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(userAgent),isWebKit:new RegExp(" AppleWebKit/").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild)return containerParent.appendChild(container=doc.createElement("DIV")),container.className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),container}else if((body=doc.getElementsByTagName("body")[0])&&body.appendChild)return(container=doc.createElement("DIV")).className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),1,body.appendChild(container),container},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length)return 0;var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;if(difference=maxWidth,charLen=ceil(maxWidth/avgWidth),oriWidthtext.length&&(difference=maxWidth-oriWidth,charLen=text.length);difference>0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}for(;difference<0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}return charLen},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize=styleObj.fontSize||"12px";return styleObj.lineHeight=styleObj.lineHeight||styleObj["line-height"]||1.2*parseInt(fSize,10)+"px",styleObj}}}};exports.default=lib,module.exports=exports.default},function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";r.r(t);var n=function(){function e(e,t){for(var r=0;r2?(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 value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"next",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(n,P(e)),o}},{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,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 value(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i5?maxContainers:5)<20?maxContainers:20,this.maxContainers=maxContainers,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=parentContainer,isBrowserLess&&((svg=doc.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),svg.setAttributeNS("http://www.w3.org/2000/svg","height","0"),svg.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=svg,this.rootNode.appendChild(svg))}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr="";for(key in slLib.supportedStyle)void 0!==style[key]&&(keyStr+=slLib.supportedStyle[key]+":"+style[key]+";");if(!keyStr)return!1;if(containerObj=containers[keyStr])this.first!==containerObj&&(containerObj.prev&&(containerObj.prev.next=containerObj.next),containerObj.next&&(containerObj.next.prev=containerObj.prev),containerObj.next=this.first,containerObj.next.prev=containerObj,this.last===containerObj&&(this.last=containerObj.prev),containerObj.prev=null,this.first=containerObj);else{if(len>=max)for(diff=len-max+1;diff--;)this.removeContainer(this.last);containerObj=this.addContainer(keyStr)}return containerObj},ContainerManager.prototype.addContainer=function(keyStr){var node,container;return this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}},container.next=this.first,container.next&&(container.next.prev=container),this.first=container,this.last||(this.last=container),this.length+=1,node=container.node=doc.createElement("div"),this.rootNode.appendChild(node),documentSupport.isIE&&!documentSupport.hasSVG?node.style.setAttribute("cssText",keyStr):node.setAttribute("style",keyStr),node.setAttribute("aria-hidden","true"),node.setAttribute("role","presentation"),node.style.display="inline-block",node.innerHTML=slLib.testStrAvg,container.lineHeight=node.offsetHeight,container.avgCharWidth=node.offsetWidth/3,documentSupport.isBrowserLess?((node=container.svgText=doc.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",keyStr),this.svgRoot.appendChild(node),node.textContent=slLib.testStrAvg,container.lineHeight=node.getBBox().height,container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3,node.textContent="...",container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION,node.textContent=".",container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION):(node.innerHTML="...",container.ellipsesWidth=node.offsetWidth,node.innerHTML=".",container.dotWidth=node.offsetWidth,node.innerHTML=""),container},ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;keyStr&&this.length&&cObj&&(this.length-=1,cObj.prev&&(cObj.prev.next=cObj.next),cObj.next&&(cObj.next.prev=cObj.prev),this.first===cObj&&(this.first=cObj.next),this.last===cObj&&(this.last=cObj.prev),cObj.node.parentNode.removeChild(cObj.node),delete this.containers[keyStr])},ContainerManager.prototype.dispose=function(){var key,containers=this.containers;for(key in this.maxContainers=null,containers)this.removeContainer(containers[key]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},module.exports=ContainerManager},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var scales_namespaceObject={};__webpack_require__.r(scales_namespaceObject),__webpack_require__.d(scales_namespaceObject,"scaleLinear",function(){return linear_linear}),__webpack_require__.d(scales_namespaceObject,"scaleThreshold",function(){return threshold_threshold}),__webpack_require__.d(scales_namespaceObject,"scaleLog",function(){return log}),__webpack_require__.d(scales_namespaceObject,"scalePow",function(){return pow}),__webpack_require__.d(scales_namespaceObject,"scaleIdentity",function(){return identity_identity}),__webpack_require__.d(scales_namespaceObject,"scaleOrdinal",function(){return ordinal}),__webpack_require__.d(scales_namespaceObject,"scaleSequential",function(){return sequential}),__webpack_require__.d(scales_namespaceObject,"scaleQuantize",function(){return quantize_quantize}),__webpack_require__.d(scales_namespaceObject,"scaleQuantile",function(){return quantile_quantile}),__webpack_require__.d(scales_namespaceObject,"schemeCategory10",function(){return category10}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20",function(){return category20}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20b",function(){return category20b}),__webpack_require__.d(scales_namespaceObject,"scaleBand",function(){return band}),__webpack_require__.d(scales_namespaceObject,"scaleTime",function(){return src_time});var color_schemes_namespaceObject={};__webpack_require__.r(color_schemes_namespaceObject),__webpack_require__.d(color_schemes_namespaceObject,"schemeDark2",function(){return Dark2}),__webpack_require__.d(color_schemes_namespaceObject,"schemePaired",function(){return Paired}),__webpack_require__.d(color_schemes_namespaceObject,"schemeAccent",function(){return Accent}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel1",function(){return Pastel1}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel2",function(){return Pastel2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet1",function(){return Set1}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet2",function(){return Set2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet3",function(){return Set3}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBlues",function(){return Blues_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBrBG",function(){return BrBG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePRGn",function(){return PRGn_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePiYG",function(){return PiYG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBrBG",function(){return BrBG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePRGn",function(){return PRGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePiYG",function(){return PiYG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuOr",function(){return PuOr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdBu",function(){return RdBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdGy",function(){return RdGy}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlBu",function(){return RdYlBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlGn",function(){return RdYlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateSpectral",function(){return Spectral}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBlues",function(){return Blues}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreens",function(){return Greens}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreys",function(){return Greys}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOranges",function(){return Oranges}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePurples",function(){return Purples}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateReds",function(){return Reds}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateViridis",function(){return sequential_multi_viridis}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateInferno",function(){return viridis_inferno}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateMagma",function(){return viridis_magma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePlasma",function(){return viridis_plasma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateWarm",function(){return rainbow_warm}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCool",function(){return rainbow_cool}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCubehelixDefault",function(){return sequential_multi_cubehelix}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuGn",function(){return BuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuPu",function(){return BuPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGnBu",function(){return GnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOrRd",function(){return OrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBuGn",function(){return PuBuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBu",function(){return PuBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuRd",function(){return PuRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdPu",function(){return RdPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGnBu",function(){return YlGnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGn",function(){return YlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrBr",function(){return YlOrBr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrRd",function(){return YlOrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRainbow",function(){return sequential_multi_rainbow});var namespace_namespaceObject={};__webpack_require__.r(namespace_namespaceObject),__webpack_require__.d(namespace_namespaceObject,"UNIT_GLOBAL_NAMESPACE",function(){return UNIT_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"UNIT_LOCAL_NAMESPACE",function(){return UNIT_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_LOCAL_NAMESPACE",function(){return LAYER_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_GLOBAL_NAMESPACE",function(){return LAYER_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_GLOBAL_NAMESPACE",function(){return GROUP_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_LOCAL_NAMESPACE",function(){return GROUP_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_LOCAL_NAMESPACE",function(){return CANVAS_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_GLOBAL_NAMESPACE",function(){return CANVAS_GLOBAL_NAMESPACE});var actions_namespaceObject={};__webpack_require__.r(actions_namespaceObject),__webpack_require__.d(actions_namespaceObject,"DRAG",function(){return DRAG}),__webpack_require__.d(actions_namespaceObject,"HOVER",function(){return HOVER}),__webpack_require__.d(actions_namespaceObject,"SELECTIONDRAG",function(){return SELECTIONDRAG}),__webpack_require__.d(actions_namespaceObject,"CLICK",function(){return CLICK}),__webpack_require__.d(actions_namespaceObject,"LONGTOUCH",function(){return LONGTOUCH}),__webpack_require__.d(actions_namespaceObject,"TOUCHDRAG",function(){return TOUCHDRAG}),__webpack_require__.d(actions_namespaceObject,"ALL_ACTIONS",function(){return ALL_ACTIONS});var enums_selection_namespaceObject={};__webpack_require__.r(enums_selection_namespaceObject),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_ENTRY",function(){return SELECTION_NEW_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_EXIT",function(){return SELECTION_NEW_EXIT}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NULL",function(){return SELECTION_NULL}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_ENTRY",function(){return SELECTION_OLD_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_EXIT",function(){return SELECTION_OLD_EXIT});var behaviours_namespaceObject={};__webpack_require__.r(behaviours_namespaceObject),__webpack_require__.d(behaviours_namespaceObject,"BRUSH",function(){return BRUSH}),__webpack_require__.d(behaviours_namespaceObject,"HIGHLIGHT",function(){return HIGHLIGHT}),__webpack_require__.d(behaviours_namespaceObject,"TOOLTIP",function(){return behaviours_TOOLTIP}),__webpack_require__.d(behaviours_namespaceObject,"FILTER",function(){return FILTER}),__webpack_require__.d(behaviours_namespaceObject,"SELECT",function(){return SELECT});var behavioural_namespaceObject={};__webpack_require__.r(behavioural_namespaceObject),__webpack_require__.d(behavioural_namespaceObject,"HighlightBeahviour",function(){return highlight_HighlightBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"BrushBehaviour",function(){return brush_BrushBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"FilterBehaviour",function(){return filter_FilterBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"SelectBehaviour",function(){return select_SelectBehaviour});var side_effects_namespaceObject={};__webpack_require__.r(side_effects_namespaceObject),__webpack_require__.d(side_effects_namespaceObject,"ANCHORS",function(){return side_effects_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"BRUSH_ANCHORS",function(){return side_effects_BRUSH_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"PERSISTENT_ANCHORS",function(){return side_effects_PERSISTENT_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"FILTER",function(){return side_effects_FILTER}),__webpack_require__.d(side_effects_namespaceObject,"HIGHLIGHTER",function(){return side_effects_HIGHLIGHTER}),__webpack_require__.d(side_effects_namespaceObject,"CROSSLINE",function(){return CROSSLINE}),__webpack_require__.d(side_effects_namespaceObject,"TOOLTIP",function(){return side_effects_TOOLTIP});var src_side_effects_namespaceObject={};__webpack_require__.r(src_side_effects_namespaceObject),__webpack_require__.d(src_side_effects_namespaceObject,"SelectionBox",function(){return selection_box}),__webpack_require__.d(src_side_effects_namespaceObject,"Tooltip",function(){return side_effects_tooltip_Tooltip}),__webpack_require__.d(src_side_effects_namespaceObject,"Crossline",function(){return crossline_Crossline}),__webpack_require__.d(src_side_effects_namespaceObject,"PlotHighlighter",function(){return plot_highlighter_PlotHighlighter}),__webpack_require__.d(src_side_effects_namespaceObject,"FilterEffect",function(){return FilterEffect}),__webpack_require__.d(src_side_effects_namespaceObject,"PersistentAnchors",function(){return persistent_anchors_PersistentAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"BrushAnchors",function(){return brush_anchors_BrushAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"AnchorEffect",function(){return anchors_AnchorEffect});var axis_orientation_namespaceObject={};__webpack_require__.r(axis_orientation_namespaceObject),__webpack_require__.d(axis_orientation_namespaceObject,"BOTTOM",function(){return axis_orientation_BOTTOM}),__webpack_require__.d(axis_orientation_namespaceObject,"TOP",function(){return axis_orientation_TOP}),__webpack_require__.d(axis_orientation_namespaceObject,"LEFT",function(){return axis_orientation_LEFT}),__webpack_require__.d(axis_orientation_namespaceObject,"RIGHT",function(){return axis_orientation_RIGHT}),__webpack_require__.d(axis_orientation_namespaceObject,"axisOrientationMap",function(){return axisOrientationMap});var scale_type_namespaceObject={};__webpack_require__.r(scale_type_namespaceObject),__webpack_require__.d(scale_type_namespaceObject,"LINEAR",function(){return LINEAR}),__webpack_require__.d(scale_type_namespaceObject,"BAND",function(){return BAND}),__webpack_require__.d(scale_type_namespaceObject,"TIME",function(){return TIME}),__webpack_require__.d(scale_type_namespaceObject,"COLOR",function(){return scale_type_COLOR}),__webpack_require__.d(scale_type_namespaceObject,"ORDINAL",function(){return ORDINAL}),__webpack_require__.d(scale_type_namespaceObject,"QUANTIZE",function(){return QUANTIZE}),__webpack_require__.d(scale_type_namespaceObject,"QUANTILE",function(){return QUANTILE}),__webpack_require__.d(scale_type_namespaceObject,"LOG",function(){return LOG}),__webpack_require__.d(scale_type_namespaceObject,"POW",function(){return POW}),__webpack_require__.d(scale_type_namespaceObject,"IDENTITY",function(){return scale_type_IDENTITY}),__webpack_require__.d(scale_type_namespaceObject,"SEQUENTIAL",function(){return SEQUENTIAL}),__webpack_require__.d(scale_type_namespaceObject,"THRESHOLD",function(){return THRESHOLD});var layer_types_namespaceObject={};__webpack_require__.r(layer_types_namespaceObject),__webpack_require__.d(layer_types_namespaceObject,"AREA_LAYER",function(){return layer_types_AREA_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"ARC_LAYER",function(){return layer_types_ARC_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"LINE_LAYER",function(){return layer_types_LINE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TEXT_LAYER",function(){return layer_types_TEXT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"POINT_LAYER",function(){return layer_types_POINT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BAR_LAYER",function(){return layer_types_BAR_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TICK_LAYER",function(){return layer_types_TICK_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"SIMPLE_LAYER",function(){return layer_types_SIMPLE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BASE_LAYER",function(){return layer_types_BASE_LAYER});var firebolt_behavioural_namespaceObject={};__webpack_require__.r(firebolt_behavioural_namespaceObject),__webpack_require__.d(firebolt_behavioural_namespaceObject,"SelectBehaviour",function(){return behavioural_select_SelectBehaviour});var firebolt_side_effects_namespaceObject={};__webpack_require__.r(firebolt_side_effects_namespaceObject),__webpack_require__.d(firebolt_side_effects_namespaceObject,"SelectionBox",function(){return side_effects_selection_box}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendHighlighter",function(){return legend_highlighter_LegendHighlighter});var operators_namespaceObject={};__webpack_require__.r(operators_namespaceObject),__webpack_require__.d(operators_namespaceObject,"share",function(){return operators_share}),__webpack_require__.d(operators_namespaceObject,"html",function(){return operators_html});var dist_datamodel=__webpack_require__(0),datamodel_default=__webpack_require__.n(dist_datamodel),ascending=function(a,b){return ab?1:a>=b?0:NaN},bisector=function(compare){return 1===compare.length&&(compare=function ascendingComparator(f){return function(d,x){return ascending(f(d),x)}}(compare)),{left:function left(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)<0?lo=mid+1:hi=mid}return lo},right:function right(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)>0?hi=mid:lo=mid+1}return lo}}};var ascendingBisect=bisector(ascending),bisectRight=ascendingBisect.right,bisect=(ascendingBisect.left,bisectRight);var number=function(x){return null===x?NaN:+x},array_array=Array.prototype,src_range=(array_array.slice,array_array.map,function(start,stop,step){start=+start,stop=+stop,step=(n=arguments.length)<2?(stop=start,start=0,1):n<3?1:+step;for(var i=-1,n=0|Math.max(0,Math.ceil((stop-start)/step)),range=new Array(n);++i0)return[start];if((reverse=stop0)for(start=Math.ceil(start/step),stop=Math.floor(stop/step),ticks=new Array(n=Math.ceil(stop-start+1));++i=0?(error>=e10?10:error>=e5?5:error>=e2?2:1)*Math.pow(10,power):-Math.pow(10,-power)/(error>=e10?10:error>=e5?5:error>=e2?2:1)}function tickStep(start,stop,count){var step0=Math.abs(stop-start)/Math.max(0,count),step1=Math.pow(10,Math.floor(Math.log(step0)/Math.LN10)),error=step0/step1;return error>=e10?step1*=10:error>=e5?step1*=5:error>=e2&&(step1*=2),stop=1)return+valueof(values[n-1],n-1,values);var n,i=(n-1)*p,i0=Math.floor(i),value0=+valueof(values[i0],i0,values);return value0+(+valueof(values[i0+1],i0+1,values)-value0)*(i-i0)}};function map_Map(){}function map_map(object,f){var map=new map_Map;if(object instanceof map_Map)object.each(function(value,key){map.set(key,value)});else if(Array.isArray(object)){var o,i=-1,n=object.length;if(null==f)for(;++i=keys.length)return null!=_sortValues&&array.sort(_sortValues),null!=_rollup?_rollup(array):array;for(var keyValue,value,values,i=-1,n=array.length,key=keys[depth++],valuesByKey=src_map(),result=createResult();++ikeys.length)return map;var array,sortKey=_sortKeys[depth-1];return null!=_rollup&&depth>=keys.length?array=map.entries():(array=[],map.each(function(v,k){array.push({key:k,values:_entries(v,depth)})})),null!=sortKey?array.sort(function(a,b){return sortKey(a.key,b.key)}):array}(apply(array,0,createMap,setMap),0)},key:function key(d){return keys.push(d),nest},sortKeys:function sortKeys(order){return _sortKeys[keys.length-1]=order,nest},sortValues:function sortValues(order){return _sortValues=order,nest},rollup:function rollup(f){return _rollup=f,nest}}};function createObject(){return{}}function setObject(object,key,value){object[key]=value}function createMap(){return src_map()}function setMap(map,key,value){map.set(key,value)}function set_Set(){}var proto=src_map.prototype;function set_set(object,f){var set=new set_Set;if(object instanceof set_Set)object.each(function(value){set.add(value)});else if(object){var i=-1,n=object.length;if(null==f)for(;++i1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo)),hiIndex=getClosestIndexOf(values,hi),b=lo===hi?a:Math.max(a,hiIndex-1),reverse&&(t=a,a=n-b,b=n-t),a>b?void 0:domain().slice(a,b+1)},scale.invert=function(r0,r1){var a,t,lo=+r0,hi=arguments.length>1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo,"left")),domain()[reverse?n-a:a]},rescale()}function getClosestIndexOf(arr,value,side){for(var highVal,mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1:high}var define=function(constructor,factory,prototype){constructor.prototype=factory.prototype=prototype,prototype.constructor=constructor};function extend(parent,definition){var prototype=Object.create(parent.prototype);for(var key in definition)prototype[key]=definition[key];return prototype}function Color(){}var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex3=/^#([0-9a-f]{3})$/,reHex6=/^#([0-9a-f]{6})$/,reRgbInteger=new RegExp("^rgb\\("+[reI,reI,reI]+"\\)$"),reRgbPercent=new RegExp("^rgb\\("+[reP,reP,reP]+"\\)$"),reRgbaInteger=new RegExp("^rgba\\("+[reI,reI,reI,reN]+"\\)$"),reRgbaPercent=new RegExp("^rgba\\("+[reP,reP,reP,reN]+"\\)$"),reHslPercent=new RegExp("^hsl\\("+[reN,reP,reP]+"\\)$"),reHslaPercent=new RegExp("^hsla\\("+[reN,reP,reP,reN]+"\\)$"),named={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_formatHex(){return this.rgb().formatHex()}function color_formatRgb(){return this.rgb().formatRgb()}function color_color(format){var m;return format=(format+"").trim().toLowerCase(),(m=reHex3.exec(format))?new Rgb((m=parseInt(m[1],16))>>8&15|m>>4&240,m>>4&15|240&m,(15&m)<<4|15&m,1):(m=reHex6.exec(format))?rgbn(parseInt(m[1],16)):(m=reRgbInteger.exec(format))?new Rgb(m[1],m[2],m[3],1):(m=reRgbPercent.exec(format))?new Rgb(255*m[1]/100,255*m[2]/100,255*m[3]/100,1):(m=reRgbaInteger.exec(format))?rgba(m[1],m[2],m[3],m[4]):(m=reRgbaPercent.exec(format))?rgba(255*m[1]/100,255*m[2]/100,255*m[3]/100,m[4]):(m=reHslPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,1):(m=reHslaPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,m[4]):named.hasOwnProperty(format)?rgbn(named[format]):"transparent"===format?new Rgb(NaN,NaN,NaN,0):null}function rgbn(n){return new Rgb(n>>16&255,n>>8&255,255&n,1)}function rgba(r,g,b,a){return a<=0&&(r=g=b=NaN),new Rgb(r,g,b,a)}function rgbConvert(o){return o instanceof Color||(o=color_color(o)),o?new Rgb((o=o.rgb()).r,o.g,o.b,o.opacity):new Rgb}function color_rgb(r,g,b,opacity){return 1===arguments.length?rgbConvert(r):new Rgb(r,g,b,null==opacity?1:opacity)}function Rgb(r,g,b,opacity){this.r=+r,this.g=+g,this.b=+b,this.opacity=+opacity}function rgb_formatHex(){return"#"+hex(this.r)+hex(this.g)+hex(this.b)}function rgb_formatRgb(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"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===a?")":", "+a+")")}function hex(value){return((value=Math.max(0,Math.min(255,Math.round(value)||0)))<16?"0":"")+value.toString(16)}function hsla(h,s,l,a){return a<=0?h=s=l=NaN:l<=0||l>=1?h=s=NaN:s<=0&&(h=NaN),new Hsl(h,s,l,a)}function hslConvert(o){if(o instanceof Hsl)return new Hsl(o.h,o.s,o.l,o.opacity);if(o instanceof Color||(o=color_color(o)),!o)return new Hsl;if(o instanceof Hsl)return o;var r=(o=o.rgb()).r/255,g=o.g/255,b=o.b/255,min=Math.min(r,g,b),max=Math.max(r,g,b),h=NaN,s=max-min,l=(max+min)/2;return s?(h=r===max?(g-b)/s+6*(g0&&l<1?0:h,new Hsl(h,s,l,o.opacity)}function hsl(h,s,l,opacity){return 1===arguments.length?hslConvert(h):new Hsl(h,s,l,null==opacity?1:opacity)}function Hsl(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function hsl2rgb(h,m1,m2){return 255*(h<60?m1+(m2-m1)*h/60:h<180?m2:h<240?m1+(m2-m1)*(240-h)/60:m1)}define(Color,color_color,{copy:function copy(channels){return Object.assign(new this.constructor,this,channels)},displayable:function displayable(){return this.rgb().displayable()},hex:color_formatHex,formatHex:color_formatHex,formatHsl:function color_formatHsl(){return hslConvert(this).formatHsl()},formatRgb:color_formatRgb,toString:color_formatRgb}),define(Rgb,color_rgb,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:rgb_formatHex,formatHex:rgb_formatHex,formatRgb:rgb_formatRgb,toString:rgb_formatRgb})),define(Hsl,hsl,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=this.h%360+360*(this.h<0),s=isNaN(h)||isNaN(this.s)?0:this.s,l=this.l,m2=l+(l<.5?l:1-l)*s,m1=2*l-m2;return new Rgb(hsl2rgb(h>=240?h-240:h+120,m1,m2),hsl2rgb(h,m1,m2),hsl2rgb(h<120?h+240:h-120,m1,m2),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},formatHsl:function formatHsl(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===a?")":", "+a+")")}}));var deg2rad=Math.PI/180,rad2deg=180/Math.PI,Xn=.96422,Yn=1,Zn=.82521,lab_t0=4/29,lab_t1=6/29,t2=3*lab_t1*lab_t1,t3=lab_t1*lab_t1*lab_t1;function labConvert(o){if(o instanceof Lab)return new Lab(o.l,o.a,o.b,o.opacity);if(o instanceof Hcl)return hcl2lab(o);o instanceof Rgb||(o=rgbConvert(o));var x,z,r=rgb2lrgb(o.r),g=rgb2lrgb(o.g),b=rgb2lrgb(o.b),y=xyz2lab((.2225045*r+.7168786*g+.0606169*b)/Yn);return r===g&&g===b?x=z=y:(x=xyz2lab((.4360747*r+.3850649*g+.1430804*b)/Xn),z=xyz2lab((.0139322*r+.0971045*g+.7141733*b)/Zn)),new Lab(116*y-16,500*(x-y),200*(y-z),o.opacity)}function lab(l,a,b,opacity){return 1===arguments.length?labConvert(l):new Lab(l,a,b,null==opacity?1:opacity)}function Lab(l,a,b,opacity){this.l=+l,this.a=+a,this.b=+b,this.opacity=+opacity}function xyz2lab(t){return t>t3?Math.pow(t,1/3):t/t2+lab_t0}function lab2xyz(t){return t>lab_t1?t*t*t:t2*(t-lab_t0)}function lrgb2rgb(x){return 255*(x<=.0031308?12.92*x:1.055*Math.pow(x,1/2.4)-.055)}function rgb2lrgb(x){return(x/=255)<=.04045?x/12.92:Math.pow((x+.055)/1.055,2.4)}function hclConvert(o){if(o instanceof Hcl)return new Hcl(o.h,o.c,o.l,o.opacity);if(o instanceof Lab||(o=labConvert(o)),0===o.a&&0===o.b)return new Hcl(NaN,0180||d<-180?d-360*Math.round(d/360):d):src_constant(isNaN(a)?b:a)}function gamma(y){return 1==(y=+y)?nogamma:function(a,b){return b-a?function exponential(a,b,y){return a=Math.pow(a,y),b=Math.pow(b,y)-a,y=1/y,function(t){return Math.pow(a+t*b,y)}}(a,b,y):src_constant(isNaN(a)?b:a)}}function nogamma(a,b){var d=b-a;return d?linear(a,d):src_constant(isNaN(a)?b:a)}var src_rgb=function rgbGamma(y){var color=gamma(y);function rgb(start,end){var r=color((start=color_rgb(start)).r,(end=color_rgb(end)).r),g=color(start.g,end.g),b=color(start.b,end.b),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.r=r(t),start.g=g(t),start.b=b(t),start.opacity=opacity(t),start+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(spline){return function(colors){var i,color,n=colors.length,r=new Array(n),g=new Array(n),b=new Array(n);for(i=0;i=1?(t=1,n-1):Math.floor(t*n),v1=values[i],v2=values[i+1],v0=i>0?values[i-1]:2*v1-v2,v3=ibi&&(bs=b.slice(bi,bs),s[i]?s[i]+=bs:s[++i]=bs),(am=am[0])===(bm=bm[0])?s[i]?s[i]+=bm:s[++i]=bm:(s[++i]=null,q.push({i:i,x:src_number(am,bm)})),bi=reB.lastIndex;return bi180?b+=360:b-a>180&&(a+=360),q.push({i:s.push(pop(s)+"rotate(",null,degParen)-2,x:src_number(a,b)})):b&&s.push(pop(s)+"rotate("+b+degParen)}(a.rotate,b.rotate,s,q),function skewX(a,b,s,q){a!==b?q.push({i:s.push(pop(s)+"skewX(",null,degParen)-2,x:src_number(a,b)}):b&&s.push(pop(s)+"skewX("+b+degParen)}(a.skewX,b.skewX,s,q),function scale(xa,ya,xb,yb,s,q){if(xa!==xb||ya!==yb){var i=s.push(pop(s)+"scale(",null,",",null,")");q.push({i:i-4,x:src_number(xa,xb)},{i:i-2,x:src_number(ya,yb)})}else 1===xb&&1===yb||s.push(pop(s)+"scale("+xb+","+yb+")")}(a.scaleX,a.scaleY,b.scaleX,b.scaleY,s,q),a=b=null,function(t){for(var o,i=-1,n=q.length;++i2?polymap:bimap,output=input=null,scale}function scale(x){return(output||(output=piecewise(domain,range,clamp?function deinterpolateClamp(deinterpolate){return function(a,b){var d=deinterpolate(a=+a,b=+b);return function(x){return x<=a?0:x>=b?1:d(x)}}}(deinterpolate):deinterpolate,interpolate)))(+x)}return scale.invert=function(y){return(input||(input=piecewise(range,domain,deinterpolateLinear,clamp?function reinterpolateClamp(reinterpolate){return function(a,b){var r=reinterpolate(a=+a,b=+b);return function(t){return t<=0?a:t>=1?b:r(t)}}}(reinterpolate):reinterpolate)))(+y)},scale.domain=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),rescale()):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),rescale()):range.slice()},scale.rangeRound=function(_){return range=array_slice.call(_),interpolate=src_round,rescale()},scale.clamp=function(_){return arguments.length?(clamp=!!_,rescale()):clamp},scale.interpolate=function(_){return arguments.length?(interpolate=_,rescale()):interpolate},rescale()}var formatDecimal=function(x,p){if((i=(x=p?x.toExponential(p-1):x.toExponential()).indexOf("e"))<0)return null;var i,coefficient=x.slice(0,i);return[coefficient.length>1?coefficient[0]+coefficient.slice(2):coefficient,+x.slice(i+1)]},src_exponent=function(x){return(x=formatDecimal(Math.abs(x)))?x[1]:NaN},re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(specifier){if(!(match=re.exec(specifier)))throw new Error("invalid format: "+specifier);var match;return new FormatSpecifier({fill:match[1],align:match[2],sign:match[3],symbol:match[4],zero:match[5],width:match[6],comma:match[7],precision:match[8]&&match[8].slice(1),trim:match[9],type:match[10]})}function FormatSpecifier(specifier){this.fill=void 0===specifier.fill?" ":specifier.fill+"",this.align=void 0===specifier.align?">":specifier.align+"",this.sign=void 0===specifier.sign?"-":specifier.sign+"",this.symbol=void 0===specifier.symbol?"":specifier.symbol+"",this.zero=!!specifier.zero,this.width=void 0===specifier.width?void 0:+specifier.width,this.comma=!!specifier.comma,this.precision=void 0===specifier.precision?void 0:+specifier.precision,this.trim=!!specifier.trim,this.type=void 0===specifier.type?"":specifier.type+""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var prefixExponent,defaultLocale_locale,defaultLocale_format,defaultLocale_formatPrefix,formatTrim=function(s){out:for(var i1,n=s.length,i=1,i0=-1;i0){if(!+s[i])break out;i0=0}}return i0>0?s.slice(0,i0)+s.slice(i1+1):s},formatRounded=function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1];return exponent<0?"0."+new Array(-exponent).join("0")+coefficient:coefficient.length>exponent+1?coefficient.slice(0,exponent+1)+"."+coefficient.slice(exponent+1):coefficient+new Array(exponent-coefficient.length+2).join("0")},formatTypes={"%":function _(x,p){return(100*x).toFixed(p)},b:function b(x){return Math.round(x).toString(2)},c:function c(x){return x+""},d:function d(x){return Math.round(x).toString(10)},e:function e(x,p){return x.toExponential(p)},f:function f(x,p){return x.toFixed(p)},g:function g(x,p){return x.toPrecision(p)},o:function o(x){return Math.round(x).toString(8)},p:function p(x,_p){return formatRounded(100*x,_p)},r:formatRounded,s:function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1],i=exponent-(prefixExponent=3*Math.max(-8,Math.min(8,Math.floor(exponent/3))))+1,n=coefficient.length;return i===n?coefficient:i>n?coefficient+new Array(i-n+1).join("0"):i>0?coefficient.slice(0,i)+"."+coefficient.slice(i):"0."+new Array(1-i).join("0")+formatDecimal(x,Math.max(0,p+i-1))[0]},X:function X(x){return Math.round(x).toString(16).toUpperCase()},x:function x(_x){return Math.round(_x).toString(16)}},src_identity=function(x){return x},locale_map=Array.prototype.map,prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],src_locale=function(locale){var group=void 0===locale.grouping||void 0===locale.thousands?src_identity:function(grouping,thousands){return function(value,width){for(var i=value.length,t=[],j=0,g=grouping[0],length=0;i>0&&g>0&&(length+g+1>width&&(g=Math.max(1,width-length)),t.push(value.substring(i-=g,i+g)),!((length+=g+1)>width));)g=grouping[j=(j+1)%grouping.length];return t.reverse().join(thousands)}}(locale_map.call(locale.grouping,Number),locale.thousands+""),currencyPrefix=void 0===locale.currency?"":locale.currency[0]+"",currencySuffix=void 0===locale.currency?"":locale.currency[1]+"",decimal=void 0===locale.decimal?".":locale.decimal+"",numerals=void 0===locale.numerals?src_identity:function(numerals){return function(value){return value.replace(/[0-9]/g,function(i){return numerals[+i]})}}(locale_map.call(locale.numerals,String)),percent=void 0===locale.percent?"%":locale.percent+"",minus=void 0===locale.minus?"-":locale.minus+"",nan=void 0===locale.nan?"NaN":locale.nan+"";function newFormat(specifier){var fill=(specifier=formatSpecifier(specifier)).fill,align=specifier.align,sign=specifier.sign,symbol=specifier.symbol,zero=specifier.zero,width=specifier.width,comma=specifier.comma,precision=specifier.precision,trim=specifier.trim,type=specifier.type;"n"===type?(comma=!0,type="g"):formatTypes[type]||(void 0===precision&&(precision=12),trim=!0,type="g"),(zero||"0"===fill&&"="===align)&&(zero=!0,fill="0",align="=");var prefix="$"===symbol?currencyPrefix:"#"===symbol&&/[boxX]/.test(type)?"0"+type.toLowerCase():"",suffix="$"===symbol?currencySuffix:/[%p]/.test(type)?percent:"",formatType=formatTypes[type],maybeSuffix=/[defgprs%]/.test(type);function format(value){var i,n,c,valuePrefix=prefix,valueSuffix=suffix;if("c"===type)valueSuffix=formatType(value)+valueSuffix,value="";else{var valueNegative=(value=+value)<0;if(value=isNaN(value)?nan:formatType(Math.abs(value),precision),trim&&(value=formatTrim(value)),valueNegative&&0==+value&&(valueNegative=!1),valuePrefix=(valueNegative?"("===sign?sign:minus:"-"===sign||"("===sign?"":sign)+valuePrefix,valueSuffix=("s"===type?prefixes[8+prefixExponent/3]:"")+valueSuffix+(valueNegative&&"("===sign?")":""),maybeSuffix)for(i=-1,n=value.length;++i(c=value.charCodeAt(i))||c>57){valueSuffix=(46===c?decimal+value.slice(i+1):value.slice(i))+valueSuffix,value=value.slice(0,i);break}}comma&&!zero&&(value=group(value,1/0));var length=valuePrefix.length+value.length+valueSuffix.length,padding=length>1)+valuePrefix+value+valueSuffix+padding.slice(length);break;default:value=padding+valuePrefix+value+valueSuffix}return numerals(value)}return precision=void 0===precision?6:/[gprs]/.test(type)?Math.max(1,Math.min(21,precision)):Math.max(0,Math.min(20,precision)),format.toString=function(){return specifier+""},format}return{format:newFormat,formatPrefix:function formatPrefix(specifier,value){var f=newFormat(((specifier=formatSpecifier(specifier)).type="f",specifier)),e=3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3))),k=Math.pow(10,-e),prefix=prefixes[8+e/3];return function(value){return f(k*value)+prefix}}}};!function defaultLocale(definition){return defaultLocale_locale=src_locale(definition),defaultLocale_format=defaultLocale_locale.format,defaultLocale_formatPrefix=defaultLocale_locale.formatPrefix,defaultLocale_locale}({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var src_tickFormat=function(domain,count,specifier){var precision,start=domain[0],stop=domain[domain.length-1],step=tickStep(start,stop,null==count?10:count);switch((specifier=formatSpecifier(null==specifier?",f":specifier)).type){case"s":var value=Math.max(Math.abs(start),Math.abs(stop));return null!=specifier.precision||isNaN(precision=function(step,value){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3)))-src_exponent(Math.abs(step)))}(step,value))||(specifier.precision=precision),defaultLocale_formatPrefix(specifier,value);case"":case"e":case"g":case"p":case"r":null!=specifier.precision||isNaN(precision=function(step,max){return step=Math.abs(step),max=Math.abs(max)-step,Math.max(0,src_exponent(max)-src_exponent(step))+1}(step,Math.max(Math.abs(start),Math.abs(stop))))||(specifier.precision=precision-("e"===specifier.type));break;case"f":case"%":null!=specifier.precision||isNaN(precision=function(step){return Math.max(0,-src_exponent(Math.abs(step)))}(step))||(specifier.precision=precision-2*("%"===specifier.type))}return defaultLocale_format(specifier)};function linearish(scale){var domain=scale.domain;return scale.ticks=function(count){var d=domain();return src_ticks(d[0],d[d.length-1],null==count?10:count)},scale.tickFormat=function(count,specifier){return src_tickFormat(domain(),count,specifier)},scale.nice=function(count){null==count&&(count=10);var step,d=domain(),i0=0,i1=d.length-1,start=d[i0],stop=d[i1];return stop0?step=tickIncrement(start=Math.floor(start/step)*step,stop=Math.ceil(stop/step)*step,count):step<0&&(step=tickIncrement(start=Math.ceil(start*step)/step,stop=Math.floor(stop*step)/step,count)),step>0?(d[i0]=Math.floor(start/step)*step,d[i1]=Math.ceil(stop/step)*step,domain(d)):step<0&&(d[i0]=Math.ceil(start*step)/step,d[i1]=Math.floor(stop*step)/step,domain(d)),scale},scale}function linear_linear(){var scale=continuous(deinterpolateLinear,src_number);return scale.copy=function(){return copy(scale,linear_linear())},linearish(scale)}function identity_identity(){var domain=[0,1];function scale(x){return+x}return scale.invert=scale,scale.domain=scale.range=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),scale):domain.slice()},scale.copy=function(){return identity_identity().domain(domain)},linearish(scale)}var nice=function(domain,interval){var t,i0=0,i1=(domain=domain.slice()).length-1,x0=domain[i0],x1=domain[i1];return x10){for(;iv)break;z.push(t)}}else for(;i=1;--k)if(!((t=p*k)v)break;z.push(t)}}else z=src_ticks(i,j,Math.min(j-i,n)).map(pows);return r?z.reverse():z},scale.tickFormat=function(count,specifier){if(null==specifier&&(specifier=10===base?".0e":","),"function"!=typeof specifier&&(specifier=defaultLocale_format(specifier)),count===1/0)return specifier;null==count&&(count=10);var k=Math.max(1,base*count/scale.ticks().length);return function(d){var i=d/pows(Math.round(logs(d)));return i*base0?thresholds[i-1]:domain[0],i=n?[domain[n-1],x1]:[domain[i-1],domain[i]]},scale.copy=function(){return quantize_quantize().domain([x0,x1]).range(range)},linearish(scale)}function threshold_threshold(){var domain=[.5],range=[0,1],n=1;function scale(x){if(x<=x)return range[bisect(domain,x,0,n)]}return scale.domain=function(_){return arguments.length?(domain=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):range.slice()},scale.invertExtent=function(y){var i=range.indexOf(y);return[domain[i-1],domain[i]]},scale.copy=function(){return threshold_threshold().domain(domain).range(range)},scale}var interval_t0=new Date,interval_t1=new Date;function newInterval(floori,offseti,count,field){function interval(date){return floori(date=new Date(+date)),date}return interval.floor=interval,interval.ceil=function(date){return floori(date=new Date(date-1)),offseti(date,1),floori(date),date},interval.round=function(date){var d0=interval(date),d1=interval.ceil(date);return date-d00))return range;do{range.push(previous=new Date(+start)),offseti(start,step),floori(start)}while(previous=date)for(;floori(date),!test(date);)date.setTime(date-1)},function(date,step){if(date>=date)if(step<0)for(;++step<=0;)for(;offseti(date,-1),!test(date););else for(;--step>=0;)for(;offseti(date,1),!test(date););})},count&&(interval.count=function(start,end){return interval_t0.setTime(+start),interval_t1.setTime(+end),floori(interval_t0),floori(interval_t1),Math.floor(count(interval_t0,interval_t1))},interval.every=function(step){return step=Math.floor(step),isFinite(step)&&step>0?step>1?interval.filter(field?function(d){return field(d)%step==0}:function(d){return interval.count(0,d)%step==0}):interval:null}),interval}var millisecond_millisecond=newInterval(function(){},function(date,step){date.setTime(+date+step)},function(start,end){return end-start});millisecond_millisecond.every=function(k){return k=Math.floor(k),isFinite(k)&&k>0?k>1?newInterval(function(date){date.setTime(Math.floor(date/k)*k)},function(date,step){date.setTime(+date+step*k)},function(start,end){return(end-start)/k}):millisecond_millisecond:null};var src_millisecond=millisecond_millisecond,durationMinute=(millisecond_millisecond.range,6e4),durationWeek=6048e5,second_second=newInterval(function(date){date.setTime(date-date.getMilliseconds())},function(date,step){date.setTime(+date+1e3*step)},function(start,end){return(end-start)/1e3},function(date){return date.getUTCSeconds()}),src_second=second_second,minute_minute=(second_second.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds())},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getMinutes()})),src_minute=minute_minute,hour_hour=(minute_minute.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds()-date.getMinutes()*durationMinute)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getHours()})),src_hour=hour_hour,day_day=(hour_hour.range,newInterval(function(date){date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/864e5},function(date){return date.getDate()-1})),src_day=day_day;day_day.range;function weekday(i){return newInterval(function(date){date.setDate(date.getDate()-(date.getDay()+7-i)%7),date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+7*step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/durationWeek})}var sunday=weekday(0),monday=weekday(1),tuesday=weekday(2),wednesday=weekday(3),thursday=weekday(4),friday=weekday(5),saturday=weekday(6),month_month=(sunday.range,monday.range,tuesday.range,wednesday.range,thursday.range,friday.range,saturday.range,newInterval(function(date){date.setDate(1),date.setHours(0,0,0,0)},function(date,step){date.setMonth(date.getMonth()+step)},function(start,end){return end.getMonth()-start.getMonth()+12*(end.getFullYear()-start.getFullYear())},function(date){return date.getMonth()})),src_month=month_month,year_year=(month_month.range,newInterval(function(date){date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step)},function(start,end){return end.getFullYear()-start.getFullYear()},function(date){return date.getFullYear()}));year_year.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setFullYear(Math.floor(date.getFullYear()/k)*k),date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step*k)}):null};var src_year=year_year,utcMinute=(year_year.range,newInterval(function(date){date.setUTCSeconds(0,0)},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getUTCMinutes()})),utcHour=(utcMinute.range,newInterval(function(date){date.setUTCMinutes(0,0,0)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getUTCHours()})),utcDay=(utcHour.range,newInterval(function(date){date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+step)},function(start,end){return(end-start)/864e5},function(date){return date.getUTCDate()-1})),src_utcDay=utcDay;utcDay.range;function utcWeekday(i){return newInterval(function(date){date.setUTCDate(date.getUTCDate()-(date.getUTCDay()+7-i)%7),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+7*step)},function(start,end){return(end-start)/durationWeek})}var utcSunday=utcWeekday(0),utcMonday=utcWeekday(1),utcTuesday=utcWeekday(2),utcWednesday=utcWeekday(3),utcThursday=utcWeekday(4),utcFriday=utcWeekday(5),utcSaturday=utcWeekday(6),utcMonth=(utcSunday.range,utcMonday.range,utcTuesday.range,utcWednesday.range,utcThursday.range,utcFriday.range,utcSaturday.range,newInterval(function(date){date.setUTCDate(1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCMonth(date.getUTCMonth()+step)},function(start,end){return end.getUTCMonth()-start.getUTCMonth()+12*(end.getUTCFullYear()-start.getUTCFullYear())},function(date){return date.getUTCMonth()})),utcYear=(utcMonth.range,newInterval(function(date){date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step)},function(start,end){return end.getUTCFullYear()-start.getUTCFullYear()},function(date){return date.getUTCFullYear()}));utcYear.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setUTCFullYear(Math.floor(date.getUTCFullYear()/k)*k),date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step*k)}):null};var src_utcYear=utcYear;utcYear.range;function localDate(d){if(0<=d.y&&d.y<100){var date=new Date(-1,d.m,d.d,d.H,d.M,d.S,d.L);return date.setFullYear(d.y),date}return new Date(d.y,d.m,d.d,d.H,d.M,d.S,d.L)}function utcDate(d){if(0<=d.y&&d.y<100){var date=new Date(Date.UTC(-1,d.m,d.d,d.H,d.M,d.S,d.L));return date.setUTCFullYear(d.y),date}return new Date(Date.UTC(d.y,d.m,d.d,d.H,d.M,d.S,d.L))}function newYear(y){return{y:y,m:0,d:1,H:0,M:0,S:0,L:0}}var src_defaultLocale_locale,timeFormat,utcFormat,utcParse,pads={"-":"",_:" ",0:"0"},numberRe=/^\s*\d+/,percentRe=/^%/,requoteRe=/[\\^$*+?|[\]().{}]/g;function locale_pad(value,fill,width){var sign=value<0?"-":"",string=(sign?-value:value)+"",length=string.length;return sign+(length68?1900:2e3),i+n[0].length):-1}function parseZone(d,string,i){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i,i+6));return n?(d.Z=n[1]?0:-(n[2]+(n[3]||"00")),i+n[0].length):-1}function parseMonthNumber(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.m=n[0]-1,i+n[0].length):-1}function parseDayOfMonth(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.d=+n[0],i+n[0].length):-1}function parseDayOfYear(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.m=0,d.d=+n[0],i+n[0].length):-1}function parseHour24(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.H=+n[0],i+n[0].length):-1}function parseMinutes(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.M=+n[0],i+n[0].length):-1}function parseSeconds(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.S=+n[0],i+n[0].length):-1}function parseMilliseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.L=+n[0],i+n[0].length):-1}function parseMicroseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+6));return n?(d.L=Math.floor(n[0]/1e3),i+n[0].length):-1}function parseLiteralPercent(d,string,i){var n=percentRe.exec(string.slice(i,i+1));return n?i+n[0].length:-1}function parseUnixTimestamp(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=+n[0],i+n[0].length):-1}function parseUnixTimestampSeconds(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=1e3*+n[0],i+n[0].length):-1}function formatDayOfMonth(d,p){return locale_pad(d.getDate(),p,2)}function formatHour24(d,p){return locale_pad(d.getHours(),p,2)}function formatHour12(d,p){return locale_pad(d.getHours()%12||12,p,2)}function formatDayOfYear(d,p){return locale_pad(1+src_day.count(src_year(d),d),p,3)}function formatMilliseconds(d,p){return locale_pad(d.getMilliseconds(),p,3)}function formatMicroseconds(d,p){return formatMilliseconds(d,p)+"000"}function formatMonthNumber(d,p){return locale_pad(d.getMonth()+1,p,2)}function formatMinutes(d,p){return locale_pad(d.getMinutes(),p,2)}function formatSeconds(d,p){return locale_pad(d.getSeconds(),p,2)}function formatWeekdayNumberMonday(d){var day=d.getDay();return 0===day?7:day}function formatWeekNumberSunday(d,p){return locale_pad(sunday.count(src_year(d),d),p,2)}function formatWeekNumberISO(d,p){var day=d.getDay();return d=day>=4||0===day?thursday(d):thursday.ceil(d),locale_pad(thursday.count(src_year(d),d)+(4===src_year(d).getDay()),p,2)}function formatWeekdayNumberSunday(d){return d.getDay()}function formatWeekNumberMonday(d,p){return locale_pad(monday.count(src_year(d),d),p,2)}function locale_formatYear(d,p){return locale_pad(d.getFullYear()%100,p,2)}function formatFullYear(d,p){return locale_pad(d.getFullYear()%1e4,p,4)}function formatZone(d){var z=d.getTimezoneOffset();return(z>0?"-":(z*=-1,"+"))+locale_pad(z/60|0,"0",2)+locale_pad(z%60,"0",2)}function formatUTCDayOfMonth(d,p){return locale_pad(d.getUTCDate(),p,2)}function formatUTCHour24(d,p){return locale_pad(d.getUTCHours(),p,2)}function formatUTCHour12(d,p){return locale_pad(d.getUTCHours()%12||12,p,2)}function formatUTCDayOfYear(d,p){return locale_pad(1+src_utcDay.count(src_utcYear(d),d),p,3)}function formatUTCMilliseconds(d,p){return locale_pad(d.getUTCMilliseconds(),p,3)}function formatUTCMicroseconds(d,p){return formatUTCMilliseconds(d,p)+"000"}function formatUTCMonthNumber(d,p){return locale_pad(d.getUTCMonth()+1,p,2)}function formatUTCMinutes(d,p){return locale_pad(d.getUTCMinutes(),p,2)}function formatUTCSeconds(d,p){return locale_pad(d.getUTCSeconds(),p,2)}function formatUTCWeekdayNumberMonday(d){var dow=d.getUTCDay();return 0===dow?7:dow}function formatUTCWeekNumberSunday(d,p){return locale_pad(utcSunday.count(src_utcYear(d),d),p,2)}function formatUTCWeekNumberISO(d,p){var day=d.getUTCDay();return d=day>=4||0===day?utcThursday(d):utcThursday.ceil(d),locale_pad(utcThursday.count(src_utcYear(d),d)+(4===src_utcYear(d).getUTCDay()),p,2)}function formatUTCWeekdayNumberSunday(d){return d.getUTCDay()}function formatUTCWeekNumberMonday(d,p){return locale_pad(utcMonday.count(src_utcYear(d),d),p,2)}function formatUTCYear(d,p){return locale_pad(d.getUTCFullYear()%100,p,2)}function formatUTCFullYear(d,p){return locale_pad(d.getUTCFullYear()%1e4,p,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(d){return+d}function formatUnixTimestampSeconds(d){return Math.floor(+d/1e3)}!function defaultLocale_defaultLocale(definition){return src_defaultLocale_locale=function formatLocale(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_weekdays=locale.days,locale_shortWeekdays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths,periodRe=formatRe(locale_periods),periodLookup=formatLookup(locale_periods),weekdayRe=formatRe(locale_weekdays),weekdayLookup=formatLookup(locale_weekdays),shortWeekdayRe=formatRe(locale_shortWeekdays),shortWeekdayLookup=formatLookup(locale_shortWeekdays),monthRe=formatRe(locale_months),monthLookup=formatLookup(locale_months),shortMonthRe=formatRe(locale_shortMonths),shortMonthLookup=formatLookup(locale_shortMonths),formats={a:function formatShortWeekday(d){return locale_shortWeekdays[d.getDay()]},A:function formatWeekday(d){return locale_weekdays[d.getDay()]},b:function formatShortMonth(d){return locale_shortMonths[d.getMonth()]},B:function formatMonth(d){return locale_months[d.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(d){return locale_periods[+(d.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},utcFormats={a:function formatUTCShortWeekday(d){return locale_shortWeekdays[d.getUTCDay()]},A:function formatUTCWeekday(d){return locale_weekdays[d.getUTCDay()]},b:function formatUTCShortMonth(d){return locale_shortMonths[d.getUTCMonth()]},B:function formatUTCMonth(d){return locale_months[d.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(d){return locale_periods[+(d.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},parses={a:function parseShortWeekday(d,string,i){var n=shortWeekdayRe.exec(string.slice(i));return n?(d.w=shortWeekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},A:function parseWeekday(d,string,i){var n=weekdayRe.exec(string.slice(i));return n?(d.w=weekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},b:function parseShortMonth(d,string,i){var n=shortMonthRe.exec(string.slice(i));return n?(d.m=shortMonthLookup[n[0].toLowerCase()],i+n[0].length):-1},B:function parseMonth(d,string,i){var n=monthRe.exec(string.slice(i));return n?(d.m=monthLookup[n[0].toLowerCase()],i+n[0].length):-1},c:function parseLocaleDateTime(d,string,i){return parseSpecifier(d,locale_dateTime,string,i)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(d,string,i){var n=periodRe.exec(string.slice(i));return n?(d.p=periodLookup[n[0].toLowerCase()],i+n[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(d,string,i){return parseSpecifier(d,locale_date,string,i)},X:function parseLocaleTime(d,string,i){return parseSpecifier(d,locale_time,string,i)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(specifier,formats){return function(date){var c,pad,format,string=[],i=-1,j=0,n=specifier.length;for(date instanceof Date||(date=new Date(+date));++i53)return null;"w"in d||(d.w=1),"Z"in d?(week=(day=(week=utcDate(newYear(d.y))).getUTCDay())>4||0===day?utcMonday.ceil(week):utcMonday(week),week=src_utcDay.offset(week,7*(d.V-1)),d.y=week.getUTCFullYear(),d.m=week.getUTCMonth(),d.d=week.getUTCDate()+(d.w+6)%7):(week=(day=(week=newDate(newYear(d.y))).getDay())>4||0===day?monday.ceil(week):monday(week),week=src_day.offset(week,7*(d.V-1)),d.y=week.getFullYear(),d.m=week.getMonth(),d.d=week.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),day="Z"in d?utcDate(newYear(d.y)).getUTCDay():newDate(newYear(d.y)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(day+5)%7:d.w+7*d.U-(day+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,utcDate(d)):newDate(d)}}function parseSpecifier(d,specifier,string,j){for(var c,parse,i=0,n=specifier.length,m=string.length;i=m)return-1;if(37===(c=specifier.charCodeAt(i++))){if(c=specifier.charAt(i++),!(parse=parses[c in pads?specifier.charAt(i++):c])||(j=parse(d,string,j))<0)return-1}else if(c!=string.charCodeAt(j++))return-1}return j}return formats.x=newFormat(locale_date,formats),formats.X=newFormat(locale_time,formats),formats.c=newFormat(locale_dateTime,formats),utcFormats.x=newFormat(locale_date,utcFormats),utcFormats.X=newFormat(locale_time,utcFormats),utcFormats.c=newFormat(locale_dateTime,utcFormats),{format:function format(specifier){var f=newFormat(specifier+="",formats);return f.toString=function(){return specifier},f},parse:function parse(specifier){var p=newParse(specifier+="",localDate);return p.toString=function(){return specifier},p},utcFormat:function utcFormat(specifier){var f=newFormat(specifier+="",utcFormats);return f.toString=function(){return specifier},f},utcParse:function utcParse(specifier){var p=newParse(specifier,utcDate);return p.toString=function(){return specifier},p}}}(definition),timeFormat=src_defaultLocale_locale.format,src_defaultLocale_locale.parse,utcFormat=src_defaultLocale_locale.utcFormat,utcParse=src_defaultLocale_locale.utcParse,src_defaultLocale_locale}({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||utcFormat("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||utcParse("%Y-%m-%dT%H:%M:%S.%LZ");var time_durationSecond=1e3,time_durationMinute=60*time_durationSecond,time_durationHour=60*time_durationMinute,time_durationDay=24*time_durationHour,time_durationWeek=7*time_durationDay,durationMonth=30*time_durationDay,durationYear=365*time_durationDay;function time_date(t){return new Date(t)}function time_number(t){return t instanceof Date?+t:+new Date(+t)}function calendar(year,month,week,day,hour,minute,second,millisecond,format){var scale=continuous(deinterpolateLinear,src_number),invert=scale.invert,domain=scale.domain,formatMillisecond=format(".%L"),formatSecond=format(":%S"),formatMinute=format("%I:%M"),formatHour=format("%I %p"),formatDay=format("%a %d"),formatWeek=format("%b %d"),formatMonth=format("%B"),formatYear=format("%Y"),tickIntervals=[[second,1,time_durationSecond],[second,5,5*time_durationSecond],[second,15,15*time_durationSecond],[second,30,30*time_durationSecond],[minute,1,time_durationMinute],[minute,5,5*time_durationMinute],[minute,15,15*time_durationMinute],[minute,30,30*time_durationMinute],[hour,1,time_durationHour],[hour,3,3*time_durationHour],[hour,6,6*time_durationHour],[hour,12,12*time_durationHour],[day,1,time_durationDay],[day,2,2*time_durationDay],[week,1,time_durationWeek],[month,1,durationMonth],[month,3,3*durationMonth],[year,1,durationYear]];function tickFormat(date){return(second(date)1)&&(t-=Math.floor(t));var ts=Math.abs(t-.5);return rainbow_c.h=360*t-100,rainbow_c.s=1.5-1.5*ts,rainbow_c.l=.8-.9*ts,rainbow_c+""},sequential_multi_cubehelix=cubehelixLong(cubehelix_cubehelix(300,.5,0),cubehelix_cubehelix(-240,.5,1)),BuGn=src_ramp(new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(d3_scale_chromatic_src_colors)),BuPu=src_ramp(new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(d3_scale_chromatic_src_colors)),GnBu=src_ramp(new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(d3_scale_chromatic_src_colors)),OrRd=src_ramp(new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(d3_scale_chromatic_src_colors)),PuBuGn=src_ramp(new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(d3_scale_chromatic_src_colors)),PuBu=src_ramp(new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(d3_scale_chromatic_src_colors)),PuRd=src_ramp(new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(d3_scale_chromatic_src_colors)),RdPu=src_ramp(new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(d3_scale_chromatic_src_colors)),YlGnBu=src_ramp(new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(d3_scale_chromatic_src_colors)),YlGn=src_ramp(new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(d3_scale_chromatic_src_colors)),YlOrBr=src_ramp(new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(d3_scale_chromatic_src_colors)),YlOrRd=src_ramp(new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(d3_scale_chromatic_src_colors)),UNIT_GLOBAL_NAMESPACE="app.units",UNIT_LOCAL_NAMESPACE="local.units",LAYER_LOCAL_NAMESPACE="local.layers",LAYER_GLOBAL_NAMESPACE="app.layers",GROUP_GLOBAL_NAMESPACE="app.group",GROUP_LOCAL_NAMESPACE="local.group",CANVAS_LOCAL_NAMESPACE="local.canvas",CANVAS_GLOBAL_NAMESPACE="app.canvas",reserved_fields={ROW_ID:"__id__"},common_props={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onLayerDraw",MATRIX_CREATED:"matrixCreated"},COORD_TYPES_POLAR="polar",COORD_TYPES_CARTESIAN="cartesian",DATA_TYPE_FUNCTION="function",DATA_TYPE_STRING="string",src_array_slice=Array.prototype.slice,d3_axis_src_identity=function(x){return x},axis_top=1,axis_right=2,axis_bottom=3,axis_left=4,epsilon=1e-6;function translateX(x){return"translate("+(x+.5)+",0)"}function translateY(y){return"translate(0,"+(y+.5)+")"}function entering(){return!this.__axis}function axis_axis(orient,scale){var tickArguments=[],tickValues=null,tickFormat=null,tickTransform=null,tickSizeInner=6,tickSizeOuter=6,tickPadding=3,k=orient===axis_top||orient===axis_left?-1:1,x=orient===axis_left||orient===axis_right?"x":"y",transform=orient===axis_top||orient===axis_bottom?translateX:translateY;function axis(context){var values=null==tickValues?scale.ticks?scale.ticks.apply(scale,tickArguments):scale.domain():tickValues,format=null==tickFormat?scale.tickFormat?scale.tickFormat.apply(scale,tickArguments):d3_axis_src_identity:tickFormat,spacing=Math.max(tickSizeInner,0)+tickPadding,range=scale.range(),range0=+range[0]+.5,range1=+range[range.length-1]+.5,position=(scale.bandwidth?function axis_center(scale){var offset=Math.max(0,scale.bandwidth()-1)/2;return scale.round()&&(offset=Math.round(offset)),function(d){return+scale(d)+offset}}:function axis_number(scale){return function(d){return+scale(d)}})(scale.copy()),selection=context.selection?context.selection():context,path=selection.selectAll(".domain").data([null]),tick=selection.selectAll(".tick").data(values,scale).order(),tickExit=tick.exit(),tickEnter=tick.enter().append("g").attr("class","tick"),line=tick.select("line"),text=tick.select("text");path=path.merge(path.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),tick=tick.merge(tickEnter),line=line.merge(tickEnter.append("line").attr("stroke","#000").attr(x+"2",k*tickSizeInner)),text=text.merge(tickEnter.append("text").attr("fill","#000").attr(x,k*spacing).attr("dy",orient===axis_top?"0em":orient===axis_bottom?"0.71em":"0.32em")).style("transform",tickTransform),context!==selection&&(path=path.transition(context),tick=tick.transition(context),line=line.transition(context),text=text.transition(context),tickExit=tickExit.transition(context).attr("opacity",epsilon).attr("transform",function(d){return isFinite(d=position(d))?transform(d):this.getAttribute("transform")}),tickEnter.attr("opacity",epsilon).attr("transform",function(d){var p=this.parentNode.__axis;return transform(p&&isFinite(p=p(d))?p:position(d))})),tickExit.remove(),path.attr("d",orient===axis_left||orient==axis_right?"M"+k*tickSizeOuter+","+range0+"H0.5V"+range1+"H"+k*tickSizeOuter:"M"+range0+","+k*tickSizeOuter+"V0.5H"+range1+"V"+k*tickSizeOuter),tick.attr("opacity",1).attr("transform",function(d){return transform(position(d))}),line.attr(x+"2",k*tickSizeInner),text.attr(x,k*spacing).text(format),selection.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",orient===axis_right?"start":orient===axis_left?"end":"middle"),selection.each(function(){this.__axis=position})}return axis.scale=function(_){return arguments.length?(scale=_,axis):scale},axis.tickTransform=function(_){return arguments.length?(tickTransform=_,axis):tickTransform},axis.ticks=function(){return tickArguments=src_array_slice.call(arguments),axis},axis.tickArguments=function(_){return arguments.length?(tickArguments=null==_?[]:src_array_slice.call(_),axis):tickArguments.slice()},axis.tickValues=function(_){return arguments.length?(tickValues=null==_?null:src_array_slice.call(_),axis):tickValues&&tickValues.slice()},axis.tickFormat=function(_){return arguments.length?(tickFormat=_,axis):tickFormat},axis.tickSize=function(_){return arguments.length?(tickSizeInner=tickSizeOuter=+_,axis):tickSizeInner},axis.tickSizeInner=function(_){return arguments.length?(tickSizeInner=+_,axis):tickSizeInner},axis.tickSizeOuter=function(_){return arguments.length?(tickSizeOuter=+_,axis):tickSizeOuter},axis.tickPadding=function(_){return arguments.length?(tickPadding=+_,axis):tickPadding},axis}var pi=Math.PI,tau=2*pi,tauEpsilon=tau-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(x,y){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(x,y){this._+="L"+(this._x1=+x)+","+(this._y1=+y)},quadraticCurveTo:function quadraticCurveTo(x1,y1,x,y){this._+="Q"+ +x1+","+ +y1+","+(this._x1=+x)+","+(this._y1=+y)},bezierCurveTo:function bezierCurveTo(x1,y1,x2,y2,x,y){this._+="C"+ +x1+","+ +y1+","+ +x2+","+ +y2+","+(this._x1=+x)+","+(this._y1=+y)},arcTo:function arcTo(x1,y1,x2,y2,r){x1=+x1,y1=+y1,x2=+x2,y2=+y2,r=+r;var x0=this._x1,y0=this._y1,x21=x2-x1,y21=y2-y1,x01=x0-x1,y01=y0-y1,l01_2=x01*x01+y01*y01;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=x1)+","+(this._y1=y1);else if(l01_2>1e-6)if(Math.abs(y01*x21-y21*x01)>1e-6&&r){var x20=x2-x0,y20=y2-y0,l21_2=x21*x21+y21*y21,l20_2=x20*x20+y20*y20,l21=Math.sqrt(l21_2),l01=Math.sqrt(l01_2),l=r*Math.tan((pi-Math.acos((l21_2+l01_2-l20_2)/(2*l21*l01)))/2),t01=l/l01,t21=l/l21;Math.abs(t01-1)>1e-6&&(this._+="L"+(x1+t01*x01)+","+(y1+t01*y01)),this._+="A"+r+","+r+",0,0,"+ +(y01*x20>x01*y20)+","+(this._x1=x1+t21*x21)+","+(this._y1=y1+t21*y21)}else this._+="L"+(this._x1=x1)+","+(this._y1=y1);else;},arc:function arc(x,y,r,a0,a1,ccw){x=+x,y=+y,ccw=!!ccw;var dx=(r=+r)*Math.cos(a0),dy=r*Math.sin(a0),x0=x+dx,y0=y+dy,cw=1^ccw,da=ccw?a0-a1:a1-a0;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+x0+","+y0:(Math.abs(this._x1-x0)>1e-6||Math.abs(this._y1-y0)>1e-6)&&(this._+="L"+x0+","+y0),r&&(da<0&&(da=da%tau+tau),da>tauEpsilon?this._+="A"+r+","+r+",0,1,"+cw+","+(x-dx)+","+(y-dy)+"A"+r+","+r+",0,1,"+cw+","+(this._x1=x0)+","+(this._y1=y0):da>1e-6&&(this._+="A"+r+","+r+",0,"+ +(da>=pi)+","+cw+","+(this._x1=x+r*Math.cos(a1))+","+(this._y1=y+r*Math.sin(a1))))},rect:function rect(x,y,w,h){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)+"h"+ +w+"v"+ +h+"h"+-w+"Z"},toString:function toString(){return this._}};var src_path=path_path,d3_shape_src_constant=function(x){return function constant(){return x}},abs=Math.abs,atan2=Math.atan2,cos=Math.cos,math_max=Math.max,math_min=Math.min,sin=Math.sin,math_sqrt=Math.sqrt,math_epsilon=1e-12,math_pi=Math.PI,halfPi=math_pi/2,math_tau=2*math_pi;function asin(x){return x>=1?halfPi:x<=-1?-halfPi:Math.asin(x)}function arcInnerRadius(d){return d.innerRadius}function arcOuterRadius(d){return d.outerRadius}function arcStartAngle(d){return d.startAngle}function arcEndAngle(d){return d.endAngle}function arcPadAngle(d){return d&&d.padAngle}function cornerTangents(x0,y0,x1,y1,r1,rc,cw){var x01=x0-x1,y01=y0-y1,lo=(cw?rc:-rc)/math_sqrt(x01*x01+y01*y01),ox=lo*y01,oy=-lo*x01,x11=x0+ox,y11=y0+oy,x10=x1+ox,y10=y1+oy,x00=(x11+x10)/2,y00=(y11+y10)/2,dx=x10-x11,dy=y10-y11,d2=dx*dx+dy*dy,r=r1-rc,D=x11*y10-x10*y11,d=(dy<0?-1:1)*math_sqrt(math_max(0,r*r*d2-D*D)),cx0=(D*dy-dx*d)/d2,cy0=(-D*dx-dy*d)/d2,cx1=(D*dy+dx*d)/d2,cy1=(-D*dx+dy*d)/d2,dx0=cx0-x00,dy0=cy0-y00,dx1=cx1-x00,dy1=cy1-y00;return dx0*dx0+dy0*dy0>dx1*dx1+dy1*dy1&&(cx0=cx1,cy0=cy1),{cx:cx0,cy:cy0,x01:-ox,y01:-oy,x11:cx0*(r1/r-1),y11:cy0*(r1/r-1)}}function Linear(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:this._context.lineTo(x,y)}}};var curve_linear=function(context){return new Linear(context)};function point_x(p){return p[0]}function point_y(p){return p[1]}var src_line=function(){var x=point_x,y=point_y,defined=d3_shape_src_constant(!0),context=null,curve=curve_linear,output=null;function line(data){var i,d,buffer,n=data.length,defined0=!1;for(null==context&&(output=curve(buffer=src_path())),i=0;i<=n;++i)!(i=j;--k)output.point(x0z[k],y0z[k]);output.lineEnd(),output.areaEnd()}defined0&&(x0z[i]=+x0(d,i,data),y0z[i]=+y0(d,i,data),output.point(x1?+x1(d,i,data):x0z[i],y1?+y1(d,i,data):y0z[i]))}if(buffer)return output=null,buffer+""||null}function arealine(){return src_line().defined(defined).curve(curve).context(context)}return area.x=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),x1=null,area):x0},area.x0=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),area):x0},area.x1=function(_){return arguments.length?(x1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):x1},area.y=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),y1=null,area):y0},area.y0=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),area):y0},area.y1=function(_){return arguments.length?(y1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):y1},area.lineX0=area.lineY0=function(){return arealine().x(x0).y(y0)},area.lineY1=function(){return arealine().x(x0).y(y1)},area.lineX1=function(){return arealine().x(x1).y(y0)},area.defined=function(_){return arguments.length?(defined="function"==typeof _?_:d3_shape_src_constant(!!_),area):defined},area.curve=function(_){return arguments.length?(curve=_,null!=context&&(output=curve(context)),area):curve},area.context=function(_){return arguments.length?(null==_?context=output=null:output=curve(context=_),area):context},area},src_descending=function(a,b){return ba?1:b>=a?0:NaN},d3_shape_src_identity=function(d){return d};curveRadial(curve_linear);function Radial(curve){this._curve=curve}function curveRadial(curve){function radial(context){return new Radial(curve(context))}return radial._curve=curve,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(a,r){this._curve.point(r*Math.sin(a),r*-Math.cos(a))}};var d3_shape_src_array_slice=Array.prototype.slice;var symbol_circle={draw:function draw(context,size){var r=Math.sqrt(size/math_pi);context.moveTo(r,0),context.arc(0,0,r,0,math_tau)}},symbol_cross={draw:function draw(context,size){var r=Math.sqrt(size/5)/2;context.moveTo(-3*r,-r),context.lineTo(-r,-r),context.lineTo(-r,-3*r),context.lineTo(r,-3*r),context.lineTo(r,-r),context.lineTo(3*r,-r),context.lineTo(3*r,r),context.lineTo(r,r),context.lineTo(r,3*r),context.lineTo(-r,3*r),context.lineTo(-r,r),context.lineTo(-3*r,r),context.closePath()}},tan30=Math.sqrt(1/3),tan30_2=2*tan30,diamond={draw:function draw(context,size){var y=Math.sqrt(size/tan30_2),x=y*tan30;context.moveTo(0,-y),context.lineTo(x,0),context.lineTo(0,y),context.lineTo(-x,0),context.closePath()}},kr=Math.sin(math_pi/10)/Math.sin(7*math_pi/10),kx=Math.sin(math_tau/10)*kr,ky=-Math.cos(math_tau/10)*kr,star={draw:function draw(context,size){var r=Math.sqrt(.8908130915292852*size),x=kx*r,y=ky*r;context.moveTo(0,-r),context.lineTo(x,y);for(var i=1;i<5;++i){var a=math_tau*i/5,c=Math.cos(a),s=Math.sin(a);context.lineTo(s*r,-c*r),context.lineTo(c*x-s*y,s*x+c*y)}context.closePath()}},square={draw:function draw(context,size){var w=Math.sqrt(size),x=-w/2;context.rect(x,x,w,w)}},sqrt3=Math.sqrt(3),triangle={draw:function draw(context,size){var y=-Math.sqrt(size/(3*sqrt3));context.moveTo(0,2*y),context.lineTo(-sqrt3*y,-y),context.lineTo(sqrt3*y,-y),context.closePath()}},wye_s=Math.sqrt(3)/2,wye_k=1/Math.sqrt(12),wye_a=3*(wye_k/2+1),wye={draw:function draw(context,size){var r=Math.sqrt(size/wye_a),x0=r/2,y0=r*wye_k,x1=x0,y1=r*wye_k+r,x2=-x1,y2=y1;context.moveTo(x0,y0),context.lineTo(x1,y1),context.lineTo(x2,y2),context.lineTo(-.5*x0-wye_s*y0,wye_s*x0+-.5*y0),context.lineTo(-.5*x1-wye_s*y1,wye_s*x1+-.5*y1),context.lineTo(-.5*x2-wye_s*y2,wye_s*x2+-.5*y2),context.lineTo(-.5*x0+wye_s*y0,-.5*y0-wye_s*x0),context.lineTo(-.5*x1+wye_s*y1,-.5*y1-wye_s*x1),context.lineTo(-.5*x2+wye_s*y2,-.5*y2-wye_s*x2),context.closePath()}},noop=function(){};function _point(that,x,y){that._context.bezierCurveTo((2*that._x0+that._x1)/3,(2*that._y0+that._y1)/3,(that._x0+2*that._x1)/3,(that._y0+2*that._y1)/3,(that._x0+4*that._x1+x)/6,(that._y0+4*that._y1+y)/6)}function Basis(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);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,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisClosed(context){this._context=context}BasisClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x2=x,this._y2=y;break;case 1:this._point=2,this._x3=x,this._y3=y;break;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;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisOpen(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1;break;case 1:this._point=2;break;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;case 3:this._point=4;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function Bundle(context,beta){this._basis=new Basis(context),this._beta=beta}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var x=this._x,y=this._y,j=x.length-1;if(j>0)for(var t,x0=x[0],y0=y[0],dx=x[j]-x0,dy=y[j]-y0,i=-1;++i<=j;)t=i/j,this._basis.point(this._beta*x[i]+(1-this._beta)*(x0+t*dx),this._beta*y[i]+(1-this._beta)*(y0+t*dy));this._x=this._y=null,this._basis.lineEnd()},point:function point(x,y){this._x.push(+x),this._y.push(+y)}};(function custom(beta){function bundle(context){return 1===beta?new Basis(context):new Bundle(context,beta)}return bundle.beta=function(beta){return custom(+beta)},bundle})(.85);function cardinal_point(that,x,y){that._context.bezierCurveTo(that._x1+that._k*(that._x2-that._x0),that._y1+that._k*(that._y2-that._y0),that._x2+that._k*(that._x1-x),that._y2+that._k*(that._y1-y),that._x2,that._y2)}function Cardinal(context,tension){this._context=context,this._k=(1-tension)/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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2,this._x1=x,this._y1=y;break;case 2:this._point=3;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new Cardinal(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalClosed(context,tension){this._context=context,this._k=(1-tension)/6}CardinalClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalClosed(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalOpen(context,tension){this._context=context,this._k=(1-tension)/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(x,y){switch(x=+x,y=+y,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,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalOpen(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function catmullRom_point(that,x,y){var x1=that._x1,y1=that._y1,x2=that._x2,y2=that._y2;if(that._l01_a>math_epsilon){var a=2*that._l01_2a+3*that._l01_a*that._l12_a+that._l12_2a,n=3*that._l01_a*(that._l01_a+that._l12_a);x1=(x1*a-that._x0*that._l12_2a+that._x2*that._l01_2a)/n,y1=(y1*a-that._y0*that._l12_2a+that._y2*that._l01_2a)/n}if(that._l23_a>math_epsilon){var b=2*that._l23_2a+3*that._l23_a*that._l12_a+that._l12_2a,m=3*that._l23_a*(that._l23_a+that._l12_a);x2=(x2*b+that._x1*that._l23_2a-x*that._l12_2a)/m,y2=(y2*b+that._y1*that._l23_2a-y*that._l12_2a)/m}that._context.bezierCurveTo(x1,y1,x2,y2,that._x2,that._y2)}function CatmullRom(context,alpha){this._context=context,this._alpha=alpha}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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};var curve_catmullRom=function custom(alpha){function catmullRom(context){return alpha?new CatmullRom(context,alpha):new Cardinal(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom}(.5);function CatmullRomClosed(context,alpha){this._context=context,this._alpha=alpha}CatmullRomClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:catmullRom_point(this,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomClosed(context,alpha):new CardinalClosed(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function CatmullRomOpen(context,alpha){this._context=context,this._alpha=alpha}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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,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,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomOpen(context,alpha):new CardinalOpen(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function LinearClosed(context){this._context=context}LinearClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(x,y){x=+x,y=+y,this._point?this._context.lineTo(x,y):(this._point=1,this._context.moveTo(x,y))}};function monotone_sign(x){return x<0?-1:1}function slope3(that,x2,y2){var h0=that._x1-that._x0,h1=x2-that._x1,s0=(that._y1-that._y0)/(h0||h1<0&&-0),s1=(y2-that._y1)/(h1||h0<0&&-0),p=(s0*h1+s1*h0)/(h0+h1);return(monotone_sign(s0)+monotone_sign(s1))*Math.min(Math.abs(s0),Math.abs(s1),.5*Math.abs(p))||0}function slope2(that,t){var h=that._x1-that._x0;return h?(3*(that._y1-that._y0)/h-t)/2:t}function monotone_point(that,t0,t1){var x0=that._x0,y0=that._y0,x1=that._x1,y1=that._y1,dx=(x1-x0)/3;that._context.bezierCurveTo(x0+dx,y0+dx*t0,x1-dx,y1-dx*t1,x1,y1)}function MonotoneX(context){this._context=context}function MonotoneY(context){this._context=new ReflectContext(context)}function ReflectContext(context){this._context=context}function Natural(context){this._context=context}function controlPoints(x){var i,m,n=x.length-1,a=new Array(n),b=new Array(n),r=new Array(n);for(a[0]=0,b[0]=2,r[0]=x[0]+2*x[1],i=1;i=0;--i)a[i]=(r[i]-a[i+1])/b[i];for(b[n-1]=(x[n]+a[n-1])/2,i=0;i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,y),this._context.lineTo(x,y);else{var x1=this._x*(1-this._t)+x*this._t;this._context.lineTo(x1,this._y),this._context.lineTo(x1,y)}}this._x=x,this._y=y}};var curve_step=function(context){return new Step(context,.5)};function stepBefore(context){return new Step(context,0)}function stepAfter(context){return new Step(context,1)}var none=function(series,order){if((n=series.length)>1)for(var j,s0,n,i=1,s1=series[order[0]],m=s1.length;i=0;)o[n]=n;return o};function stackValue(d,key){return d[key]}var order_ascending=function(series){var sums=series.map(ascending_sum);return order_none(series).sort(function(a,b){return sums[a]-sums[b]})};function ascending_sum(series){for(var v,s=0,i=-1,n=series.length;++i0)){if(r/=dx,dx<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=x1-ax,dx||!(r<0)){if(r/=dx,dx<0){if(r>t1)return;r>t0&&(t0=r)}else if(dx>0){if(r0)){if(r/=dy,dy<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=y1-ay,dy||!(r<0)){if(r/=dy,dy<0){if(r>t1)return;r>t0&&(t0=r)}else if(dy>0){if(r0||t1<1)||(t0>0&&(edge[0]=[ax+t0*dx,ay+t0*dy]),t1<1&&(edge[1]=[ax+t1*dx,ay+t1*dy]),!0)}}}}}function connectEdge(edge,x0,y0,x1,y1){var v1=edge[1];if(v1)return!0;var fm,fb,v0=edge[0],left=edge.left,right=edge.right,lx=left[0],ly=left[1],rx=right[0],ry=right[1],fx=(lx+rx)/2,fy=(ly+ry)/2;if(ry===ly){if(fx=x1)return;if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[fx,y0];v1=[fx,y1]}else{if(v0){if(v0[1]1)if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[(y0-fb)/fm,y0];v1=[(y1-fb)/fm,y1]}else{if(v0){if(v0[1]=x1)return}else v0=[x0,fm*x0+fb];v1=[x1,fm*x1+fb]}else{if(v0){if(v0[0]=-Diagram_epsilon2)){var ha=ax*ax+ay*ay,hc=cx*cx+cy*cy,x=(cy*ha-ay*hc)/d,y=(ax*hc-cx*ha)/d,circle=circlePool.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};circle.arc=arc,circle.site=cSite,circle.x=x+bx,circle.y=(circle.cy=y+by)+Math.sqrt(x*x+y*y),arc.circle=circle;for(var before=null,node=circles._;node;)if(circle.yDiagram_epsilon)node=node.L;else{if(!((dxr=x-rightBreakPoint(node,directrix))>Diagram_epsilon)){dxl>-Diagram_epsilon?(lArc=node.P,rArc=node):dxr>-Diagram_epsilon?(lArc=node,rArc=node.N):lArc=rArc=node;break}if(!node.R){lArc=node;break}node=node.R}!function createCell(site){return Diagram_cells[site.index]={site:site,halfedges:[]}}(site);var newArc=createBeach(site);if(beaches.insert(lArc,newArc),lArc||rArc){if(lArc===rArc)return detachCircle(lArc),rArc=createBeach(lArc.site),beaches.insert(newArc,rArc),newArc.edge=rArc.edge=createEdge(lArc.site,newArc.site),attachCircle(lArc),void attachCircle(rArc);if(rArc){detachCircle(lArc),detachCircle(rArc);var lSite=lArc.site,ax=lSite[0],ay=lSite[1],bx=site[0]-ax,by=site[1]-ay,rSite=rArc.site,cx=rSite[0]-ax,cy=rSite[1]-ay,d=2*(bx*cy-by*cx),hb=bx*bx+by*by,hc=cx*cx+cy*cy,vertex=[(cy*hb-by*hc)/d+ax,(bx*hc-cx*hb)/d+ay];setEdgeEnd(rArc.edge,lSite,rSite,vertex),newArc.edge=createEdge(lSite,site,null,vertex),rArc.edge=createEdge(site,rSite,null,vertex),attachCircle(lArc),attachCircle(rArc)}else newArc.edge=createEdge(lArc.site,newArc.site)}}function leftBreakPoint(arc,directrix){var site=arc.site,rfocx=site[0],rfocy=site[1],pby2=rfocy-directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return-1/0;var lfocx=(site=lArc.site)[0],lfocy=site[1],plby2=lfocy-directrix;if(!plby2)return lfocx;var hl=lfocx-rfocx,aby2=1/pby2-1/plby2,b=hl/plby2;return aby2?(-b+Math.sqrt(b*b-2*aby2*(hl*hl/(-2*plby2)-lfocy+plby2/2+rfocy-pby2/2)))/aby2+rfocx:(rfocx+lfocx)/2}function rightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return leftBreakPoint(rArc,directrix);var site=arc.site;return site[1]===directrix?site[0]:1/0}var beaches,Diagram_cells,circles,Diagram_edges,Diagram_epsilon=1e-6,Diagram_epsilon2=1e-12;function triangleArea(a,b,c){return(a[0]-c[0])*(b[1]-a[1])-(a[0]-b[0])*(c[1]-a[1])}function lexicographic(a,b){return b[1]-a[1]||b[0]-a[0]}function Diagram(sites,extent){var x,y,circle,site=sites.sort(lexicographic).pop();for(Diagram_edges=[],Diagram_cells=new Array(sites.length),beaches=new src_RedBlackTree,circles=new src_RedBlackTree;;)if(circle=firstCircle,site&&(!circle||site[1]Diagram_epsilon||Math.abs(edge[0][1]-edge[1][1])>Diagram_epsilon)||delete Diagram_edges[i]}(x0,y0,x1,y1),function clipCells(x0,y0,x1,y1){var iCell,cell,site,iHalfedge,halfedges,nHalfedges,start,startX,startY,end,endX,endY,nCells=Diagram_cells.length,cover=!0;for(iCell=0;iCellDiagram_epsilon||Math.abs(endY-startY)>Diagram_epsilon)&&(halfedges.splice(iHalfedge,0,Diagram_edges.push(createBorderEdge(site,end,Math.abs(endX-x0)Diagram_epsilon?[x0,Math.abs(startX-x0)Diagram_epsilon?[Math.abs(startY-y1)Diagram_epsilon?[x1,Math.abs(startX-x1)Diagram_epsilon?[Math.abs(startY-y0)=n)return null;var dx=x-cell.site[0],dy=y-cell.site[1],d2=dx*dx+dy*dy;do{cell=that.cells[i0=i1],i1=null,cell.halfedges.forEach(function(e){var edge=that.edges[e],v=edge.left;if(v!==cell.site&&v||(v=edge.right)){var vx=x-v[0],vy=y-v[1],v2=vx*vx+vy*vy;v20?0:domain[0],domain[1]=domain[1]>0?domain[1]:0),domain},unionDomain=function unionDomain(domains,fieldType){var _ref2,domain=[];(domains=domains.filter(function(dom){return dom&&dom.length})).length&&(domain=fieldType===CATEGORICAL?(_ref2=[]).concat.apply(_ref2,common_utils_toConsumableArray(domains)):[Math.min.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[0]}))),Math.max.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[1]})))]);return domain},symbolFns={circle:symbol_circle,cross:symbol_cross,diamond:diamond,square:square,star:star,wye:wye,triangle:triangle},easeFns={cubic:cubicInOut,bounce:bounceOut,linear:function src_linear_linear(t){return+t},elastic:elasticOut,back:backInOut,poly:polyInOut,circle:function circleInOut(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}},common_utils_getClosestIndexOf=function getClosestIndexOf(arr,value,side){for(var mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1},getNearestValue=function getNearestValue(data,key){var filterData=data.filter(function(d){return"number"==typeof d});return filterData[common_utils_getClosestIndexOf(filterData,key)]},getWindow=function getWindow(){return window},getQualifiedClassName=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(cls,id,prefix){return cls=cls.replace(/^\.*/,""),["".concat(prefix,"-").concat(cls),"".concat(prefix,"-").concat(cls,"-").concat(id)]}),defaultValue=function defaultValue(param,value){return void 0===param||"object"===common_utils_typeof(param)&&!param?value:param},objectIterator=function objectIterator(obj,fn){for(var key in obj)Object.hasOwnProperty.call(obj,key)&&fn(key,obj)},common_utils_Voronoi=function(){function Voronoi(){var data=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];!function common_utils_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Voronoi),this._voronoi=src_voronoi().x(function(d){return d.x}).y(function(d){return d.y}),this.data(data)}return function common_utils_createClass(Constructor,protoProps,staticProps){return protoProps&&common_utils_defineProperties(Constructor.prototype,protoProps),staticProps&&common_utils_defineProperties(Constructor,staticProps),Constructor}(Voronoi,[{key:"data",value:function data(_data){return _data&&(this._voronoiFn=this._voronoi(_data)),this}},{key:"find",value:function find(x,y,radius){return this._voronoiFn.find(x,y,radius)}}]),Voronoi}(),getObjProp=function getObjProp(obj){if(void 0===obj||null===obj)return obj;for(var retObj=obj,_len=arguments.length,fields=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)fields[_key-1]=arguments[_key];for(var i=0,len=fields.length;i=0;i--)if(arr1[i]!==arr2[i])return!1;return!0}(oldVal,newVal):"Object"===type?Object.is(oldVal,newVal):oldVal===newVal}},ERROR_MSG={INTERFACE_IMPL:"Method not implemented"},mergeRecursive=function mergeRecursive(source,sink){for(var prop in sink)isSimpleObject(source[prop])&&isSimpleObject(sink[prop])?mergeRecursive(source[prop],sink[prop]):sink[prop]instanceof Object&&sink[prop].constructor===Object?(source[prop]={},mergeRecursive(source[prop],sink[prop])):source[prop]=sink[prop];return source},common_utils_createSelection=function createSelection(sel,appendObj,data,idFn){var selection=sel||function dataSelect(idFn){return new DataSystem_selection(idFn)}(idFn),mergedSelection=(selection=selection.data(data)).enter().append(appendObj).merge(selection),exitSelection=selection.exit();return exitSelection.getObjects().forEach(function(inst){return inst.remove()}),exitSelection.remove(),mergedSelection},common_utils_interpolator=function interpolator(){return src_value},common_utils_numberInterpolator=function numberInterpolator(){return src_number},common_utils_piecewiseInterpolator=function piecewiseInterpolator(){return piecewise_piecewise};var rgbToHsv=function rgbToHsv(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r=+r,g=+g,b=+b,a=+a,r/=255,g/=255,b/=255;var h,s,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;switch(s=l>.5?d/(2-max-min):d/(max+min),max){case r:h=(g-b)/d+(g=range[0]&&val<=range[1]})},{saveChild:!1,mode:mode})},common_utils_getDataModelFromIdentifiers=function getDataModelFromIdentifiers(dataModel,identifiers,mode){var filteredDataModel;if(identifiers instanceof Array){var fieldsConfig=dataModel.getFieldsConfig(),dataArr=identifiers.slice(1,identifiers.length);if(identifiers instanceof Function)filteredDataModel=identifiers(dataModel,{},!1);else if(identifiers instanceof Array&&identifiers[0].length){var filteredSchema=identifiers[0].filter(function(d){return d in fieldsConfig});filteredDataModel=dataModel.select(function(fields){var include=!0;return filteredSchema.forEach(function(propField,idx){var value=fields[propField].internalValue,index=dataArr.findIndex(function(d){return d[idx]===value});include=include&&-1!==index}),include},{saveChild:!1,mode:mode})}else filteredDataModel=dataModel.select(function(){return!1},{saveChild:!1,mode:mode})}else filteredDataModel=getDataModelFromRange(dataModel,identifiers,mode);return filteredDataModel},isValidValue=function isValidValue(value){return!isNaN(value)&&value!==-1/0&&value!==1/0},toArray=function toArray(arr){return arr instanceof Array?arr:[arr]},common_utils_getSymbol=function getSymbol(type){return function(){var type=d3_shape_src_constant(symbol_circle),size=d3_shape_src_constant(64),context=null;function symbol(){var buffer;if(context||(context=buffer=src_path()),type.apply(this,arguments).draw(context,+size.apply(this,arguments)),buffer)return context=null,buffer+""||null}return symbol.type=function(_){return arguments.length?(type="function"==typeof _?_:d3_shape_src_constant(_),symbol):type},symbol.size=function(_){return arguments.length?(size="function"==typeof _?_:d3_shape_src_constant(+_),symbol):size},symbol.context=function(_){return arguments.length?(context=null==_?null:_,symbol):context},symbol}().type(symbolFns[type])},stackOrders=(_defineProperty(_stackOrders={},"none",order_none),_defineProperty(_stackOrders,"ascending",order_ascending),_defineProperty(_stackOrders,"descending",function(series){return order_ascending(series).reverse()}),_stackOrders),stackOffsets=(_defineProperty(_stackOffsets={},"diverging",function(series,order){if((n=series.length)>0)for(var i,d,dy,yp,yn,n,j=0,m=series[order[0]].length;j=0?(d[0]=yp,d[1]=yp+=dy):dy<0?(d[1]=yn,d[0]=yn+=dy):d[0]=yp}),_defineProperty(_stackOffsets,"none",none),_defineProperty(_stackOffsets,"expand",function(series,order){if((n=series.length)>0){for(var i,n,y,j=0,m=series[0].length;j0&&(m=(s0=series[order[0]]).length)>0){for(var s0,m,n,y=0,j=1;j0&&(sum+=v);for(null!=sortValues?index.sort(function(i,j){return sortValues(arcs[i],arcs[j])}):null!=sort&&index.sort(function(i,j){return sort(data[i],data[j])}),i=0,k=sum?(da-n*pa)/sum:0;i0?v*k:0)+pa,arcs[j]={data:data[j],index:i,value:v,startAngle:a0,endAngle:a1,padAngle:p};return arcs}return pie.value=function(_){return arguments.length?(value="function"==typeof _?_:d3_shape_src_constant(+_),pie):value},pie.sortValues=function(_){return arguments.length?(sortValues=_,sort=null,pie):sortValues},pie.sort=function(_){return arguments.length?(sort=_,sortValues=null,pie):sort},pie.startAngle=function(_){return arguments.length?(startAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):startAngle},pie.endAngle=function(_){return arguments.length?(endAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):endAngle},pie.padAngle=function(_){return arguments.length?(padAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):padAngle},pie},arc:function(){var innerRadius=arcInnerRadius,outerRadius=arcOuterRadius,cornerRadius=d3_shape_src_constant(0),padRadius=null,startAngle=arcStartAngle,endAngle=arcEndAngle,padAngle=arcPadAngle,context=null;function arc(){var buffer,r,r0=+innerRadius.apply(this,arguments),r1=+outerRadius.apply(this,arguments),a0=startAngle.apply(this,arguments)-halfPi,a1=endAngle.apply(this,arguments)-halfPi,da=abs(a1-a0),cw=a1>a0;if(context||(context=buffer=src_path()),r1math_epsilon)if(da>math_tau-math_epsilon)context.moveTo(r1*cos(a0),r1*sin(a0)),context.arc(0,0,r1,a0,a1,!cw),r0>math_epsilon&&(context.moveTo(r0*cos(a1),r0*sin(a1)),context.arc(0,0,r0,a1,a0,cw));else{var t0,t1,a01=a0,a11=a1,a00=a0,a10=a1,da0=da,da1=da,ap=padAngle.apply(this,arguments)/2,rp=ap>math_epsilon&&(padRadius?+padRadius.apply(this,arguments):math_sqrt(r0*r0+r1*r1)),rc=math_min(abs(r1-r0)/2,+cornerRadius.apply(this,arguments)),rc0=rc,rc1=rc;if(rp>math_epsilon){var p0=asin(rp/r0*sin(ap)),p1=asin(rp/r1*sin(ap));(da0-=2*p0)>math_epsilon?(a00+=p0*=cw?1:-1,a10-=p0):(da0=0,a00=a10=(a0+a1)/2),(da1-=2*p1)>math_epsilon?(a01+=p1*=cw?1:-1,a11-=p1):(da1=0,a01=a11=(a0+a1)/2)}var x01=r1*cos(a01),y01=r1*sin(a01),x10=r0*cos(a10),y10=r0*sin(a10);if(rc>math_epsilon){var oc,x11=r1*cos(a11),y11=r1*sin(a11),x00=r0*cos(a00),y00=r0*sin(a00);if(da1?0:x<-1?math_pi:Math.acos(x)}((ax*bx+ay*by)/(math_sqrt(ax*ax+ay*ay)*math_sqrt(bx*bx+by*by)))/2),lc=math_sqrt(oc[0]*oc[0]+oc[1]*oc[1]);rc0=math_min(rc,(r0-lc)/(kc-1)),rc1=math_min(rc,(r1-lc)/(kc+1))}}da1>math_epsilon?rc1>math_epsilon?(t0=cornerTangents(x00,y00,x01,y01,r1,rc1,cw),t1=cornerTangents(x11,y11,x10,y10,r1,rc1,cw),context.moveTo(t0.cx+t0.x01,t0.cy+t0.y01),rc1math_epsilon&&da0>math_epsilon?rc0>math_epsilon?(t0=cornerTangents(x10,y10,x11,y11,r0,-rc0,cw),t1=cornerTangents(x01,y01,x00,y00,r0,-rc0,cw),context.lineTo(t0.cx+t0.x01,t0.cy+t0.y01),rc01?_len3-1:0),_key3=1;_key3<_len3;_key3++)measureFieldNames[_key3-1]=arguments[_key3];var filteredReducers={};if(dataModel instanceof datamodel_default.a){var derivations=[].concat(common_utils_toConsumableArray(dataModel.getDerivations().reverse()),common_utils_toConsumableArray(dataModel.getAncestorDerivations().reverse())),nearestReducers=defaultValue(getObjProp(derivations.find(function(derv){return derv.op===dist_datamodel.DM_DERIVATIVES.GROUPBY}),"criteria"),{}),measures=dataModel.getFieldspace().getMeasure();(measureFieldNames=measureFieldNames.length?measureFieldNames:Object.keys(measures)).forEach(function(measureName){if(nearestReducers[measureName])filteredReducers[measureName]=nearestReducers[measureName];else{var measureField=measures[measureName];measureField&&(filteredReducers[measureName]=measureField.defAggFn())}})}return filteredReducers},retrieveFieldDisplayName=function retrieveFieldDisplayName(dm,fieldName){return dm.getFieldspace().fieldsObj()[fieldName].displayName()},sortOrderMap=(_defineProperty(_sortOrderMap={},"asc",function(firstVal,secondVal){return firstVal.localeCompare(secondVal)}),_defineProperty(_sortOrderMap,"desc",function(firstVal,secondVal){return secondVal.localeCompare(firstVal)}),_sortOrderMap),common_utils_intersect=function intersect(arr1,arr2){var _accessors=_slicedToArray(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[function(v){return v},function(v){return v}],2),fn1=_accessors[0],fn2=_accessors[1],set=new Set(arr2.map(function(v){return fn2(v)}));return arr1.filter(function(value){return set.has(fn1(value))})},xhtml="http://www.w3.org/1999/xhtml",src_namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},src_namespace=function(name){var prefix=name+="",i=prefix.indexOf(":");return i>=0&&"xmlns"!==(prefix=name.slice(0,i))&&(name=name.slice(i+1)),src_namespaces.hasOwnProperty(prefix)?{space:src_namespaces[prefix],local:name}:name};var creator=function(name){var fullname=src_namespace(name);return(fullname.local?function creatorFixed(fullname){return function(){return this.ownerDocument.createElementNS(fullname.space,fullname.local)}}:function creatorInherit(name){return function(){var document=this.ownerDocument,uri=this.namespaceURI;return uri===xhtml&&document.documentElement.namespaceURI===xhtml?document.createElement(name):document.createElementNS(uri,name)}})(fullname)};function selector_none(){}var src_selector=function(selector){return null==selector?selector_none:function(){return this.querySelector(selector)}};function selectorAll_empty(){return[]}var selectorAll=function(selector){return null==selector?selectorAll_empty:function(){return this.querySelectorAll(selector)}},matcher=function(selector){return function(){return this.matches(selector)}},sparse=function(update){return new Array(update.length)};function EnterNode(parent,datum){this.ownerDocument=parent.ownerDocument,this.namespaceURI=parent.namespaceURI,this._next=null,this._parent=parent,this.__data__=datum}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(child){return this._parent.insertBefore(child,this._next)},insertBefore:function insertBefore(child,next){return this._parent.insertBefore(child,next)},querySelector:function querySelector(selector){return this._parent.querySelector(selector)},querySelectorAll:function querySelectorAll(selector){return this._parent.querySelectorAll(selector)}};var keyPrefix="$";function bindIndex(parent,group,enter,update,exit,data){for(var node,i=0,groupLength=group.length,dataLength=data.length;ib?1:a>=b?0:NaN}var src_window=function(node){return node.ownerDocument&&node.ownerDocument.defaultView||node.document&&node||node.defaultView};function styleValue(node,name){return node.style.getPropertyValue(name)||src_window(node).getComputedStyle(node,null).getPropertyValue(name)}function classArray(string){return string.trim().split(/^|\s+/)}function classList(node){return node.classList||new ClassList(node)}function ClassList(node){this._node=node,this._names=classArray(node.getAttribute("class")||"")}function classedAdd(node,names){for(var list=classList(node),i=-1,n=names.length;++i=0&&(this._names.splice(i,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(name){return this._names.indexOf(name)>=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 parent=this.parentNode;parent&&parent.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 filterEvents={},on_event=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(filterEvents={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(listener,index,group){return listener=contextListener(listener,index,group),function(event){var related=event.relatedTarget;related&&(related===this||8&related.compareDocumentPosition(this))||listener.call(this,event)}}function contextListener(listener,index,group){return function(event1){var event0=on_event;on_event=event1;try{listener.call(this,this.__data__,index,group)}finally{on_event=event0}}}function onRemove(typename){return function(){var on=this.__on;if(on){for(var o,j=0,i=-1,m=on.length;j=i1&&(i1=i0+1);!(next=updateGroup[i1])&&++i1=0;)(node=group[i])&&(next&&4^node.compareDocumentPosition(next)&&next.parentNode.insertBefore(node,next),next=node);return this},sort:function(compare){function compareNode(a,b){return a&&b?compare(a.__data__,b.__data__):!a-!b}compare||(compare=sort_ascending);for(var groups=this._groups,m=groups.length,sortgroups=new Array(m),j=0;j1?this.each((null==value?function styleRemove(name){return function(){this.style.removeProperty(name)}}:"function"==typeof value?function styleFunction(name,value,priority){return function(){var v=value.apply(this,arguments);null==v?this.style.removeProperty(name):this.style.setProperty(name,v,priority)}}:function styleConstant(name,value,priority){return function(){this.style.setProperty(name,value,priority)}})(name,value,null==priority?"":priority)):styleValue(this.node(),name)},property:function(name,value){return arguments.length>1?this.each((null==value?function propertyRemove(name){return function(){delete this[name]}}:"function"==typeof value?function propertyFunction(name,value){return function(){var v=value.apply(this,arguments);null==v?delete this[name]:this[name]=v}}:function propertyConstant(name,value){return function(){this[name]=value}})(name,value)):this.node()[name]},classed:function(name,value){var names=classArray(name+"");if(arguments.length<2){for(var list=classList(this.node()),i=-1,n=names.length;++i=0&&(name=t.slice(i+1),t=t.slice(0,i)),{type:t,name:name}})}(typename+""),n=typenames.length;if(!(arguments.length<2)){for(on=value?onAdd:onRemove,null==capture&&(capture=!1),i=0;i=0&&(name=t.slice(i+1),t=t.slice(0,i)),t&&!types.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:name}})}(typename+"",_),i=-1,n=T.length;if(!(arguments.length<2)){if(null!=callback&&"function"!=typeof callback)throw new Error("invalid callback: "+callback);for(;++i0)for(var n,t,args=new Array(n),i=0;iclickDistance2}gestures.mouse("drag")}function mouseupped(){src_select(on_event.view).on("mousemove.drag mouseup.drag",null),function yesdrag(view,noclick){var root=view.document.documentElement,selection=src_select(view).on("dragstart.drag",null);noclick&&(selection.on("click.drag",noevent,!0),setTimeout(function(){selection.on("click.drag",null)},0)),"onselectstart"in root?selection.on("selectstart.drag",null):(root.style.MozUserSelect=root.__noselect,delete root.__noselect)}(on_event.view,mousemoving),noevent(),gestures.mouse("end")}function touchstarted(){if(filter.apply(this,arguments)){var i,gesture,touches=on_event.changedTouches,c=container.apply(this,arguments),n=touches.length;for(i=0;i=0&&t._call.call(null,e),t=t._next;--timer_frame}()}finally{timer_frame=0,function nap(){var t0,t2,t1=taskHead,time=1/0;for(;t1;)t1._call?(time>t1._time&&(time=t1._time),t0=t1,t1=t1._next):(t2=t1._next,t1._next=null,t1=t0?t0._next=t2:taskHead=t2);taskTail=t0,sleep(time)}(),clockNow=0}}function poke(){var now=clock.now(),delay=now-clockLast;delay>pokeDelay&&(clockSkew-=delay,clockLast=now)}function sleep(time){timer_frame||(timeout&&(timeout=clearTimeout(timeout)),time-clockNow>24?(time<1/0&&(timeout=setTimeout(wake,time-clock.now()-clockSkew)),timer_interval&&(timer_interval=clearInterval(timer_interval))):(timer_interval||(clockLast=clock.now(),timer_interval=setInterval(poke,pokeDelay)),timer_frame=1,setFrame(wake)))}Timer.prototype=timer_timer.prototype={constructor:Timer,restart:function restart(callback,delay,time){if("function"!=typeof callback)throw new TypeError("callback is not a function");time=(null==time?now():+time)+(null==delay?0:+delay),this._next||taskTail===this||(taskTail?taskTail._next=this:taskHead=this,taskTail=this),this._call=callback,this._time=time,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var src_timeout=function(callback,delay,time){var t=new Timer;return delay=null==delay?0:+delay,t.restart(function(elapsed){t.stop(),callback(elapsed+delay)},delay,time),t},emptyOn=src_dispatch("start","end","cancel","interrupt"),emptyTween=[],CREATED=0,SCHEDULED=1,STARTING=2,STARTED=3,RUNNING=4,ENDING=5,ENDED=6,transition_schedule=function(node,name,id,index,group,timing){var schedules=node.__transition;if(schedules){if(id in schedules)return}else node.__transition={};!function schedule_create(node,id,self){var tween,schedules=node.__transition;function start(elapsed){var i,j,n,o;if(self.state!==SCHEDULED)return stop();for(i in schedules)if((o=schedules[i]).name===self.name){if(o.state===STARTED)return src_timeout(start);o.state===RUNNING?(o.state=ENDED,o.timer.stop(),o.on.call("interrupt",node,node.__data__,o.index,o.group),delete schedules[i]):+iCREATED)throw new Error("too late; already scheduled");return schedule}function schedule_set(node,id){var schedule=schedule_get(node,id);if(schedule.state>STARTED)throw new Error("too late; already running");return schedule}function schedule_get(node,id){var schedule=node.__transition;if(!schedule||!(schedule=schedule[id]))throw new Error("transition not found");return schedule}function tweenValue(transition,name,value){var id=transition._id;return transition.each(function(){var schedule=schedule_set(this,id);(schedule.value||(schedule.value={}))[name]=value.apply(this,arguments)}),function(node){return schedule_get(node,id).value[name]}}var transition_interpolate=function(a,b){var c;return("number"==typeof b?src_number:b instanceof color_color?src_rgb:(c=color_color(b))?(b=c,src_rgb):src_string)(a,b)};var transition_selection_Selection=src_selection.prototype.constructor;function style_styleRemove(name){return function(){this.style.removeProperty(name)}}var transition_id=0;function Transition(groups,parents,name,id){this._groups=groups,this._parents=parents,this._name=name,this._id=id}function newId(){return++transition_id}var selection_prototype=src_selection.prototype;Transition.prototype=function src_transition_transition(name){return src_selection().transition(name)}.prototype={constructor:Transition,select:function(select){var name=this._name,id=this._id;"function"!=typeof select&&(select=src_selector(select));for(var groups=this._groups,m=groups.length,subgroups=new Array(m),j=0;j=0&&(t=t.slice(0,i)),!t||"start"===t})}(name)?init:schedule_set;return function(){var schedule=sit(this,id),on=schedule.on;on!==on0&&(on1=(on0=on).copy()).on(name,listener),schedule.on=on1}}(id,name,listener))},attr:function(name,value){var fullname=src_namespace(name),i="transform"===fullname?interpolateTransformSvg:transition_interpolate;return this.attrTween(name,"function"==typeof value?(fullname.local?function attr_attrFunctionNS(fullname,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttributeNS(fullname.space,fullname.local))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttribute(name))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttribute(name)}})(fullname,i,tweenValue(this,"attr."+name,value)):null==value?(fullname.local?function attr_attrRemoveNS(fullname){return function(){this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrRemove(name){return function(){this.removeAttribute(name)}})(fullname):(fullname.local?function attr_attrConstantNS(fullname,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttributeNS(fullname.space,fullname.local);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}:function attr_attrConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttribute(name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}})(fullname,i,value))},attrTween:function(name,value){var key="attr."+name;if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;var fullname=src_namespace(name);return this.tween(key,(fullname.local?function attrTweenNS(fullname,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolateNS(fullname,i){return function(t){this.setAttributeNS(fullname.space,fullname.local,i(t))}}(fullname,i)),t0}return tween._value=value,tween}:function attrTween(name,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolate(name,i){return function(t){this.setAttribute(name,i(t))}}(name,i)),t0}return tween._value=value,tween})(fullname,value))},style:function(name,value,priority){var i="transform"==(name+="")?interpolateTransformCss:transition_interpolate;return null==value?this.styleTween(name,function styleNull(name,interpolate){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),string1=(this.style.removeProperty(name),styleValue(this,name));return string0===string1?null:string0===string00&&string1===string10?interpolate0:interpolate0=interpolate(string00=string0,string10=string1)}}(name,i)).on("end.style."+name,style_styleRemove(name)):"function"==typeof value?this.styleTween(name,function style_styleFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),value1=value(this),string1=value1+"";return null==value1&&(this.style.removeProperty(name),string1=value1=styleValue(this,name)),string0===string1?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1))}}(name,i,tweenValue(this,"style."+name,value))).each(function styleMaybeRemove(id,name){var on0,on1,listener0,remove,key="style."+name,event="end."+key;return function(){var schedule=schedule_set(this,id),on=schedule.on,listener=null==schedule.value[key]?remove||(remove=style_styleRemove(name)):void 0;on===on0&&listener0===listener||(on1=(on0=on).copy()).on(event,listener0=listener),schedule.on=on1}}(this._id,name)):this.styleTween(name,function style_styleConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=styleValue(this,name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}(name,i,value),priority).on("end.style."+name,null)},styleTween:function(name,value,priority){var key="style."+(name+="");if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function styleTween(name,value,priority){var t,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t=(i0=i)&&function styleInterpolate(name,i,priority){return function(t){this.style.setProperty(name,i(t),priority)}}(name,i,priority)),t}return tween._value=value,tween}(name,value,null==priority?"":priority))},text:function(value){return this.tween("text","function"==typeof value?function text_textFunction(value){return function(){var value1=value(this);this.textContent=null==value1?"":value1}}(tweenValue(this,"text",value)):function text_textConstant(value){return function(){this.textContent=value}}(null==value?"":value+""))},remove:function(){return this.on("end.remove",function removeFunction(id){return function(){var parent=this.parentNode;for(var i in this.__transition)if(+i!==id)return;parent&&parent.removeChild(this)}}(this._id))},tween:function(name,value){var id=this._id;if(name+="",arguments.length<2){for(var t,tween=schedule_get(this.node(),id).tween,i=0,n=tween.length;iSTARTING&&schedule.state4&&void 0!==arguments[4]?arguments[4]:{},keyFn=arguments.length>5?arguments[5]:void 0;(parent instanceof HTMLElement||parent instanceof SVGElement)&&(parent=renderer_utils_selectElement(parent));var filter,selectorVal=selector?selector[0]:null,selectorType=null,actualSelector=null,element=null,enterSel=null,mergeSel=null;selectorVal?"#"===selectorVal?(selectorType="id",actualSelector=selector):(selectorType="class",actualSelector="."===selector[0]?selector:".".concat(selector)):(actualSelector=elemType,filter=!0),element=parent.selectAll(actualSelector),filter&&(element=element.filter(function(){return this.parentNode===parent.node()})),enterSel=(element=element.data(data,keyFn)).enter().append(elemType||"div"),callbacks.enter&&enterSel.each(function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];callbacks.enter.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),mergeSel=enterSel.merge(element),callbacks.update&&mergeSel.each(function(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];callbacks.update.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),"class"===selectorType?mergeSel.classed("."===selectorVal?selector.substring(1,selector.length):selector,!0):"id"===selectorType&&mergeSel.attr("id",selector.substring(1,selector.length));var exitSel=element.exit();return callbacks.exit?exitSel.each(function(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];callbacks.exit.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}):exitSel.remove(),mergeSel},applyStyle=function applyStyle(elem,styleObj){return Object.entries(styleObj).forEach(function(d){elem.style(d[0],d[1])},void 0),elem},setElementAttrs=function setElementAttrs(element,attrs){for(var key in attrs)({}).hasOwnProperty.call(attrs,key)&&element.attr(key,attrs[key])},renderer_utils_setAttrs=function setAttrs(element,attrs,className){return element instanceof src_selection||(element=renderer_utils_selectElement(element)),void 0!==className?element.selectAll(".".concat(className)).each(function(){setElementAttrs(src_select(this),attrs)}):setElementAttrs(element,attrs),element},renderer_utils_setStyles=function setStyles(element,styles){for(var key in element instanceof src_selection||(element=renderer_utils_selectElement(element)),styles)({}).hasOwnProperty.call(styles,key)&&element.style(key,styles[key]);return element},renderer_utils_createElements=function createElements(params){var data,sel,container=src_select(params.container);"number"==typeof(data=params.data)&&(data=Array(data).fill().map(function(d,i){return i})),sel=container.selectAll(params.selector).data(data),(sel=container.selectAll(params.selector).filter(function(){return this.parentNode===container.node()}).data(params.data)).enter().append(params.append).merge(sel).each(function(d,i){params.each(d,src_select(this),i)}).attr("class",params.className||""),sel.exit().remove()},renderer_utils_getClientPoint=function getClientPoint(){var pos=src_point.apply(void 0,arguments);return{x:pos[0],y:pos[1]}},renderer_utils_getEvent=function getEvent(){return on_event},renderer_utils_getD3Drag=function getD3Drag(){return src_drag},renderer_utils_getSmartComputedStyle=function getSmartComputedStyle(group,css){var textEl,mandatoryStyle={"fill-opacity":0},className="string"==typeof css?css:css instanceof Array?css.join(" "):void 0;textEl=group.node()instanceof HTMLElement?group.append("div").html("W"):group.append("text").text("W"),className?textEl.attr("class",className):"object"===renderer_utils_typeof(css)&&(delete css["fill-opacity"],mergeRecursive(mandatoryStyle,css)),textEl.style(mandatoryStyle);var computedStyle=window.getComputedStyle(textEl.node()),styleForSmartLabel={fontSize:computedStyle.fontSize,fontFamily:computedStyle.fontFamily,fontWeight:computedStyle.fontWeight,fontStyle:computedStyle.fontStyle};return textEl.remove(),styleForSmartLabel},hasTouch=function hasTouch(){return"ontouchstart"in document.documentElement},hyperdis=__webpack_require__(5),hyperdis_default=__webpack_require__.n(hyperdis);function store_slicedToArray(arr,i){return function store_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function store_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function store_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function store_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:function(){return{}};return props.forEach(function(prop){obj[prop]||(obj[prop]=val()),obj=obj[prop]}),obj},fetchPropValues=function fetchPropValues(propNames,params,deps){return params.map(function(param,i){var prop=propNames[i];return param.map(function(val){return void 0===val||null===val?val:val[deps[prop]]})})},setContexts=function setContexts(contexts,propObj,contextMap){var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,_iterator=propObj.keys()[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0){var key=_step.value;contexts[key]={context:contextMap[key],deps:propObj.get(key).depProps}}}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{_iteratorNormalCompletion||null==_iterator.return||_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}return contexts},store_registerListener=function registerListener(context,type){for(var _len=arguments.length,options=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)options[_key-2]=arguments[_key];var propList=options[0],callBack=options[1],instantCall=options[2],_options$=options[3],namespaceInf=void 0===_options$?{}:_options$,props=propList;Array.isArray(propList)||(props=[propList]);var ns=namespaceInf.namespace,callbackFn=function(propNames,namespaceVal){return function(){var commits=context._savedCommits,propListenerMap=context._propListenerMap;if(!propNames.some(function(prop){return getObjProp(propListenerMap,prop,"disabled")})){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];if(namespaceVal){var listenersObj=context._registeredListeners[namespaceVal],contextMap=context._contextMap[namespaceVal],contextsObj={};for(var key in propNames.forEach(function(prop){var commitsObj=defaultValue(getObjProp(commits,prop,type),{}),listeners=listenersObj[prop].subNamespaces,propDeps=propListenerMap[prop][type];for(var nm in commitsObj){var fnInf=defaultValue(propDeps[nm],{fns:0}),fns=fnInf.fns;fns>0&&(setContexts(contextsObj,listeners[nm],contextMap),fns--),fns<=0&&delete commitsObj[nm],fnInf.fns=fns}}),contextsObj){var obj=contextsObj[key];callBack.apply(void 0,[obj.context].concat(store_toConsumableArray(fetchPropValues(propNames,params,obj.deps))))}}else callBack.apply(void 0,params)}}}(props,ns),fn=context.model[type](props,callbackFn,instantCall);ns&&function registerPropInMaps(store,props,namespaceInf,type){var registeredListeners=store._registeredListeners,propListenerMap=store._propListenerMap,subNamespace=namespaceInf.subNamespace,ns=namespaceInf.namespace;initProp(registeredListeners,[ns]),props.forEach(function(prop){var subNamespaces=defaultValue(getObjProp(registeredListeners,ns,prop,"subNamespace"),[]),fns=defaultValue(getObjProp(propListenerMap,prop,type,"fns"),0);fns++,subNamespace&&subNamespaces.push(subNamespace),registeredListeners[ns][prop]={subNamespace:subNamespaces,allProps:props,subNamespaces:{}},initProp(propListenerMap,[prop,type]),propListenerMap[prop][type]={fns:fns,_fnCount:fns}})}(context,props,namespaceInf,type),function addListenerToNamespace(namespaceInf,fn,context){var key=namespaceInf.key,namespace=namespaceInf.id,listeners=context._listeners;if(namespace){!listeners.get(namespace)&&listeners.set(namespace,new Map);var namespaceListeners=listeners.get(namespace);key||(key=namespaceListeners.size),namespaceListeners.set(key,fn)}else key=key||listeners.size,listeners.set(key,fn)}(namespaceInf,fn,context)},store_createMap=function createMap(){return new Map},listenerTypes=["next","on"],removePropValue=function removePropValue(context,map,propInf){var sns=propInf.subNamespace,prop=propInf.prop,propObj=propInf.propListenerMap[prop];if(listenerTypes.forEach(function(type){type in propObj&&delete propObj[type][sns]}),map.has(sns)){var value=context.get(prop);value instanceof Object&&sns in value&&delete value[sns],map.delete(sns)}},store_Store=function(){function Store(config){!function store_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Store),this.model=hyperdis_default.a.create(config),this._listeners=new Map,this._registeredListeners={},this._contextMap={},this._commits={},this._savedCommits={},this._queuedProps={},this._propListenerMap={},this._locked=!1}return function store_createClass(Constructor,protoProps,staticProps){return protoProps&&store_defineProperties(Constructor.prototype,protoProps),staticProps&&store_defineProperties(Constructor,staticProps),Constructor}(Store,[{key:"lockModel",value:function lockModel(){return this.model.lock(),this._locked=!0,this}},{key:"unlockModel",value:function unlockModel(){return this._locked=!1,this.model.unlock(),this}},{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"lockCommits",value:function lockCommits(props){var _this=this;return props.forEach(function(prop){_this._commits[prop]={locked:!0,queue:[]}}),this}},{key:"unlockCommits",value:function unlockCommits(props){var _this2=this,commitsObj=this._commits;return this.lockModel(),props.forEach(function(prop){commitsObj[prop].locked=!1;var queuedProps={},queue=commitsObj[prop].queue;queue.forEach(function(params){var _params=store_slicedToArray(params,3),propName=_params[0],value=_params[1],namespace=_params[2];if(namespace){var propObj=initProp(queuedProps,[propName,namespace]);Object.assign(propObj,value)}}),queue.forEach(function(params){var _params2=store_slicedToArray(params,3),propName=_params2[0],value=_params2[1],namespace=_params2[2];_this2.commit(propName,propName in queuedProps?queuedProps[propName][namespace]:value,namespace)}),delete commitsObj[prop]}),this.unlockModel(),this}},{key:"addSubNamespace",value:function addSubNamespace(sns,namespace,context){var listeners=this._registeredListeners[namespace],propListenerMap=this._propListenerMap;initProp(this._contextMap,[namespace]),this._contextMap[namespace][sns]=context;var _loop=function _loop(key){var obj=listeners[key],propObj=propListenerMap[key],propFns=listenerTypes.reduce(function(acc,type){var val=defaultValue(getObjProp(propObj,type,"fns"),0);return val&&(acc[type]=val),acc},{}),allProps=obj.allProps,subNamespaces=obj.subNamespaces,subNamespace=obj.subNamespace;(subNamespace.length?subNamespace:[sns]).forEach(function(ns){var nsObj=ns instanceof Function?ns(context):ns,names=function retrieveNamespaces(names,key){return names instanceof Object?[names[key]]:names instanceof Array?names:[names]}(nsObj,key),depProps=allProps.reduce(function(acc,prop){return acc[prop]=ns instanceof Function?nsObj[prop]:ns,acc},{});names.forEach(function(nm){for(var type in initProp(subNamespaces,[nm],store_createMap).set(sns,{depProps:depProps}),propFns){initProp(propObj,[type,nm]);var fns=propFns[type];propObj[type][nm]={fns:fns,_fnCount:fns}}})})};for(var key in listeners)_loop(key);return this}},{key:"commit",value:function commit(propName,value,namespace){var disableListener=arguments.length>3&&void 0!==arguments[3]&&arguments[3],sanitizedVal=value,commits=this._commits,savedCommits=this._savedCommits,locked=getObjProp(commits,propName,"locked"),propListenerMap=this._propListenerMap[propName]||{};if(propListenerMap.disabled=disableListener,locked)return commits[propName].queue.push([propName,value,namespace]),this;if(namespace){if(this._locked){var queuedProps=initProp(this._queuedProps,[propName]);queuedProps[namespace]=value,sanitizedVal=queuedProps}else(sanitizedVal=defaultValue(this.get(propName),{}))[namespace]=value;listenerTypes.forEach(function(type){initProp(savedCommits,[propName,type]),savedCommits[propName][type][namespace]=!0,getObjProp(propListenerMap,type,namespace)&&(propListenerMap[type][namespace].fns=propListenerMap[type][namespace]._fnCount)})}return this.model.prop(propName,sanitizedVal),this}},{key:"registerChangeListener",value:function registerChangeListener(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];return store_registerListener.apply(void 0,[this,"next"].concat(params)),this}},{key:"registerImmediateListener",value:function registerImmediateListener(){for(var _len4=arguments.length,params=new Array(_len4),_key4=0;_key4<_len4;_key4++)params[_key4]=arguments[_key4];store_registerListener.apply(void 0,[this,"on"].concat(params))}},{key:"get",value:function get(propName,subNamespace){var value=this.model.prop(propName);return subNamespace?value&&value[subNamespace]:value}},{key:"computed",value:function computed(propName,callBack){return this.model.calculatedProp(propName,callBack)}},{key:"append",value:function append(){var _this$model;return(_this$model=this.model).append.apply(_this$model,arguments),this}},{key:"unsubscribeAll",value:function unsubscribeAll(){return Object.values(this._listeners).forEach(function(fn){return fn()}),this}},{key:"unsubscribe",value:function unsubscribe(){var namespaceInf=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},id=namespaceInf.id,key=namespaceInf.key,listenersMap=this._listeners,listeners=listenersMap.get(id);if(key){var fn=listenersMap.get(key);fn&&fn()}else{var _iteratorNormalCompletion2=!0,_didIteratorError2=!1,_iteratorError2=void 0;try{for(var _step2,_iterator2=listeners.values()[Symbol.iterator]();!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=!0){(0,_step2.value)()}}catch(err){_didIteratorError2=!0,_iteratorError2=err}finally{try{_iteratorNormalCompletion2||null==_iterator2.return||_iterator2.return()}finally{if(_didIteratorError2)throw _iteratorError2}}listenersMap.set(id,[])}return this}},{key:"removeSubNamespace",value:function removeSubNamespace(subNamespace,namespace){var listenerMap=this._registeredListeners,contextMap=this._contextMap,propListenerMap=this._propListenerMap,listenersObj=listenerMap[namespace];for(var prop in listenersObj){var subNamespaces=listenersObj[prop].subNamespaces,propInf={subNamespace:subNamespace,prop:prop,propListenerMap:propListenerMap};if(subNamespaces[subNamespace])removePropValue(this,subNamespaces[subNamespace],propInf),delete subNamespaces[subNamespace];else for(var ns in subNamespaces){var snsMap=subNamespaces[ns];removePropValue(this,snsMap,propInf),snsMap.size||delete subNamespaces[ns]}}return delete contextMap[namespace][subNamespace],this}}]),Store}(),store_transactor=function transactor(holder,options,model){var conf,namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},store=model instanceof store_Store?model:new store_Store({}),stateProps={},namespace=namespaceInf.namespace,subNamespace=namespaceInf.subNamespace;for(var prop in options)if({}.hasOwnProperty.call(options,prop)){conf=options[prop];var nameSpaceProp=namespace?"".concat(namespace,".").concat(prop):prop;if(subNamespace){var value=defaultValue(store.get(nameSpaceProp),{});value[subNamespace]=conf.value,stateProps[nameSpaceProp]=value}else stateProps[prop]=conf.value;holder[prop]=function(context,meta,nsProp){return function(){for(var _len5=arguments.length,params=new Array(_len5),_key5=0;_key5<_len5;_key5++)params[_key5]=arguments[_key5];if(params.length){var _ref$takesMultiplePar=(meta||{}).takesMultipleParams,takesMultipleParams=void 0!==_ref$takesMultiplePar&&_ref$takesMultiplePar,val=takesMultipleParams?params:params[0];if(meta){var values,prevVal=context.get(nsProp,subNamespace),sanitization=meta.sanitization,typeCheck=meta.typeCheck,typeExpected=meta.typeExpected;if("function"==typeof sanitization&&(val=sanitization(val,prevVal,holder)),"function"==typeof typeCheck)typeCheck(val)&&(values=val);else"string"==typeof typeCheck&&"constructor"===typeCheck?val&&val.constructor.name===typeExpected&&(values=val):values=val;var preset=meta.preset,oldValues=toArray(context.get(nsProp,subNamespace));preset&&preset(values,holder),takesMultipleParams&&oldValues.forEach(function(value,i){void 0===values[i]&&(values[i]=value)}),values&&context.commit(nsProp,values,subNamespace)}else context.commit(nsProp,val,subNamespace);return holder}return context.get(nsProp,subNamespace)}}(store,conf.meta,nameSpaceProp,Array.isArray(conf.value))}if(subNamespace)for(var key in stateProps)store.commit(key,stateProps[key][subNamespace],subNamespace);else void 0===namespace?store.append(stateProps):store.append(namespace,stateProps);return[holder,store]},SmartlabelManager=__webpack_require__(3),SmartlabelManager_default=__webpack_require__.n(SmartlabelManager),events=["initialized","beforeupdate","updated","beforedraw","drawn","beforeremove","removed","animationend"],EVENT_LIST=[];["canvas","unit","layer","axis","facet-headers","legend","caption"].forEach(function(composition){events.forEach(function(event){EVENT_LIST.push("".concat(composition,".").concat(event))})});var event_list=EVENT_LIST;function lifecycle_manager_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=lifeCycles,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(eventName){var _this4=this;setTimeout(function(){_this4._notifiers[eventName]=lifecycle_manager_resolver,_this4._promises.set(eventName,_this4._makeNotifierPromise(eventName))},0)}}]),LifeCycleManager}(),src_InvalidAwareTypes=datamodel_default.a.InvalidAwareTypes,DRAG="drag",HOVER="hover",SELECTIONDRAG="selectiondrag",CLICK="click",LONGTOUCH="longtouch",TOUCHDRAG="touchdrag",ALL_ACTIONS="*",SELECTION_NEW_ENTRY=1,SELECTION_NEW_EXIT=-1,SELECTION_NULL=0,SELECTION_OLD_ENTRY=2,SELECTION_OLD_EXIT=-2;function selection_set_defineProperties(target,props){for(var i=0;i0?(set[key]===SELECTION_OLD_ENTRY&&retObj.entrySet[0].push(key),set[key]===SELECTION_NEW_ENTRY&&retObj.entrySet[1].push(key)):set[key]<0&&(set[key]===SELECTION_OLD_EXIT&&retObj.exitSet[0].push(key),set[key]===SELECTION_NEW_EXIT&&retObj.exitSet[1].push(key)),retObj.completeSet.push(key);return["entrySet","exitSet"].forEach(function(type){retObj[type]=retObj[type].map(function(e){return e.map(Number)})}),retObj.completeSet=retObj.completeSet.map(Number),retObj}},{key:"reset",value:function reset(ids){var set=this._set;if(ids)ids.forEach(function(i){set[i]=SELECTION_NULL});else{var lockedSel=this._lockedSelection;for(var key in set)key in lockedSel||(set[key]=SELECTION_NULL)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var set=this._set,addSet=[];for(var key in set)set[key]===SELECTION_NEW_ENTRY&&addSet.push(key);return addSet}},{key:"getExistingEntrySet",value:function getExistingEntrySet(addSet){var set=this._set;return addSet.filter(function(d){return set[d]===SELECTION_NEW_ENTRY||set[d]===SELECTION_OLD_ENTRY})}},{key:"getExistingExitSet",value:function getExistingExitSet(removeSet){var set=this._set;return removeSet.filter(function(d){return set[d]===SELECTION_NEW_EXIT||set[d]===SELECTION_OLD_EXIT})}},{key:"getOldEntry",value:function getOldEntry(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_ENTRY&&updateSet.push(key);return updateSet}},{key:"getOldExit",value:function getOldExit(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_EXIT&&updateSet.push(key);return updateSet}},{key:"getExitSet",value:function getExitSet(){var set=this._set,removeSet=[];for(var key in set)set[key]===SELECTION_NEW_EXIT&&removeSet.push(key);return removeSet}},{key:"getCompleteSet",value:function getCompleteSet(){var set=this._set,completeSet=[];for(var key in set)completeSet.push(key);return completeSet}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var set=this._set;for(var key in set)set[key]===SELECTION_NEW_ENTRY?set[key]=SELECTION_NEW_EXIT:set[key]===SELECTION_NEW_EXIT?set[key]=SELECTION_NEW_ENTRY:set[key]===SELECTION_OLD_ENTRY?set[key]=SELECTION_OLD_EXIT:set[key]=SELECTION_OLD_ENTRY;return this}}]),SelectionSet}();function helper_toConsumableArray(arr){return function helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},sideEffectStore=this.sideEffects(),sideEffect=sideEffectStore[name],disable=!1;options.filter&&options.filter(sideEffect)&&(disable=!0),!disable&&sideEffectStore[name].apply(selectionSet,payload,options)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(map){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,map||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(behaviour,payload){var propagationInfo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},propagate=void 0===propagationInfo.propagate||propagationInfo.propagate,action=this._actions.behavioural[behaviour],sideEffects=function getSideEffects(behaviour,behaviourEffectMap){var sideEffects=[];for(var key in behaviourEffectMap){var behaviours=key.split(",");behaviours.some(function(d){return d===behaviour})&&sideEffects.push({effects:behaviourEffectMap[key],behaviours:behaviours})}return sideEffects}(behaviour,this._behaviourEffectMap);if(this._propagationInf=propagationInfo,action){var selectionSet=action.dispatch(payload),propagationSelectionSet=this.getPropagationSelectionSet(selectionSet);this._entryExitSet[behaviour]=propagationSelectionSet;var shouldApplySideEffects=this.shouldApplySideEffects(propagate);if(propagate&&this.propagate(behaviour,payload,selectionSet.find(function(d){return d.sourceSelectionSet}),sideEffects),shouldApplySideEffects){var applicableSideEffects=this.getApplicableSideEffects(sideEffects,payload,propagationInfo);this.applySideEffects(applicableSideEffects,propagationSelectionSet,payload)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(selectionSet){return selectionSet.find(function(d){return!d.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(behaviour,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",behaviourConditions=this._sourceBehaviours[behaviour]||(this._sourceBehaviours[behaviour]={});return value instanceof Function?behaviourConditions[key]=value:behaviourConditions[key]=function(){return value},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(sideEffect,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",sideEffectConditions=this._sourceSideEffects[sideEffect]||(this._sourceSideEffects[sideEffect]={});value instanceof Function?sideEffectConditions[key]=value:sideEffectConditions[key]=function(){return value}}},{key:"removeSideEffectPolicy",value:function removeSideEffectPolicy(sideEffect,key){return delete this._sourceSideEffects[sideEffect][key],this}},{key:"removeBehaviourPolicy",value:function removeBehaviourPolicy(behaviour,key){return delete this._sourceBehaviours[behaviour][key],this}},{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(fn){return changeSideEffectAvailability(this,fn,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(fn){return changeSideEffectAvailability(this,fn,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(behaviour,physicalAction){var actionBehaviourMap=this._actionBehaviourMap;for(var key in actionBehaviourMap)if(key===physicalAction){var behaviourMap=actionBehaviourMap[key];behaviourMap.behaviours=behaviourMap.behaviours.filter(function(d){return d!==behaviour}),this.mapActionsAndBehaviour(key)}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(sideEffect,behaviour){var behaviourEffectMap=this._behaviourEffectMap;return behaviourEffectMap[behaviour]=behaviourEffectMap[behaviour].filter(function(d){return(d.name||d)!==sideEffect}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects){return sideEffects}},{key:"attachPropagationListener",value:function attachPropagationListener(dataModel){return dataModel.unsubscribe("propagation"),dataModel.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var _this2=this;return function(propValue){var payload=propValue.payload,action=payload.action;_this2.dispatchBehaviour(action,payload,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(uniqueIds,behaviouralActions){var behaviours=behaviouralActions||this._actions.behavioural,selectionSet=this._selectionSet,volatileSelectionSet=this._volatileSelectionSet;for(var key in behaviours)({}).hasOwnProperty.call(behaviours,key)&&(selectionSet[key]=new src_selection_set(uniqueIds),volatileSelectionSet[key]=new src_selection_set(uniqueIds,!0),this._entryExitSet[key]=null);return this._volatileSelectionSet=volatileSelectionSet,this.selectionSet(selectionSet),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 sideEffectDefinitions=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(context,sideEffects){var sideEffectsMap=context._sideEffects;return(sideEffects=sideEffects instanceof Array?sideEffects:Object.values(sideEffects)).forEach(function(SideEffect){var formalName=SideEffect.formalName(),sideEffectInstance=sideEffectsMap[formalName];sideEffectsMap[formalName]=sideEffectInstance||new SideEffect(context)}),sideEffectsMap}(this,sideEffectDefinitions)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(actions){var initedActions=function initializePhysicalActions(context,actions){var physicalActions={};for(var name in actions)({}).hasOwnProperty.call(name,actions)||(physicalActions[name]=actions[name](context));return physicalActions}(this,actions);return Object.assign(this._actions.physical,initedActions),this}},{key:"propagateWith",value:function propagateWith(action,fields){var append=arguments.length>2&&void 0!==arguments[2]&&arguments[2],behaviouralActions=this._actions.behavioural;if(action===ALL_ACTIONS)for(var key in behaviouralActions)this._propagationFields[key]={fields:fields,append:append};else this._propagationFields[action]={fields:fields,append:append};return this}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(phyAction){var initedPhysicalActions=this._actions.physical,map=this._actionBehaviourMap;for(var action in map)if(!{}.hasOwnProperty.call(action,map)&&action===(phyAction||action)){var target=void 0,mapObj=map[action];target=mapObj.target;var touch=mapObj.touch;target||(target=this.context.getDefaultTargetContainer()),(hasTouch()?!0===touch||void 0===touch:!touch)&&this.bindActionWithBehaviour(initedPhysicalActions[action],target,mapObj.behaviours)}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(map){return this._actionBehaviourMap=mergeRecursive(this._actionBehaviourMap,map),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(action,targets,behaviourList){var _this3=this;return"string"==typeof targets&&(targets=[targets]),targets.forEach(function(target){var mount=_this3.context.mount(),nodes=target.node instanceof Function?target:renderer_utils_selectElement(mount).selectAll(target);nodes.empty()||(nodes instanceof Array?nodes.forEach(function(node){action(renderer_utils_selectElement(node),behaviourList)}):action(nodes,behaviourList))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(criteria){var propagationInf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=this.context,filteredDataModel=propagationInf.data?propagationInf.data:context.getDataModelFromIdentifiers(criteria,"all");return{model:filteredDataModel,uids:null===criteria?null:propagationInf.data?propagationInf.entryRowIds:filteredDataModel[0].getUids()}}},{key:"getSelectionSets",value:function getSelectionSets(action){var sourceId=this.context.id(),propagationSource=(this._propagationInf||{}).sourceId,applicableSelectionSets=[];return propagationSource!==sourceId&&(applicableSelectionSets=[this._volatileSelectionSet[action]]),propagationSource&&applicableSelectionSets.push(this.selectionSet()[action]),applicableSelectionSets}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(behaviour){return this._entryExitSet[behaviour]}}]),Firebolt}();function generic_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},sourceIdentifiers=propagationInf.sourceIdentifiers;return sourceIdentifiers?sourceIdentifiers.getSchema().map(function(d){return d.name}):criteria instanceof Array?criteria[0]:Object.keys(criteria||{})}(propagationInf,payload.criteria),sourceSelectionSet:!0===selectionSet._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}();function volatile_typeof(obj){return(volatile_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function volatile_defineProperties(target,props){for(var i=0;iydom[0]?ydom:xdom,max=min===ydom?xdom:ydom;min[1]100&&Math.abs(startPos.x-endPos.x)<=5)){endPos.x=Math.max(0,Math.min(endPos.x,drawingInf.width)),endPos.y=Math.max(0,Math.min(endPos.y,drawingInf.height));var payload=drag_action_config(firebolt.context.getSourceInfo(),{startPos:startPos,endPos:endPos,snap:!0},firebolt.context.data().getFieldsConfig());payload.dragEnd=!0,behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)})}}))},physical_hover=function hover(firebolt){return function(targetEl,behaviours){var dispatchBehaviour=function dispatchBehaviour(args){var event=renderer_utils_getEvent(),context=firebolt.context,mode=context.config().interaction.tooltip.mode,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{getAllPoints:"consolidated"===mode||"fragmented"===mode,data:args,event:event}),payload={criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos,mode:mode};behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()};targetEl.on("mouseover",dispatchBehaviour).on("mousemove",dispatchBehaviour).on("mouseout",function(){behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})})})}},helpers_generatePayloadFromEvent=function generatePayloadFromEvent(args,event,firebolt){var context=firebolt.context,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event.touches?event.touches[0]:event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{data:args,event:event});return{criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos}},physical_click=function click(firebolt){return function(targetEl,behaviours){targetEl.on("click",function dispatchBehaviour(args){var event=renderer_utils_getEvent(),payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()})}};function physical_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var physicalActions=(physical_defineProperty(_physicalActions={},DRAG,function drag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt)}}),physical_defineProperty(_physicalActions,HOVER,physical_hover),physical_defineProperty(_physicalActions,CLICK,physical_click),physical_defineProperty(_physicalActions,LONGTOUCH,function longtouch(firebolt){return function(targetEl,behaviours){var event,touchEnd;touchEnd=!1,event=renderer_utils_getEvent(),targetEl.on("touchstart",function(args){event=renderer_utils_getEvent(),touchEnd=!1,setTimeout(function(){touchEnd?behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})}):function dispatchBehaviour(args){var payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()}(args)},100)}).on("touchend",function(){touchEnd=!0})}}),physical_defineProperty(_physicalActions,TOUCHDRAG,function touchdrag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt,!0)}}),_physicalActions),side_effects_ANCHORS="anchors",side_effects_TOOLTIP="tooltip",side_effects_BRUSH_ANCHORS="brush-anchors",side_effects_PERSISTENT_ANCHORS="persistent-anchors",side_effects_FILTER="filter",side_effects_HIGHLIGHTER="highlighter",CROSSLINE="crossline",PROPS={valueParser:{defaultValue:function defaultValue(val){return val}}};function generic_sideeffect_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];var interactionType=arguments.length>2?arguments[2]:void 0,apply=arguments.length>3?arguments[3]:void 0;return this.firebolt.context.layers().forEach(function(layer){return!1!==layer.config().interactive&&layer.applyInteractionStyle(interactionType,set.uids,apply)}),this}}]),SurrogateSideEffect}();function spawnable_typeof(obj){return(spawnable_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function spawnable_defineProperties(target,props){for(var i=0;i=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2}},context.data().getFieldsConfig());onDrag(payload)}}).on("end",function(){var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2},snap:!0},context.data().getFieldsConfig());payload.dragEnd=!0,onDrag(payload)}}))}}(firebolt)(renderer_utils_selectElement(this),["brush"],sideEffect)}).merge(selection).each(function(attrs){var element=renderer_utils_selectElement(this);for(var key in transition&&(element=element.transition().duration(transition.duration)),attrs)({}).hasOwnProperty.call(attrs,key)&&isValidValue(attrs[key])&&element.attr(key,attrs[key])}),boxClassName=getQualifiedClassName(boxConf.defClassName,this._id,classPrefix);return selectionBox.classed(boxClassName.join(" "),!0),selectionBox.classed(boxConf.className,!0),this}},{key:"hide",value:function hide(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!1)}},{key:"show",value:function show(drawingInf){helper_changeVisibility(this,drawingInf.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}(),INITIAL_STYLE={position:"absolute",width:0,height:0},default_config_defaultConfig={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"4px 0 4px 0",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)"}},helper_getArrowPos=function getArrowPos(orient,dim,measurement,config){var arrowPos,x=measurement.x,y=measurement.y,boxHeight=measurement.boxHeight,boxWidth=measurement.boxWidth,arrowWidth=config.arrow.disabled?0:config.arrow.size;if("left"===orient||"right"===orient){var start=0,diff=boxHeight/2,plotBottom=dim.y+dim.height,boxBottom=y+boxHeight;dim.y>y?(start=dim.y-y,diff=(plotBottom>=boxBottom?boxBottom-dim.y:dim.height)/2):boxBottom>plotBottom&&(diff=Math.abs(y-(dim.y+dim.height))/2),arrowPos=start+diff-arrowWidth/2}else{var _start=0,_diff=boxWidth/2,plotRight=dim.x+dim.width,boxRight=x+boxWidth;dim.x>x?(_start=dim.x-x,_diff=(plotRight>=boxRight?boxRight-dim.x:dim.width)/2):boxRight>plotRight&&(_diff=Math.abs(x-(dim.x+dim.width))/2),arrowPos=_start+_diff-arrowWidth/2}return arrowPos},helper_placeArrow=function placeArrow(context,position,arrowPos){var tooltipArrow=context._tooltipArrow,tooltipBackground=context._tooltipBackground,config=context._config,classPrefix=config.classPrefix,arrowConf=config.arrow,className=getQualifiedClassName(arrowConf.defClassName,context._id,config.classPrefix);tooltipArrow.style("display","block"),tooltipArrow.attr("class","".concat(className.join(" "))),"left"===position||"right"===position?(tooltipArrow.style("top","".concat(arrowPos,"px")),tooltipArrow.style("left",""),tooltipBackground.style("top","".concat(arrowPos,"px")),tooltipBackground.style("left","")):("bottom"===position?tooltipArrow.style("top","100%"):tooltipArrow.style("top","-".concat(arrowConf.size,"px")),tooltipArrow.style("left","".concat(arrowPos,"px")),"bottom"===position?tooltipBackground.style("top","100%"):tooltipBackground.style("top","-".concat(arrowConf.size+3,"px")),tooltipBackground.style("left","".concat(arrowPos,"px"))),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow"),!0),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(context._arrowOrientation),!1),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(position),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow"),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(context._arrowOrientation),!1),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(position),!0)};__webpack_require__(10);function content_defineProperties(target,props){for(var i=0;i0?(this._config=mergeRecursive(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(item){return this._model=item.model,this._formatter=item.formatter,this}},{key:"context",value:function context(ctx){return this._context=ctx,this}},{key:"render",value:function render(mount){var data,config=this._config,iconContainerSize=config.iconContainerSize,formatter=this._formatter,rowMargin=config.rowMargin,model=this._model,classPrefix=config.classPrefix;if(this._mount=mount,(data=model instanceof Array?model:formatter(this._model,this.config(),this._context))instanceof Function){makeElement(mount,"div",[1],"".concat(classPrefix,"-tooltip-html-container")).html(data())}else{var content=data,displayFormat="default";isSimpleObject(data)&&(content=data.content,displayFormat=data.displayFormat);var body=makeElement(mount,"div",[displayFormat],"".concat(classPrefix,"-tooltip-content"),{},function(d){return d});if("table"===displayFormat){var table=makeElement(body,"table",[1],"".concat(classPrefix,"-tooltip-table")),tbody=makeElement(table,"tbody",[1],"".concat(classPrefix,"-tooltip-table-tbody")),rows=makeElement(tbody,"tr",content,"".concat(classPrefix,"-tooltip-table-row"));rows.each(function(d,i){renderer_utils_selectElement(this).classed("".concat(classPrefix,"-tooltip-table-row-").concat(i),!0)}),makeElement(rows,"td",function(d){return d},"".concat(classPrefix,"-tooltip-table-cell")).each(function(d){renderer_utils_selectElement(this).html(d)})}else{var _rows=makeElement(body,"div",content,"",{update:function update(elem,elemData){return elem.attr("class",elemData.className)}}),_cells=makeElement(_rows,"span",function(d){return d.data},"".concat(classPrefix,"-tooltip-content"));_cells.attr("class","".concat(classPrefix,"-tooltip-content")),renderer_utils_setStyles(_rows,{margin:rowMargin}),renderer_utils_setStyles(_cells,{display:"inline-block"}),_cells.each(function(d){var el=renderer_utils_selectElement(this);if(el.html(""),d instanceof Object)if("icon"===d.type){var svg=makeElement(el,"svg",[1]),path=makeElement(svg,"path",[1]),shape=d.shape instanceof Function?d.shape:common_utils_getSymbol(d.shape);renderer_utils_setAttrs(svg,{x:0,y:0,width:iconContainerSize,height:iconContainerSize}),renderer_utils_setAttrs(path,{d:shape.size(d.size)(),transform:"translate(".concat(iconContainerSize/2,", ").concat(iconContainerSize/2,")")}),renderer_utils_setStyles(path,{fill:d.color}),renderer_utils_setStyles(svg,{width:"".concat(iconContainerSize,"px"),height:"".concat(iconContainerSize,"px")})}else el.html(d.value),d.className&&el.classed(d.className,!0),renderer_utils_setStyles(el,d.style);else el.html(d)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var config=default_config_defaultConfig.content;return config.classPrefix=default_config_defaultConfig.classPrefix,config}}]),Content}();function tooltip_defineProperties(target,props){for(var i=0;i0){var defConf=mergeRecursive({},this.constructor.defaultConfig());return this._config=mergeRecursive(defConf,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(className){return this._tooltipContainer.classed(className,!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(name,data){var contentConfig=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},config=this.config(),classPrefix=config.classPrefix,contentClass=config.content.className,formatter=config.formatter,className=contentConfig.className||"".concat(classPrefix,"-").concat(contentClass,"-").concat(name),content=this._contents[name]=this._contents[name]||new content_Content,container=makeElement(this._contentContainer,"div",[contentConfig.order],className);container.attr("class","".concat(classPrefix,"-").concat(contentClass," ").concat(className)),function reorderContainers(parentContainer,className){parentContainer.selectAll(className).sort(function(a,b){return a-b})}(this._contentContainer,".".concat(classPrefix,"-").concat(contentClass));var contentConf=config.content;return contentConfig.classPrefix=this._config.classPrefix,content.config(contentConf),null===data?(content.clear(),container.remove(),delete this._contents[name]):(content.update({model:data,formatter:contentConfig.formatter||formatter}),content.context(this._context),content.render(container)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(x,y){var conf=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var target=this._target,repositionArrow=conf.repositionArrow;if(target&&repositionArrow){var node=this._tooltipContainer.node(),config=this._config,arrowDisabled=config.arrow.disabled,arrowWidth=arrowDisabled?0:config.arrow.size,arrowOrient=this._arrowOrientation,outsidePlot="left"===arrowOrient||"right"===arrowOrient?y+node.offsetHeight-arrowWidthtarget.y+target.height:x+node.offsetWidth-arrowWidthtarget.x+target.width;if(!arrowDisabled)if(outsidePlot){var path;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var connector=this._tooltipConnectorContainer.selectAll("path").data([1]),enter=connector.enter().append("path");"left"===arrowOrient?path="M ".concat(x," ").concat(y+node.offsetHeight/2," L ").concat(target.x+target.width)+" ".concat(target.y+target.height/2):"right"===arrowOrient?path="M ".concat(x+node.offsetWidth," ").concat(y+node.offsetHeight/2)+" L ".concat(target.x," ").concat(target.y+target.height/2):"bottom"===arrowOrient&&(path="M ".concat(x+node.offsetWidth/2," ").concat(y+node.offsetHeight)+" L ".concat(target.x+target.width/2," ").concat(target.y)),enter.merge(connector).attr("d",path).style("display","block")}else{var arrowPos=helper_getArrowPos(arrowOrient,target,{x:x,y:y,boxHeight:node.offsetHeight,boxWidth:node.offsetWidth},this._config);helper_placeArrow(this,this._arrowOrientation,arrowPos),this._tooltipConnectorContainer.style("display","none")}}var offset=this._offset||{x:0,y:0};return this._tooltipContainer.style("left","".concat(offset.x+x,"px")).style("top","".concat(offset.y+y,"px")),this}},{key:"positionRelativeTo",value:function positionRelativeTo(dim){var obj,_this=this,tooltipConf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},orientation=tooltipConf.orientation;if(this.show(),!dim)return this.hide(),this;var extent=this._extent,node=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var offsetWidth=node.offsetWidth+2,offsetHeight=node.offsetHeight+2,config=this._config,offset=this._offset,arrowDisabled=config.arrow.disabled,arrowSize=arrowDisabled?0:config.arrow.size,draw=void 0===tooltipConf.draw||tooltipConf.draw,topSpace=dim.y,dimX=dim.x+dim.width+offset.x,rightSpace=extent.width-dimX,leftSpace=dim.x+offset.x-extent.x,positionTop=topSpace>offsetHeight+arrowSize,positionRight=rightSpace>=offsetWidth+arrowSize,positionLeft=leftSpace>=offsetWidth+arrowSize;return this._target=dim,orientation||(orientation=positionTop?"vertical":positionRight||positionLeft?"horizontal":"vertical"),"horizontal"===orientation?obj=function positionHorizontal(){var position,x=dim.x+dim.width,y=dim.y;return positionRight?(position="left",x+=arrowSize):positionLeft?(x=dim.x-offsetWidth,position="right",x-=arrowSize):(position="left",x+=arrowSize),dim.height1;hasMultipleMeasures&&content.push({data:[icon,formattedRetinalValue]});var isSelected=target[1][target[0].indexOf(retField)]===retinalFieldValue;measuresArr.forEach(function(measure){var measureIndex=fieldsConfig[measure].index,_fieldInf$measure=fieldInf[measure],dName=_fieldInf$measure.displayName,value=(0,_fieldInf$measure.fn)(valueArr[measureIndex]),keyValue=getKeyValue({field:hasMultipleMeasures?"".concat(dName).concat(separator):formattedRetinalValue,value:value,classPrefix:classPrefix,margin:hasMultipleMeasures?margin:void 0,isSelected:isSelected});hasMultipleMeasures||(keyValue.data=[icon].concat(strategies_toConsumableArray(keyValue.data))),content.push(keyValue)})}};for(var retField in retinalFields)_loop(retField)},strategies_buildTooltipData=function buildTooltipData(dataModel){var nestedDataObj,displayFormat,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=arguments.length>2?arguments[2]:void 0,fieldValues=[],_dataModel$getData=dataModel.getData(),data=_dataModel$getData.data,schema=_dataModel$getData.schema,fieldspace=dataModel.getFieldspace(),fieldsConfig=dataModel.getFieldsConfig(),_context$firebolt$con=context.firebolt.context.retinalFields(),color=_context$firebolt$con.color,shape=_context$firebolt$con.shape,size=_context$firebolt$con.size,detailFields=context.detailFields||[],dimensions=schema.filter(function(d){return d.type===dist_datamodel.FieldType.DIMENSION}),measures=schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),containsDetailField=!!common_utils_intersect(schema,detailFields).length,dataLen=data.length,dimensionMeasureMap=context.dimensionMeasureMap,axes=context.axes,fieldInf=function getFieldInf(schema,dataModel,context){var valueParser=context.valueParser,timeDiffs=context.timeDiffs,fieldsObj=dataModel.getFieldspace().fieldsObj(),defFormatter=strategies_formatters(null,null,valueParser)[dist_datamodel.DimensionSubtype.CATEGORICAL];return schema.reduce(function(inf,field){var subtype=field.subtype,name=field.name,type=field.type,interval=subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[name]:0,nf=type===dist_datamodel.FieldType.MEASURE?fieldsObj[name].numberFormat():function(val){return val};return inf[name]={fn:defaultValue(strategies_formatters(nf,interval,valueParser)[subtype],defFormatter),displayName:"".concat(retrieveFieldDisplayName(dataModel,name))},inf},{})}(schema,dataModel,context);if(dataLen>1&&containsDetailField)fieldValues=function getTabularData(dataObj,fieldInf){var rows=[],data=dataObj.data,schema=dataObj.schema;return rows.push(schema.map(function(d){return fieldInf[d.name].displayName})),data.forEach(function(d){var row=[];schema.forEach(function(fieldObj,i){var value=fieldInf[fieldObj.name].fn(d[i]);row.push(value)}),rows.push(row)}),rows}({data:data,schema:schema,fieldspace:fieldspace},fieldInf),displayFormat="table";else{var retinalFields=[color.field,shape.field,size.field].reduce(function(acc,field){return field&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION&&(acc[field]=1),acc},{}),indices=dimensions.filter(function(field){return!retinalFields[field.name]}).map(function(dim){return fieldsConfig[dim.name].index}),allMeasures=strategies_toConsumableArray(_construct(Set,strategies_toConsumableArray(Object.values(dimensionMeasureMap)))),filteredMeasures=dataLen>1?measures.filter(function(d){return-1===allMeasures.indexOf(d.name)}):measures;nestedDataObj=common_utils_nestCollection({data:data,keys:indices});!function generateTooltipContent(nestedData){for(var index=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,content=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],classPrefix=config.classPrefix,separator=config.separator,i=0,len=nestedData.length;i1;content.push(getKeyValue({field:"".concat(displayName).concat(separator),value:formattedValue,classPrefix:classPrefix,margin:margin,isSelected:void 0,removeKey:removeKey}))}if(values[0]&&values[0].key)generateTooltipContent(values,index+1,content);else for(var _loop2=function _loop2(j,len2){var valueArr=values[j];generateRetinalFieldsValues(valueArr,retinalFields,content,{fieldInf:fieldInf,axes:axes,config:config,fieldsConfig:fieldsConfig,dimensionMeasureMap:dimensionMeasureMap,dataLen:dataLen,target:context.payload.target}),filteredMeasures.forEach(function(measure){var name=measure.name,_fieldInf$name=fieldInf[name],displayName=_fieldInf$name.displayName,fn=_fieldInf$name.fn;content.push(getKeyValue({field:"".concat(displayName).concat(separator),value:fn(valueArr[fieldsConfig[name].index]),classPrefix:classPrefix,margin:10}))})},j=0,len2=values.length;j2&&void 0!==arguments[2]?arguments[2]:{},totalHeight=0,totalWidth=0,dataModel=selectionSet.mergedEnter.model,context=this.firebolt.context,drawingInf=this.drawingContext();if(dataModel.isEmpty()||null===payload.criteria)return this.hide(options,null),this;var tooltips=this._tooltips,config=this.config(),boundBox={width:drawingInf.width,height:drawingInf.height},showInPosition=payload.showInPosition,pad=config.padding,dataModels=[],fragmented="fragmented"===config.mode,sourceInf=context.getSourceInfo(),fields=sourceInf.fields,showVertically=!!(!!fields.x[0]&&fields.x[0].type()===dist_datamodel.FieldType.DIMENSION),tooltipPos=payload.position,boxes=[],enter={},uids=dataModel.getData().uids;fragmented?dataModels.push.apply(dataModels,tooltip_toConsumableArray(uids.map(function(d){return dataModel.select(function(fieldsArr,i){return i===d},{saveChild:!1})}))):dataModels.push(dataModel);var target=payload.target,targetFields=[];if(target){targetFields=target[0]||[];for(var sourceFields=payload.sourceFields,indices=[],i=0,len=targetFields.length;idrawingInf.height:totalWidth>drawingInf.width)break;boxes.push({x:position.x,y:position.y,width:tooltipBoundBox.width,height:tooltipBoundBox.height,tooltip:tooltipInst})}}for(var key in tooltips)if(!enter[key]){var tooltip=tooltips[key];tooltip.content(payload.action,null),tooltip.getContents().length||(tooltip.remove(),delete tooltips[key])}return fragmented&&(!function spaceOutBoxes(boxes,extent,showVertically){var y,height,x,width,i,len=boxes.length,spaceOutIfOverlap=function spaceOutIfOverlap(firstBox,secondBox,opposite){x=firstBox.x,width=firstBox.width,y=firstBox.y,height=firstBox.height;var bottom=y+height,right=x+width;showVertically?(opposite?ysecondBox.y)&&(secondBox.y=opposite?firstBox.y-secondBox.height-5:bottom+5):(opposite?xsecondBox.x)&&(secondBox.x=opposite?firstBox.x-secondBox.width-5:right+5)};for(boxes.sort(function(a,b){return showVertically?a.y-b.y:a.x-b.x}),i=0,i=0;iextent.height||boxes[i].x+boxes[i].width>extent.width)for(showVertically?boxes[i].y-=boxes[i].height+boxes[i].y-extent.height:boxes[i].x-=boxes[i].width+boxes[i].x-extent.width,i=len-1;i>0;i--)spaceOutIfOverlap(boxes[i],boxes[i-1],!0)}(boxes,boundBox,showVertically),boxes.forEach(function(box){return box.tooltip.position(box.x,box.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var strategy=options.strategy||this._strategy;tooltips[key].content(strategy,null),tooltips[key].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0},highlightSummary:{dataTransform:function dataTransform(dt,fields){return fields?dt.project(fields,{saveChild:!1}):dt}},selectionSummary:{dataTransform:function dataTransform(dt,fields){var fieldspace=dt.getFieldspace(),dimensions=Object.keys(fieldspace.getDimension()),measures=Object.keys(fieldspace.getMeasure()),projectedFields=defaultValue(fields,measures.length?[measures[0]]:[]);return dt.project([].concat(tooltip_toConsumableArray(dimensions),tooltip_toConsumableArray(projectedFields)),{saveChild:!1})}}}}},{key:"formalName",value:function formalName(){return side_effects_TOOLTIP}}]),Tooltip}();__webpack_require__(12);function crossline_typeof(obj){return(crossline_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function crossline_toConsumableArray(arr){return function crossline_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{};return(0,this._strategies[options.strategy||this._strategy])(selectionSet,this,options.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return side_effects_HIGHLIGHTER}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}();function side_effects_filter_typeof(obj){return(side_effects_filter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function side_effects_filter_defineProperties(target,props){for(var i=0;i67.5&&rotationNormalizer<=90||(yShift+=2*height),xShift=width,xShift=90===rotation?height:270===rotation?-height:0,orientation===axis_orientation_TOP?(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift+xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(-xShift+tickSize,"\n ").concat(-yShift-tickSize,") rotate(").concat(rotation,")"))):(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift-xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(xShift-tickSize,"\n ").concat(yShift+tickSize,") rotate(").concat(rotation,")"))),renderer_utils_selectElement(this).transition().duration(1e3).text(datum)}),tickText},axis_renderer_changeTickOrientation=function changeTickOrientation(selectContainer,axisInstance,tickSize){var _smartTicks=axisInstance._smartTicks,config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,orientation=config.orientation,classPrefix=config.classPrefix,labels=renderConfig.labels,rotation=labels.rotation,isSmartTicks=labels.smartTicks,tickText=selectContainer.selectAll(".tick text");if(tickText.selectAll("tspan").remove(),!rotation||"top"!==orientation&&"bottom"!==orientation)if(rotation||isSmartTicks){if(tickText.text(""),"top"===orientation||"bottom"===orientation)tickText.attr("y",0).attr("x",0).attr("transform","").text(""),makeElement(tickText,"tspan",function(d,i){return _smartTicks[i]?_smartTicks[i].lines:[]},"".concat(classPrefix,"-smart-text")).attr("dy","0").style("opacity","0").transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).attr("dy",function(d,i){return"bottom"===orientation||0!==i?_smartTicks[0].oriTextHeight:-_smartTicks[0].oriTextHeight*(_smartTicks[0].lines.length-1)-tickSize}).style("opacity",1).text(function(e){return e}).attr("x",0);else makeElement(tickText,"tspan",function(d,i){return _smartTicks[i].lines},"".concat(classPrefix,"-smart-text")).text(function(e){return e})}else tickText.attr("transform","");else axis_renderer_rotateAxis(axisInstance,tickText,labelManager);return tickText},axis_renderer_setFixedBaseline=function setFixedBaseline(axisInstance){var fixedBaseline=axisInstance.config().fixedBaseline,showInnerTicks=axisInstance.renderConfig().showInnerTicks,domain=axisInstance.domain();fixedBaseline&&domain.length&&showInnerTicks&&axisInstance.setFixedBaseline()},axis_renderer_setAxisNamePos=function setAxisNamePos(textNode,orientation,measures){var axisNameHeight=measures.axisNameHeight,availableSpace=measures.availableSpace;switch(orientation){case axis_orientation_LEFT:textNode.attr("transform","translate(".concat(-(availableSpace.width-axisNameHeight),",").concat(availableSpace.height/2,")rotate(-90)"));break;case axis_orientation_RIGHT:textNode.attr("transform","translate(".concat(availableSpace.width-axisNameHeight,",").concat(availableSpace.height/2,")rotate(90)"));break;case axis_orientation_TOP:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(-availableSpace.height+axisNameHeight,")"));break;case axis_orientation_BOTTOM:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(availableSpace.height-axisNameHeight/2,")"))}return textNode};var _rangeAdjustmentMap,longestWord={month:"September",quarter:"October",halfYearly:"July",year:9999,day:"September",hour:"24 AM",mintues:"60:60",seconds:":60",week:"Wed 31"},skip_ticks_tickIntervals=[[1,1,"milliseconds",src_millisecond.every(1),"seconds"],[1,1e3,"seconds",src_second.every(1),"seconds"],[5,5e3,"five seconds",src_second.every(5),"seconds"],[10,1e4,"ten seconds",src_second.every(10),"seconds"],[15,15e3,"fifteen seconds",src_second.every(15),"seconds"],[30,3e4,"thirty seconds",src_second.every(30),"seconds"],[1,6e4,"minute",src_minute.every(1),"minutes"],[5,3e5,"five minutes",src_minute.every(5),"minutes"],[10,6e5,"ten minutes",src_minute.every(10),"minutes"],[15,9e5,"fifteen minutes",src_minute.every(15),"minutes"],[30,18e5,"thirty minutes",src_minute.every(30),"minutes"],[1,36e5,"hour",src_hour.every(1),"hour"],[3,108e5,"three hours",src_hour.every(3),"hour"],[6,216e5,"six hours",src_hour.every(6),"hour"],[12,432e5,"twelve hours",src_hour.every(12),"hour"],[1,864e5,"daily",src_day.every(1),"day"],[1,6048e5,"weekly",sunday.every(1),"week"],[1,2592e6,"monthly",src_month.every(1),"week"],[3,7776e6,"quaterly",src_month.every(3),"quarter"],[6,15552e6,"half yearly",src_month.every(6),"halfYearly"],[1,31536e6,"yearly",src_year.every(1),"year"],[2,63072e6,"2 year",src_year.every(2),"year"],[3,94608e6,"3 year",src_year.every(3),"year"],[5,15768e7,"5 year",src_year.every(5),"year"],[10,31536e7,"decade",src_year.every(10),"year"],[100,31536e8,"century",src_year.every(100),"year"],[1e3,31536e9,"millenium",src_year.every(1e3),"year"]],getTickIntervalFnBasedOnNumberOfTicks=function getTickIntervalFnBasedOnNumberOfTicks(interval,count,context){for(var possibleTickLevelIndex=skip_ticks_tickIntervals.length-1,maxPossibleTicks=1,tickIntervalLevelInfo=null,i=skip_ticks_tickIntervals.length-1;i>=0;i--){var tickIntervalInfo=skip_ticks_tickIntervals[i],numOfPossibleTicks=Math.floor(interval/tickIntervalInfo[1]);numOfPossibleTicks<=count&&(possibleTickLevelIndex=i,maxPossibleTicks=numOfPossibleTicks)}return tickIntervalLevelInfo=skip_ticks_tickIntervals[possibleTickLevelIndex],function getActualTickInterval(context,noOfTicks){var minWidthBetweenTicks=context._minTickDistance.width,width=context.availableSpace().width;return Math.floor((width-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)}(context,maxPossibleTicks)=numOfTicksAccordingToMinDiff&&(actualNumberOfTicks=numOfTicksAccordingToMinDiff),getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval,actualNumberOfTicks,context)}(context,maxTicks));context.renderConfig({tickValues:ticks})},adjustHorizontalRange=function adjustHorizontalRange(range,diff){return range[0]+=diff,range[1]-=diff,range},adjustVerticalRange=function adjustVerticalRange(range,diff){return range[0]-=diff,range[1]+=diff,range},rangeAdjustmentMap=(space_setter_defineProperty(_rangeAdjustmentMap={},axis_orientation_TOP,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_BOTTOM,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_LEFT,adjustVerticalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_RIGHT,adjustVerticalRange),_rangeAdjustmentMap),setAxisRange=function setAxisRange(context,type,rangeBounds,offset){context.range(rangeBounds),offset&&context.renderConfig(space_setter_defineProperty({},"".concat(type,"Offset"),offset))},getAdjustedRange=function getAdjustedRange(minDiff,range,domain,config){var orientation=config.orientation,adjustRange=config.adjustRange,diff=function getAxisOffset(timeDiff,range,domain){var avWidth=Math.abs(range[1]-range[0]),bars=avWidth/(avWidth/(domain[1]-domain[0])*timeDiff);return(avWidth-avWidth/(bars+1)*bars)/2}(minDiff,range,domain);return adjustRange?rangeAdjustmentMap[orientation](range,diff):range},space_setter_spaceSetter=function spaceSetter(context,spaceConfig){var _ref,tickInterval,heightForTicks,config=context.config(),_context$availableSpa2=context.availableSpace(),availWidth=_context$availableSpa2.width,availHeight=_context$availableSpa2.height,padding=_context$availableSpa2.padding,top=padding.top,left=padding.left,bottom=padding.bottom,right=padding.right,isOffset=spaceConfig.isOffset,_context$renderConfig2=context.renderConfig(),showAxisName=_context$renderConfig2.showAxisName,labels=_context$renderConfig2.labels,rotation=labels.rotation,fixedBaseline=config.fixedBaseline,axisNamePadding=config.axisNamePadding,tickValues=config.tickValues,_context$getAxisDimen=context.getAxisDimensions(),tickDimensions=_context$getAxisDimen.tickDimensions,allTickDimensions=_context$getAxisDimen.allTickDimensions,axisNameDimensions=_context$getAxisDimen.axisNameDimensions,tickSize=_context$getAxisDimen.tickSize,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width,namePadding=showAxisName?axisNamePadding:0,labelConfig={smartTicks:!0,rotation:labels.rotation},minTickDistance=context._minTickDistance,minTickSpace=context._minTickSpace,minDiff=context._minDiff,domain=context.domain(),axisNameHeight=axisNameDimensions.height,minWidthBetweenTicks=minTickDistance.width,minTickWidth=Math.min(minTickSpace.width,tickDimWidth),minTickHeight=Math.min(minTickSpace.height,tickDimHeight);return space_setter_defineProperty(_ref={},TIME,{x:function x(){!tickValues&&context.applyTickSkipping();var noOfTicks=context.getTickValues().length;heightForTicks=availHeight-axisNameHeight-tickSize-namePadding,(tickInterval=(availWidth-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)axisNameHeight?(labelConfig.rotation=null,context.renderConfig({showInnerTicks:!0,showAxisName:!0})):(labelConfig.rotation=-90,context.renderConfig({showInnerTicks:!0,showAxisName:!1}))),availHeight0&&void 0!==arguments[0]?arguments[0]:0,width=arguments.length>1?arguments[1]:void 0,height=arguments.length>2?arguments[2]:void 0,rotatedHeight=height,rotatedWidth=width;if(rotation){var angle=(rotation||0)*Math.PI/180;rotatedWidth=Math.abs(height*Math.sin(angle))+Math.abs(width*Math.cos(angle)),rotatedHeight=Math.abs(width*Math.sin(angle))+Math.abs(height*Math.cos(angle))}return{width:rotatedWidth,height:rotatedHeight}},helper_setOffset=function setOffset(context){var x=0,y=0,logicalSpace=context.logicalSpace(),config=context.config(),orientation=config.orientation,xOffset=config.xOffset,yOffset=config.yOffset;orientation===axis_orientation_LEFT&&(x=void 0===xOffset?logicalSpace.width:xOffset),orientation===axis_orientation_TOP&&(y=void 0===yOffset?logicalSpace.height:yOffset),context.renderConfig({xOffset:x,yOffset:y})},getAxisComponentDimensions=function getAxisComponentDimensions(context){var axisTicks,largestTick="",largestTickDimensions={width:0,height:0},smartTick={},allTickDimensions=[],scale=context.scale(),_context$renderConfig=context.renderConfig(),tickValues=_context$renderConfig.tickValues,showAxisName=_context$renderConfig.showAxisName,name=context.config().name,labelManager=context.dependencies().labelManager,labelFunc=scale.ticks||scale.quantile||scale.domain;return labelManager.setStyle(context._tickLabelStyle),axisTicks=(axisTicks=tickValues||labelFunc()).map(function(originalLabel,i){var label=context.getFormattedText(originalLabel,i,axisTicks),tickDimensions=labelManager.getOriSize(label);return allTickDimensions.push(tickDimensions),tickDimensions.width>largestTickDimensions.width&&(largestTick=label,smartTick=context.smartTicks()?context.smartTicks()[i]:{},largestTickDimensions=tickDimensions,smartTick=smartTick||tickDimensions),label}),labelManager.setStyle(context._axisNameStyle),{axisNameDimensions:showAxisName?labelManager.getOriSize(name):{width:0,height:0},largestTick:largestTick,largestTickDimensions:largestTickDimensions,allTickDimensions:allTickDimensions,axisTicks:axisTicks,smartTick:smartTick,tickSize:context.getTickSize()}},getHorizontalAxisSpace=function getHorizontalAxisSpace(context,axisDimensions,range){var width,height,domain=context.domain(),minTickDistance=context._minTickDistance.width,tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config2=context.config(),axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width;if(width=range&&range.length?range[1]-range[0]:3*(tickDimWidth+minTickDistance),height=0,tickValues){var minTickDiff=context.getMinTickDifference(),_ref=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];width=(_ref[1]-_ref[0])/Math.abs(minTickDiff)*(tickDimWidth+context._minTickDistance.width)}return height=range&&range.length?tickDimHeight:Math.max(tickDimWidth,tickDimHeight),{width:width,height:height+=(showAxisName?axisDimHeight+axisNamePadding:0)+tickSize}},getVerticalAxisSpace=function getVerticalAxisSpace(context,axisDimensions){var height,width,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config3=context.config(),axisNamePadding=_context$config3.axisNamePadding,tickValues=_context$config3.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height;if(height=0,width=tickDimensions.width,tickValues){var minTickDiff=context.getMinTickDifference(),_ref2=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];height=(_ref2[1]-_ref2[0])/Math.abs(minTickDiff)*tickDimHeight}return{height:height,width:width+=(showAxisName?axisDimHeight:0)+tickSize+axisNamePadding}},helper_calculateBandSpace=function calculateBandSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,show=context.renderConfig().show,largestTickDimensions=axisDimensions.largestTickDimensions,axisTicks=axisDimensions.axisTicks,allTickDimensions=axisDimensions.allTickDimensions,largestDimHeight=largestTickDimensions.height,minTickWidth=context._minTickDistance.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa=getHorizontalAxisSpace(context,axisDimensions,range),_width=_getHorizontalAxisSpa.width,_height=_getHorizontalAxisSpa.height;return range&&range.length||(_width=allTickDimensions.reduce(function(t,n){return t+Math.min(n.width,n.height)+minTickWidth},0)),!1===show&&(_height=0,_width=0),{width:_width,height:_height}}var _getVerticalAxisSpace=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace.width,height=_getVerticalAxisSpace.height;return height&&0!==height||(height=axisTicks.length*(largestDimHeight+context._minTickDistance.height)),!1===show&&(width=0),{width:width,height:height}},helper_getValidDomain=function getValidDomain(context,domain){var userDom=context.config().domain;return userDom&&(domain=userDom),defaultValue(domain,[])},setContinousAxisDomain=function setContinousAxisDomain(context,domain){var nice=context.config().nice,scale=context.scale.bind(context);scale().domain(domain),nice&&scale().nice(),context._domain=scale().domain()},props_PROPS={availableSpace:{},axisDimensions:{},axisComponentDimensions:{},config:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._config||{}),mockedOldConfig=mergeRecursive({},oldConfig);(value=mergeRecursive(mockedOldConfig,value)).axisNamePadding=Math.max(value.axisNamePadding,0);var shouldAxesScaleUpdate=function hasAxesConfigChanged(){var obj=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},obj1=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},properties=arguments.length>2?arguments[2]:void 0;return!(!Object.keys(obj).length||!Object.keys(obj1).length)&&properties.some(function(key){return obj[key]!==obj1[key]})}(value,oldConfig,["interpolator","exponent","base","orientation"]),tickFormatter=context.sanitizeTickFormatter(value);return shouldAxesScaleUpdate&&(context._scale=context.createScale(value),context._axis=context.createAxis(value)),context._tickFormatter=function(ticks){return tickFormatter(ticks)},context.resetRenderConfig(value),value}},renderConfig:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._renderConfig||{});return value=mergeRecursive(oldConfig,value)}},logicalSpace:{},mount:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.logicalSpace(null),value}},smartTicks:{},tickSize:{},maxTickSpaces:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._maxTickSpaces||{});return value=mergeRecursive(oldConfig,value)}},valueParser:{defaultValue:function defaultValue(val){return val}}};function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function simple_axis_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function simple_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;this.availableSpace({width:width,height:height,padding:padding});var type=this.constructor.type();return labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?space_setter_spaceSetter(this,{isOffset:isOffset})[type].x():space_setter_spaceSetter(this,{isOffset:isOffset})[type].y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.setSmartAxisName(),this}},{key:"setSmartAxisName",value:function setSmartAxisName(){var _this$config2=this.config(),orientation=_this$config2.orientation,name=_this$config2.name,dimType=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?"width":"height",widthDim=this.availableSpace()[dimType],labelManager=this.dependencies().labelManager;return labelManager.setStyle(this._axisNameStyle),this.renderConfig({smartAxisName:function getSmartAxisName(name,width,labelManager){var oriSize=labelManager.getOriSize(name);return labelManager.useEllipsesOnOverflow(!0),labelManager.getSmartText(name,width,oriSize.height,!0)}(name,widthDim,labelManager)}),this}},{key:"setTickConfig",value:function setTickConfig(){return this}},{key:"getScaleValue",value:function getScaleValue(domainVal){if(null!==domainVal&&void 0!==domainVal)return this.scale()(domainVal)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return this.axisDimensions(function computeAxisDimensions(context){var tickDimensions={},labels=context.renderConfig().labels,smartTicks=labels.smartTicks,rotation=labels.rotation,_getAxisComponentDime=getAxisComponentDimensions(context),largestTickDimensions=_getAxisComponentDime.largestTickDimensions,axisTicks=_getAxisComponentDime.axisTicks,smartTick=_getAxisComponentDime.smartTick,axisNameDimensions=_getAxisComponentDime.axisNameDimensions,allTickDimensions=_getAxisComponentDime.allTickDimensions,tickSize=_getAxisComponentDime.tickSize,labelHeight=largestTickDimensions.height,labelWidth=largestTickDimensions.width;return 0===context.domain().length?null:(tickDimensions=getRotatedSpaces(rotation,(tickDimensions=smartTicks?smartTick:{width:labelWidth,height:labelHeight}).width,tickDimensions.height),0===tickSize&&(tickDimensions={width:0,height:0}),{allTickDimensions:allTickDimensions,tickSize:tickSize,tickDimensions:tickDimensions,axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks})}.apply(void 0,[this].concat(params))),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||this.logicalSpace(function calculateContinousSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,_context$renderConfig6=context.renderConfig(),show=_context$renderConfig6.show,showAxisName=_context$renderConfig6.showAxisName,axisNameDimensions=axisDimensions.axisNameDimensions;if(!1===show)return{width:0,height:0};var axisNameWidth=axisNameDimensions.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa2=getHorizontalAxisSpace(context,axisDimensions,range),_width2=_getHorizontalAxisSpa2.width,_height2=_getHorizontalAxisSpa2.height;return{width:Math.max(_width2,axisNameWidth),height:_height2}}var _getVerticalAxisSpace2=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace2.width,height=_getVerticalAxisSpace2.height;return{width:width,height:Math.max(height,showAxisName?axisNameWidth:0)}}(this)),helper_setOffset(this),this.logicalSpace()}},{key:"invert",value:function invert(value){return this.scale().invert(value)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){return[v1,v2]}},{key:"invertExtent",value:function invertExtent(v1,v2){return[this.invert(v1),this.invert(v2)]}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(tickValues){return tickValues}},{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:"render",value:function render(){return this.mount()&&(this.setTickConfig(),function renderAxis(axisInstance){var config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,mount=axisInstance.mount(),range=axisInstance.range(),axis=axisInstance.axis(),scale=axisInstance.scale(),tickLabelStyle=axisInstance._tickLabelStyle,axisTickFormatter=axisInstance._tickFormatter,orientation=config.orientation,axisNamePadding=config.axisNamePadding,className=config.className,id=config.id,classPrefix=config.classPrefix,show=renderConfig.show,xOffset=renderConfig.xOffset,yOffset=renderConfig.yOffset,showAxisName=renderConfig.showAxisName,labels=renderConfig.labels,smartAxisName=renderConfig.smartAxisName;if(show){var tickSize=axisInstance.getTickSize(),selectContainer=makeElement(renderer_utils_selectElement(mount),"g",[axisInstance],"".concat(className),{},function(key){return key.config().id});labelManager.setStyle(tickLabelStyle);var labelFunc=scale.ticks||scale.quantile||scale.domain,ticks=axis.tickValues()||labelFunc();axis.tickFormat(axisTickFormatter(ticks));var availableSpace=Math.abs(range[0]-range[1]),labelProps=axisInstance.axisComponentDimensions().largestTickDimensions;selectContainer.attr("transform","translate(".concat(xOffset,",").concat(yOffset,")")),axis_renderer_setFixedBaseline(axisInstance),!1===labels.smartTicks||0===tickSize?selectContainer.transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).call(axis):selectContainer.call(axis),selectContainer.selectAll(".tick").classed("".concat(classPrefix,"-ticks"),!0),selectContainer.selectAll(".tick line").classed("".concat(classPrefix,"-tick-lines"),!0),selectContainer.selectAll(".tick text").classed("".concat(classPrefix,"-ticks"),!0).classed("".concat(classPrefix,"-ticks-").concat(id),!0),axis_renderer_changeTickOrientation(selectContainer,axisInstance,tickSize);var textNode=makeElement(selectContainer,"text",[smartAxisName],"".concat(classPrefix,"-axis-name")).attr("text-anchor","middle").classed("".concat(classPrefix,"-axis-name-").concat(id),!0).text(function(d){return d.text});textNode.classed(HIDDEN,!showAxisName);var labelOffset=availableSpace/2,measures={labelProps:labelProps,tickSize:tickSize,axisNamePadding:axisNamePadding,axisNameHeight:smartAxisName.height,yOffset:yOffset,xOffset:xOffset,labelOffset:labelOffset,availableSpace:axisInstance.availableSpace()};axis_renderer_setAxisNamePos(textNode,orientation,measures)}}(this)),this}},{key:"remove",value:function remove(){return renderer_utils_selectElement(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this}},{key:"isReverse",value:function isReverse(){var range=this.range();return range[0]>range[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var scale=this.scale(),range=scale.range(),domain=scale.domain();return Math.abs(range[1]-range[0])/(domain[1]-domain[0])}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return cartesian_axis_default_config_defaultConfig}}]),SimpleAxis}();function linear_defineProperties(target,props){for(var i=0;iavailableSpace&&(numberOfValues=Math.floor(availableSpace/(labelDim+minTickDistance))),numberOfTicks=numberOfTicks||numberOfValues,numberOfValues=Math.min(numberOfTicks,Math.max(2,numberOfValues)),(tickValues=axis.scale().ticks(numberOfValues)).length>numberOfValues&&(tickValues=tickValues.filter(function(e,i){return i%2==0})),2===numberOfValues&&(tickValues=[(tickValues=axis.scale().ticks(10))[0],tickValues[tickValues.length-1]]),tickValues}(availableSpace,labelProps[orientation===axis_orientation_BOTTOM||orientation===axis_orientation_TOP?"width":"height"],axis,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return getSmallestDiff(this.renderConfig().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(tickText){var orientation=this.config().orientation,rotation=this.renderConfig().labels.rotation,axis=this.axis(),ticks=axis.tickValues(),smartTicks=this.smartTicks();if(smartTicks&&smartTicks.length){var _this$smartTicks$=this.smartTicks()[0],width=_this$smartTicks$.width,height=_this$smartTicks$.height;axis.tickTransform(function(d){if(d===ticks[0]){if(orientation===axis_orientation_LEFT||orientation===axis_orientation_RIGHT)return"translate(0, -".concat(height/3,"px)");if((orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM)&&!rotation)return"translate(".concat(width/2,"px, ",0,"px)")}return""})}return tickText}}],[{key:"type",value:function type(){return LINEAR}}]),ContinousAxis}();function band_axis_typeof(obj){return(band_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function band_axis_defineProperties(target,props){for(var i=0;irange[1],extent=this.invertExtent(v1,v2);return[scale(reverse?extent[extent.length-1]:extent[0]),scale(reverse?extent[0]:extent[extent.length-1])+scale.bandwidth()]}}],[{key:"type",value:function type(){return BAND}}]),BandAxis}();function time_axis_typeof(obj){return(time_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function time_axis_defineProperties(target,props){for(var i=0;i1?config.range:[DEFAULT_GRADIENT_COLOR].concat(props_toConsumableArray(config.range)));var oldConfig=mergeRecursive(defCon,context.config()),newConfig=mergeRecursive(oldConfig,config);return newConfig.range instanceof Array&&(newConfig.range=newConfig.range.map(function(e,i){return props_getActualHslColor(e,palette[i])}),newConfig.stops=config.stops||newConfig.range.length),newConfig.value=props_getActualHslColor(newConfig.value,newConfig.value),newConfig}},domain:{},scale:{},uniqueValues:{}},helper_treatNullMeasures=function treatNullMeasures(domainVal,scaledVal,minDomainScaledVal){return domainVal instanceof src_InvalidAwareTypes?minDomainScaledVal:scaledVal},helper_resolveAxisConfig=function resolveAxisConfig(propVal,defaultVal,context){switch(getObjProp(propVal,"constructor")){case Function:return propVal(defaultVal,context);case Array:return propVal;default:return defaultVal}};function color_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function color_strategy_toConsumableArray(arr){return function color_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);iMath.min(range.length,18))for(var interpolator=common_utils_piecewiseInterpolator()(function hslInterpolator(){return hslLong}(),range.map(function(e){return props_getHslString(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(domain.length){var scale=this.scale(),range=scale.range?scale.range():null,scaleInfo=this._colorStrategy.domainRange()(domain,this.config().stops,range);this.domain(scaleInfo.domain),scaleInfo.range&&this.scale().range(scaleInfo.range),this.uniqueValues(scaleInfo.uniqueVals),this.scale().domain(scaleInfo.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(color,transformationArr){var h=360*color[0],s=100*color[1],l=100*color[2],a=Math.min(defaultValue(color[3],0),1),newH=h+transformationArr[0],newS=s+transformationArr[1],newL=l+transformationArr[2],newA=Math.min(a+transformationArr[3]||0,1);return{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH/360,newS/100,newL/100,newA]}}},{key:"id",value:function id(){return this._id}},{key:"getHslArray",value:function getHslArray(color){return props_getActualHslColor(color)}}],[{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIG}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),defaults_DEFAULT_CONFIG={value:36,range:[36,1e3]};function size_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function size_strategy_toConsumableArray(arr){return function size_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:0,value=this.config().value,scale=this.scale(),domain=this.domain()||[1,1];return scale&&domain[0]!==domain[1]?this._sizeStrategy.range(domainVal,scale,this.domain(),this.uniqueValues()):value}},{key:"updateDomain",value:function updateDomain(domain){if(domain){var domainInfo=(0,this._sizeStrategy.domain)(domain,this.config().intervals);this.domain(domainInfo.domain),this.uniqueValues(domainInfo.uniqueVals),this.scale().domain(domainInfo.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 defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),shape_axis_defaults_DEFAULT_CONFIG={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},shape_axis_props_PROPS={config:{},domain:{},scale:{},uniqueValues:{},generator:{}};function shape_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[];return domain.length&&(this.uniqueValues(domain),this.domain(domain),this.scale().domain(domain),this.config().generator&&(this._generatedShapes=function shapeGenerator(domain,generatorFn){var generatedShapes={};return domain.forEach(function(value){generatedShapes[value]=generatorFn(value)}),generatedShapes}(domain,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 shape_axis_defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}(),polar_axis_props_PROPS={config:{sanitization:function sanitization(context,config){return mergeRecursive(context.config(),config)},preset:function preset(context,config){var range=config.range,domain=config.domain;range&&context.range(range),domain&&context.domain(domain)}},domain:{},range:{}};function angle_axis_slicedToArray(arr,i){return function angle_axis_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function angle_axis_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function angle_axis_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function angle_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function angle_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AngleAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._range=[0,360],this._angleFn=angle_axis_pie().value(function(d){return"string"==typeof d?1:d}).sortValues(null),this._angleValues={}}return function angle_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&angle_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&angle_axis_defineProperties(Constructor,staticProps),Constructor}(AngleAxis,[{key:"createScale",value:function createScale(strategy){var range=this.config().range;return scale_creator_createScale({type:strategy.scale,range:range})}},{key:"getScaleValue",value:function getScaleValue(domainVal){return this._angleValues[domainVal]}},{key:"padAngle",value:function padAngle(angle){this._angleFn=this._angleFn.padAngle(angle)}},{key:"domain",value:function domain(){for(var _len=arguments.length,domainVal=new Array(_len),_key=0;_key<_len;_key++)domainVal[_key]=arguments[_key];if(domainVal.length){var customDomain=this.config().domain,domain=domainVal[0].length?domainVal[0]:DEFAULT_ANGLE_DOMAIN;return this._domain=helper_resolveAxisConfig(customDomain,domain,this),createAngleValues(this),this}return this._domain}},{key:"range",value:function range(){if(arguments.length){var customRange=this.config().range;this._range=helper_resolveAxisConfig(customRange,arguments.length<=0?void 0:arguments[0],this);var domain=this.domain(),_this$_range=angle_axis_slicedToArray(this._range,2),startAngle=_this$_range[0],endAngle=_this$_range[1];return this._angleFn.startAngle(startAngle/180*Math.PI).endAngle(Math.PI*endAngle/180),domain&&domain.length&&createAngleValues(this),this}return this._range}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),AngleAxis}(),X="x",Y="y",MEASURE="measure",ROWS="rows",COLUMNS="columns",COL="col",ROW="row",enums_constants_COLOR="color",enums_constants_SHAPE="shape",enums_constants_SIZE="size",enums_constants_LINEAR="linear",constants_LEFT="left",constants_RIGHT="right",CELL="cell",X_AXES="xAxes",Y_AXES="yAxes",ENTRY_CELLS="entryCell",EXIT_CELLS="exitCell",enums_constants_RADIUS="radius",enums_constants_ANGLE="angle",ANGLE0="angle0",PRIMARY="Primary",SECONDARY="Secondary";function radius_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function radius_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RadiusAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._range=[],this._radiusFactor=1,this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._scale=this.createScale({scale:enums_constants_LINEAR})}return function radius_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&radius_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&radius_axis_defineProperties(Constructor,staticProps),Constructor}(RadiusAxis,[{key:"config",value:function config(){if(arguments.length){var config=mergeRecursive(this.config(),arguments.length<=0?void 0:arguments[0]);return this._config=config,this}return this._config}},{key:"createScale",value:function createScale(strategy){return scale_creator_createScale({type:strategy.scale,range:this.range()})}},{key:"domain",value:function domain(){if(arguments.length){var customDomain=this.config().domain,domain=helper_resolveAxisConfig(customDomain,arguments.length<=0?void 0:arguments[0],this);domain=sanitizeDomainWhenEqual(domain),this._scale.domain(domain),this._domain=domain,adjustDomain(this)}return this._domain}},{key:"getInnerRadius",value:function getInnerRadius(domainVal){return void 0===domainVal?this.range()[0]:this._scale(domainVal)}},{key:"getOuterRadius",value:function getOuterRadius(domainVal){return void 0===domainVal?this.range()[1]:this._scale(domainVal)*this._radiusFactor}},{key:"range",value:function range(){for(var _len=arguments.length,_range=new Array(_len),_key=0;_key<_len;_key++)_range[_key]=arguments[_key];if(_range.length){var _this$config2=this.config(),padding=_this$config2.padding,customRange=_this$config2.range,sanitizedRange=_range[0].map(function(v,i){return v+(i?-padding[i]:padding[i])}),rangeVal=helper_resolveAxisConfig(customRange,sanitizedRange,this);this._range=rangeVal,this._scale.range(rangeVal),adjustDomain(this)}return this._range}},{key:"setRadiusFactor",value:function setRadiusFactor(val){return this._radiusFactor=val,this}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:[0,1],minOuterRadius:10}}}]),RadiusAxis}();function data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DATA_TYPES_MEASURE="measure",DATA_TYPES_TEMPORAL="temporal",group_transform=(data_type_scale_map_defineProperty(_dataTypeScaleMap={},"dimension",BAND),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_MEASURE,LINEAR),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_TEMPORAL,TIME),function(schema,data,config){var groupBy=config.groupBy instanceof Array?config.groupBy:[config.groupBy],groupByIndices=groupBy.map(function(fieldName){return schema.findIndex(function(d){return d.name===fieldName})});if(void 0!==groupByIndices.find(function(d){return-1===d}))throw new Error("Groupby field ".concat(groupBy," not found in schema"));var groupedData=common_utils_nestCollection({keys:groupByIndices,data:data});return groupedData.forEach(function(d){var key=d.key;src_InvalidAwareTypes.isInvalid(key)&&(d.key=src_InvalidAwareTypes.getInvalidType(key))}),groupedData});var _transformMap;function transform_factory_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var transformMap=(transform_factory_defineProperty(_transformMap={},"identity",function identityTransform(schema,data,config){return data}),transform_factory_defineProperty(_transformMap,"group",group_transform),transform_factory_defineProperty(_transformMap,"stack",function(schema,data,config){var uniqueField=config.uniqueField,valueField=config.value,groupBy=config.groupBy,sort=config.sort||"descending",normalizedData=function normalizeData(data,schema,valueField,uniqueField,groupBy){var groupedData=group_transform(schema,data,{groupBy:uniqueField}),uniqueFieldIndex=schema.findIndex(function(d){return d.name===uniqueField}),valueFieldIndex=schema.findIndex(function(d){return d.name===valueField}),seriesKeyIndex=schema.findIndex(function(d){return d.name===groupBy}),seriesKeys=data.map(function(d){return d[seriesKeyIndex]}).filter(function(item,pos,arr){return arr.indexOf(item)===pos}).sort(),fieldNames=schema.reduce(function(acc,obj,i){return acc[i]=obj.name,acc},{});return{data:groupedData.map(function(arr){var tuples={},rowObj=arr.values.reduce(function(acc,row){return acc=row.reduce(function(obj,value,i){return i===seriesKeyIndex?(obj[value]=row[valueFieldIndex],tuples[value]=row):i!==valueFieldIndex&&(obj[fieldNames[i]]=value),obj},acc)},{});return rowObj._tuple=tuples,seriesKeys.forEach(function(seriesKey){if(void 0===rowObj[seriesKey]){rowObj[seriesKey]=0;var newArr=new Array(arr.values[0].length);newArr[uniqueFieldIndex]=arr.key,newArr[seriesKeyIndex]=seriesKey,rowObj._tuple[seriesKey]=newArr}}),rowObj}),keys:seriesKeys}}(data,schema,valueField,uniqueField,groupBy),keys=normalizedData.keys,map={},orderBy=config.orderBy,orderIndex=schema.findIndex(function(d){return d.name===orderBy}),groupByIndex=schema.findIndex(function(d){return d.name===groupBy});-1!==orderIndex&&(keys.forEach(function(key){var name=data.find(function(d){return d[groupByIndex]===key});map[key]=name[orderIndex]}),normalizedData.keys.sort(function(a,b){return map[a].localeCompare(map[b])}));var stackData=common_utils_stack({keys:normalizedData.keys,offset:config.offset||"diverging",order:sort,data:normalizedData.data});return stackData.forEach(function(seriesData){seriesData.forEach(function(dataObj){dataObj.data=dataObj.data._tuple[seriesData.key]})}),stackData}),_transformMap);var _encodingFieldInfRetr,_dataNormalizers,_domainCalculator,transform_factory=function transformFactory(type){var transform=transformMap[type];if("function"!=typeof transform)throw new Error("Invalid transform type supplied.");return transform};function helpers_toConsumableArray(arr){return function helpers_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=d[0]?(y=x0=d[1],x=y0=d[0]):(y=x0=d[0],x=y0=d[1]),(pointObj=xFieldType===dist_datamodel.FieldType.MEASURE?{x:x,x0:x0,y:tuple[yFieldIndex],y0:tuple[yFieldIndex]}:{x:tuple[xFieldIndex],x0:tuple[xFieldIndex],y:y,y0:y0}).source=tuple,pointObj.rowId=tuple[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=tuple[encodingFieldInf["".concat(enc,"FieldIndex")]]})):((pointObj={x:d[xFieldIndex],y:d[yFieldIndex],x0:d[x0FieldIndex],y0:d[y0FieldIndex]}).source=d,pointObj.rowId=d[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=d[encodingFieldInf["".concat(enc,"FieldIndex")]]}));return pointObj})}).filter(function(d){return d.length})}),_dataNormalizers),domainCalculator=(helpers_defineProperty(_domainCalculator={},POLAR,function(data,layerInst){var config=layerInst.config(),sort=config.sort,angleValues=data[0],radius0Field=getObjProp(config.encoding.radius0,"field");return sort&&(angleValues=angleValues.sort(function(a,b){return"asc"===sort?a.radius-b.radius:b.radius-a.radius})),{radius:getDomainFromData(data,[ENCODING.RADIUS,radius0Field?ENCODING.RADIUS0:ENCODING.RADIUS]),angle:angleValues.map(function(d){return d.angle}),angle0:angleValues.map(function(d){return d.angle0})}}),helpers_defineProperty(_domainCalculator,helpers_CARTESIAN,function(data,layerInst){var transformType=layerInst.transformType(),encodingFieldInf=layerInst.encodingFieldsInf(),xFieldSubType=encodingFieldInf.xFieldSubType,yFieldSubType=encodingFieldInf.yFieldSubType,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,x0Field=encodingFieldInf.x0Field,y0Field=encodingFieldInf.y0Field,domains={},yEnc=ENCODING.Y,xEnc=ENCODING.X;return xField&&(domains.x=getDomainFromData(data,x0Field||"stack"===transformType?[xEnc,ENCODING.X0]:[xEnc,xEnc],xFieldSubType)),yField&&(domains.y=getDomainFromData(data,y0Field||"stack"===transformType?[ENCODING.Y0,ENCODING.Y]:[yEnc,yEnc],yFieldSubType)),domains}),_domainCalculator),attachDataToVoronoi=function attachDataToVoronoi(voronoi,points){var _ref3;voronoi.data((_ref3=[]).concat.apply(_ref3,helpers_toConsumableArray(points)).filter(function(d){return void 0!==d.rowId}).map(function(d){var point=d.update;return{x:point.x,y:point.y,data:d}}))},helpers_updateStyle=function updateStyle(target,styles,remove){for(var key in styles)({}).hasOwnProperty.call(styles,key)&&target.style(key,remove?null:styles[key])},positionPoints=function positionPoints(context,points){var positioner=context.encodingTransform();return positioner?positioner(points,context,{smartLabel:context._dependencies.smartLabel}):points},helpers_getPlotMeasurement=function getPlotMeasurement(context,dimensionalValues){var fieldInfo=context.encodingFieldsInf(),axes=context.axes(),transformType=context.transformType(),config=context.config(),bandScale=context._bandScale;return["x","y"].map(function(type){var span=0,groupSpan=0,padding=0,offsetValues=[];if(fieldInfo["".concat(type,"FieldType")]===dist_datamodel.FieldType.DIMENSION){var actualGroupWidth,timeDiff=fieldInfo["".concat(type,"FieldSubType")]===dist_datamodel.DimensionSubtype.TEMPORAL?context.dataProps().timeDiffs[type]:0,axis=axes[type],pad=config["pad".concat(type.toUpperCase())],innerPadding=config.innerPadding,keys=dimensionalValues,scale=axis.scale();groupSpan=function getGroupSpan(axis,minDiff){var width=axis.getUnitWidth(),scale=axis.scale(),range=scale.range(),domain=scale.domain();return width||Math.abs(range[1]-range[0])/Math.abs(domain[1]-domain[0])*minDiff}(axis,timeDiff);var isAxisBandScale=axis.constructor.type()===helpers_BAND,axisPadding=axis.config().padding;if("group"===transformType){var groupPadding=isAxisBandScale?0:axisPadding*groupSpan/2;bandScale.range([groupPadding,groupSpan-groupPadding]).domain(keys).paddingInner(innerPadding),span=bandScale.bandwidth(),actualGroupWidth=groupSpan-(isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(key){return bandScale(key)-(isAxisBandScale?0:groupSpan/2)})}else if(void 0!==pad){var offset;if(isAxisBandScale){var step=scale.step();offset=scale.padding()*step,span=scale.bandwidth()+offset}else span=groupSpan;offsetValues=keys.map(function(){return isAxisBandScale?-offset/2:-span/2})}else actualGroupWidth=span=groupSpan-(padding=isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(){return isAxisBandScale?0:-span/2});groupSpan=actualGroupWidth,padding=isAxisBandScale?axisPadding*axis.scale().step():axisPadding*groupSpan}return{span:span,offsetValues:offsetValues,groupSpan:groupSpan,padding:padding}})},helpers_resolveInvalidTransformType=function resolveInvalidTransformType(context){return function transformResolverPredicates(encodingFieldInf,context,groupByField){var fieldsConfig=context.data().getFieldsConfig(),xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,dimensionField=["xField","yField"].find(function(type){return encodingFieldInf["".concat(type,"Type")]===dist_datamodel.FieldType.DIMENSION});return[!xField,!yField,!groupByField,getObjProp(fieldsConfig[groupByField],"def","type")===dist_datamodel.FieldType.MEASURE,xFieldType===dist_datamodel.FieldType.DIMENSION&&yFieldType===dist_datamodel.FieldType.DIMENSION,dimensionField&&encodingFieldInf[dimensionField]===groupByField]}(context.encodingFieldsInf(),context,context.config().transform.groupBy).some(function(value){return value})?"identity":null},helpers_getValidTransformForAggFn=function getValidTransformForAggFn(context){var resolvedInvalidTransformType=helpers_resolveInvalidTransformType(context);if(resolvedInvalidTransformType)return resolvedInvalidTransformType;var _context$encodingFiel=context.encodingFieldsInf(),xField=_context$encodingFiel.xField,yField=_context$encodingFiel.yField,xFieldType=_context$encodingFiel.xFieldType,yFieldType=_context$encodingFiel.yFieldType,groupByField=context.config().transform.groupBy,isCustomTransformTypeProvided=!!getObjProp(context._customConfig,"transform","type"),transformType=context.config().transform.type;if(!isCustomTransformTypeProvided&&groupByField&&xFieldType!==yFieldType){var measureField=xFieldType===dist_datamodel.FieldType.MEASURE?xField:yField;transformType="sum"===common_utils_retrieveNearestGroupByReducers(context.data(),measureField)[measureField]?"stack":"group"}return transformType},helpers_resolveEncodingValues=function resolveEncodingValues(data,i,dataArr,layerInst){var transformedValues={},values=data.values,encoding=layerInst.config().encoding;for(var key in values){var value=getObjProp(encoding[key],"value");value instanceof Function?transformedValues[key]=value(values,i,dataArr,layerInst):transformedValues[key]=values[key]}return transformedValues},getColorMetaInf=function getColorMetaInf(colorInf,colorAxis){return{originalColor:Object.keys(colorInf).reduce(function(acc,key){return colorInf[key]&&(acc[key]=colorAxis.getHslArray(colorInf[key])),acc},{}),stateColor:{},colorTransform:{}}},getCoordValue=function getCoordValue(radius,trig,angle,offset){return radius*Math[trig](angle)+offset},coordValueGetter=function coordValueGetter(radius,angle,xOffset,yOffset){return{x:getCoordValue(radius,"cos",angle,xOffset),y:getCoordValue(radius,"sin",angle,yOffset)}},toCartesianCoordinates=function toCartesianCoordinates(points,measurement){for(var rangePlot=arguments.length>2&&void 0!==arguments[2]&&arguments[2],xOffset=measurement.width/2,yOffset=measurement.height/2,i=0,len=points.length;i3&&void 0!==arguments[3]?arguments[3]:{};return function base_layer_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,BaseLayer),_this=function base_layer_possibleConstructorReturn(self,call){return!call||"object"!==base_layer_typeof(call)&&"function"!=typeof call?base_layer_assertThisInitialized(self):call}(this,base_layer_getPrototypeOf(BaseLayer).call(this)),generateGetterSetters(base_layer_assertThisInitialized(_this),props_props),_this.axes(axes),_this.alias(_this.constructor.formalName()+getUniqueId()),_this.dependencies(dependencies),_this._points=[],_this._cachedData=[],_this._id=getUniqueId(),_this._measurement={},_this._animationDonePromises=[],_this._graphicElems={},_this._customConfig=null,_this}return function base_layer_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&base_layer_setPrototypeOf(subClass,superClass)}(BaseLayer,simple_layer_SimpleLayer),function base_layer_createClass(Constructor,protoProps,staticProps){return protoProps&&base_layer_defineProperties(Constructor.prototype,protoProps),staticProps&&base_layer_defineProperties(Constructor,staticProps),Constructor}(BaseLayer,[{key:"store",value:function store(){if(arguments.length){var store=this._store=arguments.length<=0?void 0:arguments[0],namespace=this.metaInf().namespace;return store.addSubNamespace(namespace,BaseLayer.formalName(),this),store_transactor(this,localOptions,store,{subNamespace:namespace,namespace:"".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE)}),this}return this._store}},{key:"domain",value:function domain(){var prop="".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain"),store=this.store();if(arguments.length){var _this$metaInf2=this.metaInf(),parentNamespace=_this$metaInf2.parentNamespace,namespace=_this$metaInf2.namespace,domain=defaultValue(store.get(prop,parentNamespace),{});return domain[namespace]=arguments.length<=0?void 0:arguments[0],this.store().commit(prop,domain,parentNamespace),this}return this.store().get(prop,this.metaInf().namespace)}},{key:"encodingFieldsInf",value:function encodingFieldsInf(){return arguments.length?(this._encodingFieldsInf=arguments.length<=0?void 0:arguments[0],this):this._encodingFieldsInf}},{key:"encodingTransform",value:function encodingTransform(){return arguments.length?(this._encodingTransform=arguments.length<=0?void 0:arguments[0],this):this._encodingTransform}},{key:"alias",value:function alias(){return arguments.length?(this._alias=arguments.length<=0?void 0:arguments[0],this):this._alias||this.constructor.formalName()}},{key:"dependencies",value:function dependencies(){return arguments.length?(this._dependencies=arguments.length<=0?void 0:arguments[0],this):this._dependencies}},{key:"enableCaching",value:function enableCaching(){return this._cacheEnabled=!0,this}},{key:"clearCaching",value:function clearCaching(){return this._cacheEnabled=!1,this.data(this._cachedData[0])}},{key:"serialize",value:function serialize(){return this.config()}},{key:"id",value:function id(){return this._id}},{key:"getTransformedData",value:function getTransformedData(dataModel,config,transformType,encodingFieldsInf){return function transformData(dataModel,config,transformType,encodingFieldInf){var data=dataModel.getData({withUid:!0}),schema=data.schema,transform=config.transform,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,uniqueField=xFieldType===dist_datamodel.FieldType.MEASURE?yField:xField;return transform_factory(transformType)(schema,data.data,{groupBy:transform.groupBy,uniqueField:uniqueField,sort:transform.sort||"none",offset:transform.offset,orderBy:transform.orderBy,value:yFieldType===dist_datamodel.FieldType.MEASURE?yField:xField},data.uids)}(dataModel,config,transformType,encodingFieldsInf)}},{key:"calculateDomainFromData",value:function calculateDomainFromData(data){var domains={};return this.data().isEmpty()||(domains=domainCalculator[this.coord()](data,this)),domains}},{key:"getDataDomain",value:function getDataDomain(encodingType){var _this$metaInf3=this.metaInf(),parentNamespace=_this$metaInf3.parentNamespace,namespace=_this$metaInf3.namespace,domains=getObjProp(this.store().get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain"),parentNamespace),namespace);return void 0!==encodingType?domains[encodingType]||[]:domains}},{key:"getNormalizedData",value:function getNormalizedData(transformedData){return function getNormalizedData(transformedData,context){var transformType=context.transformType(),transformedDataArr="identity"===transformType?[transformedData]:transformedData,encodingFieldInf=context.encodingFieldsInf(),fieldsConfig=context.data().getFieldsConfig();return dataNormalizers[context.coord()](transformedDataArr,encodingFieldInf,fieldsConfig,transformType)}(transformedData,this)}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(interactionType,selectionSet,apply,styles){var interactionStyles=(this.config().interaction||{})[interactionType];(interactionStyles=styles||interactionStyles)&&helpers_applyInteractionStyle(this,selectionSet,interactionStyles,{apply:apply,interactionType:interactionType})}},{key:"disableUpdate",value:function disableUpdate(){return this._updateLock=!0,this}},{key:"enableUpdate",value:function enableUpdate(){return this._updateLock=!1,this}},{key:"resolveTransformType",value:function resolveTransformType(){this._transformType=function getValidTransform(context){return helpers_resolveInvalidTransformType(context)||context.config().transform.type}(this)}},{key:"transformType",value:function transformType(){return this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){var _this$metaInf4=this.metaInf(),namespace=_this$metaInf4.namespace,parentNamespace=_this$metaInf4.parentNamespace,store=this.store();store.removeSubNamespace(namespace,BaseLayer.formalName());var unitDom=store.get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".domain"))[parentNamespace];return unitDom&&delete unitDom[namespace],renderer_utils_selectElement(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(key,data){if(null===key)return this;var pointMap=this._pointMap;return!pointMap[key]&&(pointMap[key]=[]),pointMap[key].push(data),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(data){var schema=this.data().getSchema(),fieldsConfig=this.data().getFieldsConfig(),identifiers=[[],[]],_this$encodingFieldsI=this.encodingFieldsInf(),xFieldType=_this$encodingFieldsI.xFieldType,yFieldType=_this$encodingFieldsI.yFieldType,xField=_this$encodingFieldsI.xField,yField=_this$encodingFieldsI.yField,_map2=base_layer_slicedToArray([xFieldType,yFieldType].map(function(type){return type===dist_datamodel.FieldType.MEASURE}),2),xMeasure=_map2[0],yMeasure=_map2[1];if(schema.forEach(function(d,i){var name=d.name;fieldsConfig[name].def.type===dist_datamodel.FieldType.DIMENSION&&(identifiers[0].push(name),identifiers[1].push(data[i]))}),xMeasure&&yMeasure){var _identifiers$,_identifiers$2,xMeasureIndex=fieldsConfig[xField].index,yMeasureIndex=fieldsConfig[yField].index;(_identifiers$=identifiers[0]).push.apply(_identifiers$,[xField,yField]),(_identifiers$2=identifiers[1]).push.apply(_identifiers$2,[data[xMeasureIndex],data[yMeasureIndex]])}return identifiers}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!1}},{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(identifiers){var _ref,fieldNames,values,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},getAllAttrs=config.getAllAttrs,getBBox=config.getBBox;if(!this.data())return[];if(identifiers instanceof datamodel_default.a){var dataObj=identifiers.getData();fieldNames=dataObj.schema.map(function(d){return d.name}),values=dataObj.data}else fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length);var points=this._points,fieldsConfig=this.data().getFieldsConfig(),filteredPoints=(_ref=[]).concat.apply(_ref,base_layer_toConsumableArray(points)).filter(function(point){var source=point.source,rowId=point.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})});return getAllAttrs?filteredPoints:filteredPoints.map(function(d){var obj=clone(d);if(getBBox){var update=obj.update||obj;if(void 0!==obj.size){var sizeVal=2*Math.sqrt(obj.size/Math.PI);update.width=sizeVal,update.height=sizeVal,update.x-=sizeVal/2,update.y-=sizeVal/2}else void 0===update.width&&(update.width=2),void 0===update.height&&(update.height=2)}return obj.update||obj}).sort(function(a,b){return a.y-b.y})}},{key:"getTransformedDataFromIdentifiers",value:function getTransformedDataFromIdentifiers(identifiers){var measureIndex,enc,_identifiers$getData=identifiers.getData(),identifierData=_identifiers$getData.data,identifierSchema=_identifiers$getData.schema,normalizedData=this._normalizedData,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI2=this.encodingFieldsInf(),yField=_this$encodingFieldsI2.yField,xField=_this$encodingFieldsI2.xField,yFieldType=_this$encodingFieldsI2.yFieldType;_this$encodingFieldsI2.xFieldType===dist_datamodel.FieldType.MEASURE?(measureIndex=fieldsConfig[xField].index,enc="x"):yFieldType===dist_datamodel.FieldType.MEASURE&&(measureIndex=fieldsConfig[yField].index,enc="y");var transformedData=[];return normalizedData.forEach(function(dataArr){dataArr.forEach(function(dataObj){var tupleArr=dataObj.source;if(identifierSchema.every(function(obj,i){return-1!==identifierData.findIndex(function(d){return tupleArr[fieldsConfig[obj.name].index]===d[i]})})){var transformedVal=dataObj[enc],row=dataObj.source,tuple={};for(var key in fieldsConfig){var index=fieldsConfig[key].index;tuple[key]=row[index],index===measureIndex&&(tuple[key]=transformedVal)}transformedData.push(tuple)}})}),[transformedData,this.data().getSchema()]}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){for(var graphicElems=this._graphicElems,elems=[],i=0,len=set.length;i2&&void 0!==arguments[2]?arguments[2]:{},dataPoint=renderer_utils_selectElement(config.event.target).data()[0];if(isSimpleObject(dataPoint)){var source=dataPoint.source,rowId=dataPoint.rowId;return{id:this.getIdentifiersFromData(source,rowId),layerId:this.id()}}return null}},{key:"translatePoints",value:function translatePoints(data){var _this2=this,_this$axes=this.axes(),angle=_this$axes.angle,colorAxis=_this$axes.color,radiusAxis=_this$axes.radius,pieIndex={},prevData=this._points[0]||[],points=[],angleV={};return this._prevPieData={},prevData.forEach(function(e,index){_this2._prevPieData[e.rowId]=[e,index],pieIndex[e.index]=e}),data.forEach(function(d,i){var angles=angle.getScaleValue(d.angle);if(angles){!angleV[d.angle]&&(angleV[d.angle]=0);var _angles=angles[angleV[d.angle]++],startAngle=_angles.startAngle,endAngle=_angles.endAngle,uid=d.rowId,resolvedEncodings=helpers_resolveEncodingValues({values:{radius:radiusAxis.getOuterRadius(d.radius),radius0:radiusAxis.getInnerRadius(d.radius0),color:colorAxis.getColor(d.color),angle0:startAngle,angle:endAngle,startAngle:startAngle,endAngle:endAngle,startAngle0:startAngle,endAngle0:endAngle},data:d},i,data,_this2),color=resolvedEncodings.color;points.push({source:d.source,index:i,enter:{},update:{angle0:resolvedEncodings.angle0,angle:resolvedEncodings.angle,radius0:resolvedEncodings.radius0,radius:resolvedEncodings.radius},color:color,meta:getColorMetaInf({fill:color},colorAxis),rowId:uid,_previousInfo:_this2._prevPieData[uid]?_this2._prevPieData[uid][0]:function getPreviousPoint(prevData,currIndex,context){var prevArc=prevData[currIndex-1],nextArc=prevData[currIndex],_context$axes$angle$r2=arc_helper_slicedToArray(context.axes().angle.range(),2),startAngle=_context$axes$angle$r2[0],endAngle=_context$axes$angle$r2[1];return prevArc&&nextArc?{update:{angle0:getObjProp(prevArc,"update","angle"),angle:getObjProp(nextArc,"update","angle0")}}:nextArc?{update:{angle0:(startAngle-90)*Math.PI*2/360,angle:(startAngle-90)*Math.PI*2/360}}:{update:{angle0:(endAngle-90)*Math.PI*2/360,angle:(endAngle-90)*Math.PI*2/360}}}(pieIndex,i,_this2)})}}),points}},{key:"render",value:function render(container){var _this3=this,measurement=this.measurement(),_this$config=this.config(),classPrefix=_this$config.classPrefix,defClassName=_this$config.defClassName,cornerRadius=_this$config.cornerRadius,padAngle=_this$config.padAngle,padRadius=_this$config.padRadius,transition=_this$config.transition,qualClassName=getQualifiedClassName(defClassName,this.id(),classPrefix),path=this._arcFn=arc_arc().cornerRadius(cornerRadius).startAngle(function(d){return d.update.angle0+Math.PI/2}).endAngle(function(d){return d.update.angle+Math.PI/2}).padAngle(padAngle).padRadius(padRadius).outerRadius(function(d){return d.update.radius}).innerRadius(function(d){return d.update.radius0});this._points=this._normalizedData.map(function(arr){return _this3.translatePoints(arr)});var graphicElems=this._graphicElems={},g=makeElement(renderer_utils_selectElement(container),"g",this._points,"".concat(qualClassName[0],"-group")).classed("".concat(qualClassName[1],"-group"),!0).attr("transform","translate(".concat(measurement.width/2,",\n ").concat(measurement.height/2,")")),consecutiveExits=[],exitCounter=0;return makeElement(g,"g",function(d){return d},"".concat(qualClassName[0]),{update:function tween(elem){makeElement(elem,"path",function(d){return[d]},"".concat(qualClassName[0],"-path")).style("fill",function(d){return d.color}).each(function(d){graphicElems[d.rowId]=renderer_utils_selectElement(this)}).transition().duration(transition.duration).on("end",_this3.registerAnimationDoneHook()).attrTween("d",function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return function tweenPie(path,b){var datum=b[0];return function(t){return path(common_utils_interpolator()(datum._previousInfo,datum)(t))}}(path,params)}).attr("class",function(d,i){var individualClass=getIndividualClassName(d,i,_this3._points,_this3);return"".concat(qualClassName[0],"-path ").concat(qualClassName[1],"-path-").concat(d.index,"\n ").concat(individualClass)})},exit:function tweenExit(elem,d){var exitArr=consecutiveExits[exitCounter],oldExitCounter=exitCounter;exitArr?exitArr[exitArr.length-1].datum.index===d.index-1?exitArr.push({elem:elem,datum:d}):exitCounter++:exitArr=[{elem:elem,datum:d}],consecutiveExits[oldExitCounter]=exitArr}}).attr("class",function(d,i){return"".concat(qualClassName[0]," ").concat(qualClassName[1],"-").concat(i)}),function tweenExitPie(consecutiveExits,transition,path){consecutiveExits.length>0&&consecutiveExits.forEach(function(consecutiveExitArr){var startAngle=consecutiveExitArr[0].datum.update.angle0,endAngle=consecutiveExitArr[consecutiveExitArr.length-1].datum.update.angle,mid=2*Math.PI*startAngle/(2*Math.PI+startAngle-endAngle);consecutiveExitArr.forEach(function(e){var elem=e.elem,datum=e.datum;elem.each(function(){var gElem=renderer_utils_selectElement(this);gElem.selectAll("path").transition().duration(transition.duration).attrTween("d",function(){return function(t){return path(common_utils_interpolator()(datum,{update:{angle0:mid,angle:mid,radius:datum.radius,radius0:datum.radius0}})(t))}}).remove(),gElem.remove()})})})}(consecutiveExits,transition,path),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){if(!this.data())return[];var fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length),pieSlices=renderer_utils_selectElement(this.mount()).selectAll("path").data(),fieldsConfig=this.data().getFieldsConfig(),pieSliceInf=pieSlices.filter(function(tData){var source=tData.source,rowId=tData.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})})[0];if(pieSliceInf){var measurement=this.measurement(),centroid=this._arcFn.centroid(pieSliceInf);return[{x:centroid[0]+measurement.width/2,y:centroid[1]+measurement.height/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return arc_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),text_renderer=function drawText(container,data,config,layerInst){var selection=renderer_utils_selectElement(container).selectAll("g").data(data),smartLabel=layerInst._dependencies.smartLabel,graphicElems=layerInst._graphicElems,selectionMerge=selection.enter().append("g").each(function(dataObj){renderer_utils_setAttrs(this,dataObj.enter)}).merge(selection),style=renderer_utils_getSmartComputedStyle(renderer_utils_selectElement(container),config.className),fontSize=parseInt(style.fontSize,10);return smartLabel.setStyle(style),selectionMerge.each(function(dataObj){var element=renderer_utils_selectElement(this);graphicElems[dataObj.rowId]=element;var backgroundVal,update=dataObj.update,text=dataObj.text,color=dataObj.color,textanchor=dataObj.textanchor,textStyle=dataObj.style,background=dataObj.background;if(backgroundVal=background.value){var diff,backgroundPadding=background.padding,_smartLabel$getOriSiz=smartLabel.getOriSize(dataObj.text),width=_smartLabel$getOriSiz.width,height=_smartLabel$getOriSiz.height,backgroundEl=makeElement(element,"rect",[1]);diff="end"===textanchor?width:"start"===textanchor?0:width/2,renderer_utils_setAttrs(backgroundEl.node(),{x:update.x-diff-backgroundPadding/2,y:update.y-fontSize-backgroundPadding/2,width:width+backgroundPadding,height:height+backgroundPadding}),background&&renderer_utils_setStyles(backgroundEl,{background:backgroundVal})}var textEl=makeElement(element,"text",function(d){return[d]}).text(text),textNode=textEl.node();textStyle&&renderer_utils_setStyles(textNode,textStyle),color&&renderer_utils_setStyles(textNode,{fill:color}),dataObj.className&&textEl.classed(dataObj.className,!0),renderer_utils_setAttrs(textNode,update),textEl.attr("text-anchor",textanchor),textEl.attr("alignment-baseline",dataObj["alignment-baseline"]),textEl.attr("transform","rotate(".concat(dataObj.rotation," ").concat(update.x," ").concat(update.y,")"))}),selection.exit().remove(),selection},text_default_config_defaultConfig={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:{},size:{},radius:{},angle:{},text:{value:"",formatter:function formatter(val,i,data,context){return context.valueParser()(val)},background:{padding:10}},rotation:{value:0},"alignment-baseline":{value:"middle"}},states:{highlight:{className:"".concat("muze","-layer-text-highlight")},fadeout:{className:"".concat("muze","-layer-text-fadeout")},selected:{className:"".concat("muze","-layer-text-selected")}}};__webpack_require__(18);function text_typeof(obj){return(text_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function text_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var _this=this,config=this.config(),normalizedData=this._normalizedData,className=config.className,qualifiedClassName=getQualifiedClassName(config.defClassName,this.id(),config.classPrefix);return renderer_utils_selectElement(container).classed("".concat(qualifiedClassName.join(" ")," ").concat(className),!0),this._graphicElems={},renderer_utils_createElements({data:normalizedData,append:"g",selector:"g",container:container,each:function each(dataArr,group){var node=group.node(),points=_this.translatePoints(dataArr,{},_this);renderer_utils_setStyles(node,{"text-anchor":"middle"}),text_renderer(node,points,{className:qualifiedClassName[0]},_this)}}),this}}],[{key:"defaultConfig",value:function defaultConfig(){return text_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"text"}}]),TextLayer}(),point_renderer=function drawSymbols(params){var layer=params.layer,container=params.container,points=params.points,transition=params.transition,className=params.className,duration=transition.duration,effect=transition.effect,disabled=transition.disabled,mount=renderer_utils_selectElement(container),graphicElems=layer._graphicElems;return mount.attr("class",className),makeElement(mount,"g",points,null,{enter:function enter(group,d){var enter=d.enter;group.attr("transform","translate(".concat(enter.x,",").concat(enter.y,")"))},update:function update(group,d){!function createShape(d,groupElement){var shape=d.shape,size=d.size,update=d.update;if(shape instanceof Promise)shape.then(function(res){d.shape=res,createShape(d,groupElement)});else if(shape instanceof Element){var newShape=shape.cloneNode(!0);if("img"===newShape.nodeName.toLowerCase()){var src=newShape.src||newShape.href;(newShape=document.createElementNS("http://www.w3.org/2000/svg","image")).setAttribute("href",src)}var shapeElement=renderer_utils_selectElement(newShape);"path"===newShape.nodeName||"image"===newShape.nodeName?shapeElement.attr("transform","scale(".concat(size/100,")")):(shapeElement.attr("height",size),shapeElement.attr("width",size)),shapeElement.attr("x",-size/2),shapeElement.attr("y",-size/2),makeElement(groupElement,function(){return newShape},[1])}else if("string"==typeof shape){var pathStr;pathStr=function checkPath(str){return!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(str)&&/[\dz]$/i.test(str)&&str.length>4)}(shape)?shape:common_utils_getSymbol(shape).size(size)(update),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}else d.shape="circle",createShape(d,groupElement)}(d,group),graphicElems[d.rowId]=group;var update=d.update,style=d.style;objectIterator(style,function(key){return group.style(key,style[key])}),group.attr("class",className),group.classed(d.className,!0),disabled||(group=group.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),group.attr("transform","translate(".concat(update.x,",").concat(update.y,")"))},exit:function exit(exitGroup){disabled?exitGroup.remove():exitGroup.transition().ease(easeFns[effect]).duration(duration).on("end",function(){return exitGroup.remove()}).style("fill-opacity",0).style("stroke-opacity",0)}},params.keyFn)},point_default_config_defaultConfig={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"stroke",intensity:[0,0,0,1]}],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:{},stroke:{value:"hsla(0,0%,0%,0)"},fill:{},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]};__webpack_require__(19);function point_typeof(obj){return(point_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function point_toConsumableArray(arr){return function point_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},points=[],encoding=this.config().encoding,axes=this.axes(),x=encoding.x,y=encoding.y,xField=x.field,yField=y.field,sizeAxis=axes.size,shapeAxis=axes.shape,fieldsConfig=this.data().getFieldsConfig(),isXDim=fieldsConfig[xField]&&fieldsConfig[xField].def.type===dist_datamodel.FieldType.DIMENSION,isYDim=fieldsConfig[yField]&&fieldsConfig[yField].def.type===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=this.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,stroke=encoding.stroke.value,_loop=function _loop(i,len){var d=data[i],size=sizeAxis.getSize(d.size),shape=shapeAxis.getShape(d.shape),_map2=point_slicedToArray([ENCODING.X,ENCODING.Y].map(function(type){var value=null===d[type]?void 0:d[type],measure=type===ENCODING.X?measurement.width:measurement.height;return encoding[type].field?axes[type].getScaleValue(value):measure/2}),2),xPx=_map2[0],yPx=_map2[1];xPx+=offsetX,yPx+=offsetY;var color=colorAxis.getColor(d.color),resolvedEncodings=helpers_resolveEncodingValues({values:{x:xPx,y:yPx,color:color,shape:shape,size:size,data:d},data:d},i,data,_this2),style={fill:color=resolvedEncodings.color,stroke:stroke},pos={x:resolvedEncodings.x,y:resolvedEncodings.y};if(!isNaN(xPx)&&!isNaN(yPx)){var point={enter:pos,update:pos,shape:resolvedEncodings.shape,size:Math.abs(resolvedEncodings.size),meta:getColorMetaInf(style,colorAxis),style:style,source:d.source,rowId:d.rowId};point.className=getIndividualClassName(d,i,data,_this2),points.push(point),_this2.cachePoint(d[key],point)}},i=0,len=data.length;i=update.x&&x<=update.width+update.x&&y>=update.y&&y<=update.height+update.y){pointFound=point;break}pointFound=null}var values=pointFound&&pointFound.source;return values&&(identifiers=this.getIdentifiersFromData(values,pointFound.rowId)),pointFound?{dimensions:[pointFound.update],id:identifiers,layerId:this.id()}:pointFound}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!0}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return bar_default_config_defaultConfig}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){var config=base_layer_BaseLayer.defaultPolicy(conf,userConf),colorField=config.encoding.color.field,transform=config.transform;return colorField&&(transform.groupBy=colorField),config}}]),BarLayer}(),tick_default_config_defaultConfig={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},interpolate:"linear",encoding:{color:{},x:{},y:{},x0:{},y0:{},radius:{},radius0:{},angle:{},angle0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"".concat("muze","-layer-tick-highlight")},fadeout:{className:"".concat("muze","-layer-tick-fadeout")},selected:{className:"".concat("muze","-layer-tick-selected")}}},tick_renderer_line=Symbols.line,tick_renderer=function(params){var points=params.points,container=params.container,keyFn=params.keyFn,className=params.className,interpolate=params.interpolate,layer=params.layer,mount=renderer_utils_selectElement(container),ticks=mount.selectAll("path").data(points,keyFn),ticksEnter=ticks.enter().append("path"),graphicElems=layer._graphicElems;return mount.attr("class",className||""),ticksEnter.each(function(d){var selection=renderer_utils_selectElement(this),enter=d.enter||{};Object.entries(enter).forEach(function(attr){return!isNaN(attr[1])&&selection.attr(attr[0],attr[1])})}),ticks.exit().remove(),ticks.merge(ticksEnter).each(function(d){var selection=renderer_utils_selectElement(this);graphicElems[d.rowId]=selection;var update=d.update,updateStyle=d.style||{},x0=void 0!==update.x0?update.x0:update.x,y0=void 0!==update.y0?update.y0:update.y,curveInterpolatorFn=pathInterpolators[interpolate],linepath=tick_renderer_line().curve(curveInterpolatorFn).x(function(e){return e[0]}).y(function(e){return e[1]});d.className&&selection.classed(d.className,!0),selection.attr("d",linepath([[update.x,update.y],[x0,y0]])),Object.entries(updateStyle).forEach(function(styleObj){return selection.style(styleObj[0],styleObj[1])})})};__webpack_require__(21);function tick_typeof(obj){return(tick_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function tick_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];for(var layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],radiusAxis=axes.radius,angleAxis=axes.angle,angle0Axis=axes.angle0,measurement=layerInst.measurement(),colorAxis=axes.color,angleV={},angle0V={},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{},layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],_getAxesScales=helpers_getAxesScales(axes),xAxis=_getAxesScales.xAxis,yAxis=_getAxesScales.yAxis,_layerInst$encodingFi=layerInst.encodingFieldsInf(),xField=_layerInst$encodingFi.xField,yField=_layerInst$encodingFi.yField,x0Field=_layerInst$encodingFi.x0Field,y0Field=_layerInst$encodingFi.y0Field,xFieldType=_layerInst$encodingFi.xFieldType,yFieldType=_layerInst$encodingFi.yFieldType,isXDim=xFieldType===dist_datamodel.FieldType.DIMENSION,isYDim=yFieldType===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_config$span=config.span,xSpan=_config$span.x,ySpan=_config$span.y,i=0,len=data.length;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];var layerRegistry=factoryObj._layerRegistry,instances=(layerDef=layerDef instanceof Array?layerDef:[layerDef]).map(function(layerObj){var layerConstructor=layerRegistry[layerObj.mark];return layerConstructor.create.apply(layerConstructor,params)});return 1===instances.length?instances[0]:instances},getLayerClass:function getLayerClass(mark){return factoryObj._layerRegistry[mark]},composeLayers:function composeLayers(layerType,layerDefs){compositeLayers[layerType]=layerDefs},sanitizeLayerConfig:function sanitizeLayerConfig(layerDef){var newConf=mergeRecursive({},layerDef);return sanitizeEncoding(newConf.encoding),newConf}};return factoryObj}();function defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _CONFIG$ROWS$COLUMNS$,DEFAULT_LAYERS=(defaults_defineProperty(_DEFAULT_LAYERS={},layer_types_AREA_LAYER,area_AreaLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_ARC_LAYER,arc_ArcLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_LINE_LAYER,line_LineLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TEXT_LAYER,text_TextLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_POINT_LAYER,point_PointLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TICK_LAYER,tick_TickLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BAR_LAYER,bar_BarLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BASE_LAYER,base_layer_BaseLayer),_DEFAULT_LAYERS),muze_package=__webpack_require__(6);function visual_group_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options=(visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$={},"config",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,ROWS,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,COLUMNS,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_COLOR,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SHAPE,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SIZE,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"detail",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"layers",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"transform",{}),_CONFIG$ROWS$COLUMNS$);function simple_group_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{},innerRadius=config.innerRadius,outerRadius=config.outerRadius;return[innerRadius||0,outerRadius||Math.min(height,width)/2]}(context.width(),context.height()))})},helper_isXandYMeasures=function isXandYMeasures(context){var _context$fields=context.fields(),_map2=src_helper_slicedToArray([_context$fields.x,_context$fields.y].map(function(fields){return fields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE})}),2),xMeasures=_map2[0],yMeasures=_map2[1];return xMeasures&&yMeasures},getKey=function getKey(arr,row){for(var key=row[arr[0]],i=1,len=arr.length;i=0?axisInf[key]:axisArr.length-1;axes[key]&&(axesObj[key]=defaultValue(axes[key][axisIndex]))}}),Object.keys(axesObj).length&&layer.axes(axesObj)})}(axesVal,layers,layerAxisIndexVal),context._lifeCycleManager.notify({client:layers,action:"updated",formalName:"layer"}))}}];function src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var src_props_PROPS=(src_props_defineProperty(_PROPS={},"facetByFields",{}),src_props_defineProperty(_PROPS,"retinalFields",{}),src_props_defineProperty(_PROPS,"parentAlias",{}),src_props_defineProperty(_PROPS,"cachedData",{}),src_props_defineProperty(_PROPS,"detailFields",{}),src_props_defineProperty(_PROPS,"axes",{defaultValue:{x:[],y:[]}}),src_props_defineProperty(_PROPS,"fields",{defaultValue:{x:[],y:[]},sanitization:function sanitization(context,value){return mergeRecursive({x:[],y:[]},value)}}),src_props_defineProperty(_PROPS,"metaInf",{}),src_props_defineProperty(_PROPS,"registry",{}),src_props_defineProperty(_PROPS,"parentContainerInf",{}),src_props_defineProperty(_PROPS,"valueParser",{defaultValue:function defaultValue(val){return val}}),src_props_defineProperty(_PROPS,"coord",{}),_PROPS);function payload_generator_toConsumableArray(arr){return function payload_generator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},payload=config.payload,selectionSet=config.selectionSet,propagationFieldInf=config.propagationFields[action]||{},propagationFields=propagationFieldInf.fields||[],append=propagationFieldInf.append,criteria=payload.criteria,context=instance.context,dataModel=context.cachedData()[0],sourceId=context.id(),sideEfffects=instance.sideEffects(),behaviourEffectMap=instance._behaviourEffectMap,mergedModel=selectionSet.mergedEnter.model,fieldsConfig=dataModel.getFieldsConfig();payload.sourceUnit=sourceId,payload.action=action,payload.sourceCanvas=context.parentAlias();var propagationBehaviour=instance._propagationBehaviourMap[action]||action,propFields=[];null===criteria?propagationData=null:isSimpleObject(criteria)?(propFields=Object.keys(criteria||{}),propagationData=mergedModel?mergedModel.project(propFields):null):(propFields=criteria[0],propagationData=mergedModel?mergedModel.project(propFields):null);var facetByFields=context.facetByFields();if(null!==propagationData&&propagationFields.length){var fields=propagationData.getData().schema.map(function(d){return d.name});propagationData=function getModelWithFacetData(dm,data){var dataObj=dm.getData(),schema1=dataObj.schema,data1=dataObj.data,jsonData=[],derivedSchema=data[0].map(function(d){return{name:"".concat(d),type:dist_datamodel.FieldType.DIMENSION,subtype:d.subtype()}}),dataAtFirstPos=data[1];return data1.forEach(function(d){var tuple={};schema1.forEach(function(obj,i){tuple[obj.name]=d[i]}),derivedSchema.forEach(function(obj,i){tuple[obj.name]=dataAtFirstPos[i]}),jsonData.push(tuple)}),new datamodel_default.a(jsonData,[].concat(data_propagator_toConsumableArray(schema1),data_propagator_toConsumableArray(derivedSchema)))}(propagationData,facetByFields),propFields=append?[].concat(data_propagator_toConsumableArray(fields),data_propagator_toConsumableArray(propagationFields)):propagationFields,propagationData=propagationData.project(propFields)}var propagateInterpolatedValues=!1;propFields.length&&propFields.every(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.MEASURE})&&(propagateInterpolatedValues=!0);var groupId=context.parentAlias();payload.action=action;var behaviourInstance=instance._actions.behavioural[propagationBehaviour],isMutableAction=!!behaviourInstance&&behaviourInstance.constructor.mutates(),filterFn=function filterFn(entry,propagationConf){var effects=behaviourEffectMap[entry.config.action],mutates=!entry.config.groupId||effects.some(function(d){return sideEfffects[d.name||d].constructor.mutates()});return entry.config.groupId!==propagationConf.groupId&&mutates},sourceBehaviour=instance._actions.behavioural[action],mutates=!!sourceBehaviour&&sourceBehaviour.constructor.mutates(),propConfig={payload:payload,action:action,criteria:propagationData,isMutableAction:mutates,propagateInterpolatedValues:propagateInterpolatedValues,groupId:groupId,sourceId:mutates?groupId:sourceId,filterFn:filterFn,enabled:function enabled(propConf,firebolt){return action===propagationBehaviour||propConf.payload.sourceCanvas===firebolt.context.parentAlias()}};dataModel.propagate(propagationData,propConfig,!0),action!==propagationBehaviour&&(propConfig={payload:payload,sourceId:isMutableAction?groupId:sourceId,criteria:propagationData,isMutableAction:isMutableAction,propagateInterpolatedValues:propagateInterpolatedValues,action:propagationBehaviour,groupId:groupId,applyOnSource:action===propagationBehaviour,enabled:function enabled(propConf,firebolt){return propConf.payload.sourceCanvas!==firebolt.context.parentAlias()},filterFn:filterFn},dataModel.propagate(propagationData,propConfig,!0,{filterImmutableAction:function filterImmutableAction(actionInf,propInf){return actionInf.groupId!==propInf.groupId}}))};function src_firebolt_typeof(obj){return(src_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function src_firebolt_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},points=[],parsedIdentifiers=identifiers;if(null===identifiers)return[];var layers=this.layers(),len=layers.length;isSimpleObject(identifiers)&&(parsedIdentifiers=[Object.keys(identifiers)],parsedIdentifiers=[].concat(visual_unit_toConsumableArray(parsedIdentifiers),visual_unit_toConsumableArray(function transposeArray(arr){return arr[0].map(function(col,i){return arr.map(function(row){return row[i]})})}(Object.values(identifiers)))));for(var i=0;i0&&(dimensionArr[0]=[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),dimensionArr[1]=[]),{fields:dimensionArr.map(function(list,i){return 1===i?measureArr[i].concat(dimensionArr[i]):dimensionArr[i].concat(measureArr[i])}),dimensions:[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),measures:[].concat(field_sanitizer_toConsumableArray(measureArr[0]),field_sanitizer_toConsumableArray(measureArr[1])),temporal:[].concat(field_sanitizer_toConsumableArray(temporalArr[0]),field_sanitizer_toConsumableArray(temporalArr[1])),categorical:[].concat(field_sanitizer_toConsumableArray(categoricalArr[0]),field_sanitizer_toConsumableArray(categoricalArr[1]))}}(norFields,fields)}),2),rowsInfo=_map2[0],columnsInfo=_map2[1],rows=rowsInfo.fields,rowDimensions=rowsInfo.dimensions,rowMeasures=rowsInfo.measures,rowTemporalFields=rowsInfo.temporal,rowCategoricalFields=rowsInfo.categorical,columns=columnsInfo.fields,columnDimensions=columnsInfo.dimensions,columnMeasures=columnsInfo.measures;return{rows:rows,rowDimensions:rowDimensions,rowMeasures:rowMeasures,rowTemporalFields:rowTemporalFields,rowCategoricalFields:rowCategoricalFields,columns:columns,columnTemporalFields:columnsInfo.temporal,columnCategoricalFields:columnsInfo.categorical,columnDimensions:columnDimensions,columnMeasures:columnMeasures}};function visual_encoder_slicedToArray(arr,i){return function visual_encoder_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function visual_encoder_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function visual_encoder_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function visual_encoder_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},fields=arguments.length>1?arguments[1]:void 0,_getHeaderAxisFrom2=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(ROW,fields.rows,axisFrom),2),rowHeader=_getHeaderAxisFrom2[0],rowAxis=_getHeaderAxisFrom2[1],_getHeaderAxisFrom4=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom("column",fields.columns,axisFrom),2),colHeader=_getHeaderAxisFrom4[0],colAxis=_getHeaderAxisFrom4[1];return this.axisFrom({row:rowAxis,column:colAxis}),this.headerFrom({row:rowHeader,column:colHeader}),this}}]),VisualEncoder}(),scaleMaps={linear:continous_axis_ContinousAxis,band:band_axis_BandAxis,temporal:time_axis_TimeAxis,size:size_axis_SizeAxis,color:color_axis_ColorAxis,shape:shape_axis_ShapeAxis},data_type_scale_map_dataTypeScaleMap={dimension:scale_type_namespaceObject.BAND,categorical:scale_type_namespaceObject.BAND,temporal:scale_type_namespaceObject.TIME,measure:scale_type_namespaceObject.LINEAR,continuous:scale_type_namespaceObject.LINEAR};function encoder_helper_toConsumableArray(arr){return function encoder_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?axesCreators.position="both":axesCreators.position=_this.axisFrom()[type],geomCellAxes[axis]=encoder_helper_generateAxisFromMap(axis,axisFields[i],axesCreators,{groupAxes:axis===X?xAxes:yAxes,valueParser:resolver.valueParser()},indices,facetFields)}),geomCell.axes(geomCellAxes),geomCellAxes}},{key:"unionUnitDomains",value:function unionUnitDomains(context){for(var store=context.store(),resolver=context.resolver(),units=resolver.units(),domains={0:{},1:{}},config=context.config(),fieldsObj={0:{},1:{}},_loop=function _loop(rIdx,len){for(var unitsArr=units[rIdx],_loop2=function _loop2(cIdx,len2){var unit=unitsArr[cIdx],axisFields=unit.fields(),encodingDomains=unit.getDataDomain();["x","y"].forEach(function(axisType,axisTypeIndex){axisFields[axisType].forEach(function(field,axisIndex){var key=axisTypeIndex?"".concat(rIdx,"0").concat(axisIndex):"0".concat(cIdx).concat(axisIndex),dom=encodingDomains[axisType],typeOfField=field.subtype();fieldsObj[axisTypeIndex][key]=field,dom&&0!==Object.keys(dom).length&&(domains[axisTypeIndex][key]=unionDomain([domains[axisTypeIndex]&&domains[axisTypeIndex][key]||[],dom["".concat(field)]],typeOfField))})})},cIdx=0,len2=unitsArr.length;cIdx1&&typeOfAxis===scale_type_namespaceObject.LINEAR&&axes[0].config().alignZeroLine)axes.forEach(function(axis,i){key=axisType?"".concat(idx,"0").concat(i):"0".concat(idx).concat(i),domain=domains[axisType][key],min[i]=domain[0],max[i]=domain[1]}),adjustedDomain=function getAdjustedDomain(max,min){var y1ratio=max[0]/(max[0]-min[0]),y2ratio=max[1]/(max[1]-min[1]),allSameSign=!1;return min[0]>0&&min[1]>0&&min[1]>0&&max[1]>0&&(allSameSign=!0,min[0]=0,min[1]=0),min[0]<0&&min[1]<0&&min[1]<0&&max[1]<0&&(allSameSign=!0,max[0]=0,max[1]=0),allSameSign||y1ratio===y2ratio||(y1ratiocounter)for(var _i=counter;_i-1&&(projections=[[_facet,_facet]],primaryFacets.splice(_existIndex,1)),secondaryFacets.splice(0,1)}else{var axisFromIndex=primaryFacets.length-1,facet=primaryFacets[axisFromIndex];projections=[[facet]];var existIndex=getIndex(secondaryFacets,facet);existIndex>-1&&(projections=[[facet,facet]],secondaryFacets.splice(existIndex,1)),primaryFacets.splice(axisFromIndex,1)}return{facets:facets=(facets=[].concat(primaryFacets,secondaryFacets)).filter(function(el,index,self){return index===self.findIndex(function(t){return t.toString()===el.toString()})}),projections:projections}}},{key:"fieldSanitizer",value:function fieldSanitizer(datamodel,config){return cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,datamodel,config)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(dataModels,encoding){var groupedModel=dataModels.groupedModel,domains={};for(var key in encoding)if({}.hasOwnProperty.call(encoding,key)){var encodingObj=encoding[key],field=encodingObj.field;if(!encodingObj.domain&&field){var domain=retriveDomainFromData(groupedModel,field);domains[field]=domain}}return domains}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer,i){var def=src_layer_factory.sanitizeLayerConfig(layer);def.order=i,serializedLayers.push(def)}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),layerConfig.push(config)}),layerConfig}},{key:"getLayerConfig",value:function getLayerConfig(fields,userLayerConfig,retinalConfig){var layerConfig=[],columnFields=fields.columnFields,rowFields=fields.rowFields;return columnFields.forEach(function(colField){var colFieldName=colField.toString();rowFields.forEach(function(rowField){var configs=[],rowFieldName=rowField.toString(),encoding={x:{field:colFieldName},y:{field:rowFieldName}},rowFieldType=rowField.subtype(),mark=function getDefaultMark(colFieldType,rowFieldType){return"categorical"===colFieldType||"categorical"===rowFieldType?"bar":"temporal"===colFieldType||"temporal"===rowFieldType?"line":"point"}(colField.subtype(),rowFieldType),defConfigs=[{mark:mark,def:{mark:mark,encoding:encoding}}],layerConfigs=function getLayerConfFromFields(colFields,rowFields,userLayerConfig){return userLayerConfig.filter(function(conf){var _ref,_ref2,_ref3,userConf=conf instanceof Array?conf:[conf],encodingArr=(_ref=[]).concat.apply(_ref,encoder_helper_toConsumableArray(userConf.map(function(d){return d.encoding}).filter(function(d){return void 0!==d})));if(!encodingArr.length)return!0;var xFields=(_ref2=[]).concat.apply(_ref2,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.x&&d.x.field,d.x0&&d.x0.field]}))).filter(function(d){return void 0!==d&&null!==d}),yFields=(_ref3=[]).concat.apply(_ref3,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.y&&d.y.field,d.y0&&d.y0.field]}))).filter(function(d){return void 0!==d&&null!==d});if(!xFields.length&&!yFields.length)return!0;var colFieldExist=!!xFields.length&&xFields.every(function(d){return-1!==colFields.indexOf(d)}),rowFieldExist=!!yFields.length&&yFields.every(function(d){return-1!==rowFields.indexOf(d)});return xFields.length&&yFields.length?colFieldExist&&rowFieldExist:colFieldExist||rowFieldExist})}(colField.getMembers(),rowField.getMembers(),userLayerConfig||[]);configs=layerConfigs.length?layerConfigs.map(function(layerConf){var mergedLayerConf=mergeRecursive(mergeRecursive({},defConfigs[0].def),layerConf),serializedLayerConfig=src_layer_factory.getSerializedConf(mergedLayerConf.mark,mergedLayerConf);return{mark:mergedLayerConf.mark,order:mergedLayerConf.order,def:serializedLayerConfig}}):defConfigs,layerConfig.push.apply(layerConfig,cartesian_encoder_toConsumableArray(configs))})}),this.sanitizeLayerConfig(retinalConfig,layerConfig)}}],[{key:"type",value:function type(){return cartesian_encoder_CARTESIAN}}]),CartesianEncoder}();function polar_encoder_typeof(obj){return(polar_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function polar_encoder_toConsumableArray(arr){return function polar_encoder_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);icounter)for(var _i=counter;_i0&&(config=mergeRecursive(config,userLayerConfig[0])),layerConfig.push(config)}),0===layerConfig.length&&(layerConfig=userLayerConfig);var sanitizedConfig=this.sanitizeLayerConfig(retinalConfig,layerConfig);return this.layers(sanitizedConfig),sanitizedConfig}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer){var def=src_layer_factory.getSerializedConf(layer.mark,layer);serializedLayers.push({mark:layer.mark,def:def})}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),def.forEach(function(conf){var encoding=conf.encoding||(conf.encoding={});!encoding.angle&&(encoding.angle={});var angleField=getObjProp(encoding.angle,"field"),angle0Field=getObjProp(encoding.angle0,"field");angleField||Object.assign(encoding.angle,{field:encodingConfigs.color&&encodingConfigs.color.field}),angle0Field||(!encoding.angle0&&(encoding.angle0={}),Object.assign(encoding.angle0,{field:encoding.angle.field}))}),layerConfig.push(config)}),layerConfig}}],[{key:"type",value:function type(){return polar_encoder_POLAR}}]),PolarEncoder}();function retinal_encoder_typeof(obj){return(retinal_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function retinal_encoder_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},axisType=axesCreators.axisType,fieldsConfig=axesCreators.fieldsConfig,field=fieldProps.field,axis=[],Cls=scaleMaps[axisType];return fieldProps.type=fieldProps.type?fieldProps.type:group_utils_getAxisType(fieldsConfig,field||null),axis.push(new Cls(fieldProps)),axis}({axisType:axisType,fieldsConfig:fieldsConfig},config[axisType])}),newAxes}},{key:"setCommonDomain",value:function setCommonDomain(context){var domains=context.domains,axes=context.axes,encoding=context.encoding;return Object.entries(encoding).forEach(function(enc){if(enc[1]&&enc[1].field){var encType=enc[0],field=enc[1].field;field&&axes[encType].forEach(function(axis){var domain=domains[field];!enc[1].domain&&axis.updateDomain(domain)})}}),axes}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),group_utils_this=void 0;function group_utils_slicedToArray(arr,i){return function group_utils_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function group_utils_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function group_utils_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function group_utils_toConsumableArray(arr){return function group_utils_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];return"".concat(axisName,"-axis-").concat(params.join("-"))},group_utils_headerCreator=function headerCreator(fields,fieldHeaders,TextCell,_ref2){var classPrefix=_ref2.classPrefix,labelManager=_ref2.labelManager;return fields.length>0?fields[0].map(function(cell,i){return new TextCell({type:"header",className:"".concat(classPrefix,"-grid-headers")},{labelManager:labelManager}).source(function getHeaderText(headers,index,rowLength){var header="";if(index===rowLength-1&&headers.length>rowLength){for(var i=index;i1||right.length>1)&&(borders.top=!0,borders.bottom=!0),borders}(leftRows,rightRows),showColBorders=function getColumnsBorders(top,bottom){var borders={left:!1,right:!1};return(top.length||bottom.length)&&(top[0]&&top[0].length>1||bottom[0]&&bottom[0].length>1)&&(borders.left=!0,borders.right=!0),borders}(topColumns,bottomColumns),showValueBorders=function getValueBorders(rows,columns){var borders={top:!0,left:!0,bottom:!0,right:!0},borderTypeRow=[constants_LEFT,constants_RIGHT],borderTypeCol=["top","bottom"];return rows.forEach(function(e,i){e[0]&&e[0].length?borders[borderTypeRow[i]]=!0:borders[borderTypeRow[i]]=!1}),columns.forEach(function(e,i){e.length?borders[borderTypeCol[i]]=!0:borders[borderTypeCol[i]]=!1}),borders}([leftRows,rightRows],[topColumns,bottomColumns]),valueMatrix.length>1&&(showValueBorders.top=!0,showValueBorders.bottom=!0),valueMatrix.length&&valueMatrix[0].length>1&&(showValueBorders.left=!0,showValueBorders.right=!0),{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}},group_utils_sortFacetFields=function sortFacetFields(facets,keys,config){var schema=[],sortInfo=[],sortConfig=config.sort;return facets.forEach(function(facet){var name="".concat(facet),facetSortConfig=sortConfig[name];facetSortConfig?sortInfo.push([name,facetSortConfig]):sortInfo.push([name,null]),schema.push(facet.getSchemaDef())}),new datamodel_default.a([[]].concat(group_utils_toConsumableArray(keys)),schema).getData({sort:sortInfo}).data};function matrix_model_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function matrix_model_objectSpread(target){for(var i=1;i0?formattedColKeys[0].map(function(col,i){return formattedColKeys.map(function(row){return row[i]})}):formattedColKeys}};function cell_creator_slicedToArray(arr,i){return function cell_creator_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function cell_creator_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function cell_creator_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cell_creator_toConsumableArray(arr){return function cell_creator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?rowProjections.length:1):(keys=columnKeys,length=colProjections.length>0?colProjections.length:1),keys=keys.map(function(arr){return arr.map(function(val){return resolver.valueParser()(val)})}),section.length&&headerFrom===type&&axis&&keys.length){var hContext={axis:axis,length:length,type:type},headers=[];index<2?(hContext.keys=keys,hContext.facet=facet.rows,headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)):(hContext.facet=facet.columns,hContext.keys=keys[0].map(function(key,i){return keys.map(function(e){return e[i]})}),headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)),selectionObj["".concat(type,"Headers")]=headers}else selectionObj["".concat(type,"Headers")]=null}),selectionObj},cell_creator_getAxisFields=function getAxisFields(projections){var fieldHolder=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return projections.reduce(function(acc,item){return[].concat(cell_creator_toConsumableArray(acc),cell_creator_toConsumableArray(item.reduce(function(ac,field){return field instanceof simple_var_SimpleVariable?[].concat(cell_creator_toConsumableArray(ac),[field.oneVar()]):ac},[])))},fieldHolder)},cell_creator_transformDataModel=function transformDataModel(dataModel,config,resolver){var groupedModel,fieldsConfig=dataModel.getFieldsConfig(),resolvedData=resolver.data(),groupBy=config.groupBy,suppliedLayers=config.suppliedLayers,facetsAndProjections=config.facetsAndProjections;if(resolvedData instanceof datamodel_default.a&&resolvedData.dispose(),groupedModel=dataModel.project(dataModel.getSchema().map(function(d){return d.name})),resolver.data(groupedModel),!groupBy.disabled){var allFields=function extractFields(facetsAndProjections,layerFields){var _ref6,fields=Object.values(facetsAndProjections).map(function(arr){var _ref4,_ref5,flattenArray=(_ref4=[]).concat.apply(_ref4,group_utils_toConsumableArray(arr));return(_ref5=[]).concat.apply(_ref5,group_utils_toConsumableArray(flattenArray.map(function(field){return field instanceof variable_Variable?field.getMembers():field})))});return(_ref6=[]).concat.apply(_ref6,group_utils_toConsumableArray(fields).concat(group_utils_toConsumableArray(layerFields)))}(facetsAndProjections,function getFieldsFromSuppliedLayers(suppliedLayerConfig,fieldsConfig){var _ref3,fields=[],encodingArr=suppliedLayerConfig.map(function(conf){return conf.encoding||{}});return fields=(fields=[].concat(group_utils_toConsumableArray(fields),[(_ref3=[]).concat.apply(_ref3,group_utils_toConsumableArray(encodingArr.map(function(enc){return Object.values(enc).map(function(d){return d.field})})))])).filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION})}(suppliedLayers,groupedModel.getFieldsConfig())),dimensions=allFields.filter(function(field){return getObjProp(fieldsConfig,field,"def","type")===dist_datamodel.FieldType.DIMENSION}),aggregationFns=groupBy.measures,measureNames=Object.keys(groupedModel.getFieldspace().getMeasure()),nearestAggFns=common_utils_retrieveNearestGroupByReducers.apply(void 0,[groupedModel].concat(cell_creator_toConsumableArray(measureNames))),resolvedAggFns=mergeRecursive(nearestAggFns,aggregationFns);groupedModel=groupedModel.groupBy(dimensions.length?dimensions:[""],resolvedAggFns).project(allFields)}return groupedModel=function sortDmTemporalFields(resolver,datamodel){var axisFields=[],projections=resolver.projections();axisFields=cell_creator_getAxisFields(projections.rowProjections,cell_creator_getAxisFields(projections.colProjections));var fieldConfig=datamodel.getFieldsConfig(),temporalFields=axisFields.reduce(function(acc,field){return"temporal"===fieldConfig[field].def.subtype?[].concat(cell_creator_toConsumableArray(acc),[[field]]):acc},[]);return temporalFields.length?datamodel.sort(temporalFields,{saveChild:!0}):datamodel}(resolver,groupedModel)},cell_creator_computeMatrices=function computeMatrices(context,config){var resolver=context.resolver,datamodel=context.datamodel,componentRegistry=context.componentRegistry,encoders=context.encoders,globalConfig=config.globalConfig,selection=config.selection,transform=config.transform,groupBy=globalConfig.autoGroupBy,labelManager=resolver.dependencies().smartlabel,fieldMap=datamodel.getFieldsConfig(),layerConfig=resolver.layerConfig(),registry=resolver.registry(),normalizedRows=resolver.horizontalAxis().fields,normalizedColumns=resolver.verticalAxis().fields,otherEncodings=resolver.optionalProjections(config,layerConfig),facetsAndProjections=resolver.getAllFields(),matrixGnContext={normalizedColumns:normalizedColumns,normalizedRows:normalizedRows,facetsAndProjections:facetsAndProjections,layers:layerConfig,fieldMap:fieldMap,otherEncodings:otherEncodings,encoders:encoders,facet:globalConfig.facet||{},axisFrom:globalConfig.axisFrom||{},selection:selection,resolver:resolver},cells={GeomCell:resolver.getCellDef(registry.GeomCell),AxisCell:resolver.getCellDef(registry.AxisCell),BlankCell:resolver.getCellDef(registry.BlankCell),TextCell:resolver.getCellDef(registry.TextCell)},isRowSizeEqual=group_utils_isDistributionEqual(normalizedRows),isColumnSizeEqual=group_utils_isDistributionEqual(normalizedColumns);resolver.colCells({}),resolver.rowCells({}),resolver.datamodelTransform(transform||{}),resolver.resetSimpleAxes();var newCacheMap={exitCellMap:resolver.cacheMaps().entryCellMap,entryCellMap:new Map};resolver.cacheMaps(newCacheMap);var valueCellContext={config:globalConfig,suppliedLayers:encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),resolver:resolver,cell:cells.GeomCell,encoder:encoders.simpleEncoder,newCacheMap:newCacheMap,detailFields:config.detail,retinalConfig:{color:config.color,size:config.size,shape:config.shape}},groupedModel=cell_creator_transformDataModel(datamodel,{facetsAndProjections:facetsAndProjections,suppliedLayers:valueCellContext.suppliedLayers,groupBy:groupBy},resolver),cellCreator=resolver.valueCellsCreator(valueCellContext),valueMatrixInfo=getMatrixModel(groupedModel,facetsAndProjections,cellCreator,globalConfig);!function removeExitCells(resolver){var _ref7,exitCells=resolver.cacheMaps().exitCellMap,store=resolver.store(),qualifiedStateProps=(_ref7=[]).concat.apply(_ref7,group_utils_toConsumableArray(visual_unit_VisualUnit.getQualifiedStateProps()).concat(group_utils_toConsumableArray(base_layer_BaseLayer.getQualifiedStateProps())));store.lockCommits(qualifiedStateProps),exitCells.forEach(function(placeholder){placeholder.remove()}),store.unlockCommits(qualifiedStateProps)}(resolver),resolver.cacheMaps().exitCellMap.clear(),resolver.valueMatrix(valueMatrixInfo.matrix);var _mutateAxesFromMap=function mutateAxesFromMap(cacheMaps,axes){var xAxes=null,yAxes=null,xAxesMap=cacheMaps.xAxesMap,yAxesMap=cacheMaps.yAxesMap,xAxisSet=axes.x,yAxisSet=axes.y;return xAxisSet&&xAxisSet.forEach(function(axisId){var xAxis=xAxesMap.get(axisId);(xAxes=xAxes||[]).push(xAxis)}),yAxisSet&&yAxisSet.forEach(function(axisId){var yAxis=yAxesMap.get(axisId);(yAxes=yAxes||[]).push(yAxis)}),{xAxes:xAxes,yAxes:yAxes}}(resolver.cacheMaps(),resolver.axes()),xAxes=_mutateAxesFromMap.xAxes,yAxes=_mutateAxesFromMap.yAxes;resolver.axes({x:xAxes,y:yAxes}),resolver.createUnits(componentRegistry,config);var _generateMatrices=function generateMatrices(context,matrices,cells,labelManager){var unitHeight=context.unitHeight,unitWidth=context.unitWidth,facetsAndProjections=context.facetsAndProjections,normalizedRows=context.normalizedRows,normalizedColumns=context.normalizedColumns,selection=context.selection,axisFrom=context.axisFrom,facet=context.facet,encoders=context.encoders,resolver=context.resolver,selectionObj=cell_creator_generatePlaceholders({fields:{rows:normalizedRows,columns:normalizedColumns},matrices:matrices,facetsAndProjections:facetsAndProjections,selection:selection,axisFrom:axisFrom,facet:facet,encoders:encoders,resolver:resolver},cells,labelManager),columnsPrimary=selectionObj.columnsPrimary,columnsSecondary=selectionObj.columnsSecondary,rowsPrimary=selectionObj.rowsPrimary,rowsSecondary=selectionObj.rowsSecondary,leftHeaders=selectionObj.leftHeaders,topHeaders=selectionObj.topHeaders,bottomHeaders=selectionObj.bottomHeaders,rightHeaders=selectionObj.rightHeaders,_map2=cell_creator_slicedToArray([rowsPrimary,rowsSecondary,columnsPrimary,columnsSecondary].map(function(d){return d?d.getObjects():[]}),4),rowPrime=_map2[0],rowSec=_map2[1],colPrime=_map2[2],colSec=_map2[3],_map4=cell_creator_slicedToArray([leftHeaders,rightHeaders].map(function(e){return e?e.getObjects().map(function(f){return f.getObjects()}):[]}),2),leftFacets=_map4[0],rightFacets=_map4[1],rowPriority=rowSec.length?1:-1;rowPrime.length&&rowPriority++;var colPriority=colSec.length?1:-1;colPrime.length&&colPriority++;var leftMatrix=leftFacets.length?leftFacets.map(function(d,i){return rowPrime[i]=rowPrime[i]?[rowPrime[i]]:[],[].concat(cell_creator_toConsumableArray(d),cell_creator_toConsumableArray(rowPrime[i]))}):rowPrime?rowPrime.map(function(d){return[d]}):[],rightMatrix=rowSec.length?rowSec.map(function(d,i){return[d].concat(cell_creator_toConsumableArray(rightFacets[i]||[]))}):rightFacets.length?rightFacets.map(function(d){return cell_creator_toConsumableArray(d)}):[],topMatrix=[];topHeaders&&topHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){topMatrix[i]=topMatrix[i]||[],topMatrix[i].push(x)})});colPrime.length&&topMatrix.push(colPrime);var bottomMatrix=[];colSec.length&&bottomMatrix.push(colSec);var currentBottomLength=bottomMatrix.length;bottomHeaders&&bottomHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){bottomMatrix[i+currentBottomLength]=bottomMatrix[i+currentBottomLength]||[],bottomMatrix[i+currentBottomLength].push(x)})});if(!leftMatrix.length&&!rightMatrix.length){var cell=new cells.BlankCell;cell.setAvailableSpace(unitWidth,unitHeight),leftMatrix=[[cell]]}if(!(topMatrix.length||bottomMatrix.length&&bottomMatrix[0].length)){var _cell=new cells.BlankCell;_cell.setAvailableSpace(unitWidth,unitHeight),bottomMatrix=[[_cell]]}return{rows:[leftMatrix,rightMatrix],columns:[topMatrix,bottomMatrix],selectionObj:selectionObj,colPriority:colPriority,rowPriority:rowPriority}}(matrixGnContext,{valuesMatrix:valueMatrixInfo,axesMatrix:resolver.axes()},cells,labelManager),rows=_generateMatrices.rows,columns=_generateMatrices.columns,selectionObj=_generateMatrices.selectionObj,rowPriority=_generateMatrices.rowPriority,colPriority=_generateMatrices.colPriority;return resolver.rowMatrix(rows),resolver.columnMatrix(columns),{rows:resolver.rowMatrix(),columns:resolver.columnMatrix(),values:resolver.valueMatrix(),isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,priority:{row:rowPriority,col:colPriority},selection:selectionObj,dataModels:{groupedModel:groupedModel,parentModel:datamodel}}},RESOLVER_PROPS={dependencies:{},units:{},datamodelTransform:{},layerConfig:{},matrixLayers:{},colCells:{},rowCells:{},rowMatrix:{},columnMatrix:{},valueMatrix:{},encoder:{},valueParser:{},data:{}};function matrix_resolver_slicedToArray(arr,i){return function matrix_resolver_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function matrix_resolver_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function matrix_resolver_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function matrix_resolver_toConsumableArray(arr){return function matrix_resolver_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?leftRows[0].map(blankCellCreator):[],right:rightRows.length>0?rightRows[0].map(blankCellCreator):[]},_map2=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return topCols.map(function(col,i){return i===topCols.length-1?headers[type]:footers[type]})}),2),topLeft=_map2[0],topRight=_map2[1];if(0===topCols.length){var _map4=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return bottomCols.map(function(col,i){return 0===i?headers[type]:footers[type]})}),2);bottomLeft=_map4[0],bottomRight=_map4[1]}else bottomLeft=bottomCols.map(function(){return leftRows.length>0?leftRows[0].map(blankCellCreator):[]}),bottomRight=bottomCols.map(function(){return rightRows.length>0?rightRows[0].map(blankCellCreator):[]});return lifeCycleManager.notify({client:[topLeft,topRight,bottomLeft,bottomRight],action:"initialized",formalName:"facet-headers"}),{topLeft:topLeft,topRight:topRight,bottomLeft:bottomLeft,bottomRight:bottomRight}}},{key:"getMatrices",value:function getMatrices(datamodel,config,componentRegistry,encoders){return cell_creator_computeMatrices({datamodel:datamodel,componentRegistry:componentRegistry,encoders:encoders,resolver:this},config)}},{key:"store",value:function store(){return arguments.length?(this._store=arguments.length<=0?void 0:arguments[0],this):this._store}},{key:"clear",value:function clear(){var cacheMaps=this._cacheMaps;for(var key in cacheMaps)cacheMaps[key].clear()}}]),MatrixResolver}();function value_matrix_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{},context=firebolt.context,type=context.constructor.type(),payload=config.payload,data=context.data(),metaData=context.metaData(),fieldType=metaData.getData().schema[0].type,propPayload={},sourceId=context._id;propPayload.action=action_behaviour_map_propagationBehaviourMap[action]||action,propPayload.sideEffects=propagationSideEffects[action],propPayload.sourceCanvas=context.canvasAlias();var isMutableAction=firebolt._actions.behavioural[propPayload.action].constructor.mutates();if(null===payload.criteria)propagationData=null;else{var entrySet=selectionSet.mergedEnter,values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.rawVal});if("step"===type||"discrete"===type&&"measure"===fieldType){var field=Object.keys(payload.criteria||{})[0];propagationData=(values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.range})).length?metaData.select(function(fields){for(var check=!1,i=0;i=values[i][0]&&fields[field].internalValue<=values[i][1]);i++);return check},{saveChild:!1}):null}else"gradient"===type?propagationData=getDataModelFromRange(metaData,payload.criteria):values.length?propagationData=function assembleModelFromIdentifiers(model,identifiers){var data,schema=[],fieldMap=model.getFieldsConfig();return identifiers.length?function(){for(var fields=identifiers[0],len=fields.length,i=0;i=drawingInfMeasure+offset?[axisScale.invert(drawingInfMeasure+offset-selectionBoxMeasure),axisScale.invert(drawingInfMeasure+offset)]:subjectStartPoint-offset1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-fadeout"),!0),classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)},brighten:function brighten(set){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-brighten"),!0),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-brighten"),!1)}}};function legend_highlighter_typeof(obj){return(legend_highlighter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_highlighter_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[options.strategy||this._strategy])(selectionSet,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),legend_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(context,value){var measurement=mergeRecursive(context._measurement,value);return["padding","border","margin"].forEach(function(space){measurement[space]=Math.min(measurement[space]>0?measurement[space]:0,.1*measurement.maxWidth,.1*measurement.maxHeight)}),measurement}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.resetLogicalSpace(),context.store().commit("range",value),value}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(context,value){return mergeRecursive(context._title||{},value)}},labelManager:{},minTickDistance:{},valueParser:{defaultValue:function defaultValue(val){return val}}},ALIGN_HORIZONTAL="horizontal",ALIGN_VERTICAL="vertical",DEFAULT_MEASUREMENT={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},LEGEND_TITLE={text:"",orientation:function orientation(pos){return"left"===pos||"right"===pos?"left":"center"}},legend_defaults_DEFAULT_CONFIG={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(val,i,data,context){return context.valueParser()(val)}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},defaults_ICON_MAP=function ICON_MAP(icon){return icon&&"string"==typeof icon?common_utils_getSymbol(icon):icon};function legend_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legend_helper_getScaleInfo=function getScaleInfo(scale){var scaleType=scale.constructor.type();return{scaleType:scaleType,domain:scale.uniqueValues(),steps:scale.config().stops||1,scaleFn:SCALE_FUNCTIONS[scaleType]}},legend_helper_getInterpolatedArrayData=function getInterpolatedArrayData(domainForLegend,scaleParams){var requiredWidth,requiredHeight,upperBound=domainForLegend[domainForLegend.length-1],minTickDiff=Math.ceil(domainForLegend[1]-domainForLegend[0]),maxTickDiff=Math.ceil(upperBound-domainForLegend[0]),alignment=scaleParams.alignment,smartLabelCalc=scaleParams.smartLabel,availableSpace=scaleParams.measures,minimumTickSize=scaleParams.minTickDistance,_smartLabelCalc$getOr=smartLabelCalc.getOriSize(upperBound),tickDimHeight=_smartLabelCalc$getOr.height,tickDimWidth=_smartLabelCalc$getOr.width;return Number.isInteger(upperBound)||(upperBound=upperBound.toFixed(2)),minTickDiff=minTickDiff<1?1:minTickDiff,requiredWidth=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*(tickDimWidth+minimumTickSize.width),requiredWidth-=Math.abs(maxTickDiff),requiredHeight=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*tickDimHeight,requiredHeight-=Math.abs(maxTickDiff),domainForLegend=function getcomputedArray(computationhelper,requiredMeasure,availableMeasure,domainForLegend){var currentTickValue,nextTickValue,upperBound=domainForLegend[domainForLegend.length-1],param=computationhelper.measureParam,smartLabelCalc=computationhelper.smartLabelCalc,pixelPerTick=availableMeasure[param]/upperBound;if(availableMeasure[param]>=requiredMeasure[param])return domainForLegend;currentTickValue=smartLabelCalc.getOriSize(domainForLegend[0])[param];for(var i=1;i0?titleSpace.height+effPadding:0,titleWidth=titleSpace.width+effPadding,labelSpaces=this.getLabelSpaces(effPadding,align),_computeItemSpaces=function computeItemSpaces(config,measures,data){var totalHeight=0,totalWidth=0,maxItemSpaces={width:0,height:0},effPadding=measures.effPadding,titleWidth=measures.titleWidth,labelSpaces=measures.labelSpaces,titleHeight=measures.titleHeight,maxWidth=measures.maxWidth,item=config.item,align=config.align,icon=item.icon,textOrientation=item.text.orientation,itemSpaces=[],iconSpaces=[],maxIconWidth=0;return labelSpaces.forEach(function(labelSpace,i){var itemSpace={width:0,height:0},iconSpace={width:0,height:0},datum=data[i]||{};"left"===textOrientation||"right"===textOrientation?(labelSpace.width+=effPadding,iconSpace.width=(datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),itemSpace.width=labelSpace.width+maxIconWidth,labelSpace.height=Math.max(labelSpace.height,icon.height)+effPadding,iconSpace.height=labelSpace.height,itemSpace.height=labelSpace.height):(labelSpace.width=Math.max(labelSpace.width,datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,iconSpace.width=labelSpace.width,itemSpace.width=labelSpace.width,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),labelSpace.height+=effPadding,iconSpace.height=icon.height+effPadding,itemSpace.height=labelSpace.height+iconSpace.height),"horizontal"===align?totalHeight=Math.max(totalHeight,itemSpace.height):(totalHeight+=itemSpace.height,totalWidth=Math.max(totalWidth,itemSpace.width,titleWidth)),maxItemSpaces={width:Math.max(itemSpace.width,maxItemSpaces.width),height:Math.max(itemSpace.height,maxItemSpaces.height)},itemSpaces.push(itemSpace),iconSpaces.push(iconSpace)}),itemSpaces.forEach(function(itemSpace,i){if("horizontal"===align)itemSpace.height=totalHeight,iconSpaces[i].width=maxIconWidth,"left"===textOrientation||"right"===textOrientation?(labelSpaces[i].height=totalHeight,iconSpaces[i].height=totalHeight,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth):(labelSpaces[i].width=maxIconWidth,itemSpaces[i].width=maxIconWidth,labelSpaces[i].width=maxIconWidth),totalWidth=Math.max(totalWidth+itemSpaces[i].width);else if(itemSpace.width=Math.max(totalWidth,maxWidth),"top"===textOrientation||"bottom"===textOrientation)labelSpaces[i].width=totalWidth,iconSpaces[i].width=totalWidth,maxIconWidth=totalWidth;else{var labelWidth=labelSpaces[i].width,newLabelWidth=maxItemSpaces.width-maxIconWidth;iconSpaces[i].width=maxIconWidth,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth,labelSpaces[i].width=Math.max(labelWidth,newLabelWidth),totalWidth=Math.max(totalWidth,itemSpace.width)}}),totalWidth=Math.ceil(Math.max(totalWidth,titleWidth))+effPadding,totalHeight+=titleHeight+effPadding,{totalHeight:totalHeight=Math.ceil(totalHeight),totalWidth:totalWidth,itemSpaces:itemSpaces,iconSpaces:iconSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth}}(this.config(),{effPadding:effPadding,titleWidth:titleWidth,labelSpaces:labelSpaces,titleHeight:titleHeight,maxWidth:maxWidth,maxHeight:maxHeight},this.data()),totalHeight=_computeItemSpaces.totalHeight,totalWidth=_computeItemSpaces.totalWidth,itemSpaces=_computeItemSpaces.itemSpaces,iconSpaces=_computeItemSpaces.iconSpaces,maxItemSpaces=_computeItemSpaces.maxItemSpaces,maxIconWidth=_computeItemSpaces.maxIconWidth;return this.measurement({width:Math.max(totalWidth,width)+effMargin+effBorder,height:Math.max(totalHeight,height)+effMargin+effBorder,labelSpaces:labelSpaces,iconSpaces:iconSpaces,itemSpaces:itemSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth,titleSpaces:{width:Math.min(maxWidth,this.measurement().width)-effMargin-effBorder,height:titleHeight}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(renderer_utils_getSmartComputedStyle(renderer_utils_selectElement("body"),"".concat(this.config().classPrefix,"-legend-title"))),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(container){var _this$measurement2=this.measurement(),titleSpaces=_this$measurement2.titleSpaces,border=_this$measurement2.border,padding=_this$measurement2.padding,width=_this$measurement2.width,maxWidth=_this$measurement2.maxWidth,_this$config3=this.config(),borderStyle=_this$config3.borderStyle,borderColor=_this$config3.borderColor;return function titleCreator(container,title,measurement,config){var titleWidth=Math.min(measurement.maxWidth,measurement.width),titleContainer=makeElement(container,"table",[1],"".concat(config.classPrefix,"-legend-title")).style("width","".concat(titleWidth,"px")).style("height","".concat(measurement.height,"px")).style("border-bottom","".concat(measurement.border,"px ").concat(config.borderStyle," ").concat(config.borderColor)).style("text-align",title.orientation instanceof Function?title.orientation(config.position):title.orientation);return makeElement(titleContainer,"td",[1],"".concat(config.classPrefix,"-legend-title-text")).style("width","".concat(titleWidth,"px")).style("max-width","".concat(titleWidth,"px")).style("height","100%").style("line-height",1).style("padding","".concat(measurement.padding,"px")).text(title.text).style("overflow-x","scroll").node()}(container,this.title(),{height:titleSpaces.height,width:width,maxWidth:maxWidth,border:border,padding:padding,borderStyle:borderStyle,borderColor:borderColor},this.config())}},{key:"render",value:function render(){var marginPosition,firebolt=this.firebolt(),_this$config4=this.config(),classPrefix=_this$config4.classPrefix,borderStyle=_this$config4.borderStyle,borderColor=_this$config4.borderColor,position=_this$config4.position,_this$measurement3=this.measurement(),maxWidth=_this$measurement3.maxWidth,maxHeight=_this$measurement3.maxHeight,width=_this$measurement3.width,height=_this$measurement3.height,margin=_this$measurement3.margin,border=_this$measurement3.border,legendContainer=makeElement(renderer_utils_selectElement(this.mount()),"div",[1],"".concat(classPrefix,"-legend-box"));switch(position){case"top":marginPosition="margin-".concat("bottom");break;case"left":marginPosition="margin-".concat("right");break;case"bottom":marginPosition="margin-".concat("top");break;default:marginPosition="margin-".concat("left")}return legendContainer.classed("".concat(classPrefix,"-legend-box-").concat(this._id),!0),legendContainer.style("float","left"),legendContainer.style("width","".concat(Math.min(maxWidth,width)-2*margin,"px")).style("height","".concat(Math.min(maxHeight,height)-2*margin,"px")).style("".concat(marginPosition),"".concat(margin,"px")).style("border","".concat(border,"px ").concat(borderStyle," ").concat(borderColor)),this.legendContainer(legendContainer.node()),this.renderTitle(legendContainer),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){var fieldName=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},fieldName,data.range):[[fieldName],[data.rawVal]]}}],[{key:"create",value:function create(dependencies){return new SimpleLegend(dependencies)}},{key:"defaultConfig",value:function defaultConfig(){return legend_defaults_DEFAULT_CONFIG}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENT}}]),SimpleLegend}();function position_config_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legendOrientation=(position_config_defineProperty(_legendOrientation={},"horizontal",{datasets:function datasets(data){return{row:[1],column:data}},itemContainerMeasures:function itemContainerMeasures(measurement){var itemSpaces=measurement.itemSpaces,width=measurement.width;return{row:{width:"".concat(width,"px"),padding:"".concat(0,"px")},column:{width:function width(d,i){return"".concat(itemSpaces[i].width,"px")},padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces;return{iconHeight:measurement.height,iconWidth:maxItemSpaces.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(_legendOrientation,"vertical",{datasets:function datasets(data){return{row:data,column:function column(d){return[d]}}},itemContainerMeasures:function itemContainerMeasures(measurement,config){var width=measurement.width,padding=config.padding;return{row:{width:"".concat(width,"px"),padding:"".concat(padding,"px")},column:{width:"".concat(width,"px"),padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces,width=measurement.width;return{iconHeight:maxItemSpaces.height,iconWidth:width,stepPadding:{horizontal:!1,vertical:!0}}}}),_legendOrientation),positionConfig=(position_config_defineProperty(_positionConfig={},"left",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"right",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"top",legendOrientation.horizontal),position_config_defineProperty(_positionConfig,"bottom",legendOrientation.horizontal),_positionConfig),alignmentMap=(position_config_defineProperty(_alignmentMap={},"left","end"),position_config_defineProperty(_alignmentMap,"right","start"),position_config_defineProperty(_alignmentMap,"top","center"),position_config_defineProperty(_alignmentMap,"bottom","center"),_alignmentMap),itemStack=(position_config_defineProperty(_itemStack={},"left",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"right",["shape",VALUE]),position_config_defineProperty(_itemStack,"top",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"bottom",["shape",VALUE]),_itemStack),renderer_createLegendSkeleton=function createLegendSkeleton(context,container,classPrefix,data){var gradWidth,gradHeight,maxGradHeight,maxGradWidth,measurement=context.measurement(),margin=measurement.margin,border=measurement.border,titleSpaces=measurement.titleSpaces,width=measurement.width,height=measurement.height,maxWidth=measurement.maxWidth,maxHeight=measurement.maxHeight;gradHeight=height-(titleSpaces.height+2*margin+2*border),gradWidth=width-(2*margin+2*border),maxGradHeight=maxHeight-(titleSpaces.height+2*margin+2*border),maxGradWidth=maxWidth-(2*margin+2*border);var legendBody=makeElement(container,"div",[1],"".concat(classPrefix,"-legend-body"));return legendBody.select(".".concat(classPrefix,"-legend-overflow")).remove(),maxGradWidth&&maxGradWidth4)}(shape)?shape:defaults_ICON_MAP(shape).size(size)(),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}return d[1]="circle",createShape(d,elem,"circle")}(datum,makeElement(svg,"g",[datum[1]],"".concat(classPrefix,"-legend-icon")),datum[3]?"circle":"square",iconWidth,iconHeight).attr("transform","translate(".concat(maxIconWidth/2-padding," ").concat(iconHeight/2,")")).attr("fill",datum[2]||color):makeElement(svg,"rect",[datum[1]],"".concat(classPrefix,"-legend-icon")).attr("x",0).attr("y",0).attr("width",maxIconWidth).attr("height",iconHeight).attr("fill",datum[2]||color)};function discrete_legend_typeof(obj){return(discrete_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function discrete_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function discrete_legend_toConsumableArray(arr){return function discrete_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainForLegend.push(domain[1]),domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b}),domainForLegend=legend_helper_getInterpolatedArrayData(domainForLegend,scaleParams)):domainForLegend=legend_helper_getInterpolatedData(domain,steps-1,scaleParams),(domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=domainForLegend[i];return gradient_legend_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](Math.floor(ele))),gradient_legend_defineProperty(_ref,"value",+value.toFixed(2)),gradient_legend_defineProperty(_ref,"id",i),_ref}).filter(function(d){return null!==d.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(effPadding){this.config({item:{text:{orientation:this.config().position}}});var axis=function createAxis(context){var data=context.data(),align=context.config().align,AxisCell=context._cells.AxisCell,newAxis=new continous_axis_ContinousAxis({id:"legend-".concat(context._id),orientation:align===ALIGN_VERTICAL?"right":"bottom",style:context._computedStyle,nice:!1,showAxisName:!1,tickValues:data.map(function(d){return d.value}),fixedBaseline:!1,labels:{rotation:null}},{labelManager:context._labelManager});return newAxis.domain(getGradientDomain(data)),newAxis.range([1,1]),(new AxisCell).source(newAxis).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),axisSpace=axis.getLogicalSpace(),space={width:axisSpace.width-effPadding,height:axisSpace.height-effPadding},axisDomainLength=axis.source().domain().length,labelSpaces=new Array(axisDomainLength).fill(space);return this.axis(axis),labelSpaces}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var firebolt=this.firebolt(),legendContainer=gradient_legend_get(gradient_legend_getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(context,container){var gradHeight,gradWidth,_context$config2=context.config(),align=_context$config2.align,classPrefix=_context$config2.classPrefix,item=_context$config2.item,data=context.data(),_createLegendSkeleton=gradient_helper_createLegendSkeleton(container,classPrefix,data),legendContainer=_createLegendSkeleton.legendContainer,legendGradSvg=_createLegendSkeleton.legendGradSvg,legendGradCont=_createLegendSkeleton.legendGradCont,linearGradient=_createLegendSkeleton.linearGradient,legendRect=_createLegendSkeleton.legendRect,labelDim=context.axis().source().getAxisDimensions().tickDimensions,_context$measurement=context.measurement(),padding=_context$measurement.padding,margin=_context$measurement.margin,border=_context$measurement.border,titleSpaces=_context$measurement.titleSpaces,maxItemSpaces=_context$measurement.maxItemSpaces,maxHeight=_context$measurement.maxHeight,maxWidth=_context$measurement.maxWidth,height=_context$measurement.height,width=_context$measurement.width,gradientDimensions={};gradHeight=Math.floor(Math.min(height,maxHeight)-(titleSpaces.height+2*margin+2*border)),gradWidth=Math.floor(Math.min(width,maxWidth)-(2*margin+2*border)),align===ALIGN_HORIZONTAL?(gradientDimensions.height=item.icon.height,gradientDimensions.width=gradWidth-2*padding-labelDim.width/2,linearGradient.attr("x2","100%").attr("y1","0%"),legendGradCont.attr("transform","translate( ".concat(labelDim.width/2," 0)")),gradient_helper_renderAxis(context,legendContainer,gradHeight-item.icon.height-padding,gradWidth-2*padding-1),applyStyle(legendContainer,{height:"".concat(maxItemSpaces.height+border+padding,"px"),width:"".concat(Math.min(width,maxWidth),"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height),legendRect.attr("width",gradientDimensions.width-labelDim.width/2)):(gradientDimensions.height=gradHeight-2*padding-labelDim.height/2,gradientDimensions.width=item.icon.width,linearGradient.attr("x2","0%").attr("y1","100%"),legendGradCont.attr("transform","translate(0 ".concat(labelDim.height/2,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-2*padding-1,gradWidth-item.icon.width-2*padding),applyStyle(legendContainer,{height:"".concat(Math.min(height,maxHeight),"px"),width:"".concat(maxWidth,"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height-labelDim.height/2),legendRect.attr("width",gradientDimensions.width)),applyStyle(legendGradSvg,{height:"".concat(gradientDimensions.height,"px"),width:"".concat(gradientDimensions.width,"px")}),applyStyle(legendRect,{fill:"url(#linear-gradient)"}),legendGradSvg.attr("height",gradientDimensions.height),legendGradSvg.attr("width",gradientDimensions.width),context.measurement({gradientDimensions:gradientDimensions}),context._legendGradientSvg=legendGradSvg}(this,legendContainer),legendContainer.selectAll("div").style("float","left"),firebolt.mapActionsAndBehaviour(),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){return[[this.fieldName()],[data.value]]}}],[{key:"create",value:function create(dependencies){return new GradientLegend(dependencies)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}();function step_legend_typeof(obj){return(step_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function step_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function step_legend_toConsumableArray(arr){return function step_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&(domainBounds.upper=["".concat(formatter.bounds.upper," ").concat(steps[steps.length-1])])):domainLeg=legend_helper_getInterpolatedData(domain,steps,scaleParams),domainLeg=(domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=null;return i0&&void 0!==arguments[0]?arguments[0]:{},registrableComponents=this._registrableComponents,mergedPolicy=mergeRecursive(mergeRecursive({},function defaultPolicy(registrableComponents){var aliases=registrableComponents.map(function(comp){return comp.alias()});return{behaviours:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}}}}(registrableComponents)),policy);return registrableComponents.forEach(function(canvas){canvas.firebolt().crossInteractionPolicy(mergedPolicy)}),this}}]),ActionModel}()),TITLE_CONFIG={position:"top",align:"left",padding:4,className:"".concat("muze","-title-container")},SUB_TITLE_CONFIG={position:"top",align:"left",padding:16,maxLines:2,className:"".concat("muze","-subtitle-container")},MESSAGE_CONFIG={className:"".concat("muze","-message-container")};function local_options_typeof(obj){return(local_options_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function local_options_slicedToArray(arr,i){return function local_options_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function local_options_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function local_options_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function canvas_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options_localOptions=(canvas_local_options_defineProperty(_localOptions={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"layers",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),_localOptions),canvasOptions=(canvas_local_options_defineProperty(_canvasOptions={},"title",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref){var _ref2=local_options_slicedToArray(_ref,2),arg1=_ref2[0],arg2=_ref2[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref3){var _ref4=local_options_slicedToArray(_ref3,2),title=_ref4[0],titleConfig=_ref4[1],t=title;"string"!=typeof title&&title||(t=function t(){return title});var defConfig=mergeRecursive({},TITLE_CONFIG);return[t,mergeRecursive(defConfig,titleConfig)]}}}),canvas_local_options_defineProperty(_canvasOptions,"subtitle",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref5){var _ref6=local_options_slicedToArray(_ref5,2),arg1=_ref6[0],arg2=_ref6[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref7){var _ref8=local_options_slicedToArray(_ref7,2),subtitle=_ref8[0],subtitleConfig=_ref8[1],sub=subtitle;"string"!=typeof subtitle&&subtitle||(sub=function sub(){return subtitle});var defConfig=mergeRecursive({},SUB_TITLE_CONFIG);return[sub,mergeRecursive(defConfig,subtitleConfig)]}}}),_canvasOptions);function layoutComponent_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isGridComponent=arguments.length>3&&void 0!==arguments[3]&&arguments[3],cut="",componentRatioWidth=1,leftHeight=0,leftWidth=0;if(!component)return{first:definitionModel,second:definitionModel};var _component$getLogical=component.getLogicalSpace(),componentHeight=_component$getLogical.height,componentWidth=_component$getLogical.width,position=component.position();"top"===position||"bottom"===position?(cut="h",componentRatioWidth=componentHeight/definitionModel.remainingHeight(),leftHeight=definitionModel.remainingHeight()-componentHeight,leftWidth=definitionModel.remainingWidth()):(cut="v",componentRatioWidth=componentWidth/definitionModel.remainingWidth(),leftWidth=definitionModel.remainingWidth()-componentWidth,leftHeight=definitionModel.remainingHeight()),leftOvercomponentRationWidth=1-componentRatioWidth,definitionModel.cut(cut);var firstLaneConfig={host:component.name(),cut:null,ratioWeight:componentRatioWidth,preferred:!isGridComponent&&isPreferred,lanes:[]},firstLane=new DefinitionModel(firstLaneConfig);firstLane.remainingHeight(componentHeight),firstLane.remainingWidth(componentWidth);var secondLane=new DefinitionModel({host:null,cut:null,ratioWeight:leftOvercomponentRationWidth,preferred:!isGridComponent&&!isPreferred,lanes:[]});return secondLane.remainingHeight(leftHeight),secondLane.remainingWidth(leftWidth),isPreferred?definitionModel.lanes([firstLane]):"top"===position||"left"===position?definitionModel.lanes([firstLane,secondLane]):definitionModel.lanes([secondLane,firstLane]),{first:firstLane,second:secondLane}}function tree_toConsumableArray(arr){return function tree_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?matrix[0]:matrix[1];return isTransposed?(joinedMatrix=matrix[0].length>0?utils_toConsumableArray(matrix[0]):[],joinedMatrix=matrix[1].length>0?[].concat(utils_toConsumableArray(joinedMatrix),utils_toConsumableArray(matrix[1])):joinedMatrix):joinedMatrix=joinedMatrix.map(function(row,rowIndex){var rowData=[];return matrix[0].length>0&&(rowData=utils_toConsumableArray(matrix[0][rowIndex])),matrix[1].length>0&&(rowData=[].concat(utils_toConsumableArray(rowData),utils_toConsumableArray(matrix[1][rowIndex]))),rowData}),joinedMatrix},utils_computeLogicalSpace=function computeLogicalSpace(){var item=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},config=arguments.length>1?arguments[1]:void 0,maxMeasures=arguments.length>2?arguments[2]:void 0,_config$isTransposed=config.isTransposed,isTransposed=void 0!==_config$isTransposed&&_config$isTransposed,unitMeasures=config.unitMeasures,_getMeasureInfo=function getMeasureInfo(isTransposed){return isTransposed?{firstMeasure:enums_constants_HEIGHT,secondMeasure:"width"}:{firstMeasure:"width",secondMeasure:enums_constants_HEIGHT}}(isTransposed),firstMeasure=_getMeasureInfo.firstMeasure,secondMeasure=_getMeasureInfo.secondMeasure,values=item.values,minMeasures=function getMinMeasures(isTransposed,unitMeasures){return isTransposed?{height:0,width:unitMeasures.width}:{height:unitMeasures.height,width:0}}(isTransposed,unitMeasures);if(values[0].key){var _logicalSpace,logicalSpace=(utils_defineProperty(_logicalSpace={},firstMeasure,0),utils_defineProperty(_logicalSpace,secondMeasure,0),_logicalSpace);return values.forEach(function(valueItem){var space=computeLogicalSpace(valueItem,config,maxMeasures);logicalSpace[firstMeasure]=Math.max(logicalSpace[firstMeasure],space[firstMeasure],minMeasures[firstMeasure]),logicalSpace[secondMeasure]+=+space[secondMeasure]}),item.space=logicalSpace,logicalSpace}return function getLogicalSpace(item,measures,minMeasures){var _ref,maxMeasure=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],firstMeasure=measures.firstMeasure,secondMeasure=measures.secondMeasure,firstMeasureValue=0,secondMeasureValue=0;return item.values.forEach(function(valueArray){var _item$space,fMeasure=0,sMeasure=0;valueArray.forEach(function(placeholder,colIndex){placeholder.setAvailableSpace();var space=placeholder.getLogicalSpace(),minSecondMeasure=placeholder.getMinMeasures(minMeasures[secondMeasure]);sMeasure=Math.max(sMeasure,+space[secondMeasure],minSecondMeasure),maxMeasure[colIndex]=Math.max(maxMeasure[colIndex]||0,space[firstMeasure]),fMeasure+=+maxMeasure[colIndex]}),secondMeasureValue+=sMeasure,firstMeasureValue=Math.max(firstMeasureValue,fMeasure),item.space=(utils_defineProperty(_item$space={},secondMeasure,Math.ceil(secondMeasureValue)),utils_defineProperty(_item$space,firstMeasure,Math.ceil(firstMeasureValue)),_item$space)}),utils_defineProperty(_ref={},secondMeasure,secondMeasureValue),utils_defineProperty(_ref,firstMeasure,firstMeasureValue),_ref}(item,{firstMeasure:firstMeasure,secondMeasure:secondMeasure},minMeasures,maxMeasures)},createMatrixEachLevel=function createMatrixEachLevel(item,isTransposed){if(item.values[0].key){var arr=[];return item.values.forEach(function(child){isTransposed?createMatrixEachLevel(child,isTransposed).forEach(function(e,i){var _arr$i;arr[i]=arr[i]||[],(_arr$i=arr[i]).push.apply(_arr$i,utils_toConsumableArray(e))}):arr.push.apply(arr,utils_toConsumableArray(createMatrixEachLevel(child,isTransposed)))}),item.matrix=arr,arr}return item.matrix=isTransposed?item.values[0].map(function(col,colIndex){return item.values.map(function(row){return row[colIndex]})}):item.values,item.matrix},extraCellsRemover=function extraCellsRemover(arr,beg,end){return arr.slice(beg,-end)},visual_matrix_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},visual_matrix_default_config_defaultConfig={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]};function visual_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=matrix[0]||[],this._secondaryMatrix=matrix[1]||[],this._maxMeasures=[],this._availableSpace={},generateGetterSetters(this,visual_matrix_props_PROPS);var defCon=Object.assign({},this.constructor.defaultConfig());this.config(mergeRecursive(defCon,config)),this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],this.config())}return function visual_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&visual_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&visual_matrix_defineProperties(Constructor,staticProps),Constructor}(VisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"computeViewableSpaces",value:function computeViewableSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"removeExtraCells",value:function removeExtraCells(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getPriorityDistribution",value:function getPriorityDistribution(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"calculateDepth",value:function calculateDepth(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeSpaces",value:function redistributeSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeViewSpaces",value:function redistributeViewSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getCellDimensions",value:function getCellDimensions(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{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 _createTree2=function createTree(context){var matrixTree={},lastLevelKey=0,facet="primary",nestFn=utils_nest(),keys=[],layoutMatrix=context._layoutMatrix,primaryMatrix=context.primaryMatrix(),secondaryMatrix=context.secondaryMatrix(),_context$config=context.config(),isTransposed=_context$config.isTransposed,breakPage=_context$config.breakPage;if(isTransposed){if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var _i2=0;_i20){for(var primaryMatrixLength=primaryMatrix.length,_i3=secondaryMatrix.length-1;_i3>0;_i3--)keys.push(_i3+primaryMatrixLength);keys.push(primaryMatrixLength),"primary"===facet&&(lastLevelKey=primaryMatrixLength)}var newMatrix;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),newMatrix=layoutMatrix[0].map(function(col,colIndex){return layoutMatrix.map(function(row){return row[colIndex]})}),matrixTree=nestFn.entries(newMatrix)}else{if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var i=0;i0){for(var keyLength=primaryMatrix.length>0?primaryMatrix[0].length:0,_i=secondaryMatrix[0].length-1;_i>0;_i--)keys.push(_i+keyLength);keys.push(keyLength),"primary"===facet&&(lastLevelKey=keyLength)}else lastLevelKey=primaryMatrix.length>0?primaryMatrix[0].length-1:0;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),matrixTree=nestFn.entries(layoutMatrix)}return{tree:matrixTree,lastLevelKey:lastLevelKey}}(this),tree=_createTree2.tree,lastLevelKey=_createTree2.lastLevelKey;return this._lastLevelKey=lastLevelKey,tree}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(width,height){this.availableSpace({width:width,height:height});var tree=this.tree(),heightMeasures=this.populateMaxMeasures(enums_constants_HEIGHT,tree),widthMeasures=this.populateMaxMeasures("width",tree),depth=this.calculateDepth(widthMeasures,heightMeasures);return this.viewableMatrix=this.createViewPortMatrix(depth),this.viewableMeasures=this.redistributeSpaces(width,height),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(type,matrixTree){var _this=this,depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,measures=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(measures[depth]=Math.max(measures[depth]||0,matrixTree.space[type]),matrixTree.values){var childDepth=depth+1;matrixTree.values.forEach(function(child){child.space&&(measures=_this.populateMaxMeasures(type,child,childDepth,measures))})}return measures}},{key:"getViewableSpaces",value:function getViewableSpaces(){return this.viewableMeasures}},{key:"getViewableMatrices",value:function getViewableMatrices(){return this.viewableMatrix}},{key:"createViewPortMatrix",value:function createViewPortMatrix(depth){var arr=[];return function createMatrixInstances(){var arr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],depth=arguments.length>1?arguments[1]:void 0,matrixInfo=arguments.length>2?arguments[2]:void 0,layout=arguments.length>3?arguments[3]:void 0,breakPointer=layout._breakPointer,isTransposed=layout.config().isTransposed,tree=matrixInfo.tree,layoutMatrix=matrixInfo.layoutMatrix;if(0===depth){var brokenMatrix=function breakMatrix(matrix,isTransposed,breakPointer){var primaryMatrix=[],secondaryMatrix=[];return isTransposed?matrix.forEach(function(row,rowIndex){rowIndex>=breakPointer?secondaryMatrix.push(row):primaryMatrix.push(row)}):matrix.forEach(function(row,rowIndex){row.forEach(function(column,columnIndex){columnIndex>=breakPointer?(secondaryMatrix[rowIndex]=secondaryMatrix[rowIndex]||[],secondaryMatrix[rowIndex].push(column)):(primaryMatrix[rowIndex]=primaryMatrix[rowIndex]||[],primaryMatrix[rowIndex].push(column))})}),[primaryMatrix,secondaryMatrix]}(tree.matrix,isTransposed,breakPointer);return arr.push({matrix:tree.matrix,primaryMatrix:brokenMatrix[0],secondaryMatrix:brokenMatrix[1],space:tree.space}),arr}var nextLevel=depth-1;return tree.values.forEach(function(e){createMatrixInstances(arr,nextLevel,{tree:e,layoutMatrix:layoutMatrix},layout)}),arr}(arr,depth,this.removeExtraCells(),this),arr}}],[{key:"defaultConfig",value:function defaultConfig(){return visual_matrix_default_config_defaultConfig}}]),VisualMatrix}();function row_matrix_typeof(obj){return(row_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function row_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function row_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RowVisualMatrix),(_this=row_matrix_possibleConstructorReturn(this,row_matrix_getPrototypeOf(RowVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length>0?matrix[0][0].length:0,_this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],_this.config()),_this._tree={key:ROW_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function row_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&row_matrix_setPrototypeOf(subClass,superClass)}(RowVisualMatrix,visual_matrix_VisualMatrix),function row_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&row_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&row_matrix_defineProperties(Constructor,staticProps),Constructor}(RowVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!1),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),widths=_this2$getCellDimensi.widths,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=[height,height],columnMeasures=widths;return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=extraCellsRemover(tree.matrix,begCellLen,endCellLen),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var remainingAvailWidth,remainingWidth,cWidths=[],conditions=[],maxPrioritySpace=0,matrix=measures.matrix,availableWidth=measures.width,maxWidths=measures.maxMeasures,currentWidth=measures.maxWidth,height=measures.height,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length?this.primaryMatrix()[0].length:0,dist=[];remainingAvailWidth=availableWidth,remainingWidth=currentWidth,(conditions=2===priority?[primaryMatrixLength-1,primaryMatrixLength]:0===priority?[primaryMatrixLength-1]:[primaryMatrixLength]).forEach(function(i){dist[i]=maxWidths[i],maxPrioritySpace+=maxWidths[i],remainingAvailWidth-=dist[i],remainingWidth-=dist[i]}),matrix[0].forEach(function(e,i){-1===conditions.indexOf(i)&&(dist[i]=remainingAvailWidth*(maxWidths[i]/remainingWidth))}),matrix.forEach(function(row){return row.forEach(function(col,cIdx){-1===conditions.indexOf(cIdx)?(col.setAvailableSpace(dist[cIdx],height),cWidths[cIdx]=Math.max(cWidths[cIdx]||0,Math.floor(col.getLogicalSpace().width))):cWidths[cIdx]=0})});var prioritySpace=availableWidth-cWidths.reduce(function(t,n){return t+n});return prioritySpace<0?cWidths=cWidths.map(function(){return 0}):conditions.forEach(function(i){cWidths[i]=Math.floor(prioritySpace*(dist[i]/maxPrioritySpace||1))}),cWidths}},{key:"calculateDepth",value:function calculateDepth(widthMeasures,heightMeasures){var i,height=this.availableSpace().height;for(i=0;i0?logicalWidths:maxMeasures.map(function(){return 0}),rHeights=function getDistributedHeight(context){var heightWithoutGutter,distSum=0,gutterSum=0,isTransposed=context.isTransposed,distribution=context.distribution,availableHeight=context.availableHeight,height=context.height,isDistributionEqual=context.isDistributionEqual,gutter=context.gutter,matrix=context.matrix,cIdx=context.cIdx;distribution&&void 0!==distribution[0]&&(distSum=distribution.reduce(function(t,n){return t+=n})),gutter&&void 0!==gutter[0]&&(gutterSum=gutter.reduce(function(t,n){return t+=n})),heightWithoutGutter=availableHeight-Math.floor(availableHeight*gutterSum);var colLen=matrix.length;return matrix.map(function(row,rIdx){var space=row[cIdx].getLogicalSpace().height,distHeight=space+space/height*(heightWithoutGutter-height);return isTransposed||(distribution.length>0&&colLen===distribution.length?distHeight=heightWithoutGutter*distribution[rIdx]/distSum:(isDistributionEqual||0===context.height)&&(distHeight=heightWithoutGutter/colLen)),Math.floor(distHeight)})}({matrix:matrix,cIdx:this._lastLevelKey,height:mHeight,availableHeight:height,isDistributionEqual:isDistributionEqual,distribution:distribution,isTransposed:isTransposed,gutter:gutter}),maxWidths.length>0&&(cWidths=cWidths.map(function(e,i){return Math.max(e,maxWidths[0][i]||0)})),maxWidths.push(cWidths);for(var x=0;x=breakPointer&&(columnWidths[1][cIdx-breakPointer]=colWidth,widths[1]=(widths[1]||0)+colWidth),cIdx===_this4._lastLevelKey&&(rowHeights[0][rIdx]=colHeight,rowHeights[1][rIdx]=colHeight)})}),{heights:[0,0],widths:widths,rowHeights:rowHeights,columnWidths:columnWidths}}}]),RowVisualMatrix}();function column_matrix_typeof(obj){return(column_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function column_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function column_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ColumnVisualMatrix),(_this=column_matrix_possibleConstructorReturn(this,column_matrix_getPrototypeOf(ColumnVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length,_this._tree={key:COLUMN_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function column_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&column_matrix_setPrototypeOf(subClass,superClass)}(ColumnVisualMatrix,visual_matrix_VisualMatrix),function column_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&column_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&column_matrix_defineProperties(Constructor,staticProps),Constructor}(ColumnVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!0),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height,width=measures.width;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i,height:height},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),heights=_this2$getCellDimensi.heights,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=heights,columnMeasures=[width,width];return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=tree.matrix.map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var height=measures.height,maxHeights=measures.maxHeights,remainingHeight=height,heightDist=[],conditions=[],divider=2,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length;return 2===priority?(conditions=[primaryMatrixLength-1,primaryMatrixLength],divider=2):(conditions=0===priority?[primaryMatrixLength-1]:[primaryMatrixLength],divider=1),maxHeights.forEach(function(heights,index){-1===conditions.indexOf(index)&&(heightDist[index]=heights,remainingHeight-=heights)}),remainingHeight<0?heightDist=heightDist.map(function(){return 0}):conditions.forEach(function(condition){heightDist[condition]=Math.min(maxHeights[condition],remainingHeight/divider)}),heightDist}},{key:"calculateDepth",value:function calculateDepth(widthMeasures){var j,width=this.availableSpace().width;for(j=0;j0)distWidth=availableWidth*distribution[colIndex]/distSum;else if(isDistributionEqual||0===width){var rowLen=row.length;distWidth=availableWidth/rowLen}return Math.floor(distWidth)})}({row:matrix[this._lastLevelKey],width:mWidth,availableWidth:width},this.config());matrix.forEach(function(row,rIdx){return row.forEach(function(col,cIdx){var oldLogicalSpace=col.getLogicalSpace();col.setAvailableSpace(cWidths[cIdx]-borderWidth,oldLogicalSpace.height),rHeights[rIdx]=Math.max(rHeights[rIdx]||0,Math.floor(col.getLogicalSpace().height))})}),maxHeights.length>0&&(rHeights=rHeights.map(function(e,i){return Math.max(e,maxHeights[0][i])})),maxHeights.push(rHeights);for(var x=0;x=breakPointer&&(rowHeights[1][rIdx-breakPointer]=colHeight,heights[1]=(heights[1]||0)+colHeight),rIdx===_this4._lastLevelKey&&(columnWidths[0][cIdx]=colWidth,columnWidths[1][cIdx]=colWidth)})}),{heights:heights,widths:[0,0],rowHeights:rowHeights,columnWidths:columnWidths}}}]),ColumnVisualMatrix}();function layout_helper_toConsumableArray(arr){return function layout_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);imaxMeasure&&layout.scrollInfo(computations_defineProperty({},scrollType,!0)),Math.max(maxMeasure,actualMeasure)}}(layout,paginationDetailsMap[matrixType],relatedMaxMeasure,buffer)},computations_getMatrixHeightDetails=function getMatrixHeightDetails(layout,columnMatrixWidth){var height=layout.measurement().height,buffer=layout.config().buffer,_getHeightRequiredByC=function getHeightRequiredByColMatrix(layout,columnMatrixWidth){var height=layout.measurement().height,columnMatrix=layout.columnMatrix(),maxColumnMatrixHeight=Math.min(columnMatrix.getLogicalSpace().height,height/2);columnMatrix.setAvailableSpace(columnMatrixWidth,maxColumnMatrixHeight);var columnViewSpace=columnMatrix.getViewableSpaces()[layout.config().columnPointer];return{columnMatrixHeight:columnViewSpace.height.primary+columnViewSpace.height.secondary,maxColumnMatrixHeight:maxColumnMatrixHeight}}(layout,columnMatrixWidth),columnMatrixHeight=_getHeightRequiredByC.columnMatrixHeight,maxColumnMatrixHeight=_getHeightRequiredByC.maxColumnMatrixHeight,maxHeightAvailableForRowMatrix=height-Math.min(maxColumnMatrixHeight,columnMatrixHeight);return{columnMatrixHeight:columnMatrixHeight,maxColumnMatrixHeight:maxColumnMatrixHeight,rowMatrixHeight:paginationMeasureGetter(layout,"row",maxHeightAvailableForRowMatrix,buffer),maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix}},bufferCondition={isScroll:!0,pagination:"scroll"},computations_getActualBufferFromConfig=function getActualBufferFromConfig(layout){var buffer=layout.config().buffer,_map2=computations_slicedToArray([enums_constants_HORIZONTAL,enums_constants_VERTICAL].map(function(type){return function getBufferFromCondition(layout,type){var scrollInfo=layout.scrollInfo(),currentBufferType={pagination:layout.config().pagination,isScroll:scrollInfo[type]};return Object.keys(bufferCondition).every(function(e){return bufferCondition[e]===currentBufferType[e]})}(layout,type)?buffer:0}),2);return{horizontalBuffer:_map2[0],verticalBuffer:_map2[1]}},computations_computeLayoutMeasurements=function computeLayoutMeasurements(layout){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_getMatrixWidthDetail=function getMatrixWidthDetails(layout){var rowMatrix=layout.rowMatrix(),width=layout.measurement().width,_layout$config3=layout.config(),border=_layout$config3.border,buffer=_layout$config3.buffer,borderWidth=border.width,rowMatrixWidth=getMatrixMeasurement(rowMatrix,"width"),maxRowMatrixWidth=Math.min(rowMatrixWidth+buffer,width/2),maxWidthAvailableForColumnMatrix=width-maxRowMatrixWidth-borderWidth;return{rowMatrixWidth:rowMatrixWidth,maxRowMatrixWidth:maxRowMatrixWidth,columnMatrixWidth:paginationMeasureGetter(layout,"column",maxWidthAvailableForColumnMatrix,0),maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}}(layout),rowMatrixWidth=_getMatrixWidthDetail.rowMatrixWidth,maxRowMatrixWidth=_getMatrixWidthDetail.maxRowMatrixWidth,maxWidthAvailableForColumnMatrix=_getMatrixWidthDetail.maxWidthAvailableForColumnMatrix,columnMatrixWidth=_getMatrixWidthDetail.columnMatrixWidth,_getMatrixHeightDetai=computations_getMatrixHeightDetails(layout,columnMatrixWidth),columnMatrixHeight=_getMatrixHeightDetai.columnMatrixHeight,rowMatrixHeight=_getMatrixHeightDetai.rowMatrixHeight,maxHeightAvailableForRowMatrix=_getMatrixHeightDetai.maxHeightAvailableForRowMatrix,_getActualBufferFromC=computations_getActualBufferFromConfig(layout),horizontalBuffer=_getActualBufferFromC.horizontalBuffer,verticalBuffer=_getActualBufferFromC.verticalBuffer;rowMatrix.setAvailableSpace(maxRowMatrixWidth-verticalBuffer,rowMatrixHeight-horizontalBuffer);var rowViewableSpaces=rowMatrix.getViewableSpaces(),columnViewableSpaces=columnMatrix.getViewableSpaces();return setViewSpaces(layout,"row",rowViewableSpaces),setViewSpaces(layout,"column",columnViewableSpaces),function setValueMatrixMeasurements(layout,rowViewableSpaces,columnViewableSpaces){var _ref,_ref2,_ref3,_ref4,_ref5,centerMatrix=layout.centerMatrix(),border=layout.config().border,matrices=layout.matrices(),top=matrices.top,bottom=matrices.bottom,borderWidth=border.width,rowHeights=(_ref=[]).concat.apply(_ref,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.rowHeights.primary}))),rowWidthsPrimary=(_ref2=[]).concat.apply(_ref2,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.primary}))),rowWidthsSecondary=(_ref3=[]).concat.apply(_ref3,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.secondary}))),columnWidths=(_ref4=[]).concat.apply(_ref4,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.columnWidths.primary}))),columnHeightsPrimary=columnViewableSpaces[0].rowHeights.primary,columnHeightsSecondary=(_ref5=[]).concat.apply(_ref5,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.rowHeights.secondary})));centerMatrix.forEach(function(matrix,rIdx){matrix.forEach(function(placeholder,cIdx){placeholder.setAvailableSpace(columnWidths[cIdx]-borderWidth,rowHeights[rIdx]-borderWidth)})}),computations_setAvailableSpace(top[0],rowWidthsPrimary,columnHeightsPrimary),computations_setAvailableSpace(top[2],rowWidthsSecondary,columnHeightsPrimary),computations_setAvailableSpace(bottom[0],rowWidthsPrimary,columnHeightsSecondary),computations_setAvailableSpace(bottom[2],rowWidthsSecondary,columnHeightsSecondary)}(layout,rowViewableSpaces,columnViewableSpaces),{rowMatrixHeight:rowMatrixHeight-horizontalBuffer,rowMatrixWidth:rowMatrixWidth-verticalBuffer,maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix-horizontalBuffer,columnMatrixHeight:columnMatrixHeight,columnMatrixWidth:columnMatrixWidth,maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}},measureSum=function measureSum(measureArr){return measureArr.reduce(function(total,measure){return total+measure},0)};function layout_typeof(obj){return(layout_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function layout_defineProperties(target,props){for(var i=0;i0&&(leftMatrix=[].concat(layout_helper_toConsumableArray(topLeft),layout_helper_toConsumableArray(leftRows),layout_helper_toConsumableArray(bottomLeft))),rightRows.length>0&&(rightMatrix=[].concat(layout_helper_toConsumableArray(topRight),layout_helper_toConsumableArray(rightRows),layout_helper_toConsumableArray(bottomRight))),topColumns.length>0&&topColumns[0].length>0&&(topMatrix=topColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(topLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(topRight[i]))})),bottomColumns.length>0&&bottomColumns[0].length>0&&(bottomMatrix=bottomColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(bottomLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(bottomRight[i]))})),context.rowMatrix(new row_matrix_RowVisualMatrix([leftMatrix,rightMatrix],{isDistributionEqual:isRowSizeEqual,distribution:distribution.rows,gutter:gutterSpace.rows,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.row,breakPage:breakPage.rows.map(function(e){return e+Math.max(topLeft.length,topRight.length)}),extraCellLengths:[topLeft.length,bottomLeft.length]})),begColCells=topLeft.length>0?topLeft[0].length:bottomLeft.length>0?bottomLeft[0].length:0,endColCells=topRight.length>0?topRight[0].length:bottomRight.length>0?bottomRight[0].length:0,context.columnMatrix(new column_matrix_ColumnVisualMatrix([topMatrix,bottomMatrix],{isDistributionEqual:isColumnSizeEqual,distribution:distribution.columns,gutter:gutterSpace.columns,isTransposed:!0,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.col,breakPage:breakPage.columns,extraCellLengths:[begColCells,endColCells]})),context.centerMatrix(valueMatrix),matrices}(this,_matrices),this):layout_get(layout_getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,_matrices)}},{key:"triggerReflow",value:function triggerReflow(){this.scrollInfo({horizontal:!1,vertical:!1});var _computeLayoutMeasure=computations_computeLayoutMeasurements(this),maxHeightAvailableForRowMatrix=_computeLayoutMeasure.maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix=_computeLayoutMeasure.maxWidthAvailableForColumnMatrix;return this.setViewInformation(maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix),this}},{key:"gotoPage",value:function gotoPage(type,pageNumber){var pageType=type.toLowerCase(),totalPages=this.viewInfo().viewMatricesInfo["".concat(pageType,"Pages")],pointer=Math.min(Math.max(1,pageNumber),totalPages);return this.config(function layout_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(pageType,"Pointer"),pointer-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(type){var viewMatricesInfo=this.viewInfo().viewMatricesInfo,pageType=type.toLowerCase();return{totalPages:viewMatricesInfo["".concat(pageType,"Pages")],currentPage:this.config()["".concat(pageType,"Pointer")]+1}}},{key:"viewInfo",value:function viewInfo(){return arguments.length?(this._viewInfo=arguments.length<=0?void 0:arguments[0],this):this._viewInfo}},{key:"scrollInfo",value:function scrollInfo(){return arguments.length?(this._scrollInfo=mergeRecursive(this._scrollInfo,arguments.length<=0?void 0:arguments[0]),this):this._scrollInfo}},{key:"setViewInformation",value:function setViewInformation(maxRowHeight,maxColWidth){var _this$config2=this.config(),rowPointer=_this$config2.rowPointer,columnPointer=_this$config2.columnPointer,border=_this$config2.border,viewMatricesInfo=function getViewMatrices(layout,rowPointer,columnPointer){for(var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),centerMatrix=layout.centerMatrix(),matrices=layout.matrices(),rowMatrices=rowMatrix.getViewableMatrices(),columnMatrices=columnMatrix.getViewableMatrices(),centralMatrixPointer={row:0,column:0},i=rowPointer-1;i>=0;i--){var length=Math.max(rowMatrices[i].primaryMatrix.length,rowMatrices[i].secondaryMatrix.length);centralMatrixPointer.row+=length}for(var _i=columnPointer-1;_i>=0;_i--){var matrix=columnMatrices[_i],primaryMatrix=matrix.primaryMatrix,secondaryMatrix=matrix.secondaryMatrix,_length=Math.max(primaryMatrix[0]?primaryMatrix[0].length:0,secondaryMatrix[0]?secondaryMatrix[0].length:0);centralMatrixPointer.column+=_length}matrices.top[1]=columnMatrices[columnPointer].primaryMatrix,matrices.bottom[1]=columnMatrices[columnPointer].secondaryMatrix,matrices.center[0]=rowMatrices[rowPointer].primaryMatrix,matrices.center[2]=rowMatrices[rowPointer].secondaryMatrix;var rowMatrixLen=Math.max(matrices.center[0].length,matrices.center[2].length),columnMatrixLen=Math.max(matrices.top[1][0]?matrices.top[1][0].length:0,matrices.bottom[1][0]?matrices.bottom[1][0].length:0);return matrices.center[1]=centerMatrix.slice(centralMatrixPointer.row,centralMatrixPointer.row+rowMatrixLen).map(function(matrix){return matrix.slice(centralMatrixPointer.column,centralMatrixPointer.column+columnMatrixLen)}),{matrices:matrices,rowPages:rowMatrices.length,columnPages:columnMatrices.length}}(this,rowPointer,columnPointer),layoutDimensions=function getViewMeasurements(layout,maxRowHeight,maxColWidth){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_layout$config=layout.config(),columnPointer=_layout$config.columnPointer,rowPointer=_layout$config.rowPointer,rowSpaces=rowMatrix.getViewableSpaces()[rowPointer],colSpaces=columnMatrix.getViewableSpaces()[columnPointer],rowHeights=rowSpaces.rowHeights,rowMatrixWidth=rowSpaces.width,columnWidths=colSpaces.columnWidths,columnMatrixHeight=colSpaces.height,leftWidth=rowMatrixWidth.primary,rightWidth=rowMatrixWidth.secondary,topHeight=columnMatrixHeight.primary,bottomHeight=columnMatrixHeight.secondary,centerHeight=measureSum(rowHeights.primary),centerWidth=measureSum(columnWidths.primary),viewWidth=[leftWidth,Math.min(centerWidth,maxColWidth),rightWidth],viewHeight=[topHeight,Math.min(centerHeight,maxRowHeight),bottomHeight];return{viewWidth:viewWidth,viewHeight:viewHeight,actualCenterMeasures:{height:centerHeight,width:centerWidth},totalMeasures:{width:measureSum(viewWidth),height:measureSum(viewHeight)},unitHeights:rowHeights,unitWidths:columnWidths}}(this,maxRowHeight,maxColWidth);return layoutDimensions.border=border,this.viewInfo({viewMatricesInfo:viewMatricesInfo,layoutDimensions:layoutDimensions}),this}}],[{key:"defaultViewInfo",value:function defaultViewInfo(){return Object.assign({},{layoutDimensions:{border:this.defaultConfig().border,viewHeight:[0,0,0],viewWidth:[0,0,0]},viewMatricesInfo:{columnPages:0,rowPages:0,matrices:{top:[],center:[],bottom:[]}}})}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENTS}},{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIGURATION}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}();function border_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _matrixSpanGeneratorM,_spanApplierMap,borderMap=(border_helper_defineProperty(_borderMap={},"".concat("top","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("right"),null),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("left"),"row"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("middle"),"center"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("right"),"row"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("right"),null),_borderMap),border_helper_specificBorderApplier=function specificBorderApplier(borderTypes,showBorders,cells,borderInfo){var color=borderInfo.color,width=borderInfo.width,style=borderInfo.style,borderStyle="".concat(width,"px ").concat(style);borderTypes.forEach(function(borderType){!function applySpecificBorder(cells,color,type,style){cells.style("border-".concat(type),"".concat(style," ").concat(color))}(cells,showBorders[borderType]?color:"rgba(0,0,0,0)",borderType,borderStyle)})},border_helper_applyBorders=function applyBorders(cells,border,row,column){var borderApplierFn=function borderApplier(cells,borderInfo){var showRowBorders=borderInfo.showRowBorders,showColBorders=borderInfo.showColBorders,showValueBorders=borderInfo.showValueBorders;return{row:function row(){return border_helper_specificBorderApplier(["top","bottom"],showRowBorders,cells,borderInfo)},column:function column(){return border_helper_specificBorderApplier(["left","right"],showColBorders,cells,borderInfo)},center:function center(){return border_helper_specificBorderApplier(["left","right","top","bottom"],showValueBorders,cells,borderInfo)}}}(cells,border),borderMapVal=borderMap["".concat(ROW_MATRIX_INDEX[VIEW_INDEX[row]],"-").concat(COLUMN_MATRIX_INDEX[column])];borderMapVal&&borderApplierFn[borderMapVal]()};function span_maker_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var orderMaker=function orderMaker(arr){return Array.from(Array(arr.length).keys())},nestByStack=function nestByStack(stack,updateArr){var optionalParams=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},order=optionalParams.order,keyFn=optionalParams.keyFn,arr=updateArr.slice(),currStack=stack.slice(),prevStack=currStack.slice();if(order=order||Array.from(Array(arr.length).keys()),keyFn=keyFn||function(v){return v},0===currStack.length){var _newArr=[];return order.forEach(function(e){_newArr.push(arr[e])}),{prevStack:prevStack,currStack:arr,arr:_newArr}}for(var arrVal="",stackVal="",newArr=[],i=order.length-1;i>=0;i--){var currElemIndex=order[i];if((arrVal+=keyFn(arr[currElemIndex]))===(stackVal+=keyFn(currStack[currElemIndex])))newArr[currElemIndex]=null;else{stackVal="";for(var j=i;j0&&void 0!==arguments[0]?arguments[0]:1,placeholder=arguments.length>1?arguments[1]:void 0,config=arguments.length>2?arguments[2]:void 0,index=arguments.length>3?arguments[3]:void 0,height=placeholder.availHeight(),width=placeholder.availWidth(),borderWidth=config.border.width,unitWidths=config.dimensions.unitWidths,col=index.col;return span_maker_defineProperty(_ref={},"rowSpan",function(){placeholder.setAvailableSpace(width,height*span),1===span&&renderer_utils_selectElement(this).style("height","".concat(height*span+borderWidth,"px"))}),span_maker_defineProperty(_ref,"colSpan",function(){var primaryUnitWidth=unitWidths.primary[col];if(span>1){for(var cumulativeWidth=0,i=col;i0&&void 0!==arguments[0]?arguments[0]:0}},{key:"type",get:function get(){return"simple"}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),SimpleCell}();function enums_defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var visual_cell_src_props_PROPS,enums_defaults_DEFAULT_CONFIG=(enums_defaults_defineProperty(_DEFAULT_CONFIG={},"margin",(enums_defaults_defineProperty(_CONSTANTS$MARGIN={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$MARGIN)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"spaceFixer",2),enums_defaults_defineProperty(_DEFAULT_CONFIG,"isOffset",!1),enums_defaults_defineProperty(_DEFAULT_CONFIG,"verticalAlign",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"textAlign","center"),enums_defaults_defineProperty(_DEFAULT_CONFIG,"show",!0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"maxLines",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"minCharacters",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"rotation",null),_DEFAULT_CONFIG);function visual_cell_src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_PROPS={mount:{},availHeight:{},availWidth:{},config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config,value)}},logicalSpace:{},minSpacing:{},source:{}},packages_visual_cell_src_props_PROPS=(visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS={},GEOM,mergeRecursive({data:{},caption:{},config:{},axes:{},facetByFields:{},fields:{},transform:{},layerDef:{},detailFields:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_TEXT,mergeRecursive({smartText:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_AXIS,DEFAULT_PROPS),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,BLANK,DEFAULT_PROPS),visual_cell_src_props_PROPS);function axis_cell_typeof(obj){return(axis_cell_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function axis_cell_defineProperties(target,props){for(var i=0;i(availWidth||0)&&maxLines&&(space.height=space.oriTextHeight*maxLines),availWidth&&availWidth":">",'"':""","'":"'","/":"/"};return"".concat(str).replace(/[&<>"'/]/g,function(match){return htmlEscapes[match]})}(rawContent()):rawContent()},createHeading=function createHeading(config,type,labelManager,prevCell){return config?function headerCreator(config,cellType,labelManager,prevCell){var margin={},content=config.content,classPrefix=config.classPrefix,maxLines=config.maxLines,cell=prevCell||new src_text_cell({type:"title"===cellType?"header":"text",className:"".concat(classPrefix,"-").concat(cellType,"-cell")},{labelManager:labelManager}).config({maxLines:maxLines}).minSpacing({width:0,height:0});return cell.source(content),cell._minTickDiff={height:0,width:0},margin=config.position===src_constants_TOP?{top:0,bottom:config.padding}:{top:config.padding,bottom:0},cell.config({margin:margin}),{height:cell.getLogicalSpace().height,cell:cell}}(config,type,labelManager,prevCell):""},legend_maker_legendInitializer=function legendInitializer(legendConfig,canvas,measurement,prevLegends){var legends=[],height=measurement.height,width=measurement.width,headerHeight=measurement.headerHeight,position=legendConfig.position,align=legendConfig.align,legendInfo=function legendCreator(canvas){var LegendCls,dataset=[],axes=canvas.getRetinalAxes();return Object.entries(axes).forEach(function(axisInfo){var scale=axisInfo[1][0],scaleType=axisInfo[0],scaleProps=canvas[scaleType]();if(scaleProps.field&&scale){var _scale$config=scale.config(),type=_scale$config.type,step=_scale$config.step,stepMapper="boolean"==typeof step&&step;LegendCls=LEGEND_TYPE_MAP["".concat(type,"-").concat(stepMapper,"-").concat(scaleType)],dataset.push({scale:scale,canvas:canvas,fieldName:scaleProps.field,title:retrieveFieldDisplayName(canvas.data(),scaleProps.field),LegendCls:LegendCls,scaleType:scaleType})}}),dataset}(canvas),invalidValues=canvas.config().invalidValues,parser=getValueParser(invalidValues);return legendInfo.forEach(function(dataInfo,index){var legendMeasures={},LegendCls=dataInfo.LegendCls,scale=dataInfo.scale,fieldName=dataInfo.fieldName,titleText=dataInfo.title,scaleType=dataInfo.scaleType,config=legendConfig[scaleType]||{},title=config.title||{};if(title.text=title.text||titleText,config.show){config.position=position,config.align=align;var legend=getObjProp(prevLegends[scaleType],index);legend||(legend=LegendCls.create({labelManager:canvas._dependencies.smartlabel,cells:{AxisCell:axis_cell,TextCell:src_text_cell}})),legendMeasures.maxHeight="vertical"===align?height-headerHeight:.2*height,legendMeasures.maxWidth="horizontal"===align?width:.2*width,legendMeasures.width=Math.min(legendMeasures.maxWidth,config.width),legendMeasures.height=Math.min(legendMeasures.maxHeight,config.height),[PADDING,BORDER,MARGIN].forEach(function(e){legendMeasures[e]=config[e]});var metaData=legend.metaData();metaData instanceof datamodel_default.a&&metaData.dispose(),legend.scale(scale).valueParser(parser).title(title).fieldName(fieldName).config(config).metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName])).measurement(legendMeasures).canvasAlias(canvas.alias()).setLegendMeasures(),legends.push({canvas:canvas,legend:legend,scaleType:scaleType})}}),legends};function muze_chart_component_typeof(obj){return(muze_chart_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function muze_chart_component_defineProperties(target,props){for(var i=0;icurrHeight?(sections++,currWidth=0,currHeight=legHeight):sections<0&§ions++,sectionComponents[sections]=sectionComponents[sections]||[],currHeight-=Math.min(leg.measurement().height,currHeight),currWidth=Math.max(Math.min(leg.measurement().width,leg.measurement().maxWidth),currWidth),sectionComponents[sections].push({legend:leg,legendHeight:legHeight,legendWidth:currWidth})});var mount=makeElement(legendMount,["div"],sectionComponents,"".concat(classPrefix,"-legend-section"));mount.classed("".concat(classPrefix,"-legend-vertical-section"),!0).style("width",function(d){return"".concat(d[0].legendWidth,"px")}),makeElement(mount,["div"],function(d){return d},"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legendWidth,"px")})}else{var _mount=makeElement(legendMount,"div",[1],"".concat(classPrefix,"-legend-section"));_mount.classed("".concat(classPrefix,"-legend-horizontal-section"),!0),_mount.classed("".concat(classPrefix,"-legend-section-",0),!0).style("width","".concat(legWidth,"px")),makeElement(_mount,"div",this.components,"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legend.measurement().width,"px")})}}},{key:"draw",value:function draw(container){this.renderLegend(container||document.getElementById(this.renderAt()))}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.boundBox(params.config.measurement.legendSpace),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.components=params.component,this.params=params,this.target(params.config.target),this.position(params.config.position);var _defaultAlignmentHelp=function defaultAlignmentHelper(position){var alignment=null,alignWith="".concat(ROW_MATRIX_INDEX[1],"-").concat(COLUMN_MATRIX_INDEX[1]);switch(position){case src_constants_TOP:case src_constants_BOTTOM:alignment=HORIZONTAL_CENTER;break;case src_constants_LEFT:case src_constants_RIGHT:alignment=VERTICAL_CENTER;break;default:alignment=VERTICAL_CENTER}return{alignment:alignment,alignWith:alignWith}}(params.config.position),alignWith=_defaultAlignmentHelp.alignWith,alignment=_defaultAlignmentHelp.alignment;this.className(params.config.className),this.alignWith(params.config.alignWith||alignWith),this.alignment(params.config.alignment||alignment)}}]),LegendComponent}(),helper_d3Drag=(__webpack_require__(25),renderer_utils_getD3Drag()),arrowSizeMap={left:"width",right:"width",top:"height",bottom:"height"},getUnitPositions=function getUnitPositions(unitMeasures,totalLength,viewLength){var currentLen=0;return(unitMeasures.primary&&unitMeasures.primary.length?unitMeasures.primary:unitMeasures.secondary).map(function(e){var unitPosition=100*currentLen/(totalLength-viewLength);return currentLen+=e,unitPosition})},helper_createScrollBarArrow=function createScrollBarArrow(mount,type,config){var classPrefix=config.classPrefix,thickness=config.thickness,arrow=makeElement(mount,"div",[type],"".concat(classPrefix,"-scroll-arrow-").concat(type));return arrow.classed("".concat(classPrefix,"-scroll-arrow"),!0),arrow.style(arrowSizeMap[type],"".concat(thickness,"px")),makeElement(arrow,"div",[1],"".concat(classPrefix,"-scroll-arrow-chevron")).attr("id","".concat(classPrefix,"-scroll-arrow-chevron-").concat(type)),arrow},helper_createScrollBarRect=function createScrollBarRect(mount,config){var classPrefix=config.classPrefix,rect=makeElement(mount,"div",[1],"".concat(classPrefix,"-scroll-rect"));return{rect:rect,mover:makeElement(rect,"div",[1],"".concat(classPrefix,"-scroll-mover"))}},applyScrollMouseDownAction=function applyScrollMouseDownAction(moverRect,scrollMaker,speed){var mover=moverRect.mover,rect=moverRect.rect,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y;scrollMaker.changeMoverPosition({x:x-rectX+speed,y:y-rectY+speed})},helper_registerListenerOnArrow=function registerListenerOnArrow(scrollMaker,moverRect,arrowType,speed){var timer="",arrow=scrollMaker._components[arrowType],isTouchDevice=hasTouch();arrow.on(isTouchDevice?"touchstart":"mousedown",function(){renderer_utils_getEvent().preventDefault(),timer=setInterval(function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)},100)}).on(isTouchDevice?"touchend":"mouseup",function(){renderer_utils_getEvent().preventDefault(),clearInterval(timer)}).on("click",function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)})},helper_registerListeners=function registerListeners(scrollMaker){var moverRect=scrollMaker._components.moverRect,speed=scrollMaker.config().speed;helper_registerListenerOnArrow(scrollMaker,moverRect,"prevArrow",-speed),function applyMoverDrag(scrollMaker,moverRect){var startPos={},moverStartPos=0,rectStartPos=0,endPos={},mover=moverRect.mover,rect=moverRect.rect;mover.call(helper_d3Drag().on("start",function(){var event=renderer_utils_getEvent();moverStartPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect(),startPos={x:event.x,y:event.y}}).on("drag",function(){var event=renderer_utils_getEvent(),window=getWindow(),distanceMoved_x=(endPos={x:event.x,y:event.y}).x-startPos.x,distanceMoved_y=endPos.y-startPos.y,actualPosition={x:moverStartPos.x+distanceMoved_x-rectStartPos.x+window.pageXOffset,y:moverStartPos.y+distanceMoved_y-rectStartPos.y+window.pageYOffset};scrollMaker.changeMoverPosition(actualPosition)}))}(scrollMaker,moverRect),function applyRectClick(scrollMaker,moverRect){moverRect.rect.on("click",function(){var event=renderer_utils_getEvent();scrollMaker.emptyScrollAreaClick(event)})}(scrollMaker,moverRect),helper_registerListenerOnArrow(scrollMaker,moverRect,"nextArrow",speed)},scroll_bar_maker_props_PROPS={config:{sanitization:function sanitization(context,value){return value=mergeRecursive(context._config,value)}},manager:{},unitPositions:{},logicalSpace:{}};function scroll_maker_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=horizontal_scroll_maker_get(horizontal_scroll_maker_getPrototypeOf(HorizontalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,config,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"left",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"right",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitWidths=_this$logicalSpace.unitWidths,scrollBarWithouArrowLength=width-2*height;rect.style("width","".concat(dimensions.width-2*height,"px")),rect.style("height","".concat(100,"%")),mover.style("width","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style("height","".concat(100,"%")),mover.style(src_constants_LEFT,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitWidths,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.xrectStartPos.width?rectStartPos.width-moverPos.width:newPosition.x,mover.style(src_constants_LEFT,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:0,x:moverPos.x-rectStartPos.x-delta}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.width)/100;return this.changeMoverPosition({y:0,x:movement}),this}}],[{key:"type",value:function type(){return"horizontal"}}]),HorizontalScrollMaker}(),vertical:function(_ScrollMaker){function VerticalScrollMaker(){return function vertical_scroll_maker_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VerticalScrollMaker),vertical_scroll_maker_possibleConstructorReturn(this,vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker).apply(this,arguments))}return function vertical_scroll_maker_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&vertical_scroll_maker_setPrototypeOf(subClass,superClass)}(VerticalScrollMaker,scroll_maker_ScrollMaker),function vertical_scroll_maker_createClass(Constructor,protoProps,staticProps){return protoProps&&vertical_scroll_maker_defineProperties(Constructor.prototype,protoProps),staticProps&&vertical_scroll_maker_defineProperties(Constructor,staticProps),Constructor}(VerticalScrollMaker,[{key:"createScroll",value:function createScroll(mountPoint){var dimensions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=vertical_scroll_maker_get(vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"top",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"bottom",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitHeights=_this$logicalSpace.unitHeights,scrollBarWithouArrowLength=height-2*width;rect.style("height","".concat(scrollBarWithouArrowLength,"px")),rect.style("width","".concat(100,"%")),mover.style("width","".concat(100,"%")),mover.style("height","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style(src_constants_TOP,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitHeights,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.yrectStartPos.height?rectStartPos.height-moverPos.height:newPosition.y,mover.style(src_constants_TOP,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:moverPos.y-rectStartPos.y-delta,x:0}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.height)/100;return this.changeMoverPosition({x:0,y:movement}),this}}],[{key:"type",value:function type(){return"vertical"}}]),VerticalScrollMaker}()},ScrollComponent=function(_MuzeComponent){function ScrollComponent(params){var _this;!function scroll_component_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ScrollComponent);var ScrollMaker=scrollMakerMap[params.config.type];return params.component=new ScrollMaker,params.component.config(params.config.scrollBarComponentConfig),params.component.logicalSpace(params.dimensions),(_this=scroll_component_possibleConstructorReturn(this,scroll_component_getPrototypeOf(ScrollComponent).call(this,params.name,params.component.getLogicalSpace(),0))).setParams(params),_this}return function scroll_component_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&scroll_component_setPrototypeOf(subClass,superClass)}(ScrollComponent,MuzeComponent),function scroll_component_createClass(Constructor,protoProps,staticProps){return protoProps&&scroll_component_defineProperties(Constructor.prototype,protoProps),staticProps&&scroll_component_defineProperties(Constructor,staticProps),Constructor}(ScrollComponent,[{key:"manager",value:function manager(){return arguments.length?(this.component.manager(arguments.length<=0?void 0:arguments[0]),this):this.component.manager()}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){return this.component.scrollDeltaTo(delta),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){return this.component.scrollTo(scrollPercentage),this}},{key:"scrollToUnitIndex",value:function scrollToUnitIndex(unitIndex){var unitPositions=this.component.unitPositions(),sanitizedUnitIndex=Math.min(Math.max(0,unitIndex),unitPositions.length-1);return this.component.scrollTo(unitPositions[sanitizedUnitIndex]),this}},{key:"getScrollPositionsForUnits",value:function getScrollPositionsForUnits(){return this.component.unitPositions()}},{key:"draw",value:function draw(container){return this.component.createScroll(container||document.getElementById(this.renderAt())),this}},{key:"attachScrollAction",value:function attachScrollAction(externalAction){return this.component.attachScrollAction(externalAction),this}},{key:"detachScrollAction",value:function detachScrollAction(){return this.component.detachScrollAction(),this}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.component.config(params.config.scrollBarComponentConfig),this.component.logicalSpace(params.dimensions),this.boundBox(this.component.getLogicalSpace()),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.component=params.component||this.component,this.params=params,this.target(params.config.target),this.position(params.config.position),this.className(params.config.className),this.alignWith(params.config.alignWith),this.alignment(params.config.alignment)}},{key:"remove",value:function remove(){this.component.remove()}}]),ScrollComponent}();function matrix_component_typeof(obj){return(matrix_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function matrix_component_defineProperties(target,props){for(var i=0;iMath.abs(wheelDeltaY)&&scrollBarManager.preventBrowserScroll("horizontal",event).triggerScrollBarAction("horizontal",wheelDeltaX/30),0!==wheelDeltaY&&Math.abs(wheelDeltaX)0?heightAttr:height,minHeight),availableWidthForCanvas=Math.max(widthAttr>0?widthAttr:width,minWidth),_createHeaders=function createHeaders(context,canvasHeight,canvasWidth){var headerHeight=0,headers={},subtitle=context.subtitle(),isSubtitle=title_maker_resolveTitleSubTitleContent(subtitle[0]);return canvasHeight>=200&&canvasWidth>=200&&["title","subtitle"].forEach(function(type){var headerOptions=context[type](),content=title_maker_resolveTitleSubTitleContent(headerOptions[0]);if(content){var config=headerOptions[1];config.width=context.width(),config.height=context.height(),config.classPrefix=context.config().classPrefix,config.content=content,config.padding="title"!==type||isSubtitle.length?config.padding:subtitle[1].padding;var _createHeading=createHeading(config,type,context.dependencies().smartlabel,context["".concat(type,"Cell")]),height=_createHeading.height,cell=_createHeading.cell;headers["".concat(type,"Cell")]=cell,context._composition[type]=cell,headerHeight+=height}}),{headerHeight:headerHeight,headers:headers}}(context,availableHeightForCanvas,availableWidthForCanvas),headers=_createHeaders.headers,headerHeight=_createHeaders.headerHeight,legends=function createLegend(context,headerHeight,height,width){var measurement={height:height,width:width,headerHeight:headerHeight},legend=context.config().legend,show=legend.show,position=legend.position;legend.classPrefix=context.config().classPrefix;var align=position===src_constants_LEFT||position===src_constants_RIGHT?"vertical":"horizontal";return legend.show=show?"vertical"===align&&width>200||"horizontal"===align&&height>200:show,legend.align=align,legend_maker_legendInitializer(legend,context,measurement,context.composition().legend||{})}(context,headerHeight,availableHeightForCanvas,availableWidthForCanvas);context._composition.legend={},legends.forEach(function(e){context._composition.legend[e.scaleType]=e.legend});var legendSpace=function getLegendSpace(legends,legendConfig,availableHeight,availableWidth){var legendSpace={width:0,height:0};return legends.map(function(legendInfo){return legendInfo.legend.measurement()}).forEach(function(space){var height,width;width=Math.min(space.width,space.maxWidth),height=Math.min(space.height,space.maxHeight),"horizontal"===legendConfig.align?legendSpace.width+width>availableWidth?(legendSpace.width=availableWidth,legendSpace.height+=height):(legendSpace.width+=width,legendSpace.height=Math.max(legendSpace.height,height)):legendSpace.height+height>availableHeight?(legendSpace.height=height,legendSpace.width+=width):(legendSpace.height+=height,legendSpace.width=Math.max(legendSpace.width,width))}),"horizontal"===legendConfig.align&&(legendSpace.width=availableWidth),legendSpace}(legends,legend,availableHeightForCanvas,availableWidthForCanvas),legendWidth=legendPosition===src_constants_LEFT||legendPosition===src_constants_RIGHT?legendSpace.width:0,legendHeight=legendPosition===src_constants_TOP||legendPosition===src_constants_BOTTOM?legendSpace.height:0,components={headers:headers,legends:legends,canvases:[context],rows:rows,columns:columns,values:values,cornerMatrices:visGroup.cornerMatrices()},measurement={mountSpace:{height:height,width:width},headerHeight:headerHeight,legendSpace:legendSpace,canvasWidth:availableWidthForCanvas,canvasHeight:availableHeightForCanvas,width:availableWidthForCanvas-legendWidth,height:availableHeightForCanvas-headerHeight-legendHeight,minUnitHeight:context.minUnitHeight(),minUnitWidth:context.minUnitWidth()};return{layoutConfig:layoutConfig=mergeRecursive(layoutConfig,{classPrefix:classPrefix,showHeaders:showHeaders,border:mergeRecursive(visGroup.metaData().border,context.config().border),layoutArrangement:layoutArrangement,legend:legend,buffer:scrollBar.thickness,pagination:pagination,title:titleConfig,subtitle:subtitleConfig,isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,mount:mount,priority:priority}),components:components,measurement:measurement}},componentIndexes={title:0,subtitle:1,legend:2,verticalScrollBar:3,horizontalScrollBar:4,grid:5,message:6},componentNames={0:"title",1:"subtitle",2:"legend",3:"verticalScrollBar",4:"horizontalScrollBar",5:"grid",6:"message"},layout_maker_renderLayout=function renderLayout(canvas,renderDetails){var layoutManager=canvas._layoutManager,gridLayout=canvas.layout(),grid=componentIndexes.grid,compWrappers=component_wrapper_maker_componentWrapperMaker(canvas,gridLayout,renderDetails),componentWrappers=Object.keys(componentIndexes).map(function(e){return compWrappers[e]});componentWrappers[grid]&&function createScrollManager(componentWrappers,canvas){var verticalScrollBar=componentIndexes.verticalScrollBar,grid=componentIndexes.grid,horizontalScrollWrapper=componentWrappers[componentIndexes.horizontalScrollBar],verticalScrollWrapper=componentWrappers[verticalScrollBar],gridWrapper=componentWrappers[grid],scrollBarManager=new ScrollManager,scrollBarComponents={};verticalScrollWrapper&&(scrollBarComponents.vertical=verticalScrollWrapper),horizontalScrollWrapper&&(scrollBarComponents.horizontal=horizontalScrollWrapper),scrollBarManager.scrollBarComponents(scrollBarComponents).attachedComponents({grid:gridWrapper}),canvas.composition().hScrollBar=horizontalScrollWrapper,canvas.composition().vScrollBar=verticalScrollWrapper,[horizontalScrollWrapper,verticalScrollWrapper].forEach(function(wrapper){wrapper&&wrapper.manager(scrollBarManager)}),gridWrapper.scrollBarManager(scrollBarManager)}(componentWrappers,canvas),componentWrappers.forEach(function(componentWrapper,index){if(!componentWrapper){var deleteElementName=componentNames[index];layoutManager.removeComponent(deleteElementName)}}),layoutManager.registerComponents(componentWrappers).compute(),function attachListeners(componentWrappers){componentWrappers.forEach(function(componentWrapper){componentWrapper&&componentWrapper.attachListener()})}(componentWrappers)};function group_firebolt_typeof(obj){return(group_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function group_firebolt_defineProperties(target,props){for(var i=0;i","\"","'","/","createHeading","prevCell","cellType","_minTickDiff","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendInfo","legendCreator","LegendCls","dataset","scaleProps","_scale$config","stepMapper","dataInfo","legendMeasures","titleText","getGroupByData","setLegendMeasures","MuzeComponent","_this$boundBox","HeaderComponent","headerComponent_classCallCheck","headerComponent_possibleConstructorReturn","headerComponent_getPrototypeOf","setParams","cont","renderHeader","LegendComponent","legendComponent_classCallCheck","legendComponent_possibleConstructorReturn","legendComponent_getPrototypeOf","legendSpace","sectionComponents","_this$params$config","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","legendHeight","legendWidth","renderLegend","_defaultAlignmentHelp","defaultAlignmentHelper","arrowSizeMap","getUnitPositions","totalLength","viewLength","currentLen","unitPosition","createScrollBarArrow","createScrollBarRect","mover","applyScrollMouseDownAction","moverRect","scrollMaker","_mover$node$getBoundi","_rect$node$getBoundin","rectX","rectY","changeMoverPosition","registerListenerOnArrow","arrowType","_components","isTouchDevice","registerListeners","applyMoverDrag","moverStartPos","rectStartPos","distanceMoved","actualPosition","pageXOffset","pageYOffset","applyRectClick","emptyScrollAreaClick","manager","unitPositions","ScrollMaker","scroll_maker_classCallCheck","_attachedScrollAction","_unitPositions","scroll_maker_createClass","scrollTo","scrollDeltaTo","createScroll","scrollBarContainer","scrollContainerHelper","attachScrollAction","externalScrollAction","detachScrollAction","scrollMakerMap","_ScrollMaker","HorizontalScrollMaker","horizontal_scroll_maker_classCallCheck","horizontal_scroll_maker_possibleConstructorReturn","horizontal_scroll_maker_getPrototypeOf","horizontal_scroll_maker_inherits","horizontal_scroll_maker_createClass","horizontal_scroll_maker_get","prevArrow","nextArrow","_this$logicalSpace","scrollBarWithouArrowLength","_scrollBarWithouArrowLength","_this$_components$mov","positionAdjuster","newPosition","currentPos","_this$_components$mov2","moverPos","movedViewLength","performAttachedScrollFunction","delta","_this$_components$mov3","scrollPercentage","movement","VerticalScrollMaker","vertical_scroll_maker_classCallCheck","vertical_scroll_maker_possibleConstructorReturn","vertical_scroll_maker_getPrototypeOf","vertical_scroll_maker_inherits","vertical_scroll_maker_createClass","vertical_scroll_maker_get","ScrollComponent","scroll_component_classCallCheck","scrollBarComponentConfig","scroll_component_possibleConstructorReturn","scroll_component_getPrototypeOf","unitIndex","sanitizedUnitIndex","externalAction","MatrixComponent","matrix_component_classCallCheck","matrix_component_possibleConstructorReturn","matrix_component_getPrototypeOf","_this$params$config$s","containerForMatrix","applyScroll","_cellSpanMaker","cellSpanMaker","_matrixSpanGenerator","renderTable","applySpans","applier","renderPlaceholders","renderMatrix","applyScrollAction","scollDistance","GridComponent","grid_component_classCallCheck","grid_component_possibleConstructorReturn","grid_component_getPrototypeOf","_this$component$viewI","matrixDim","matrixName","updateWrapper","matrixWrapper","allComponents","_scrollBarManager","scrollBarManager","wheelDeltaX","wheelDeltaY","preventBrowserScroll","triggerScrollBarAction","movedView","scrollActionApplier","_this$component$0$0$b","sanitizeGrid","attachScrollListener","MessageComponent","message_component_classCallCheck","message_component_possibleConstructorReturn","message_component_getPrototypeOf","_config$dimensions","message","_params$config","headerMap","headerCell","configType","headerAlignmentMap","component_wrapper_maker_defineProperty","_headerAlignmentMap","isGridPresent","renderDetails","_renderDetails$compon","checkParamsValidation","createHeaderWrapper","headerType","layoutManager","_headerMap$headerType","headerConfig","wrapperParams","component_wrapper_maker_objectSpread","existingComponent","createScrollBarWrapper","scrollBarType","grid","_scrollBarMap$scrollB","scrollBarMap","layoutBasedMeasure","viewMeasure","rowAlign","colAlign","componentWrapperMaker","_layoutManager","createMessageWrapper","_i","_headerValues","defaultDimensions","gridComponent","getBoundBox","createLegendWrapper","legendWrapper","gridLayoutWrapper","verticalScrollBar","horizontalScrollBar","ScrollManager","scroll_manager_classCallCheck","_scrollBarComponents","_attachedComponents","scroll_manager_createClass","scrollBarComponents","attachedComponents","performScrollAction","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","titleLayouts","component_resolver_defineProperty","legendLayouts","titlePosition","subtitlePosition","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","isSubtitle","headerOptions","_createHeading","createLegend","getLegendSpace","mountSpace","componentIndexes","componentNames","3","4","5","6","renderLayout","gridLayout","compWrappers","componentWrappers","createScrollManager","horizontalScrollWrapper","verticalScrollWrapper","gridWrapper","hScrollBar","vScrollBar","componentWrapper","deleteElementName","removeComponent","registerComponents","attachListeners","attachListener","defaultInteractionPolicy","isMeasure","group_firebolt_toConsumableArray","getFieldsFromChannel","colDim","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","GroupFireBolt","group_firebolt_classCallCheck","group_firebolt_possibleConstructorReturn","group_firebolt_getPrototypeOf","behaviouralAction","validFields","APP_INITIAL_STATE","app","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","canvas_getPrototypeOf","canvas_defineProperty","canvas_assertThisInitialized","initedComponents","initCanvas","createGroupState","_VisualGroup$getState2","canvas_helper_slicedToArray","register","prepareLayout","triggerReflow","setLayoutInfForUnits","getRootNodeId","setLabelRotationForAxes","rotationVal","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","Smartlabel","SideEffects","standards","Behaviours","pkg","operators","utils","lookupWhat","lookupDetails","lookupTarget"],"mappings":"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AI61C,gCCESwW,gBAZK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApX,IAAI61C,gCCESwW,gBAZK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApX,IAAI61C,gCCESwW,kBAZK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApX,IAAI61C,gCCASwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,gBAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,gBAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCAC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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 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(\"DataModel\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataModel\"] = factory();\n\telse\n\t\troot[\"DataModel\"] = 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 = 1);\n","const DataModel = require('./export');\n\nmodule.exports = DataModel.default ? DataModel.default : DataModel;\n","/**\n * DataFormat Enum defines the format of the input data.\n * Based on the format of the data the respective adapter is loaded.\n *\n * @readonly\n * @enum {string}\n */\nconst DataFormat = {\n FLAT_JSON: 'FlatJSON',\n DSV_STR: 'DSVStr',\n DSV_ARR: 'DSVArr',\n AUTO: 'Auto'\n};\n\nexport default DataFormat;\n","/**\n * DimensionSubtype enum defines the sub types of the Dimensional Field.\n *\n * @readonly\n * @enum {string}\n */\nconst DimensionSubtype = {\n CATEGORICAL: 'categorical',\n TEMPORAL: 'temporal',\n GEO: 'geo',\n BINNED: 'binned'\n};\n\nexport default DimensionSubtype;\n","/**\n * MeasureSubtype enum defines the sub types of the Measure Field.\n *\n * @readonly\n * @enum {string}\n */\nconst MeasureSubtype = {\n CONTINUOUS: 'continuous'\n};\n\nexport default MeasureSubtype;\n","/**\n * FieldType enum defines the high level field based on which visuals are controlled.\n * Measure in a high level is numeric field and Dimension in a high level is string field.\n *\n * @readonly\n * @enum {string}\n */\nconst FieldType = {\n MEASURE: 'measure',\n DIMENSION: 'dimension'\n};\n\nexport default FieldType;\n","/**\n * Filtering mode enum defines the filering modes of DataModel.\n *\n * @readonly\n * @enum {string}\n */\nconst FilteringMode = {\n NORMAL: 'normal',\n INVERSE: 'inverse',\n ALL: 'all'\n};\n\nexport default FilteringMode;\n","/**\n * Group by function names\n *\n * @readonly\n * @enum {string}\n */\nconst GROUP_BY_FUNCTIONS = {\n SUM: 'sum',\n AVG: 'avg',\n MIN: 'min',\n MAX: 'max',\n FIRST: 'first',\n LAST: 'last',\n COUNT: 'count',\n STD: 'std'\n};\n\nexport default GROUP_BY_FUNCTIONS;\n","/**\n * Creates a JS native date object from input\n *\n * @param {string | number | Date} date Input using which date object to be created\n * @return {Date} : JS native date object\n */\nfunction convertToNativeDate (date) {\n if (date instanceof Date) {\n return date;\n }\n\n return new Date(date);\n}\n/**\n * Apply padding before a number if its less than 1o. This is used when constant digit's number to be returned\n * between 0 - 99\n *\n * @param {number} n Input to be padded\n * @return {string} Padded number\n */\nfunction pad (n) {\n return (n < 10) ? (`0${n}`) : n;\n}\n/*\n * DateFormatter utility to convert any date format to any other date format\n * DateFormatter parse a date time stamp specified by a user abiding by rules which are defined\n * by user in terms of token. It creates JS native date object from the user specified format.\n * That native date can also be displayed\n * in any specified format.\n * This utility class only takes care of format conversion only\n */\n\n/*\n * Escapes all the special character that are used in regular expression.\n * Like\n * RegExp.escape('sgfd-$') // Output: sgfd\\-\\$\n *\n * @param text {String} : text which is to be escaped\n */\nRegExp.escape = function (text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n};\n\n/**\n * DateTimeFormatter class to convert any user format of date time stamp to any other format\n * of date time stamp.\n *\n * @param {string} format Format of the date given. For the above date,\n * 'year: %Y, month: %b, day: %d'.\n * @class\n */\n/* istanbul ignore next */ function DateTimeFormatter (format) {\n this.format = format;\n this.dtParams = undefined;\n this.nativeDate = undefined;\n}\n\n// The identifier of the tokens\nDateTimeFormatter.TOKEN_PREFIX = '%';\n\n// JS native Date constructor takes the date params (year, month, etc) in a certail sequence.\n// This defines the sequence of the date parameters in the constructor.\nDateTimeFormatter.DATETIME_PARAM_SEQUENCE = {\n YEAR: 0,\n MONTH: 1,\n DAY: 2,\n HOUR: 3,\n MINUTE: 4,\n SECOND: 5,\n MILLISECOND: 6\n};\n\n/*\n * This is a default number parsing utility. It tries to parse a number in integer, if parsing is unsuccessful, it\n * gives back a default value.\n *\n * @param: defVal {Number} : Default no if the parsing to integer is not successful\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be parsed.\n */\nDateTimeFormatter.defaultNumberParser = function (defVal) {\n return function (val) {\n let parsedVal;\n if (isFinite(parsedVal = parseInt(val, 10))) {\n return parsedVal;\n }\n\n return defVal;\n };\n};\n\n/*\n * This is a default number range utility. It tries to find an element in the range. If not found it returns a\n * default no as an index.\n *\n * @param: range {Array} : The list which is to be serached\n * @param: defVal {Number} : Default no if the serach and find does not return anything\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be found\n */\nDateTimeFormatter.defaultRangeParser = function (range, defVal) {\n return (val) => {\n let i;\n let l;\n\n if (!val) { return defVal; }\n\n const nVal = val.toLowerCase();\n\n for (i = 0, l = range.length; i < l; i++) {\n if (range[i].toLowerCase() === nVal) {\n return i;\n }\n }\n\n if (i === undefined) {\n return defVal;\n }\n return null;\n };\n};\n\n/*\n * Defines the tokens which are supporter by the dateformatter. Using this definitation a value gets extracted from\n * the user specifed date string. This also formats the value for display purpose from native JS date.\n * The definition of each token contains the following named properties\n * {\n * %token_name% : {\n * name: name of the token, this is used in reverse lookup,\n * extract: a function that returns the regular expression to extract that piece of information. All the\n * regex should be gouped by using ()\n * parser: a function which receives value extracted by the above regex and parse it to get the date params\n * formatter: a formatter function that takes milliseconds or JS Date object and format the param\n * represented by the token only.\n * }\n * }\n *\n * @return {Object} : Definition of the all the supported tokens.\n */\nDateTimeFormatter.getTokenDefinitions = function () {\n const daysDef = {\n short: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n long: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ]\n };\n const monthsDef = {\n short: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n };\n\n const definitions = {\n H: {\n // 24 hours format\n name: 'H',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n\n return d.getHours().toString();\n }\n },\n l: {\n // 12 hours format\n name: 'l',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const hours = d.getHours() % 12;\n\n return (hours === 0 ? 12 : hours).toString();\n }\n },\n p: {\n // AM or PM\n name: 'p',\n index: 3,\n extract () { return '(AM|PM)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'AM' : 'PM');\n }\n },\n P: {\n // am or pm\n name: 'P',\n index: 3,\n extract () { return '(am|pm)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'am' : 'pm');\n }\n },\n M: {\n // Two digit minutes 00 - 59\n name: 'M',\n index: 4,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const mins = d.getMinutes();\n\n return pad(mins);\n }\n },\n S: {\n // Two digit seconds 00 - 59\n name: 'S',\n index: 5,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const seconds = d.getSeconds();\n\n return pad(seconds);\n }\n },\n K: {\n // Milliseconds\n name: 'K',\n index: 6,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const ms = d.getMilliseconds();\n\n return ms.toString();\n }\n },\n a: {\n // Short name of day, like Mon\n name: 'a',\n index: 2,\n extract () { return `(${daysDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.short[day]).toString();\n }\n },\n A: {\n // Long name of day, like Monday\n name: 'A',\n index: 2,\n extract () { return `(${daysDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.long[day]).toString();\n }\n },\n e: {\n // 8 of March, 11 of November\n name: 'e',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return day.toString();\n }\n },\n d: {\n // 08 of March, 11 of November\n name: 'd',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return pad(day);\n }\n },\n b: {\n // Short month, like Jan\n name: 'b',\n index: 1,\n extract () { return `(${monthsDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.short[month]).toString();\n }\n },\n B: {\n // Long month, like January\n name: 'B',\n index: 1,\n extract () { return `(${monthsDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.long[month]).toString();\n }\n },\n m: {\n // Two digit month of year like 01 for January\n name: 'm',\n index: 1,\n extract () { return '(\\\\d+)'; },\n parser (val) { return DateTimeFormatter.defaultNumberParser()(val) - 1; },\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return pad(month + 1);\n }\n },\n y: {\n // Short year like 90 for 1990\n name: 'y',\n index: 0,\n extract () { return '(\\\\d{2})'; },\n parser (val) {\n let result;\n if (val) {\n const l = val.length;\n val = val.substring(l - 2, l);\n }\n let parsedVal = DateTimeFormatter.defaultNumberParser()(val);\n let presentDate = new Date();\n let presentYear = Math.trunc((presentDate.getFullYear()) / 100);\n\n result = `${presentYear}${parsedVal}`;\n\n if (convertToNativeDate(result).getFullYear() > presentDate.getFullYear()) {\n result = `${presentYear - 1}${parsedVal}`;\n }\n return convertToNativeDate(result).getFullYear();\n },\n formatter (val) {\n const d = convertToNativeDate(val);\n let year = d.getFullYear().toString();\n let l;\n\n if (year) {\n l = year.length;\n year = year.substring(l - 2, l);\n }\n\n return year;\n }\n },\n Y: {\n // Long year like 1990\n name: 'Y',\n index: 0,\n extract () { return '(\\\\d{4})'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const year = d.getFullYear().toString();\n\n return year;\n }\n }\n };\n\n return definitions;\n};\n\n/*\n * The tokens which works internally is not user friendly in terms of memorizing the names. This gives a formal\n * definition to the informal notations.\n *\n * @return {Object} : Formal definition of the tokens\n */\nDateTimeFormatter.getTokenFormalNames = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n\n return {\n HOUR: definitions.H,\n HOUR_12: definitions.l,\n AMPM_UPPERCASE: definitions.p,\n AMPM_LOWERCASE: definitions.P,\n MINUTE: definitions.M,\n SECOND: definitions.S,\n SHORT_DAY: definitions.a,\n LONG_DAY: definitions.A,\n DAY_OF_MONTH: definitions.e,\n DAY_OF_MONTH_CONSTANT_WIDTH: definitions.d,\n SHORT_MONTH: definitions.b,\n LONG_MONTH: definitions.B,\n MONTH_OF_YEAR: definitions.m,\n SHORT_YEAR: definitions.y,\n LONG_YEAR: definitions.Y\n };\n};\n\n/*\n * This defines the rules and declares dependencies that resolves a date parameter (year, month etc) from\n * the date time parameter array.\n *\n * @return {Object} : An object that contains dependencies and a resolver function. The dependencies values are fed\n * to the resolver function in that particular sequence only.\n */\nDateTimeFormatter.tokenResolver = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const defaultResolver = (...args) => { // eslint-disable-line require-jsdoc\n let i = 0;\n let arg;\n let targetParam;\n const l = args.length;\n\n for (; i < l; i++) {\n arg = args[i];\n if (args[i]) {\n targetParam = arg;\n }\n }\n\n if (!targetParam) { return null; }\n\n return targetParam[0].parser(targetParam[1]);\n };\n\n return {\n YEAR: [definitions.y, definitions.Y,\n defaultResolver\n ],\n MONTH: [definitions.b, definitions.B, definitions.m,\n defaultResolver\n ],\n DAY: [definitions.a, definitions.A, definitions.e, definitions.d,\n defaultResolver\n ],\n HOUR: [definitions.H, definitions.l, definitions.p, definitions.P,\n function (hourFormat24, hourFormat12, ampmLower, ampmUpper) {\n let targetParam;\n let amOrpm;\n let isPM;\n let val;\n\n if (hourFormat12 && (amOrpm = (ampmLower || ampmUpper))) {\n if (amOrpm[0].parser(amOrpm[1]) === 'pm') {\n isPM = true;\n }\n\n targetParam = hourFormat12;\n } else if (hourFormat12) {\n targetParam = hourFormat12;\n } else {\n targetParam = hourFormat24;\n }\n\n if (!targetParam) { return null; }\n\n val = targetParam[0].parser(targetParam[1]);\n if (isPM) {\n val += 12;\n }\n return val;\n }\n ],\n MINUTE: [definitions.M,\n defaultResolver\n ],\n SECOND: [definitions.S,\n defaultResolver\n ]\n };\n};\n\n/*\n * Finds token from the format rule specified by a user.\n * @param format {String} : The format of the input date specified by the user\n * @return {Array} : An array of objects which contains the available token and their occurence index in the format\n */\nDateTimeFormatter.findTokens = function (format) {\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenLiterals = Object.keys(definitions);\n const occurrence = [];\n let i;\n let forwardChar;\n\n while ((i = format.indexOf(tokenPrefix, i + 1)) >= 0) {\n forwardChar = format[i + 1];\n if (tokenLiterals.indexOf(forwardChar) === -1) { continue; }\n\n occurrence.push({\n index: i,\n token: forwardChar\n });\n }\n\n return occurrence;\n};\n\n/*\n * Format any JS date to a specified date given by user.\n *\n * @param date {Number | Date} : The date object which is to be formatted\n * @param format {String} : The format using which the date will be formatted for display\n */\nDateTimeFormatter.formatAs = function (date, format) {\n const nDate = convertToNativeDate(date);\n const occurrence = DateTimeFormatter.findTokens(format);\n const definitions = DateTimeFormatter.getTokenDefinitions();\n let formattedStr = String(format);\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n let token;\n let formattedVal;\n let i;\n let l;\n\n for (i = 0, l = occurrence.length; i < l; i++) {\n token = occurrence[i].token;\n formattedVal = definitions[token].formatter(nDate);\n formattedStr = formattedStr.replace(new RegExp(tokenPrefix + token, 'g'), formattedVal);\n }\n\n return formattedStr;\n};\n\n/*\n * Parses the user specified date string to extract the date time params.\n *\n * @return {Array} : Value of date time params in an array [year, month, day, hour, minutes, seconds, milli]\n */\nDateTimeFormatter.prototype.parse = function (dateTimeStamp, options) {\n const tokenResolver = DateTimeFormatter.tokenResolver();\n const dtParams = this.extractTokenValue(dateTimeStamp);\n const dtParamSeq = DateTimeFormatter.DATETIME_PARAM_SEQUENCE;\n const noBreak = options && options.noBreak;\n const dtParamArr = [];\n const args = [];\n let resolverKey;\n let resolverParams;\n let resolverFn;\n let val;\n let i;\n let param;\n let resolvedVal;\n let l;\n let result = [];\n\n for (resolverKey in tokenResolver) {\n if (!{}.hasOwnProperty.call(tokenResolver, resolverKey)) { continue; }\n\n args.length = 0;\n resolverParams = tokenResolver[resolverKey];\n resolverFn = resolverParams.splice(resolverParams.length - 1, 1)[0];\n\n for (i = 0, l = resolverParams.length; i < l; i++) {\n param = resolverParams[i];\n val = dtParams[param.name];\n\n if (val === undefined) {\n args.push(null);\n } else {\n args.push([param, val]);\n }\n }\n\n resolvedVal = resolverFn.apply(this, args);\n\n if ((resolvedVal === undefined || resolvedVal === null) && !noBreak) {\n break;\n }\n\n dtParamArr[dtParamSeq[resolverKey]] = resolvedVal;\n }\n\n if (dtParamArr.length && this.checkIfOnlyYear(dtParamArr.length))\n {\n result.unshift(dtParamArr[0], 0, 1); }\n else {\n result.unshift(...dtParamArr);\n }\n\n return result;\n};\n\n/*\n * Extract the value of the token from user specified date time string.\n *\n * @return {Object} : An key value pair which contains the tokens as key and value as pair\n */\nDateTimeFormatter.prototype.extractTokenValue = function (dateTimeStamp) {\n const format = this.format;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const occurrence = DateTimeFormatter.findTokens(format);\n const tokenObj = {};\n\n let lastOccurrenceIndex;\n let occObj;\n let occIndex;\n let targetText;\n let regexFormat;\n\n let l;\n let i;\n\n regexFormat = String(format);\n\n const tokenArr = occurrence.map(obj => obj.token);\n const occurrenceLength = occurrence.length;\n for (i = occurrenceLength - 1; i >= 0; i--) {\n occIndex = occurrence[i].index;\n\n if (occIndex + 1 === regexFormat.length - 1) {\n lastOccurrenceIndex = occIndex;\n continue;\n }\n\n if (lastOccurrenceIndex === undefined) {\n lastOccurrenceIndex = regexFormat.length;\n }\n\n targetText = regexFormat.substring(occIndex + 2, lastOccurrenceIndex);\n regexFormat = regexFormat.substring(0, occIndex + 2) +\n RegExp.escape(targetText) +\n regexFormat.substring(lastOccurrenceIndex, regexFormat.length);\n\n lastOccurrenceIndex = occIndex;\n }\n\n for (i = 0; i < occurrenceLength; i++) {\n occObj = occurrence[i];\n regexFormat = regexFormat.replace(tokenPrefix + occObj.token, definitions[occObj.token].extract());\n }\n\n const extractValues = dateTimeStamp.match(new RegExp(regexFormat)) || [];\n extractValues.shift();\n\n for (i = 0, l = tokenArr.length; i < l; i++) {\n tokenObj[tokenArr[i]] = extractValues[i];\n }\n return tokenObj;\n};\n\n/*\n * Give back the JS native date formed from user specified date string\n *\n * @return {Date} : Native JS Date\n */\nDateTimeFormatter.prototype.getNativeDate = function (dateTimeStamp) {\n let date = null;\n if (Number.isFinite(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n } else if (!this.format && Date.parse(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n }\n else {\n const dtParams = this.dtParams = this.parse(dateTimeStamp);\n if (dtParams.length) {\n this.nativeDate = new Date(...dtParams);\n date = this.nativeDate;\n }\n }\n return date;\n};\n\nDateTimeFormatter.prototype.checkIfOnlyYear = function(len) {\n return len === 1 && this.format.match(/y|Y/g).length;\n};\n\n/*\n * Represents JS native date to a user specified format.\n *\n * @param format {String} : The format according to which the date is to be represented\n * @return {String} : The formatted date string\n */\nDateTimeFormatter.prototype.formatAs = function (format, dateTimeStamp) {\n let nativeDate;\n\n if (dateTimeStamp) {\n nativeDate = this.nativeDate = this.getNativeDate(dateTimeStamp);\n } else if (!(nativeDate = this.nativeDate)) {\n nativeDate = this.getNativeDate(dateTimeStamp);\n }\n\n return DateTimeFormatter.formatAs(nativeDate, format);\n};\n\nexport { DateTimeFormatter as default };\n","/**\n * The utility function to calculate major column.\n *\n * @param {Object} store - The store object.\n * @return {Function} Returns the push function.\n */\nexport default (store) => {\n let i = 0;\n return (...fields) => {\n fields.forEach((val, fieldIndex) => {\n if (!(store[fieldIndex] instanceof Array)) {\n store[fieldIndex] = Array.from({ length: i });\n }\n store[fieldIndex].push(val);\n });\n i++;\n };\n};\n","/* eslint-disable */\nconst OBJECTSTRING = 'object';\nconst objectToStrFn = Object.prototype.toString;\nconst objectToStr = '[object Object]';\nconst arrayToStr = '[object Array]';\n\nfunction checkCyclicRef(obj, parentArr) {\n let i = parentArr.length;\n let bIndex = -1;\n\n while (i) {\n if (obj === parentArr[i]) {\n bIndex = i;\n return bIndex;\n }\n i -= 1;\n }\n\n return bIndex;\n}\n\nfunction merge(obj1, obj2, skipUndef, tgtArr, srcArr) {\n var item,\n srcVal,\n tgtVal,\n str,\n cRef;\n // check whether obj2 is an array\n // if array then iterate through it's index\n // **** MOOTOOLS precution\n\n if (!srcArr) {\n tgtArr = [obj1];\n srcArr = [obj2];\n }\n else {\n tgtArr.push(obj1);\n srcArr.push(obj2);\n }\n\n if (obj2 instanceof Array) {\n for (item = 0; item < obj2.length; item += 1) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (typeof tgtVal !== OBJECTSTRING) {\n if (!(skipUndef && tgtVal === undefined)) {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = tgtVal instanceof Array ? [] : {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n }\n }\n else {\n for (item in obj2) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (tgtVal !== null && typeof tgtVal === OBJECTSTRING) {\n // Fix for issue BUG: FWXT-602\n // IE < 9 Object.prototype.toString.call(null) gives\n // '[object Object]' instead of '[object Null]'\n // that's why null value becomes Object in IE < 9\n str = objectToStrFn.call(tgtVal);\n if (str === objectToStr) {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else if (str === arrayToStr) {\n if (srcVal === null || !(srcVal instanceof Array)) {\n srcVal = obj1[item] = [];\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (skipUndef && tgtVal === undefined) {\n continue;\n }\n obj1[item] = tgtVal;\n }\n }\n }\n return obj1;\n}\n\n\nfunction extend2 (obj1, obj2, skipUndef) {\n //if none of the arguments are object then return back\n if (typeof obj1 !== OBJECTSTRING && typeof obj2 !== OBJECTSTRING) {\n return null;\n }\n\n if (typeof obj2 !== OBJECTSTRING || obj2 === null) {\n return obj1;\n }\n\n if (typeof obj1 !== OBJECTSTRING) {\n obj1 = obj2 instanceof Array ? [] : {};\n }\n merge(obj1, obj2, skipUndef);\n return obj1;\n}\n\nexport { extend2 as default };\n","import { DataFormat } from '../enums';\n\n/**\n * Checks whether the value is an array.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an array otherwise returns false.\n */\nexport function isArray (val) {\n return Array.isArray(val);\n}\n\n/**\n * Checks whether the value is an object.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an object otherwise returns false.\n */\nexport function isObject (val) {\n return val === Object(val);\n}\n\n/**\n * Checks whether the value is a string value.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is a string value otherwise returns false.\n */\nexport function isString (val) {\n return typeof val === 'string';\n}\n\n/**\n * Checks whether the value is callable.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is callable otherwise returns false.\n */\nexport function isCallable (val) {\n return typeof val === 'function';\n}\n\n/**\n * Returns the unique values from the input array.\n *\n * @param {Array} data - The input array.\n * @return {Array} Returns a new array of unique values.\n */\nexport function uniqueValues (data) {\n return [...new Set(data)];\n}\n\nexport const getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Checks Whether two arrays have same content.\n *\n * @param {Array} arr1 - The first array.\n * @param {Array} arr2 - The 2nd array.\n * @return {boolean} Returns whether two array have same content.\n */\nexport function isArrEqual(arr1, arr2) {\n if (!isArray(arr1) || !isArray(arr2)) {\n return arr1 === arr2;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * It is the default number format function for the measure field type.\n *\n * @param {any} val - The input value.\n * @return {number} Returns a number value.\n */\nexport function formatNumber(val) {\n return val;\n}\n\n/**\n * Returns the detected data format.\n *\n * @param {any} data - The input data to be tested.\n * @return {string} Returns the data format name.\n */\nexport const detectDataFormat = (data) => {\n if (isString(data)) {\n return DataFormat.DSV_STR;\n } else if (isArray(data) && isArray(data[0])) {\n return DataFormat.DSV_ARR;\n } else if (isArray(data) && (data.length === 0 || isObject(data[0]))) {\n return DataFormat.FLAT_JSON;\n }\n return null;\n};\n","import { FieldType } from './enums';\nimport { getUniqueId } from './utils';\n\nconst fieldStore = {\n data: {},\n\n createNamespace (fieldArr, name) {\n const dataId = name || getUniqueId();\n\n this.data[dataId] = {\n name: dataId,\n fields: fieldArr,\n\n fieldsObj () {\n let fieldsObj = this._cachedFieldsObj;\n\n if (!fieldsObj) {\n fieldsObj = this._cachedFieldsObj = {};\n this.fields.forEach((field) => {\n fieldsObj[field.name()] = field;\n });\n }\n return fieldsObj;\n },\n getMeasure () {\n let measureFields = this._cachedMeasure;\n\n if (!measureFields) {\n measureFields = this._cachedMeasure = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.MEASURE) {\n measureFields[field.name()] = field;\n }\n });\n }\n return measureFields;\n },\n getDimension () {\n let dimensionFields = this._cachedDimension;\n\n if (!this._cachedDimension) {\n dimensionFields = this._cachedDimension = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.DIMENSION) {\n dimensionFields[field.name()] = field;\n }\n });\n }\n return dimensionFields;\n },\n };\n return this.data[dataId];\n },\n};\n\nexport default fieldStore;\n","import { getNumberFormattedVal } from './helper';\n\n/**\n * The wrapper class on top of the primitive value of a field.\n *\n * @todo Need to have support for StringValue, NumberValue, DateTimeValue\n * and GeoValue. These types should expose predicate API mostly.\n */\nclass Value {\n\n /**\n * Creates new Value instance.\n *\n * @param {*} val - the primitive value from the field cell.\n * @param {string | Field} field - The field from which the value belongs.\n */\n constructor (value, rawValue, field) {\n const formattedValue = getNumberFormattedVal(field, value);\n\n Object.defineProperties(this, {\n _value: {\n enumerable: false,\n configurable: false,\n writable: false,\n value\n },\n _formattedValue: {\n enumerable: false,\n configurable: false,\n writable: false,\n value: formattedValue\n },\n _internalValue: {\n enumerable: false,\n configurable: false,\n writable: false,\n value: rawValue\n }\n });\n\n this.field = field;\n }\n\n /**\n * Returns the field value.\n *\n * @return {*} Returns the current value.\n */\n get value () {\n return this._value;\n }\n\n /**\n * Returns the parsed value of field\n */\n get formattedValue () {\n return this._formattedValue;\n }\n\n /**\n * Returns the internal value of field\n */\n get internalValue () {\n return this._internalValue;\n }\n\n /**\n * Converts to human readable string.\n *\n * @override\n * @return {string} Returns a human readable string of the field value.\n *\n */\n toString () {\n return String(this.value);\n }\n\n /**\n * Returns the value of the field.\n *\n * @override\n * @return {*} Returns the field value.\n */\n valueOf () {\n return this.value;\n }\n}\n\nexport default Value;\n","/**\n * Iterates through the diffSet array and call the callback with the current\n * index.\n *\n * @param {string} rowDiffset - The row diffset string e.g. '0-4,6,10-13'.\n * @param {Function} callback - The callback function to be called with every index.\n */\nexport function rowDiffsetIterator (rowDiffset, callback) {\n if (rowDiffset.length > 0) {\n const rowDiffArr = rowDiffset.split(',');\n rowDiffArr.forEach((diffStr) => {\n const diffStsArr = diffStr.split('-');\n const start = +(diffStsArr[0]);\n const end = +(diffStsArr[1] || diffStsArr[0]);\n if (end >= start) {\n for (let i = start; i <= end; i += 1) {\n callback(i);\n }\n }\n });\n }\n}\n","/**\n * A parser to parser null, undefined, invalid and NIL values.\n *\n * @public\n * @class\n */\nclass InvalidAwareTypes {\n /**\n * Static method which gets/sets the invalid value registry.\n *\n * @public\n * @param {Object} config - The custom configuration supplied by user.\n * @return {Object} Returns the invalid values registry.\n */\n static invalidAwareVals (config) {\n if (!config) {\n return InvalidAwareTypes._invalidAwareValsMap;\n }\n return Object.assign(InvalidAwareTypes._invalidAwareValsMap, config);\n }\n\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} value - The value of the invalid data type.\n */\n constructor (value) {\n this._value = value;\n }\n\n /**\n * Returns the current value of the instance.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n value () {\n return this._value;\n }\n\n /**\n * Returns the current value of the instance in string format.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n toString () {\n return String(this._value);\n }\n\n static isInvalid(val) {\n return (val instanceof InvalidAwareTypes) || !!InvalidAwareTypes.invalidAwareVals()[val];\n }\n\n static getInvalidType(val) {\n return val instanceof InvalidAwareTypes ? val : InvalidAwareTypes.invalidAwareVals()[val];\n }\n}\n\n/**\n * Enums for Invalid types.\n */\nInvalidAwareTypes.NULL = new InvalidAwareTypes('null');\nInvalidAwareTypes.NA = new InvalidAwareTypes('na');\nInvalidAwareTypes.NIL = new InvalidAwareTypes('nil');\n\n/**\n * Default Registry for mapping the invalid values.\n *\n * @private\n */\nInvalidAwareTypes._invalidAwareValsMap = {\n invalid: InvalidAwareTypes.NA,\n nil: InvalidAwareTypes.NIL,\n null: InvalidAwareTypes.NULL,\n undefined: InvalidAwareTypes.NA\n};\n\nexport default InvalidAwareTypes;\n","export { DataFormat, FilteringMode } from '../enums';\n/**\n * The event name for data propagation.\n */\nexport const PROPAGATION = 'propagation';\n\n/**\n * The name of the unique row id column in DataModel.\n */\nexport const ROW_ID = '__id__';\n\n/**\n * The enums for operation names performed on DataModel.\n */\nexport const DM_DERIVATIVES = {\n SELECT: 'select',\n PROJECT: 'project',\n GROUPBY: 'group',\n COMPOSE: 'compose',\n CAL_VAR: 'calculatedVariable',\n BIN: 'bin',\n SORT: 'sort'\n};\n\nexport const JOINS = {\n CROSS: 'cross',\n LEFTOUTER: 'leftOuter',\n RIGHTOUTER: 'rightOuter',\n NATURAL: 'natural',\n FULLOUTER: 'fullOuter'\n};\n\nexport const LOGICAL_OPERATORS = {\n AND: 'and',\n OR: 'or'\n};\n","/**\n * The helper function that returns an array of common schema\n * from two fieldStore instances.\n *\n * @param {FieldStore} fs1 - The first FieldStore instance.\n * @param {FieldStore} fs2 - The second FieldStore instance.\n * @return {Array} An array containing the common schema.\n */\nexport function getCommonSchema (fs1, fs2) {\n const retArr = [];\n const fs1Arr = [];\n fs1.fields.forEach((field) => {\n fs1Arr.push(field.schema().name);\n });\n fs2.fields.forEach((field) => {\n if (fs1Arr.indexOf(field.schema().name) !== -1) {\n retArr.push(field.schema().name);\n }\n });\n return retArr;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { getCommonSchema } from './get-common-schema';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { JOINS } from '../constants';\nimport { prepareJoinData } from '../helper';\n/**\n * Default filter function for crossProduct.\n *\n * @return {boolean} Always returns true.\n */\nfunction defaultFilterFn() { return true; }\n\n/**\n * Implementation of cross product operation between two DataModel instances.\n * It internally creates the data and schema for the new DataModel.\n *\n * @param {DataModel} dataModel1 - The left DataModel instance.\n * @param {DataModel} dataModel2 - The right DataModel instance.\n * @param {Function} filterFn - The filter function which is used to filter the tuples.\n * @param {boolean} [replaceCommonSchema=false] - The flag if the common name schema should be there.\n * @return {DataModel} Returns The newly created DataModel instance from the crossProduct operation.\n */\nexport function crossProduct (dm1, dm2, filterFn, replaceCommonSchema = false, jointype = JOINS.CROSS) {\n const schema = [];\n const data = [];\n const applicableFilterFn = filterFn || defaultFilterFn;\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreName = dm1FieldStore.name;\n const dm2FieldStoreName = dm2FieldStore.name;\n const name = `${dm1FieldStore.name}.${dm2FieldStore.name}`;\n const commonSchemaList = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n if (dm1FieldStoreName === dm2FieldStoreName) {\n throw new Error('DataModels must have different alias names');\n }\n // Here prepare the schema\n dm1FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1 && !replaceCommonSchema) {\n tmpSchema.name = `${dm1FieldStore.name}.${tmpSchema.name}`;\n }\n schema.push(tmpSchema);\n });\n dm2FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1) {\n if (!replaceCommonSchema) {\n tmpSchema.name = `${dm2FieldStore.name}.${tmpSchema.name}`;\n schema.push(tmpSchema);\n }\n } else {\n schema.push(tmpSchema);\n }\n });\n\n // Here prepare Data\n rowDiffsetIterator(dm1._rowDiffset, (i) => {\n let rowAdded = false;\n let rowPosition;\n rowDiffsetIterator(dm2._rowDiffset, (ii) => {\n const tuple = [];\n const userArg = {};\n userArg[dm1FieldStoreName] = {};\n userArg[dm2FieldStoreName] = {};\n dm1FieldStore.fields.forEach((field) => {\n tuple.push(field.partialField.data[i]);\n userArg[dm1FieldStoreName][field.name()] = {\n rawValue: field.partialField.data[i],\n formattedValue: field.formattedData()[i],\n };\n });\n dm2FieldStore.fields.forEach((field) => {\n if (!(commonSchemaList.indexOf(field.schema().name) !== -1 && replaceCommonSchema)) {\n tuple.push(field.partialField.data[ii]);\n }\n userArg[dm2FieldStoreName][field.name()] = {\n rawValue: field.partialField.data[ii],\n formattedValue: field.formattedData()[ii],\n };\n });\n\n let cachedStore = {};\n let cloneProvider1 = () => dm1.detachedRoot();\n let cloneProvider2 = () => dm2.detachedRoot();\n\n const dm1Fields = prepareJoinData(userArg[dm1FieldStoreName]);\n const dm2Fields = prepareJoinData(userArg[dm2FieldStoreName]);\n if (applicableFilterFn(dm1Fields, dm2Fields, cloneProvider1, cloneProvider2, cachedStore)) {\n const tupleObj = {};\n tuple.forEach((cellVal, iii) => {\n tupleObj[schema[iii].name] = cellVal;\n });\n if (rowAdded && JOINS.CROSS !== jointype) {\n data[rowPosition] = tupleObj;\n }\n else {\n data.push(tupleObj);\n rowAdded = true;\n rowPosition = i;\n }\n } else if ((jointype === JOINS.LEFTOUTER || jointype === JOINS.RIGHTOUTER) && !rowAdded) {\n const tupleObj = {};\n let len = dm1FieldStore.fields.length - 1;\n tuple.forEach((cellVal, iii) => {\n if (iii <= len) {\n tupleObj[schema[iii].name] = cellVal;\n }\n else {\n tupleObj[schema[iii].name] = null;\n }\n });\n rowAdded = true;\n rowPosition = i;\n data.push(tupleObj);\n }\n });\n });\n\n return new DataModel(data, schema, { name });\n}\n","/**\n * The default sort function.\n *\n * @param {*} a - The first value.\n * @param {*} b - The second value.\n * @return {number} Returns the comparison result e.g. 1 or 0 or -1.\n */\nfunction defSortFn (a, b) {\n const a1 = `${a}`;\n const b1 = `${b}`;\n if (a1 < b1) {\n return -1;\n }\n if (a1 > b1) {\n return 1;\n }\n return 0;\n}\n\n/**\n * The helper function for merge sort which creates the sorted array\n * from the two halves of the input array.\n *\n * @param {Array} arr - The target array which needs to be merged.\n * @param {number} lo - The starting index of the first array half.\n * @param {number} mid - The ending index of the first array half.\n * @param {number} hi - The ending index of the second array half.\n * @param {Function} sortFn - The sort function.\n */\nfunction merge (arr, lo, mid, hi, sortFn) {\n const mainArr = arr;\n const auxArr = [];\n for (let i = lo; i <= hi; i += 1) {\n auxArr[i] = mainArr[i];\n }\n let a = lo;\n let b = mid + 1;\n\n for (let i = lo; i <= hi; i += 1) {\n if (a > mid) {\n mainArr[i] = auxArr[b];\n b += 1;\n } else if (b > hi) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else if (sortFn(auxArr[a], auxArr[b]) <= 0) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else {\n mainArr[i] = auxArr[b];\n b += 1;\n }\n }\n}\n\n/**\n * The helper function for merge sort which would be called\n * recursively for sorting the array halves.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {number} lo - The starting index of the array half.\n * @param {number} hi - The ending index of the array half.\n * @param {Function} sortFn - The sort function.\n * @return {Array} Returns the target array itself.\n */\nfunction sort (arr, lo, hi, sortFn) {\n if (hi === lo) { return arr; }\n\n const mid = lo + Math.floor((hi - lo) / 2);\n sort(arr, lo, mid, sortFn);\n sort(arr, mid + 1, hi, sortFn);\n merge(arr, lo, mid, hi, sortFn);\n\n return arr;\n}\n\n/**\n * The implementation of merge sort.\n * It is used in DataModel for stable sorting as it is not sure\n * what the sorting algorithm used by browsers is stable or not.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {Function} [sortFn=defSortFn] - The sort function.\n * @return {Array} Returns the input array itself in sorted order.\n */\nexport function mergeSort (arr, sortFn = defSortFn) {\n if (arr.length > 1) {\n sort(arr, 0, arr.length - 1, sortFn);\n }\n return arr;\n}\n","import { DimensionSubtype, MeasureSubtype } from '../enums';\nimport { mergeSort } from './merge-sort';\nimport { fieldInSchema } from '../helper';\nimport { isCallable, isArray } from '../utils';\n\n/**\n * Generates the sorting functions to sort the data of a DataModel instance\n * according to the input data type.\n *\n * @param {string} dataType - The data type e.g. 'measure', 'datetime' etc.\n * @param {string} sortType - The sorting order i.e. 'asc' or 'desc'.\n * @return {Function} Returns the the sorting function.\n */\nfunction getSortFn (dataType, sortType) {\n let retFunc;\n\n switch (dataType) {\n case MeasureSubtype.CONTINUOUS:\n case DimensionSubtype.TEMPORAL:\n if (sortType === 'asc') {\n retFunc = (a, b) => a - b;\n } else {\n retFunc = (a, b) => b - a;\n }\n break;\n default:\n if (sortType === 'asc') {\n retFunc = (a, b) => {\n a = `${a}`;\n b = `${b}`;\n if (a === b) {\n return 0;\n }\n return a > b ? 1 : -1;\n };\n } else {\n retFunc = (a, b) => {\n a = `${a}`;\n b = `${b}`;\n if (a === b) {\n return 0;\n }\n return a > b ? -1 : 1;\n };\n }\n }\n\n return retFunc;\n}\n\n/**\n * Resolves the actual sorting function based on sorting string value.\n *\n * @param {Object} fDetails - The target field info.\n * @param {string} strSortOrder - The sort order value.\n * @return {Function} Returns the sorting function.\n */\nfunction resolveStrSortOrder (fDetails, strSortOrder) {\n const sortOrder = String(strSortOrder).toLowerCase() === 'desc' ? 'desc' : 'asc';\n return getSortFn(fDetails.type, sortOrder);\n}\n\n/**\n * Groups the data according to the specified target field.\n *\n * @param {Array} data - The input data array.\n * @param {number} fieldIndex - The target field index within schema array.\n * @return {Array} Returns an array containing the grouped data.\n */\nfunction groupData (data, fieldIndex) {\n const hashMap = new Map();\n const groupedData = [];\n\n data.forEach((datum) => {\n const fieldVal = datum[fieldIndex];\n if (hashMap.has(fieldVal)) {\n groupedData[hashMap.get(fieldVal)][1].push(datum);\n } else {\n groupedData.push([fieldVal, [datum]]);\n hashMap.set(fieldVal, groupedData.length - 1);\n }\n });\n\n return groupedData;\n}\n\n/**\n * Creates the argument value used for sorting function when sort is done\n * with another fields.\n *\n * @param {Array} groupedDatum - The grouped datum for a single dimension field value.\n * @param {Array} targetFields - An array of the sorting fields.\n * @param {Array} targetFieldDetails - An array of the sorting field details in schema.\n * @return {Object} Returns an object containing the value of sorting fields and the target field name.\n */\nfunction createSortingFnArg (groupedDatum, targetFields, targetFieldDetails) {\n const arg = {\n label: groupedDatum[0]\n };\n\n targetFields.reduce((acc, next, idx) => {\n acc[next] = groupedDatum[1].map(datum => datum[targetFieldDetails[idx].index]);\n return acc;\n }, arg);\n\n return arg;\n}\n\n/**\n * Sorts the data by applying the standard sorting mechanism.\n *\n * @param {Array} data - The input data array.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nfunction applyStandardSort (data, schema, sortingDetails) {\n let fieldName;\n let sortMeta;\n let fDetails;\n let i = sortingDetails.length - 1;\n\n for (; i >= 0; i--) {\n fieldName = sortingDetails[i][0];\n sortMeta = sortingDetails[i][1];\n fDetails = fieldInSchema(schema, fieldName);\n\n if (!fDetails) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isCallable(sortMeta)) {\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortMeta(a[fDetails.index], b[fDetails.index]));\n } else if (isArray(sortMeta)) {\n const groupedData = groupData(data, fDetails.index);\n const sortingFn = sortMeta[sortMeta.length - 1];\n const targetFields = sortMeta.slice(0, sortMeta.length - 1);\n const targetFieldDetails = targetFields.map(f => fieldInSchema(schema, f));\n\n groupedData.forEach((groupedDatum) => {\n groupedDatum.push(createSortingFnArg(groupedDatum, targetFields, targetFieldDetails));\n });\n\n mergeSort(groupedData, (a, b) => {\n const m = a[2];\n const n = b[2];\n return sortingFn(m, n);\n });\n\n // Empty the array\n data.length = 0;\n groupedData.forEach((datum) => {\n data.push(...datum[1]);\n });\n } else {\n const sortFn = resolveStrSortOrder(fDetails, sortMeta);\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortFn(a[fDetails.index], b[fDetails.index]));\n }\n }\n}\n\n/**\n * Creates a map based on grouping.\n *\n * @param {Array} depColumns - The dependency columns' info.\n * @param {Array} data - The input data.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - The sorting details for standard sorting.\n * @return {Map} Returns a map.\n */\nconst makeGroupMapAndSort = (depColumns, data, schema, sortingDetails) => {\n if (depColumns.length === 0) { return data; }\n\n const targetCol = depColumns[0];\n const map = new Map();\n\n data.reduce((acc, currRow) => {\n const fVal = currRow[targetCol.index];\n if (acc.has(fVal)) {\n acc.get(fVal).push(currRow);\n } else {\n acc.set(fVal, [currRow]);\n }\n return acc;\n }, map);\n\n for (let [key, val] of map) {\n const nMap = makeGroupMapAndSort(depColumns.slice(1), val, schema, sortingDetails);\n map.set(key, nMap);\n if (Array.isArray(nMap)) {\n applyStandardSort(nMap, schema, sortingDetails);\n }\n }\n\n return map;\n};\n\n/**\n * Sorts the data by retaining the position/order of a particular field.\n *\n * @param {Array} data - The input data array.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n * @param {Array} depColumns - The dependency column list.\n * @return {Array} Returns the sorted data.\n */\nfunction applyGroupSort (data, schema, sortingDetails, depColumns) {\n sortingDetails = sortingDetails.filter((detail) => {\n if (detail[1] === null) {\n depColumns.push(detail[0]);\n return false;\n }\n return true;\n });\n if (sortingDetails.length === 0) { return data; }\n\n depColumns = depColumns.map(c => fieldInSchema(schema, c));\n\n const sortedGroupMap = makeGroupMapAndSort(depColumns, data, schema, sortingDetails);\n return data.map((row) => {\n let i = 0;\n let nextMap = sortedGroupMap;\n\n while (!Array.isArray(nextMap)) {\n nextMap = nextMap.get(row[depColumns[i++].index]);\n }\n\n return nextMap.shift();\n });\n}\n\n/**\n * Sorts the data.\n *\n * @param {Object} dataObj - An object containing the data and schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nexport function sortData (dataObj, sortingDetails) {\n let { schema, data } = dataObj;\n\n sortingDetails = sortingDetails.filter(sDetial => !!fieldInSchema(schema, sDetial[0]));\n if (sortingDetails.length === 0) { return; }\n\n let groupSortingIdx = sortingDetails.findIndex(sDetial => sDetial[1] === null);\n groupSortingIdx = groupSortingIdx !== -1 ? groupSortingIdx : sortingDetails.length;\n\n const standardSortingDetails = sortingDetails.slice(0, groupSortingIdx);\n const groupSortingDetails = sortingDetails.slice(groupSortingIdx);\n\n applyStandardSort(data, schema, standardSortingDetails);\n data = applyGroupSort(data, schema, groupSortingDetails, standardSortingDetails.map(detail => detail[0]));\n\n dataObj.uids = data.map(row => row.pop());\n dataObj.data = data;\n}\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport { sortData } from './sort';\n\n/**\n * Builds the actual data array.\n *\n * @param {Array} fieldStore - An array of field.\n * @param {string} rowDiffset - A string consisting of which rows to be included eg. '0-2,4,6';\n * @param {string} colIdentifier - A string consisting of the details of which column\n * to be included eg 'date,sales,profit';\n * @param {Object} sortingDetails - An object containing the sorting details of the DataModel instance.\n * @param {Object} options - The options required to create the type of the data.\n * @return {Object} Returns an object containing the multidimensional array and the relative schema.\n */\nexport function dataBuilder (fieldStore, rowDiffset, colIdentifier, sortingDetails, options) {\n const defOptions = {\n addUid: false,\n columnWise: false\n };\n options = Object.assign({}, defOptions, options);\n\n const retObj = {\n schema: [],\n data: [],\n uids: []\n };\n const addUid = options.addUid;\n const reqSorting = sortingDetails && sortingDetails.length > 0;\n // It stores the fields according to the colIdentifier argument\n const tmpDataArr = [];\n // Stores the fields according to the colIdentifier argument\n const colIArr = colIdentifier.split(',');\n\n colIArr.forEach((colName) => {\n for (let i = 0; i < fieldStore.length; i += 1) {\n if (fieldStore[i].name() === colName) {\n tmpDataArr.push(fieldStore[i]);\n break;\n }\n }\n });\n\n // Inserts the schema to the schema object\n tmpDataArr.forEach((field) => {\n /** @todo Need to use extend2 here otherwise user can overwrite the schema. */\n retObj.schema.push(field.schema());\n });\n\n if (addUid) {\n retObj.schema.push({\n name: 'uid',\n type: 'identifier'\n });\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n retObj.data.push([]);\n const insertInd = retObj.data.length - 1;\n let start = 0;\n tmpDataArr.forEach((field, ii) => {\n retObj.data[insertInd][ii + start] = field.partialField.data[i];\n });\n if (addUid) {\n retObj.data[insertInd][tmpDataArr.length] = i;\n }\n // Creates an array of unique identifiers for each row\n retObj.uids.push(i);\n\n // If sorting needed then there is the need to expose the index\n // mapping from the old index to its new index\n if (reqSorting) { retObj.data[insertInd].push(i); }\n });\n\n // Handles the sort functionality\n if (reqSorting) {\n sortData(retObj, sortingDetails);\n }\n\n if (options.columnWise) {\n const tmpData = Array(...Array(retObj.schema.length)).map(() => []);\n retObj.data.forEach((tuple) => {\n tuple.forEach((data, i) => {\n tmpData[i].push(data);\n });\n });\n retObj.data = tmpData;\n }\n\n return retObj;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n\n/**\n * Performs the union operation between two dm instances.\n *\n * @todo Fix the conflicts between union and difference terminology here.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function difference (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n * @param {boolean} addData - If true only tuple will be added to the data.\n */\n function prepareDataHelper(dm, fieldsObj, addData) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n if (addData) { data.push(tuple); }\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm2, dm2FieldStoreFieldObj, false);\n prepareDataHelper(dm1, dm1FieldStoreFieldObj, true);\n\n return new DataModel(data, schema, { name });\n}\n\n","import { isArray } from '../utils';\nimport InvalidAwareTypes from '../invalid-aware-types';\nimport { GROUP_BY_FUNCTIONS } from '../enums';\n\nconst { SUM, AVG, FIRST, LAST, COUNT, STD, MIN, MAX } = GROUP_BY_FUNCTIONS;\n\nfunction getFilteredValues(arr) {\n return arr.filter(item => !(item instanceof InvalidAwareTypes));\n}\n/**\n * Reducer function that returns the sum of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the sum of the array.\n */\nfunction sum (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const filteredNumber = getFilteredValues(arr);\n const totalSum = filteredNumber.length ?\n filteredNumber.reduce((acc, curr) => acc + curr, 0)\n : InvalidAwareTypes.NULL;\n return totalSum;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that returns the average of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the mean value of the array.\n */\nfunction avg (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const totalSum = sum(arr);\n const len = arr.length || 1;\n return (Number.isNaN(totalSum) || totalSum instanceof InvalidAwareTypes) ?\n InvalidAwareTypes.NULL : totalSum / len;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the min value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the minimum value of the array.\n */\nfunction min (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.min(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the max value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the maximum value of the array.\n */\nfunction max (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.max(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the first value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the first value of the array.\n */\nfunction first (arr) {\n return arr[0];\n}\n\n/**\n * Reducer function that gives the last value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the last value of the array.\n */\nfunction last (arr) {\n return arr[arr.length - 1];\n}\n\n/**\n * Reducer function that gives the count value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the length of the array.\n */\nfunction count (arr) {\n if (isArray(arr)) {\n return arr.length;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Calculates the variance of the input array.\n *\n * @param {Array.} arr - The input array.\n * @return {number} Returns the variance of the input array.\n */\nfunction variance (arr) {\n let mean = avg(arr);\n return avg(arr.map(num => (num - mean) ** 2));\n}\n\n/**\n * Calculates the square root of the variance of the input array.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the square root of the variance.\n */\nfunction std (arr) {\n return Math.sqrt(variance(arr));\n}\n\n\nconst fnList = {\n [SUM]: sum,\n [AVG]: avg,\n [MIN]: min,\n [MAX]: max,\n [FIRST]: first,\n [LAST]: last,\n [COUNT]: count,\n [STD]: std\n};\n\nconst defaultReducerName = SUM;\n\nexport {\n defaultReducerName,\n sum as defReducer,\n fnList,\n};\n","import { defReducer, fnList } from '../operator';\n\n/**\n * A page level storage which stores, registers, unregisters reducers for all the datamodel instances. There is only one\n * reducer store available in a page. All the datamodel instances receive same instance of reducer store. DataModel\n * out of the box provides handful of {@link reducer | reducers} which can be used as reducer funciton.\n *\n * @public\n * @namespace DataModel\n */\nclass ReducerStore {\n constructor () {\n this.store = new Map();\n this.store.set('defReducer', defReducer);\n\n Object.entries(fnList).forEach((key) => {\n this.store.set(key[0], key[1]);\n });\n }\n\n /**\n * Changes the `defaultReducer` globally. For all the fields which does not have `defAggFn` mentioned in schema, the\n * value of `defaultReducer` is used for aggregation.\n *\n * @public\n * @param {string} [reducer='sum'] - The name of the default reducer. It picks up the definition from store by doing\n * name lookup. If no name is found then it takes `sum` as the default reducer.\n * @return {ReducerStore} Returns instance of the singleton store in page.\n */\n defaultReducer (...params) {\n if (!params.length) {\n return this.store.get('defReducer');\n }\n\n let reducer = params[0];\n\n if (typeof reducer === 'function') {\n this.store.set('defReducer', reducer);\n } else {\n reducer = String(reducer);\n if (Object.keys(fnList).indexOf(reducer) !== -1) {\n this.store.set('defReducer', fnList[reducer]);\n } else {\n throw new Error(`Reducer ${reducer} not found in registry`);\n }\n }\n return this;\n }\n\n /**\n *\n * Registers a {@link reducer | reducer}.\n * A {@link reducer | reducer} has to be registered before it is used.\n *\n * @example\n * // find the mean squared value of a given set\n * const reducerStore = DataModel.Reducers();\n *\n * reducers.register('meanSquared', (arr) => {\n * const squaredVal = arr.map(item => item * item);\n * let sum = 0;\n * for (let i = 0, l = squaredVal.length; i < l; i++) {\n * sum += squaredVal[i++];\n * }\n *\n * return sum;\n * })\n *\n * // datamodel (dm) is already prepared with cars.json\n * const dm1 = dm.groupBy(['origin'], {\n * accleration: 'meanSquared'\n * });\n *\n * @public\n *\n * @param {string} name formal name for a reducer. If the given name already exists in store it is overridden by new\n * definition.\n * @param {Function} reducer definition of {@link reducer} function.\n *\n * @return {Function} function for unregistering the reducer.\n */\n register (name, reducer) {\n if (typeof reducer !== 'function') {\n throw new Error('Reducer should be a function');\n }\n\n name = String(name);\n this.store.set(name, reducer);\n\n return () => { this.__unregister(name); };\n }\n\n __unregister (name) {\n if (this.store.has(name)) {\n this.store.delete(name);\n }\n }\n\n resolve (name) {\n if (name instanceof Function) {\n return name;\n }\n return this.store.get(name);\n }\n}\n\nconst reducerStore = (function () {\n let store = null;\n\n function getStore () {\n if (store === null) {\n store = new ReducerStore();\n }\n return store;\n }\n return getStore();\n}());\n\nexport default reducerStore;\n","import { getCommonSchema } from './get-common-schema';\n\n/**\n * The filter function used in natural join.\n * It generates a function that will have the logic to join two\n * DataModel instances by the process of natural join.\n *\n * @param {DataModel} dm1 - The left DataModel instance.\n * @param {DataModel} dm2 - The right DataModel instance.\n * @return {Function} Returns a function that is used in cross-product operation.\n */\nexport function naturalJoinFilter (dm1, dm2) {\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n // const dm1FieldStoreName = dm1FieldStore.name;\n // const dm2FieldStoreName = dm2FieldStore.name;\n const commonSchemaArr = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n return (dm1Fields, dm2Fields) => {\n let retainTuple = true;\n commonSchemaArr.forEach((fieldName) => {\n if (dm1Fields[fieldName].internalValue ===\n dm2Fields[fieldName].internalValue && retainTuple) {\n retainTuple = true;\n } else {\n retainTuple = false;\n }\n });\n return retainTuple;\n };\n}\n","import DataModel from '../export';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n/**\n * Performs the union operation between two dm instances.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function union (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n */\n function prepareDataHelper (dm, fieldsObj) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n data.push(tuple);\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm1, dm1FieldStoreFieldObj);\n prepareDataHelper(dm2, dm2FieldStoreFieldObj);\n\n return new DataModel(data, schema, { name });\n}\n","import { crossProduct } from './cross-product';\nimport { JOINS } from '../constants';\nimport { union } from './union';\n\n\nexport function leftOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel1, dataModel2, filterFn, false, JOINS.LEFTOUTER);\n}\n\nexport function rightOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel2, dataModel1, filterFn, false, JOINS.RIGHTOUTER);\n}\n\nexport function fullOuterJoin (dataModel1, dataModel2, filterFn) {\n return union(leftOuterJoin(dataModel1, dataModel2, filterFn), rightOuterJoin(dataModel1, dataModel2, filterFn));\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\n\n/**\n * In {@link DataModel}, every tabular data consists of column, a column is stored as field.\n * Field contains all the data for a given column in an array.\n *\n * Each record consists of several fields; the fields of all records form the columns.\n * Examples of fields: name, gender, sex etc.\n *\n * In DataModel, each field can have multiple attributes which describes its data and behaviour.\n * A field can have two types of data: Measure and Dimension.\n *\n * A Dimension Field is the context on which a data is categorized and the measure is the numerical values that\n * quantify the data set.\n * In short a dimension is the lens through which you are looking at your measure data.\n *\n * Refer to {@link Schema} to get info about possible field attributes.\n *\n * @public\n * @class\n */\nexport default class Field {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n this.partialField = partialField;\n this.rowDiffset = rowDiffset;\n }\n\n /**\n * Generates the field type specific domain.\n *\n * @public\n * @abstract\n */\n domain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the the field schema.\n *\n * @public\n * @return {string} Returns the field schema.\n */\n schema () {\n return this.partialField.schema;\n }\n\n /**\n * Returns the name of the field.\n *\n * @public\n * @return {string} Returns the name of the field.\n */\n name () {\n return this.partialField.name;\n }\n\n /**\n * Returns the type of the field.\n *\n * @public\n * @return {string} Returns the type of the field.\n */\n type () {\n return this.partialField.schema.type;\n }\n\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return this.partialField.schema.subtype;\n }\n\n /**\n * Returns the description of the field.\n *\n * @public\n * @return {string} Returns the description of the field.\n */\n description () {\n return this.partialField.schema.description;\n }\n\n /**\n * Returns the display name of the field.\n *\n * @public\n * @return {string} Returns the display name of the field.\n */\n displayName () {\n return this.partialField.schema.displayName || this.partialField.schema.name;\n }\n\n /**\n * Returns the data associated with the field.\n *\n * @public\n * @return {Array} Returns the data.\n */\n data () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n data.push(this.partialField.data[i]);\n });\n return data;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @abstract\n */\n formattedData () {\n throw new Error('Not yet implemented');\n }\n}\n","import Field from '../field';\n\n/**\n * Represents dimension field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Dimension extends Field {\n /**\n * Returns the domain for the dimension field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { DimensionSubtype } from '../../enums';\nimport Dimension from '../dimension';\n/**\n * Represents categorical field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Categorical extends Dimension {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return DimensionSubtype.CATEGORICAL;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n return domain;\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport Dimension from '../dimension';\nimport { DateTimeFormatter } from '../../utils';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents temporal field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Temporal extends Dimension {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n super(partialField, rowDiffset);\n\n this._cachedMinDiff = null;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be\n // occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n\n return domain;\n }\n\n\n /**\n * Calculates the minimum consecutive difference from the associated field data.\n *\n * @public\n * @return {number} Returns the minimum consecutive diff in milliseconds.\n */\n minimumConsecutiveDifference () {\n if (this._cachedMinDiff) {\n return this._cachedMinDiff;\n }\n\n const sortedData = this.data().filter(item => !(item instanceof InvalidAwareTypes)).sort((a, b) => a - b);\n const arrLn = sortedData.length;\n let minDiff = Number.POSITIVE_INFINITY;\n let prevDatum;\n let nextDatum;\n let processedCount = 0;\n\n for (let i = 1; i < arrLn; i++) {\n prevDatum = sortedData[i - 1];\n nextDatum = sortedData[i];\n\n if (nextDatum === prevDatum) {\n continue;\n }\n\n minDiff = Math.min(minDiff, nextDatum - sortedData[i - 1]);\n processedCount++;\n }\n\n if (!processedCount) {\n minDiff = null;\n }\n this._cachedMinDiff = minDiff;\n\n return this._cachedMinDiff;\n }\n\n /**\n * Returns the format specified in the input schema while creating field.\n *\n * @public\n * @return {string} Returns the datetime format.\n */\n format () {\n return this.partialField.schema.format;\n }\n\n /**\n * Returns the formatted version of the underlying field data\n * If data is of type invalid or has missing format use the raw value\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n const data = [];\n const dataFormat = this.format();\n\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n // If value is of invalid type or format is missing\n if (InvalidAwareTypes.isInvalid(datum) || (!dataFormat && Number.isFinite(datum))) {\n // Use the invalid map value or the raw value\n const parsedDatum = InvalidAwareTypes.getInvalidType(datum) || datum;\n data.push(parsedDatum);\n } else {\n data.push(DateTimeFormatter.formatAs(datum, dataFormat));\n }\n });\n return data;\n }\n}\n\n","import Dimension from '../dimension';\n\n/**\n * Represents binned field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Binned extends Dimension {\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the last and first values of bins config array.\n */\n calculateDataDomain () {\n const binsArr = this.partialField.schema.bins;\n return [binsArr[0], binsArr[binsArr.length - 1]];\n }\n\n /**\n * Returns the bins config provided while creating the field instance.\n *\n * @public\n * @return {Array} Returns the bins array config.\n */\n bins () {\n return this.partialField.schema.bins;\n }\n}\n","import { formatNumber } from '../../utils';\nimport { defaultReducerName } from '../../operator/group-by-function';\nimport Field from '../field';\n\n/**\n * Represents measure field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Measure extends Field {\n /**\n * Returns the domain for the measure field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Returns the unit of the measure field.\n *\n * @public\n * @return {string} Returns unit of the field.\n */\n unit () {\n return this.partialField.schema.unit;\n }\n\n /**\n * Returns the aggregation function name of the measure field.\n *\n * @public\n * @return {string} Returns aggregation function name of the field.\n */\n defAggFn () {\n return this.partialField.schema.defAggFn || defaultReducerName;\n }\n\n /**\n * Returns the number format of the measure field.\n *\n * @public\n * @return {Function} Returns number format of the field.\n */\n numberFormat () {\n const { numberFormat } = this.partialField.schema;\n return numberFormat instanceof Function ? numberFormat : formatNumber;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { MeasureSubtype } from '../../enums';\nimport Measure from '../measure';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents continuous field subtype.\n *\n * @public\n * @class\n * @extends Measure\n */\nexport default class Continuous extends Measure {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return MeasureSubtype.CONTINUOUS;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the min and max values.\n */\n calculateDataDomain () {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n return;\n }\n\n if (datum < min) {\n min = datum;\n }\n if (datum > max) {\n max = datum;\n }\n });\n\n return [min, max];\n }\n}\n","/**\n * A interface to represent a parser which is responsible to parse the field.\n *\n * @public\n * @interface\n */\nexport default class FieldParser {\n /**\n * Parses a single value of a field and return the sanitized form.\n *\n * @public\n * @abstract\n */\n parse () {\n throw new Error('Not yet implemented');\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the categorical values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class CategoricalParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the stringified form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the stringified value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n result = String(val).trim();\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { DateTimeFormatter } from '../../../utils';\nimport FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the temporal values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class TemporalParser extends FieldParser {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {Object} schema - The schema object for the corresponding field.\n */\n constructor (schema) {\n super();\n this.schema = schema;\n this._dtf = new DateTimeFormatter(this.schema.format);\n }\n\n /**\n * Parses a single value of a field and returns the millisecond value.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {number} Returns the millisecond value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let nativeDate = this._dtf.getNativeDate(val);\n result = nativeDate ? nativeDate.getTime() : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the binned values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class BinnedParser extends FieldParser {\n /**\n * Parses a single binned value of a field and returns the sanitized value.\n *\n * @public\n * @param {string} val - The value of the field.\n * @return {string} Returns the sanitized value.\n */\n parse (val) {\n const regex = /^\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*-\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*$/;\n val = String(val);\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let matched = val.match(regex);\n result = matched ? `${Number.parseFloat(matched[1])}-${Number.parseFloat(matched[2])}`\n : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the continuous values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class ContinuousParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the number form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the number value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let parsedVal = parseFloat(val, 10);\n result = Number.isNaN(parsedVal) ? InvalidAwareTypes.NA : parsedVal;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","/**\n * Stores the full data and the metadata of a field. It provides\n * a single source of data from which the future Field\n * instance can get a subset of it with a rowDiffset config.\n *\n * @class\n * @public\n */\nexport default class PartialField {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} name - The name of the field.\n * @param {Array} data - The data array.\n * @param {Object} schema - The schema object of the corresponding field.\n * @param {FieldParser} parser - The parser instance corresponding to that field.\n */\n constructor (name, data, schema, parser) {\n this.name = name;\n this.schema = schema;\n this.parser = parser;\n this.data = this._sanitize(data);\n }\n\n /**\n * Sanitizes the field data.\n *\n * @private\n * @param {Array} data - The actual input data.\n * @return {Array} Returns the sanitized data.\n */\n _sanitize (data) {\n return data.map(datum => this.parser.parse(datum));\n }\n}\n","import { FieldType, DimensionSubtype, MeasureSubtype } from './enums';\nimport {\n Categorical,\n Temporal,\n Binned,\n Continuous,\n CategoricalParser,\n TemporalParser,\n BinnedParser,\n ContinuousParser,\n PartialField\n} from './fields';\n\n/**\n * Creates a field instance according to the provided data and schema.\n *\n * @param {Array} data - The field data array.\n * @param {Object} schema - The field schema object.\n * @return {Field} Returns the newly created field instance.\n */\nfunction createUnitField(data, schema) {\n data = data || [];\n let partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.TEMPORAL:\n partialField = new PartialField(schema.name, data, schema, new TemporalParser(schema));\n return new Temporal(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.BINNED:\n partialField = new PartialField(schema.name, data, schema, new BinnedParser());\n return new Binned(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n}\n\n\n/**\n * Creates a field instance from partialField and rowDiffset.\n *\n * @param {PartialField} partialField - The corresponding partial field.\n * @param {string} rowDiffset - The data subset config.\n * @return {Field} Returns the newly created field instance.\n */\nexport function createUnitFieldFromPartial(partialField, rowDiffset) {\n const { schema } = partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n return new Continuous(partialField, rowDiffset);\n default:\n return new Continuous(partialField, rowDiffset);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n return new Categorical(partialField, rowDiffset);\n case DimensionSubtype.TEMPORAL:\n return new Temporal(partialField, rowDiffset);\n case DimensionSubtype.BINNED:\n return new Binned(partialField, rowDiffset);\n default:\n return new Categorical(partialField, rowDiffset);\n }\n default:\n return new Categorical(partialField, rowDiffset);\n }\n}\n\n/**\n * Creates the field instances with input data and schema.\n *\n * @param {Array} dataColumn - The data array for fields.\n * @param {Array} schema - The schema array for fields.\n * @param {Array} headers - The array of header names.\n * @return {Array.} Returns an array of newly created field instances.\n */\nexport function createFields(dataColumn, schema, headers) {\n const headersObj = {};\n\n if (!(headers && headers.length)) {\n headers = schema.map(item => item.name);\n }\n\n headers.forEach((header, i) => {\n headersObj[header] = i;\n });\n\n return schema.map(item => createUnitField(dataColumn[headersObj[item.name]], item));\n}\n","import { DataFormat } from './enums';\n\nexport default {\n dataFormat: DataFormat.AUTO\n};\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in DSV array to a manageable internal format.\n *\n * @param {Array.} arr - A 2D array containing of the DSV data.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv data is header or not.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * [\"a\", \"b\", \"c\"],\n * [1, 2, 3],\n * [4, 5, 6],\n * [7, 8, 9]\n * ];\n */\nfunction DSVArr (arr, schema, options) {\n if (!Array.isArray(schema)) {\n throw new Error('Schema missing or is in an unsupported format');\n }\n const defaultOption = {\n firstRowHeader: true,\n };\n const schemaFields = schema.map(unitSchema => unitSchema.name);\n options = Object.assign({}, defaultOption, options);\n\n const columns = [];\n const push = columnMajor(columns);\n\n if (options.firstRowHeader) {\n // If header present then remove the first header row.\n // Do in-place mutation to save space.\n arr.splice(0, 1)[0];\n }\n\n arr.forEach(field => push(...field));\n\n return [schemaFields, columns];\n}\n\nexport default DSVArr;\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows\n };\n}\n","import dsv from \"./dsv\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\n","import dsv from \"./dsv\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\n","import { dsvFormat as d3Dsv } from 'd3-dsv';\nimport DSVArr from './dsv-arr';\n\n/**\n * Parses and converts data formatted in DSV string to a manageable internal format.\n *\n * @todo Support to be given for https://tools.ietf.org/html/rfc4180.\n * @todo Sample implementation https://github.com/knrz/CSV.js/.\n *\n * @param {string} str - The input DSV string.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv string data is header or not.\n * @param {string} [options.fieldSeparator=\",\"] - The separator of two consecutive field.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = `\n * a,b,c\n * 1,2,3\n * 4,5,6\n * 7,8,9\n * `\n */\nfunction DSVStr (str, schema, options) {\n const defaultOption = {\n firstRowHeader: true,\n fieldSeparator: ','\n };\n options = Object.assign({}, defaultOption, options);\n\n const dsv = d3Dsv(options.fieldSeparator);\n return DSVArr(dsv.parseRows(str), schema, options);\n}\n\nexport default DSVStr;\n","import FlatJSON from './flat-json';\nimport DSVArr from './dsv-arr';\nimport DSVStr from './dsv-str';\nimport { detectDataFormat } from '../utils';\n\n/**\n * Parses the input data and detect the format automatically.\n *\n * @param {string|Array} data - The input data.\n * @param {Object} options - An optional config specific to data format.\n * @return {Array.} Returns an array of headers and column major data.\n */\nfunction Auto (data, schema, options) {\n const converters = { FlatJSON, DSVStr, DSVArr };\n const dataFormat = detectDataFormat(data);\n\n if (!dataFormat) {\n throw new Error('Couldn\\'t detect the data format');\n }\n\n return converters[dataFormat](data, schema, options);\n}\n\nexport default Auto;\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in JSON to a manageable internal format.\n *\n * @param {Array.} arr - The input data formatted in JSON.\n * @return {Array.} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * {\n * \"a\": 1,\n * \"b\": 2,\n * \"c\": 3\n * },\n * {\n * \"a\": 4,\n * \"b\": 5,\n * \"c\": 6\n * },\n * {\n * \"a\": 7,\n * \"b\": 8,\n * \"c\": 9\n * }\n * ];\n */\nfunction FlatJSON (arr, schema) {\n if (!Array.isArray(schema)) {\n throw new Error('Schema missing or is in an unsupported format');\n }\n\n const header = {};\n let i = 0;\n let insertionIndex;\n const columns = [];\n const push = columnMajor(columns);\n const schemaFieldsName = schema.map(unitSchema => unitSchema.name);\n\n arr.forEach((item) => {\n const fields = [];\n schemaFieldsName.forEach((unitSchema) => {\n if (unitSchema in header) {\n insertionIndex = header[unitSchema];\n } else {\n header[unitSchema] = i++;\n insertionIndex = i - 1;\n }\n fields[insertionIndex] = item[unitSchema];\n });\n push(...fields);\n });\n\n return [Object.keys(header), columns];\n}\n\nexport default FlatJSON;\n","import { FieldType, FilteringMode, DimensionSubtype, MeasureSubtype, DataFormat } from './enums';\nimport fieldStore from './field-store';\nimport Value from './value';\nimport {\n rowDiffsetIterator\n} from './operator';\nimport { DM_DERIVATIVES, LOGICAL_OPERATORS } from './constants';\nimport { createFields, createUnitFieldFromPartial } from './field-creator';\nimport defaultConfig from './default-config';\nimport * as converter from './converter';\nimport { extend2, detectDataFormat } from './utils';\n\n/**\n * Prepares the selection data.\n */\nfunction prepareSelectionData (fields, formattedData, rawData, i) {\n const resp = {};\n\n for (const [key, field] of fields.entries()) {\n resp[field.name()] = new Value(formattedData[key][i], rawData[key][i], field);\n }\n return resp;\n}\n\nexport function prepareJoinData (fields) {\n const resp = {};\n\n for (const key in fields) {\n resp[key] = new Value(fields[key].formattedValue, fields[key].rawValue, key);\n }\n return resp;\n}\n\nexport const updateFields = ([rowDiffset, colIdentifier], partialFieldspace, fieldStoreName) => {\n let collID = colIdentifier.length ? colIdentifier.split(',') : [];\n let partialFieldMap = partialFieldspace.fieldsObj();\n let newFields = collID.map(coll => createUnitFieldFromPartial(partialFieldMap[coll].partialField, rowDiffset));\n return fieldStore.createNamespace(newFields, fieldStoreName);\n};\n\nexport const persistCurrentDerivation = (model, operation, config = {}, criteriaFn) => {\n if (operation === DM_DERIVATIVES.COMPOSE) {\n model._derivation.length = 0;\n model._derivation.push(...criteriaFn);\n } else {\n model._derivation.push({\n op: operation,\n meta: config,\n criteria: criteriaFn\n });\n }\n};\nexport const persistAncestorDerivation = (sourceDm, newDm) => {\n newDm._ancestorDerivation.push(...sourceDm._ancestorDerivation, ...sourceDm._derivation);\n};\n\nexport const persistDerivations = (sourceDm, model, operation, config = {}, criteriaFn) => {\n persistCurrentDerivation(model, operation, config, criteriaFn);\n persistAncestorDerivation(sourceDm, model);\n};\n\nconst selectModeMap = {\n [FilteringMode.NORMAL]: {\n diffIndex: ['rowDiffset'],\n calcDiff: [true, false]\n },\n [FilteringMode.INVERSE]: {\n diffIndex: ['rejectRowDiffset'],\n calcDiff: [false, true]\n },\n [FilteringMode.ALL]: {\n diffIndex: ['rowDiffset', 'rejectRowDiffset'],\n calcDiff: [true, true]\n }\n};\n\nconst generateRowDiffset = (rowDiffset, i, lastInsertedValue) => {\n if (lastInsertedValue !== -1 && i === (lastInsertedValue + 1)) {\n const li = rowDiffset.length - 1;\n\n rowDiffset[li] = `${rowDiffset[li].split('-')[0]}-${i}`;\n } else {\n rowDiffset.push(`${i}`);\n }\n};\n\nexport const selectRowDiffsetIterator = (rowDiffset, checker, mode) => {\n let lastInsertedValueSel = -1;\n let lastInsertedValueRej = -1;\n const newRowDiffSet = [];\n const rejRowDiffSet = [];\n\n const [shouldSelect, shouldReject] = selectModeMap[mode].calcDiff;\n\n rowDiffsetIterator(rowDiffset, (i) => {\n const checkerResult = checker(i);\n checkerResult && shouldSelect && generateRowDiffset(newRowDiffSet, i, lastInsertedValueSel);\n !checkerResult && shouldReject && generateRowDiffset(rejRowDiffSet, i, lastInsertedValueRej);\n });\n return {\n rowDiffset: newRowDiffSet.join(','),\n rejectRowDiffset: rejRowDiffSet.join(',')\n };\n};\n\n\nexport const rowSplitDiffsetIterator = (rowDiffset, checker, mode, dimensionArr, fieldStoreObj) => {\n let lastInsertedValue = {};\n const splitRowDiffset = {};\n const dimensionMap = {};\n\n rowDiffsetIterator(rowDiffset, (i) => {\n if (checker(i)) {\n let hash = '';\n\n let dimensionSet = { keys: {} };\n\n dimensionArr.forEach((_) => {\n const data = fieldStoreObj[_].partialField.data[i];\n hash = `${hash}-${data}`;\n dimensionSet.keys[_] = data;\n });\n\n if (splitRowDiffset[hash] === undefined) {\n splitRowDiffset[hash] = [];\n lastInsertedValue[hash] = -1;\n dimensionMap[hash] = dimensionSet;\n }\n\n generateRowDiffset(splitRowDiffset[hash], i, lastInsertedValue[hash]);\n lastInsertedValue[hash] = i;\n }\n });\n\n return {\n splitRowDiffset,\n dimensionMap\n };\n};\n\n\nexport const selectHelper = (clonedDm, selectFn, config, sourceDm, iterator) => {\n let cachedStore = {};\n let cloneProvider = () => sourceDm.detachedRoot();\n const { mode } = config;\n const rowDiffset = clonedDm._rowDiffset;\n const fields = clonedDm.getPartialFieldspace().fields;\n const formattedFieldsData = fields.map(field => field.formattedData());\n const rawFieldsData = fields.map(field => field.data());\n\n const selectorHelperFn = index => selectFn(\n prepareSelectionData(fields, formattedFieldsData, rawFieldsData, index),\n index,\n cloneProvider,\n cachedStore\n );\n\n return iterator(rowDiffset, selectorHelperFn, mode);\n};\n\nexport const cloneWithAllFields = (model) => {\n const clonedDm = model.clone(false);\n const partialFieldspace = model.getPartialFieldspace();\n clonedDm._colIdentifier = partialFieldspace.fields.map(f => f.name()).join(',');\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n\n return clonedDm;\n};\n\nconst getKey = (arr, data, fn) => {\n let key = fn(arr, data, 0);\n\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${fn(arr, data, i)}`;\n }\n return key;\n};\n\nexport const filterPropagationModel = (model, propModels, config = {}) => {\n let fns = [];\n const operation = config.operation || LOGICAL_OPERATORS.AND;\n const filterByMeasure = config.filterByMeasure || false;\n const clonedModel = cloneWithAllFields(model);\n const modelFieldsConfig = clonedModel.getFieldsConfig();\n\n if (!propModels.length) {\n fns = [() => false];\n } else {\n fns = propModels.map(propModel => ((dataModel) => {\n let keyFn;\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const dimensions = Object.keys(dataModel.getFieldspace().getDimension())\n .filter(d => d in modelFieldsConfig);\n const dLen = dimensions.length;\n const indices = dimensions.map(d =>\n fieldsConfig[d].index);\n const measures = Object.keys(dataModel.getFieldspace().getMeasure())\n .filter(d => d in modelFieldsConfig);\n const fieldsSpace = dataModel.getFieldspace().fieldsObj();\n const data = dataObj.data;\n const domain = measures.reduce((acc, v) => {\n acc[v] = fieldsSpace[v].domain();\n return acc;\n }, {});\n const valuesMap = {};\n\n keyFn = (arr, row, idx) => row[arr[idx]];\n if (dLen) {\n data.forEach((row) => {\n const key = getKey(indices, row, keyFn);\n valuesMap[key] = 1;\n });\n }\n\n keyFn = (arr, fields, idx) => fields[arr[idx]].internalValue;\n return data.length ? (fields) => {\n const present = dLen ? valuesMap[getKey(dimensions, fields, keyFn)] : true;\n\n if (filterByMeasure) {\n return measures.every(field => fields[field].internalValue >= domain[field][0] &&\n fields[field].internalValue <= domain[field][1]) && present;\n }\n return present;\n } : () => false;\n })(propModel));\n }\n\n let filteredModel;\n if (operation === LOGICAL_OPERATORS.AND) {\n filteredModel = clonedModel.select(fields => fns.every(fn => fn(fields)), {\n saveChild: false\n });\n } else {\n filteredModel = clonedModel.select(fields => fns.some(fn => fn(fields)), {\n saveChild: false\n });\n }\n\n return filteredModel;\n};\n\n\nexport const splitWithSelect = (sourceDm, dimensionArr, reducerFn = val => val, config) => {\n const {\n saveChild,\n } = config;\n const fieldStoreObj = sourceDm.getFieldspace().fieldsObj();\n\n const {\n splitRowDiffset,\n dimensionMap\n } = selectHelper(\n sourceDm.clone(saveChild),\n reducerFn,\n config,\n sourceDm,\n (...params) => rowSplitDiffsetIterator(...params, dimensionArr, fieldStoreObj)\n );\n\n const clonedDMs = [];\n Object.keys(splitRowDiffset).sort().forEach((e) => {\n if (splitRowDiffset[e]) {\n const cloned = sourceDm.clone(saveChild);\n const derivation = dimensionMap[e];\n cloned._rowDiffset = splitRowDiffset[e].join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n const derivationFormula = fields => dimensionArr.every(_ => fields[_].internalValue === derivation.keys[_]);\n // Store reference to child model and selector function\n if (saveChild) {\n persistDerivations(sourceDm, cloned, DM_DERIVATIVES.SELECT, config, derivationFormula);\n }\n cloned._derivation[cloned._derivation.length - 1].meta = dimensionMap[e];\n\n clonedDMs.push(cloned);\n }\n });\n\n\n return clonedDMs;\n};\nexport const addDiffsetToClonedDm = (clonedDm, rowDiffset, sourceDm, selectConfig, selectFn) => {\n clonedDm._rowDiffset = rowDiffset;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n persistDerivations(\n sourceDm,\n clonedDm,\n DM_DERIVATIVES.SELECT,\n { config: selectConfig },\n selectFn\n );\n};\n\n\nexport const cloneWithSelect = (sourceDm, selectFn, selectConfig, cloneConfig) => {\n let extraCloneDm = {};\n\n let { mode } = selectConfig;\n\n const cloned = sourceDm.clone(cloneConfig.saveChild);\n const setOfRowDiffsets = selectHelper(\n cloned,\n selectFn,\n selectConfig,\n sourceDm,\n selectRowDiffsetIterator\n );\n const diffIndex = selectModeMap[mode].diffIndex;\n\n addDiffsetToClonedDm(cloned, setOfRowDiffsets[diffIndex[0]], sourceDm, selectConfig, selectFn);\n\n if (diffIndex.length > 1) {\n extraCloneDm = sourceDm.clone(cloneConfig.saveChild);\n addDiffsetToClonedDm(extraCloneDm, setOfRowDiffsets[diffIndex[1]], sourceDm, selectConfig, selectFn);\n return [cloned, extraCloneDm];\n }\n\n return cloned;\n};\n\nexport const cloneWithProject = (sourceDm, projField, config, allFields) => {\n const cloned = sourceDm.clone(config.saveChild);\n let projectionSet = projField;\n if (config.mode === FilteringMode.INVERSE) {\n projectionSet = allFields.filter(fieldName => projField.indexOf(fieldName) === -1);\n }\n // cloned._colIdentifier = sourceDm._colIdentifier.split(',')\n // .filter(coll => projectionSet.indexOf(coll) !== -1).join();\n cloned._colIdentifier = projectionSet.join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivations(\n sourceDm,\n cloned,\n DM_DERIVATIVES.PROJECT,\n { projField, config, actualProjField: projectionSet },\n null\n );\n\n return cloned;\n};\n\n\nexport const splitWithProject = (sourceDm, projFieldSet, config, allFields) =>\n projFieldSet.map(projFields =>\n cloneWithProject(sourceDm, projFields, config, allFields));\n\nexport const sanitizeUnitSchema = (unitSchema) => {\n // Do deep clone of the unit schema as the user might change it later.\n unitSchema = extend2({}, unitSchema);\n if (!unitSchema.type) {\n unitSchema.type = FieldType.DIMENSION;\n }\n\n if (!unitSchema.subtype) {\n switch (unitSchema.type) {\n case FieldType.MEASURE:\n unitSchema.subtype = MeasureSubtype.CONTINUOUS;\n break;\n default:\n case FieldType.DIMENSION:\n unitSchema.subtype = DimensionSubtype.CATEGORICAL;\n break;\n }\n }\n\n return unitSchema;\n};\n\nexport const validateUnitSchema = (unitSchema) => {\n const supportedMeasureSubTypes = [MeasureSubtype.CONTINUOUS];\n const supportedDimSubTypes = [\n DimensionSubtype.CATEGORICAL,\n DimensionSubtype.BINNED,\n DimensionSubtype.TEMPORAL,\n DimensionSubtype.GEO\n ];\n const { type, subtype, name } = unitSchema;\n\n switch (type) {\n case FieldType.DIMENSION:\n if (supportedDimSubTypes.indexOf(subtype) === -1) {\n throw new Error(`DataModel doesn't support dimension field subtype ${subtype} used for ${name} field`);\n }\n break;\n case FieldType.MEASURE:\n if (supportedMeasureSubTypes.indexOf(subtype) === -1) {\n throw new Error(`DataModel doesn't support measure field subtype ${subtype} used for ${name} field`);\n }\n break;\n default:\n throw new Error(`DataModel doesn't support field type ${type} used for ${name} field`);\n }\n};\n\nexport const sanitizeAndValidateSchema = schema => schema.map((unitSchema) => {\n unitSchema = sanitizeUnitSchema(unitSchema);\n validateUnitSchema(unitSchema);\n return unitSchema;\n});\n\nexport const resolveFieldName = (schema, dataHeader) => {\n schema.forEach((unitSchema) => {\n const fieldNameAs = unitSchema.as;\n if (!fieldNameAs) { return; }\n\n const idx = dataHeader.indexOf(unitSchema.name);\n dataHeader[idx] = fieldNameAs;\n unitSchema.name = fieldNameAs;\n delete unitSchema.as;\n });\n};\n\nexport const updateData = (relation, data, schema, options) => {\n schema = sanitizeAndValidateSchema(schema);\n options = Object.assign(Object.assign({}, defaultConfig), options);\n const converterFn = converter[options.dataFormat];\n\n if (!(converterFn && typeof converterFn === 'function')) {\n throw new Error(`No converter function found for ${options.dataFormat} format`);\n }\n\n const [header, formattedData] = converterFn(data, schema, options);\n resolveFieldName(schema, header);\n const fieldArr = createFields(formattedData, schema, header);\n\n // This will create a new fieldStore with the fields\n const nameSpace = fieldStore.createNamespace(fieldArr, options.name);\n relation._partialFieldspace = nameSpace;\n\n // If data is provided create the default colIdentifier and rowDiffset\n relation._rowDiffset = formattedData.length && formattedData[0].length ? `0-${formattedData[0].length - 1}` : '';\n\n // This stores the value objects which is passed to the filter method when selection operation is done.\n const valueObjects = [];\n const { fields } = nameSpace;\n const rawFieldsData = fields.map(field => field.data());\n const formattedFieldsData = fields.map(field => field.formattedData());\n rowDiffsetIterator(relation._rowDiffset, (i) => {\n valueObjects[i] = prepareSelectionData(fields, formattedFieldsData, rawFieldsData, i);\n });\n nameSpace._cachedValueObjects = valueObjects;\n\n relation._colIdentifier = (schema.map(_ => _.name)).join();\n relation._dataFormat = options.dataFormat === DataFormat.AUTO ? detectDataFormat(data) : options.dataFormat;\n return relation;\n};\n\nexport const fieldInSchema = (schema, field) => {\n let i = 0;\n\n for (; i < schema.length; ++i) {\n if (field === schema[i].name) {\n return {\n name: field,\n type: schema[i].subtype || schema[i].type,\n index: i,\n };\n }\n }\n return null;\n};\n\nexport const getDerivationArguments = (derivation) => {\n let params = [];\n let operation;\n operation = derivation.op;\n switch (operation) {\n case DM_DERIVATIVES.SELECT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.PROJECT:\n params = [derivation.meta.actualProjField];\n break;\n case DM_DERIVATIVES.SORT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.GROUPBY:\n operation = 'groupBy';\n params = [derivation.meta.groupByString.split(','), derivation.criteria];\n break;\n default:\n operation = null;\n }\n\n return {\n operation,\n params\n };\n};\n\nconst applyExistingOperationOnModel = (propModel, dataModel) => {\n const derivations = dataModel.getDerivations();\n let selectionModel = propModel;\n\n derivations.forEach((derivation) => {\n if (!derivation) {\n return;\n }\n\n const { operation, params } = getDerivationArguments(derivation);\n if (operation) {\n selectionModel = selectionModel[operation](...params, {\n saveChild: false\n });\n }\n });\n\n return selectionModel;\n};\n\nconst getFilteredModel = (propModel, path) => {\n for (let i = 0, len = path.length; i < len; i++) {\n const model = path[i];\n propModel = applyExistingOperationOnModel(propModel, model);\n }\n return propModel;\n};\n\nconst propagateIdentifiers = (dataModel, propModel, config = {}, propModelInf = {}) => {\n const nonTraversingModel = propModelInf.nonTraversingModel;\n const excludeModels = propModelInf.excludeModels || [];\n\n if (dataModel === nonTraversingModel) {\n return;\n }\n\n const propagate = excludeModels.length ? excludeModels.indexOf(dataModel) === -1 : true;\n\n propagate && dataModel.handlePropagation(propModel, config);\n\n const children = dataModel._children;\n children.forEach((child) => {\n const selectionModel = applyExistingOperationOnModel(propModel, child);\n propagateIdentifiers(child, selectionModel, config, propModelInf);\n });\n};\n\nexport const getRootGroupByModel = (model) => {\n while (model._parent && model._derivation.find(d => d.op !== DM_DERIVATIVES.GROUPBY)) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getRootDataModel = (model) => {\n while (model._parent) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getPathToRootModel = (model, path = []) => {\n while (model._parent) {\n path.push(model);\n model = model._parent;\n }\n return path;\n};\n\nexport const propagateToAllDataModels = (identifiers, rootModels, propagationInf, config) => {\n let criteria;\n let propModel;\n const { propagationNameSpace, propagateToSource } = propagationInf;\n const propagationSourceId = propagationInf.sourceId;\n const propagateInterpolatedValues = config.propagateInterpolatedValues;\n const filterFn = (entry) => {\n const filter = config.filterFn || (() => true);\n return filter(entry, config);\n };\n\n let criterias = [];\n\n if (identifiers === null && config.persistent !== true) {\n criterias = [{\n criteria: []\n }];\n criteria = [];\n } else {\n let actionCriterias = Object.values(propagationNameSpace.mutableActions);\n if (propagateToSource !== false) {\n actionCriterias = actionCriterias.filter(d => d.config.sourceId !== propagationSourceId);\n }\n\n const filteredCriteria = actionCriterias.filter(filterFn).map(action => action.config.criteria);\n\n const excludeModels = [];\n\n if (propagateToSource !== false) {\n const sourceActionCriterias = Object.values(propagationNameSpace.mutableActions);\n\n sourceActionCriterias.forEach((actionInf) => {\n const actionConf = actionInf.config;\n if (actionConf.applyOnSource === false && actionConf.action === config.action &&\n actionConf.sourceId !== propagationSourceId) {\n excludeModels.push(actionInf.model);\n criteria = sourceActionCriterias.filter(d => d !== actionInf).map(d => d.config.criteria);\n criteria.length && criterias.push({\n criteria,\n models: actionInf.model,\n path: getPathToRootModel(actionInf.model)\n });\n }\n });\n }\n\n\n criteria = [].concat(...[...filteredCriteria, identifiers]).filter(d => d !== null);\n criterias.push({\n criteria,\n excludeModels: [...excludeModels, ...config.excludeModels || []]\n });\n }\n\n const rootModel = rootModels.model;\n\n const propConfig = Object.assign({\n sourceIdentifiers: identifiers,\n propagationSourceId\n }, config);\n\n const rootGroupByModel = rootModels.groupByModel;\n if (propagateInterpolatedValues && rootGroupByModel) {\n propModel = filterPropagationModel(rootGroupByModel, criteria, {\n filterByMeasure: propagateInterpolatedValues\n });\n propagateIdentifiers(rootGroupByModel, propModel, propConfig);\n }\n\n criterias.forEach((inf) => {\n const propagationModel = filterPropagationModel(rootModel, inf.criteria);\n const path = inf.path;\n\n if (path) {\n const filteredModel = getFilteredModel(propagationModel, path.reverse());\n inf.models.handlePropagation(filteredModel, propConfig);\n } else {\n propagateIdentifiers(rootModel, propagationModel, propConfig, {\n excludeModels: inf.excludeModels,\n nonTraversingModel: propagateInterpolatedValues && rootGroupByModel\n });\n }\n });\n};\n\nexport const propagateImmutableActions = (propagationNameSpace, rootModels, propagationInf) => {\n const immutableActions = propagationNameSpace.immutableActions;\n\n for (const action in immutableActions) {\n const actionInf = immutableActions[action];\n const actionConf = actionInf.config;\n const propagationSourceId = propagationInf.config.sourceId;\n const filterImmutableAction = propagationInf.propConfig.filterImmutableAction ?\n propagationInf.propConfig.filterImmutableAction(actionConf, propagationInf.config) : true;\n if (actionConf.sourceId !== propagationSourceId && filterImmutableAction) {\n const criteriaModel = actionConf.criteria;\n propagateToAllDataModels(criteriaModel, rootModels, {\n propagationNameSpace,\n propagateToSource: false,\n sourceId: propagationSourceId\n }, actionConf);\n }\n }\n};\n\nexport const addToPropNamespace = (propagationNameSpace, config = {}, model) => {\n let sourceNamespace;\n const isMutableAction = config.isMutableAction;\n const criteria = config.criteria;\n const key = `${config.action}-${config.sourceId}`;\n\n if (isMutableAction) {\n sourceNamespace = propagationNameSpace.mutableActions;\n } else {\n sourceNamespace = propagationNameSpace.immutableActions;\n }\n\n if (criteria === null) {\n delete sourceNamespace[key];\n } else {\n sourceNamespace[key] = {\n model,\n config\n };\n }\n\n return this;\n};\n\n\nexport const getNormalizedProFields = (projField, allFields, fieldConfig) => {\n const normalizedProjField = projField.reduce((acc, field) => {\n if (field.constructor.name === 'RegExp') {\n acc.push(...allFields.filter(fieldName => fieldName.search(field) !== -1));\n } else if (field in fieldConfig) {\n acc.push(field);\n }\n return acc;\n }, []);\n return Array.from(new Set(normalizedProjField)).map(field => field.trim());\n};\n\n/**\n * Get the numberFormatted value if numberFormat present,\n * else returns the supplied value.\n * @param {Object} field Field Instance\n * @param {Number|String} value\n * @return {Number|String}\n */\nexport const getNumberFormattedVal = (field, value) => {\n if (field.numberFormat) {\n return field.numberFormat()(value);\n }\n return value;\n};\n","import { FilteringMode } from './enums';\nimport { getUniqueId } from './utils';\nimport {\n updateFields,\n cloneWithSelect,\n cloneWithProject,\n updateData,\n getNormalizedProFields\n} from './helper';\nimport { crossProduct, difference, naturalJoinFilter, union } from './operator';\n\n/**\n * Relation provides the definitions of basic operators of relational algebra like *selection*, *projection*, *union*,\n * *difference* etc.\n *\n * It is extended by {@link DataModel} to inherit the functionalities of relational algebra concept.\n *\n * @class\n * @public\n * @module Relation\n * @namespace DataModel\n */\nclass Relation {\n\n /**\n * Creates a new Relation instance by providing underlying data and schema.\n *\n * @private\n *\n * @param {Object | string | Relation} data - The input tabular data in dsv or json format or\n * an existing Relation instance object.\n * @param {Array} schema - An array of data schema.\n * @param {Object} [options] - The optional options.\n */\n constructor (...params) {\n let source;\n\n this._parent = null;\n this._derivation = [];\n this._ancestorDerivation = [];\n this._children = [];\n\n if (params.length === 1 && ((source = params[0]) instanceof Relation)) {\n // parent datamodel was passed as part of source\n this._colIdentifier = source._colIdentifier;\n this._rowDiffset = source._rowDiffset;\n this._dataFormat = source._dataFormat;\n this._parent = source;\n this._partialFieldspace = this._parent._partialFieldspace;\n this._fieldStoreName = getUniqueId();\n this.__calculateFieldspace().calculateFieldsConfig();\n } else {\n updateData(this, ...params);\n this._fieldStoreName = this._partialFieldspace.name;\n this.__calculateFieldspace().calculateFieldsConfig();\n this._propagationNameSpace = {\n mutableActions: {},\n immutableActions: {}\n };\n }\n }\n\n /**\n * Retrieves the {@link Schema | schema} details for every {@link Field | field} as an array.\n *\n * @public\n *\n * @return {Array.} Array of fields schema.\n * ```\n * [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', numberFormat: (val) => `${val} miles / gallon` },\n * { name: 'Cylinder', type: 'dimension' },\n * { name: 'Displacement', type: 'measure', defAggFn: 'max' },\n * { name: 'HorsePower', type: 'measure', defAggFn: 'max' },\n * { name: 'Weight_in_lbs', type: 'measure', defAggFn: 'avg', },\n * { name: 'Acceleration', type: 'measure', defAggFn: 'avg' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin' }\n * ]\n * ```\n */\n getSchema () {\n return this.getFieldspace().fields.map(d => d.schema());\n }\n\n /**\n * Returns the name of the {@link DataModel} instance. If no name was specified during {@link DataModel}\n * initialization, then it returns a auto-generated name.\n *\n * @public\n *\n * @return {string} Name of the DataModel instance.\n */\n getName() {\n return this._fieldStoreName;\n }\n\n getFieldspace () {\n return this._fieldspace;\n }\n\n __calculateFieldspace () {\n this._fieldspace = updateFields([this._rowDiffset, this._colIdentifier],\n this.getPartialFieldspace(), this._fieldStoreName);\n return this;\n }\n\n getPartialFieldspace () {\n return this._partialFieldspace;\n }\n\n /**\n * Performs {@link link_of_cross_product | cross-product} between two {@link DataModel} instances and returns a\n * new {@link DataModel} instance containing the results. This operation is also called theta join.\n *\n * Cross product takes two set and create one set where each value of one set is paired with each value of another\n * set.\n *\n * This method takes an optional predicate which filters the generated result rows. If the predicate returns true\n * the combined row is included in the resulatant table.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.join(originDM)));\n *\n * console.log(carsDM.join(originDM,\n * obj => obj.[originDM.getName()].Origin === obj.[carsDM.getName()].Origin));\n *\n * @text\n * This is chained version of `join` operator. `join` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel to be joined with the current instance DataModel.\n * @param {SelectionPredicate} filterFn - The predicate function that will filter the result of the crossProduct.\n *\n * @return {DataModel} New DataModel instance created after joining.\n */\n join (joinWith, filterFn) {\n return crossProduct(this, joinWith, filterFn);\n }\n\n /**\n * {@link natural_join | Natural join} is a special kind of cross-product join where filtering of rows are performed\n * internally by resolving common fields are from both table and the rows with common value are included.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.naturalJoin(originDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel with which the current instance of DataModel on which the method is\n * called will be joined.\n * @return {DataModel} New DataModel instance created after joining.\n */\n naturalJoin (joinWith) {\n return crossProduct(this, joinWith, naturalJoinFilter(this, joinWith), true);\n }\n\n /**\n * {@link link_to_union | Union} operation can be termed as vertical stacking of all rows from both the DataModel\n * instances, provided that both of the {@link DataModel} instances should have same column names.\n *\n * @example\n * console.log(EuropeanMakerDM.union(USAMakerDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} unionWith - DataModel instance for which union has to be applied with the instance on which\n * the method is called\n *\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n union (unionWith) {\n return union(this, unionWith);\n }\n\n /**\n * {@link link_to_difference | Difference } operation only include rows which are present in the datamodel on which\n * it was called but not on the one passed as argument.\n *\n * @example\n * console.log(highPowerDM.difference(highExpensiveDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} differenceWith - DataModel instance for which difference has to be applied with the instance\n * on which the method is called\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n difference (differenceWith) {\n return difference(this, differenceWith);\n }\n\n /**\n * {@link link_to_selection | Selection} is a row filtering operation. It expects a predicate and an optional mode\n * which control which all rows should be included in the resultant DataModel instance.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection operation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resultant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * // with selection mode NORMAL:\n * const normDt = dt.select(fields => fields.Origin.value === \"USA\")\n * console.log(normDt));\n *\n * // with selection mode INVERSE:\n * const inverDt = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt);\n *\n * // with selection mode ALL:\n * const dtArr = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.ALL })\n * // print the selected parts\n * console.log(dtArr[0]);\n * // print the inverted parts\n * console.log(dtArr[1]);\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Function} selectFn - The predicate function which is called for each row with the current row.\n * ```\n * function (row, i, cloneProvider, store) { ... }\n * ```\n * @param {Object} config - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance.\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection.\n * @return {DataModel} Returns the new DataModel instance(s) after operation.\n */\n select (selectFn, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n config.mode = config.mode || defConfig.mode;\n\n const cloneConfig = { saveChild: config.saveChild };\n return cloneWithSelect(\n this,\n selectFn,\n config,\n cloneConfig\n );\n }\n\n /**\n * Retrieves a boolean value if the current {@link DataModel} instance has data.\n *\n * @example\n * const schema = [\n * { name: 'CarName', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n * const data = [];\n *\n * const dt = new DataModel(data, schema);\n * console.log(dt.isEmpty());\n *\n * @public\n *\n * @return {Boolean} True if the datamodel has no data, otherwise false.\n */\n isEmpty () {\n return !this._rowDiffset.length || !this._colIdentifier.length;\n }\n\n /**\n * Creates a clone from the current DataModel instance with child parent relationship.\n *\n * @private\n * @param {boolean} [saveChild=true] - Whether the cloned instance would be recorded in the parent instance.\n * @return {DataModel} - Returns the newly cloned DataModel instance.\n */\n clone (saveChild = true) {\n const clonedDm = new this.constructor(this);\n if (saveChild) {\n clonedDm.setParent(this);\n } else {\n clonedDm.setParent(null);\n }\n return clonedDm;\n }\n\n /**\n * {@link Projection} is filter column (field) operation. It expects list of fields' name and either include those\n * or exclude those based on {@link FilteringMode} on the resultant variable.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * const dm = new DataModel(data, schema);\n *\n * // with projection mode NORMAL:\n * const normDt = dt.project([\"Name\", \"HorsePower\"]);\n * console.log(normDt.getData());\n *\n * // with projection mode INVERSE:\n * const inverDt = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt.getData());\n *\n * // with selection mode ALL:\n * const dtArr = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.ALL })\n * // print the normal parts\n * console.log(dtArr[0].getData());\n * // print the inverted parts\n * console.log(dtArr[1].getData());\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {DataModel} Returns the new DataModel instance after operation.\n */\n project (projField, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const { mode } = config;\n const normalizedProjField = getNormalizedProFields(projField, allFields, fieldConfig);\n\n let dataModel;\n\n if (mode === FilteringMode.ALL) {\n let projectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.NORMAL,\n saveChild: config.saveChild\n }, allFields);\n let rejectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.INVERSE,\n saveChild: config.saveChild\n }, allFields);\n dataModel = [projectionClone, rejectionClone];\n } else {\n let projectionClone = cloneWithProject(this, normalizedProjField, config, allFields);\n dataModel = projectionClone;\n }\n\n return dataModel;\n }\n\n getFieldsConfig () {\n return this._fieldConfig;\n }\n\n calculateFieldsConfig () {\n this._fieldConfig = this._fieldspace.fields.reduce((acc, fieldObj, i) => {\n acc[fieldObj.name()] = {\n index: i,\n def: fieldObj.schema(),\n };\n return acc;\n }, {});\n return this;\n }\n\n\n /**\n * Frees up the resources associated with the current DataModel instance and breaks all the links instance has in\n * the DAG.\n *\n * @public\n */\n dispose () {\n this._parent && this._parent.removeChild(this);\n this._parent = null;\n this._children.forEach((child) => {\n child._parent = null;\n });\n this._children = [];\n }\n\n /**\n * Removes the specified child {@link DataModel} from the child list of the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\")\n * dt.removeChild(dt2);\n *\n * @private\n *\n * @param {DataModel} child - Delegates the parent to remove this child.\n */\n removeChild (child) {\n let idx = this._children.findIndex(sibling => sibling === child);\n idx !== -1 ? this._children.splice(idx, 1) : true;\n }\n\n /**\n * Sets the specified {@link DataModel} as a parent for the current {@link DataModel} instance.\n *\n * @param {DataModel} parent - The datamodel instance which will act as parent.\n */\n setParent (parent) {\n this._parent && this._parent.removeChild(this);\n this._parent = parent;\n parent && parent._children.push(this);\n }\n\n /**\n * Returns the parent {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const parentDm = dt2.getParent();\n *\n * @return {DataModel} Returns the parent DataModel instance.\n */\n getParent () {\n return this._parent;\n }\n\n /**\n * Returns the immediate child {@link DataModel} instances.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const childDm1 = dt.select(fields => fields.Origin.value === \"USA\");\n * const childDm2 = dt.select(fields => fields.Origin.value === \"Japan\");\n * const childDm3 = dt.groupBy([\"Origin\"]);\n *\n * @return {DataModel[]} Returns the immediate child DataModel instances.\n */\n getChildren () {\n return this._children;\n }\n\n /**\n * Returns the in-between operation meta data while creating the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const derivations = dt3.getDerivations();\n *\n * @return {Any[]} Returns the derivation meta data.\n */\n getDerivations () {\n return this._derivation;\n }\n\n /**\n * Returns the in-between operation meta data happened from root {@link DataModel} to current instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const ancDerivations = dt3.getAncestorDerivations();\n *\n * @return {Any[]} Returns the previous derivation meta data.\n */\n getAncestorDerivations () {\n return this._ancestorDerivation;\n }\n}\n\nexport default Relation;\n","/* eslint-disable default-case */\n\nimport { FieldType, DimensionSubtype, DataFormat, FilteringMode } from './enums';\nimport {\n persistDerivations,\n getRootGroupByModel,\n propagateToAllDataModels,\n getRootDataModel,\n propagateImmutableActions,\n addToPropNamespace,\n sanitizeUnitSchema,\n splitWithSelect,\n splitWithProject,\n getNormalizedProFields\n} from './helper';\nimport { DM_DERIVATIVES, PROPAGATION } from './constants';\nimport {\n dataBuilder,\n rowDiffsetIterator,\n groupBy\n} from './operator';\nimport { createBinnedFieldData } from './operator/bucket-creator';\nimport Relation from './relation';\nimport reducerStore from './utils/reducer-store';\nimport { createFields } from './field-creator';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport Value from './value';\n\n/**\n * DataModel is an in-browser representation of tabular data. It supports\n * {@link https://en.wikipedia.org/wiki/Relational_algebra | relational algebra} operators as well as generic data\n * processing opearators.\n * DataModel extends {@link Relation} class which defines all the relational algebra opreators. DataModel gives\n * definition of generic data processing operators which are not relational algebra complient.\n *\n * @public\n * @class\n * @extends Relation\n * @memberof Datamodel\n */\nclass DataModel extends Relation {\n /**\n * Creates a new DataModel instance by providing data and schema. Data could be in the form of\n * - Flat JSON\n * - DSV String\n * - 2D Array\n *\n * By default DataModel finds suitable adapter to serialize the data. DataModel also expects a\n * {@link Schema | schema} for identifying the variables present in data.\n *\n * @constructor\n * @example\n * const data = loadData('cars.csv');\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', unit : 'cm', scale: '1000', numberformat: val => `${val}G`},\n * { name: 'Cylinders', type: 'dimension' },\n * { name: 'Displacement', type: 'measure' },\n * { name: 'Horsepower', type: 'measure' },\n * { name: 'Weight_in_lbs', type: 'measure' },\n * { name: 'Acceleration', type: 'measure' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin', type: 'dimension' }\n * ];\n * const dm = new DataModel(data, schema, { name: 'Cars' });\n * table(dm);\n *\n * @public\n *\n * @param {Array. | string | Array.} data Input data in any of the mentioned formats\n * @param {Array.} schema Defination of the variables. Order of the variables in data and order of the\n * variables in schema has to be same.\n * @param {object} [options] Optional arguments to specify more settings regarding the creation part\n * @param {string} [options.name] Name of the datamodel instance. If no name is given an auto generated name is\n * assigned to the instance.\n * @param {string} [options.fieldSeparator=','] specify field separator type if the data is of type dsv string.\n */\n constructor (...args) {\n super(...args);\n\n this._onPropagation = [];\n }\n\n /**\n * Reducers are simple functions which reduces an array of numbers to a representative number of the set.\n * Like an array of numbers `[10, 20, 5, 15]` can be reduced to `12.5` if average / mean reducer function is\n * applied. All the measure fields in datamodel (variables in data) needs a reducer to handle aggregation.\n *\n * @public\n *\n * @return {ReducerStore} Singleton instance of {@link ReducerStore}.\n */\n static get Reducers () {\n return reducerStore;\n }\n\n /**\n * Configure null, undefined, invalid values in the source data\n *\n * @public\n *\n * @param {Object} [config] - Configuration to control how null, undefined and non-parsable values are\n * represented in DataModel.\n * @param {string} [config.undefined] - Define how an undefined value will be represented.\n * @param {string} [config.null] - Define how a null value will be represented.\n * @param {string} [config.invalid] - Define how a non-parsable value will be represented.\n */\n static configureInvalidAwareTypes (config) {\n return InvalidAwareTypes.invalidAwareVals(config);\n }\n\n /**\n * Retrieve the data attached to an instance in JSON format.\n *\n * @example\n * // DataModel instance is already prepared and assigned to dm variable\n * const data = dm.getData({\n * order: 'column',\n * formatter: {\n * origin: (val) => val === 'European Union' ? 'EU' : val;\n * }\n * });\n * console.log(data);\n *\n * @public\n *\n * @param {Object} [options] Options to control how the raw data is to be returned.\n * @param {string} [options.order='row'] Defines if data is retieved in row order or column order. Possible values\n * are `'rows'` and `'columns'`\n * @param {Function} [options.formatter=null] Formats the output data. This expects an object, where the keys are\n * the name of the variable needs to be formatted. The formatter function is called for each row passing the\n * value of the cell for a particular row as arguments. The formatter is a function in the form of\n * `function (value, rowId, schema) => { ... }`\n * Know more about {@link Fomatter}.\n *\n * @return {Array} Returns a multidimensional array of the data with schema. The return format looks like\n * ```\n * {\n * data,\n * schema\n * }\n * ```\n */\n getData (options) {\n const defOptions = {\n order: 'row',\n formatter: null,\n withUid: false,\n getAllFields: false,\n sort: []\n };\n options = Object.assign({}, defOptions, options);\n const fields = this.getPartialFieldspace().fields;\n\n const dataGenerated = dataBuilder.call(\n this,\n this.getPartialFieldspace().fields,\n this._rowDiffset,\n options.getAllFields ? fields.map(d => d.name()).join() : this._colIdentifier,\n options.sort,\n {\n columnWise: options.order === 'column',\n addUid: !!options.withUid\n }\n );\n\n if (!options.formatter) {\n return dataGenerated;\n }\n\n const { formatter } = options;\n const { data, schema, uids } = dataGenerated;\n const fieldNames = schema.map((e => e.name));\n const fmtFieldNames = Object.keys(formatter);\n const fmtFieldIdx = fmtFieldNames.reduce((acc, next) => {\n const idx = fieldNames.indexOf(next);\n if (idx !== -1) {\n acc.push([idx, formatter[next]]);\n }\n return acc;\n }, []);\n\n if (options.order === 'column') {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n data[fIdx].forEach((datum, datumIdx) => {\n data[fIdx][datumIdx] = fmtFn.call(\n undefined,\n datum,\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n } else {\n data.forEach((datum, datumIdx) => {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n datum[fIdx] = fmtFn.call(\n undefined,\n datum[fIdx],\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n }\n\n return dataGenerated;\n }\n\n /**\n * Returns the unique ids in an array.\n *\n * @return {Array} Returns an array of ids.\n */\n getUids () {\n const rowDiffset = this._rowDiffset;\n const ids = [];\n\n if (rowDiffset.length) {\n const diffSets = rowDiffset.split(',');\n\n diffSets.forEach((set) => {\n let [start, end] = set.split('-').map(Number);\n\n end = end !== undefined ? end : start;\n ids.push(...Array(end - start + 1).fill().map((_, idx) => start + idx));\n });\n }\n\n return ids;\n }\n /**\n * Groups the data using particular dimensions and by reducing measures. It expects a list of dimensions using which\n * it projects the datamodel and perform aggregations to reduce the duplicate tuples. Refer this\n * {@link link_to_one_example_with_group_by | document} to know the intuition behind groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupedDM = dm.groupBy(['Year'], { horsepower: 'max' } );\n * console.log(groupedDm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {DataModel} Returns a new DataModel instance after performing the groupby.\n */\n groupBy (fieldsArr, reducers = {}, config = { saveChild: true }) {\n const groupByString = `${fieldsArr.join()}`;\n let params = [this, fieldsArr, reducers];\n const newDataModel = groupBy(...params);\n\n persistDerivations(\n this,\n newDataModel,\n DM_DERIVATIVES.GROUPBY,\n { fieldsArr, groupByString, defaultReducer: reducerStore.defaultReducer() },\n reducers\n );\n\n if (config.saveChild) {\n newDataModel.setParent(this);\n } else {\n newDataModel.setParent(null);\n }\n\n return newDataModel;\n }\n\n /**\n * Performs sorting operation on the current {@link DataModel} instance according to the specified sorting details.\n * Like every other operator it doesn't mutate the current DataModel instance on which it was called, instead\n * returns a new DataModel instance containing the sorted data.\n *\n * DataModel support multi level sorting by listing the variables using which sorting needs to be performed and\n * the type of sorting `ASC` or `DESC`.\n *\n * In the following example, data is sorted by `Origin` field in `DESC` order in first level followed by another\n * level of sorting by `Acceleration` in `ASC` order.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * let sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\"] // Default value is ASC\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * // Sort with a custom sorting function\n * sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\", (a, b) => a - b] // Custom sorting function\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @text\n * DataModel also provides another sorting mechanism out of the box where sort is applied to a variable using\n * another variable which determines the order.\n * Like the above DataModel contains three fields `Origin`, `Name` and `Acceleration`. Now, the data in this\n * model can be sorted by `Origin` field according to the average value of all `Acceleration` for a\n * particular `Origin` value.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * const sortedDm = dm.sort([\n * ['Origin', ['Acceleration', (a, b) => avg(...a.Acceleration) - avg(...b.Acceleration)]]\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @public\n *\n * @param {Array.} sortingDetails - Sorting details based on which the sorting will be performed.\n * @return {DataModel} Returns a new instance of DataModel with sorted data.\n */\n sort (sortingDetails, config = { saveChild: false }) {\n const rawData = this.getData({\n order: 'row',\n sort: sortingDetails\n });\n const header = rawData.schema.map(field => field.name);\n const dataInCSVArr = [header].concat(rawData.data);\n\n const sortedDm = new this.constructor(dataInCSVArr, rawData.schema, { dataFormat: 'DSVArr' });\n\n persistDerivations(\n this,\n sortedDm,\n DM_DERIVATIVES.SORT,\n config,\n sortingDetails\n );\n\n if (config.saveChild) {\n sortedDm.setParent(this);\n } else {\n sortedDm.setParent(null);\n }\n\n return sortedDm;\n }\n\n /**\n * Performs the serialization operation on the current {@link DataModel} instance according to the specified data\n * type. When an {@link DataModel} instance is created, it de-serializes the input data into its internal format,\n * and during its serialization process, it converts its internal data format to the specified data type and returns\n * that data regardless what type of data is used during the {@link DataModel} initialization.\n *\n * @example\n * // here dm is the pre-declared DataModel instance.\n * const csvData = dm.serialize(DataModel.DataFormat.DSV_STR, { fieldSeparator: \",\" });\n * console.log(csvData); // The csv formatted data.\n *\n * const jsonData = dm.serialize(DataModel.DataFormat.FLAT_JSON);\n * console.log(jsonData); // The json data.\n *\n * @public\n *\n * @param {string} type - The data type name for serialization.\n * @param {Object} options - The optional option object.\n * @param {string} options.fieldSeparator - The field separator character for DSV data type.\n * @return {Array|string} Returns the serialized data.\n */\n serialize (type, options) {\n type = type || this._dataFormat;\n options = Object.assign({}, { fieldSeparator: ',' }, options);\n\n const fields = this.getFieldspace().fields;\n const colData = fields.map(f => f.formattedData());\n const rowsCount = colData[0].length;\n let serializedData;\n let rowIdx;\n let colIdx;\n\n if (type === DataFormat.FLAT_JSON) {\n serializedData = [];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = {};\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row[fields[colIdx].name()] = colData[colIdx][rowIdx];\n }\n serializedData.push(row);\n }\n } else if (type === DataFormat.DSV_STR) {\n serializedData = [fields.map(f => f.name()).join(options.fieldSeparator)];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row.join(options.fieldSeparator));\n }\n serializedData = serializedData.join('\\n');\n } else if (type === DataFormat.DSV_ARR) {\n serializedData = [fields.map(f => f.name())];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row);\n }\n } else {\n throw new Error(`Data type ${type} is not supported`);\n }\n\n return serializedData;\n }\n\n addField (field) {\n const fieldName = field.name();\n this._colIdentifier += `,${fieldName}`;\n const partialFieldspace = this._partialFieldspace;\n const cachedValueObjects = partialFieldspace._cachedValueObjects;\n const formattedData = field.formattedData();\n const rawData = field.partialField.data;\n\n if (!partialFieldspace.fieldsObj()[field.name()]) {\n partialFieldspace.fields.push(field);\n cachedValueObjects.forEach((obj, i) => {\n obj[field.name()] = new Value(formattedData[i], rawData[i], field);\n });\n } else {\n const fieldIndex = partialFieldspace.fields.findIndex(fieldinst => fieldinst.name() === fieldName);\n fieldIndex >= 0 && (partialFieldspace.fields[fieldIndex] = field);\n }\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n\n this.__calculateFieldspace().calculateFieldsConfig();\n return this;\n }\n\n /**\n * Creates a new variable calculated from existing variables. This method expects the definition of the newly created\n * variable and a function which resolves the value of the new variable from existing variables.\n *\n * Can create a new measure based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const newDm = dataModel.calculateVariable({\n * name: 'powerToWeight',\n * type: 'measure'\n * }, ['horsepower', 'weight_in_lbs', (hp, weight) => hp / weight ]);\n *\n *\n * Can create a new dimension based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const child = dataModel.calculateVariable(\n * {\n * name: 'Efficiency',\n * type: 'dimension'\n * }, ['horsepower', (hp) => {\n * if (hp < 80) { return 'low'; },\n * else if (hp < 120) { return 'moderate'; }\n * else { return 'high' }\n * }]);\n *\n * @public\n *\n * @param {Object} schema - The schema of newly defined variable.\n * @param {Array.} dependency - An array containing the dependency variable names and a resolver\n * function as the last element.\n * @param {Object} config - An optional config object.\n * @param {boolean} [config.saveChild] - Whether the newly created DataModel will be a child.\n * @param {boolean} [config.replaceVar] - Whether the newly created variable will replace the existing variable.\n * @return {DataModel} Returns an instance of DataModel with the new field.\n */\n calculateVariable (schema, dependency, config) {\n schema = sanitizeUnitSchema(schema);\n config = Object.assign({}, { saveChild: true, replaceVar: false }, config);\n\n const fieldsConfig = this.getFieldsConfig();\n const depVars = dependency.slice(0, dependency.length - 1);\n const retrieveFn = dependency[dependency.length - 1];\n\n if (fieldsConfig[schema.name] && !config.replaceVar) {\n throw new Error(`${schema.name} field already exists in datamodel`);\n }\n\n const depFieldIndices = depVars.map((field) => {\n const fieldSpec = fieldsConfig[field];\n if (!fieldSpec) {\n // @todo dont throw error here, use warning in production mode\n throw new Error(`${field} is not a valid column name.`);\n }\n return fieldSpec.index;\n });\n\n const clone = this.clone(config.saveChild);\n\n const fs = clone.getFieldspace().fields;\n const suppliedFields = depFieldIndices.map(idx => fs[idx]);\n\n let cachedStore = {};\n let cloneProvider = () => this.detachedRoot();\n\n const computedValues = [];\n rowDiffsetIterator(clone._rowDiffset, (i) => {\n const fieldsData = suppliedFields.map(field => field.partialField.data[i]);\n computedValues[i] = retrieveFn(...fieldsData, i, cloneProvider, cachedStore);\n });\n const [field] = createFields([computedValues], [schema], [schema.name]);\n clone.addField(field);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.CAL_VAR,\n { config: schema, fields: depVars },\n retrieveFn\n );\n\n return clone;\n }\n\n /**\n * Propagates changes across all the connected DataModel instances.\n *\n * @param {Array} identifiers - A list of identifiers that were interacted with.\n * @param {Object} payload - The interaction specific details.\n *\n * @return {DataModel} DataModel instance.\n */\n propagate (identifiers, config = {}, addToNameSpace, propConfig = {}) {\n const isMutableAction = config.isMutableAction;\n const propagationSourceId = config.sourceId;\n const payload = config.payload;\n const rootModel = getRootDataModel(this);\n const propagationNameSpace = rootModel._propagationNameSpace;\n const rootGroupByModel = getRootGroupByModel(this);\n const rootModels = {\n groupByModel: rootGroupByModel,\n model: rootModel\n };\n\n addToNameSpace && addToPropNamespace(propagationNameSpace, config, this);\n propagateToAllDataModels(identifiers, rootModels, { propagationNameSpace, sourceId: propagationSourceId },\n Object.assign({\n payload\n }, config));\n\n if (isMutableAction) {\n propagateImmutableActions(propagationNameSpace, rootModels, {\n config,\n propConfig\n }, this);\n }\n\n return this;\n }\n\n /**\n * Associates a callback with an event name.\n *\n * @param {string} eventName - The name of the event.\n * @param {Function} callback - The callback to invoke.\n * @return {DataModel} Returns this current DataModel instance itself.\n */\n on (eventName, callback) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation.push(callback);\n break;\n }\n return this;\n }\n\n /**\n * Unsubscribes the callbacks for the provided event name.\n *\n * @param {string} eventName - The name of the event to unsubscribe.\n * @return {DataModel} Returns the current DataModel instance itself.\n */\n unsubscribe (eventName) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation = [];\n break;\n\n }\n return this;\n }\n\n /**\n * This method is used to invoke the method associated with propagation.\n *\n * @param {Object} payload The interaction payload.\n * @param {DataModel} identifiers The propagated DataModel.\n * @memberof DataModel\n */\n handlePropagation (propModel, payload) {\n let propListeners = this._onPropagation;\n propListeners.forEach(fn => fn.call(this, propModel, payload));\n }\n\n /**\n * Performs the binning operation on a measure field based on the binning configuration. Binning means discretizing\n * values of a measure. Binning configuration contains an array; subsequent values from the array marks the boundary\n * of buckets in [inclusive, exclusive) range format. This operation does not mutate the subject measure field,\n * instead, it creates a new field (variable) of type dimension and subtype binned.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non-uniform buckets,\n * - providing bins count,\n * - providing each bin size,\n *\n * When custom `buckets` are provided as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', buckets: [30, 80, 100, 110] }\n * const binnedDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binsCount` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', binsCount: 5, start: 0, end: 100 }\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binSize` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHorsepower', binSize: 20, start: 5}\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @public\n *\n * @param {string} measureFieldName - The name of the target measure field.\n * @param {Object} config - The config object.\n * @param {string} [config.name] - The name of the new field which will be created.\n * @param {string} [config.buckets] - An array containing the bucket ranges.\n * @param {string} [config.binSize] - The size of each bin. It is ignored when buckets are given.\n * @param {string} [config.binsCount] - The total number of bins to generate. It is ignored when buckets are given.\n * @param {string} [config.start] - The start value of the bucket ranges. It is ignored when buckets are given.\n * @param {string} [config.end] - The end value of the bucket ranges. It is ignored when buckets are given.\n * @return {DataModel} Returns a new {@link DataModel} instance with the new field.\n */\n bin (measureFieldName, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n if (!fieldsConfig[measureFieldName]) {\n throw new Error(`Field ${measureFieldName} doesn't exist`);\n }\n\n const binFieldName = config.name || `${measureFieldName}_binned`;\n\n if (fieldsConfig[binFieldName]) {\n throw new Error(`Field ${binFieldName} already exists`);\n }\n\n const measureField = this.getFieldspace().fieldsObj()[measureFieldName];\n const { binnedData, bins } = createBinnedFieldData(measureField, this._rowDiffset, config);\n\n const binField = createFields([binnedData], [\n {\n name: binFieldName,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.BINNED,\n bins\n }], [binFieldName])[0];\n\n const clone = this.clone(config.saveChild);\n clone.addField(binField);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.BIN,\n { measureFieldName, config, binFieldName },\n null\n );\n\n return clone;\n }\n\n /**\n * Creates a new {@link DataModel} instance with completely detached root from current {@link DataModel} instance,\n * the new {@link DataModel} instance has no parent-children relationship with the current one, but has same data as\n * the current one.\n * This API is useful when a completely different {@link DataModel} but with same data as the current instance is\n * needed.\n *\n * @example\n * const dm = new DataModel(data, schema);\n * const detachedDm = dm.detachedRoot();\n *\n * // has different namespace\n * console.log(dm.getPartialFieldspace().name);\n * console.log(detachedDm.getPartialFieldspace().name);\n *\n * // has same data\n * console.log(dm.getData());\n * console.log(detachedDm.getData());\n *\n * @public\n *\n * @return {DataModel} Returns a detached {@link DataModel} instance.\n */\n detachedRoot () {\n const data = this.serialize(DataFormat.FLAT_JSON);\n const schema = this.getSchema();\n\n return new DataModel(data, schema);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of rows in the source {@link DataModel}\n * instance based on a set of dimensions.\n *\n * For each unique dimensional value, a new split is created which creates a unique {@link DataModel} instance for\n * that split\n *\n * If multiple dimensions are provided, it splits the source {@link DataModel} instance with all possible\n * combinations of the dimensional values for all the dimensions provided\n *\n * Additionally, it also accepts a predicate function to reduce the set of rows provided. A\n * {@link link_to_selection | Selection} is performed on all the split {@link DataModel} instances based on\n * the predicate function\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByRow(['Origin'])\n * console.log(splitDt));\n * // This should give three unique DataModel instances, one each having rows only for 'USA',\n * // 'Europe' and 'Japan' respectively\n *\n * @example\n * // without predicate function:\n * const splitDtMulti = dt.splitByRow(['Origin', 'Cylinders'])\n * console.log(splitDtMulti));\n * // This should give DataModel instances for all unique combinations of Origin and Cylinder values\n *\n * @example\n * // with predicate function:\n * const splitWithPredDt = dt.select(['Origin'], fields => fields.Origin.value === \"USA\")\n * console.log(splitWithPredDt);\n * // This should not include the DataModel for the Origin : 'USA'\n *\n *\n * @public\n *\n * @param {Array} dimensionArr - Set of dimensions based on which the split should occur\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByRow (dimensionArr, reducerFn, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n dimensionArr.forEach((fieldName) => {\n if (!fieldsConfig[fieldName]) {\n throw new Error(`Field ${fieldName} doesn't exist in the schema`);\n }\n });\n\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n\n config = Object.assign({}, defConfig, config);\n\n return splitWithSelect(this, dimensionArr, reducerFn, config);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of fields in the source {@link DataModel}\n * instance based on a set of common and unique field names provided.\n *\n * Each DataModel created contains a set of fields which are common to all and a set of unique fields.\n * It also accepts configurations such as saveChild and mode(inverse or normal) to include/exclude the respective\n * fields\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByColumn( [['Acceleration'], ['Horsepower']], ['Origin'])\n * console.log(splitDt));\n * // This should give two unique DataModel instances, both having the field 'Origin' and\n * // one each having 'Acceleration' and 'Horsepower' fields respectively\n *\n * @example\n * // without predicate function:\n * const splitDtInv = dt.splitByColumn( [['Acceleration'], ['Horsepower'],['Origin', 'Cylinders'],\n * {mode: 'inverse'})\n * console.log(splitDtInv));\n * // This should give DataModel instances in the following way:\n * // All DataModel Instances do not have the fields 'Origin' and 'Cylinders'\n * // One DataModel Instance has rest of the fields except 'Acceleration' and the other DataModel instance\n * // has rest of the fields except 'Horsepower'\n *\n *\n *\n * @public\n *\n * @param {Array} uniqueFields - Set of unique fields included in each datamModel instance\n * @param {Array} commonFields - Set of common fields included in all datamModel instances\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByColumn (uniqueFields = [], commonFields = [], config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const normalizedProjFieldSets = [[commonFields]];\n\n config = Object.assign({}, defConfig, config);\n uniqueFields = uniqueFields.length ? uniqueFields : [[]];\n\n\n uniqueFields.forEach((fieldSet, i) => {\n normalizedProjFieldSets[i] = getNormalizedProFields(\n [...fieldSet, ...commonFields],\n allFields,\n fieldConfig);\n });\n\n return splitWithProject(this, normalizedProjFieldSets, config, allFields);\n }\n\n\n}\n\nexport default DataModel;\n","import { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport DataModel from '../export';\nimport reducerStore from '../utils/reducer-store';\nimport { defaultReducerName } from './group-by-function';\nimport { FieldType } from '../enums';\n\n/**\n * This function sanitize the user given field and return a common Array structure field\n * list\n * @param {DataModel} dataModel the dataModel operating on\n * @param {Array} fieldArr user input of field Array\n * @return {Array} arrays of field name\n */\nfunction getFieldArr (dataModel, fieldArr) {\n const retArr = [];\n const fieldStore = dataModel.getFieldspace();\n const dimensions = fieldStore.getDimension();\n\n Object.entries(dimensions).forEach(([key]) => {\n if (fieldArr && fieldArr.length) {\n if (fieldArr.indexOf(key) !== -1) {\n retArr.push(key);\n }\n } else {\n retArr.push(key);\n }\n });\n\n return retArr;\n}\n\n/**\n * This sanitize the reducer provide by the user and create a common type of object.\n * user can give function Also\n * @param {DataModel} dataModel dataModel to worked on\n * @param {Object|function} [reducers={}] reducer provided by the users\n * @return {Object} object containing reducer function for every measure\n */\nfunction getReducerObj (dataModel, reducers = {}) {\n const retObj = {};\n const fieldStore = dataModel.getFieldspace();\n const measures = fieldStore.getMeasure();\n const defReducer = reducerStore.defaultReducer();\n\n Object.keys(measures).forEach((measureName) => {\n if (typeof reducers[measureName] !== 'string') {\n reducers[measureName] = measures[measureName].defAggFn();\n }\n const reducerFn = reducerStore.resolve(reducers[measureName]);\n if (reducerFn) {\n retObj[measureName] = reducerFn;\n } else {\n retObj[measureName] = defReducer;\n reducers[measureName] = defaultReducerName;\n }\n });\n return retObj;\n}\n\n/**\n * main function which perform the group-by operations which reduce the measures value is the\n * fields are common according to the reducer function provided\n * @param {DataModel} dataModel the dataModel to worked\n * @param {Array} fieldArr fields according to which the groupby should be worked\n * @param {Object|Function} reducers reducers function\n * @param {DataModel} existingDataModel Existing datamodel instance\n * @return {DataModel} new dataModel with the group by\n */\nfunction groupBy (dataModel, fieldArr, reducers, existingDataModel) {\n const sFieldArr = getFieldArr(dataModel, fieldArr);\n const reducerObj = getReducerObj(dataModel, reducers);\n const fieldStore = dataModel.getFieldspace();\n const fieldStoreObj = fieldStore.fieldsObj();\n const dbName = fieldStore.name;\n const dimensionArr = [];\n const measureArr = [];\n const schema = [];\n const hashMap = {};\n const data = [];\n let newDataModel;\n\n // Prepare the schema\n Object.entries(fieldStoreObj).forEach(([key, value]) => {\n if (sFieldArr.indexOf(key) !== -1 || reducerObj[key]) {\n schema.push(extend2({}, value.schema()));\n\n switch (value.schema().type) {\n case FieldType.MEASURE:\n measureArr.push(key);\n break;\n default:\n case FieldType.DIMENSION:\n dimensionArr.push(key);\n }\n }\n });\n // Prepare the data\n let rowCount = 0;\n rowDiffsetIterator(dataModel._rowDiffset, (i) => {\n let hash = '';\n dimensionArr.forEach((_) => {\n hash = `${hash}-${fieldStoreObj[_].partialField.data[i]}`;\n });\n if (hashMap[hash] === undefined) {\n hashMap[hash] = rowCount;\n data.push({});\n dimensionArr.forEach((_) => {\n data[rowCount][_] = fieldStoreObj[_].partialField.data[i];\n });\n measureArr.forEach((_) => {\n data[rowCount][_] = [fieldStoreObj[_].partialField.data[i]];\n });\n rowCount += 1;\n } else {\n measureArr.forEach((_) => {\n data[hashMap[hash]][_].push(fieldStoreObj[_].partialField.data[i]);\n });\n }\n });\n\n // reduction\n let cachedStore = {};\n let cloneProvider = () => dataModel.detachedRoot();\n data.forEach((row) => {\n const tuple = row;\n measureArr.forEach((_) => {\n tuple[_] = reducerObj[_](row[_], cloneProvider, cachedStore);\n });\n });\n if (existingDataModel) {\n existingDataModel.__calculateFieldspace();\n newDataModel = existingDataModel;\n }\n else {\n newDataModel = new DataModel(data, schema, { name: dbName });\n }\n return newDataModel;\n}\n\nexport { groupBy, getFieldArr, getReducerObj };\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nconst generateBuckets = (binSize, start, end) => {\n const buckets = [];\n let next = start;\n\n while (next < end) {\n buckets.push(next);\n next += binSize;\n }\n buckets.push(next);\n\n return buckets;\n};\n\nconst findBucketRange = (bucketRanges, value) => {\n let leftIdx = 0;\n let rightIdx = bucketRanges.length - 1;\n let midIdx;\n let range;\n\n // Here use binary search as the bucketRanges is a sorted array\n while (leftIdx <= rightIdx) {\n midIdx = leftIdx + Math.floor((rightIdx - leftIdx) / 2);\n range = bucketRanges[midIdx];\n\n if (value >= range.start && value < range.end) {\n return range;\n } else if (value >= range.end) {\n leftIdx = midIdx + 1;\n } else if (value < range.start) {\n rightIdx = midIdx - 1;\n }\n }\n\n return null;\n};\n\n /**\n * Creates the bin data from input measure field and supplied configs.\n *\n * @param {Measure} measureField - The Measure field instance.\n * @param {string} rowDiffset - The datamodel rowDiffset values.\n * @param {Object} config - The config object.\n * @return {Object} Returns the binned data and the corresponding bins.\n */\nexport function createBinnedFieldData (measureField, rowDiffset, config) {\n let { buckets, binsCount, binSize, start, end } = config;\n const [dMin, dMax] = measureField.domain();\n\n if (!buckets) {\n start = (start !== 0 && (!start || start > dMin)) ? dMin : start;\n end = (end !== 0 && (!end || end < dMax)) ? (dMax + 1) : end;\n\n if (binsCount) {\n binSize = Math.ceil(Math.abs(end - start) / binsCount);\n }\n\n buckets = generateBuckets(binSize, start, end);\n }\n\n if (buckets[0] > dMin) {\n buckets.unshift(dMin);\n }\n if (buckets[buckets.length - 1] <= dMax) {\n buckets.push(dMax + 1);\n }\n\n const bucketRanges = [];\n for (let i = 0; i < buckets.length - 1; i++) {\n bucketRanges.push({\n start: buckets[i],\n end: buckets[i + 1]\n });\n }\n\n const binnedData = [];\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = measureField.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n binnedData.push(datum);\n return;\n }\n\n const range = findBucketRange(bucketRanges, datum);\n binnedData.push(`${range.start}-${range.end}`);\n });\n\n return { binnedData, bins: buckets };\n}\n","import { fnList } from '../operator/group-by-function';\n\nexport const { sum, avg, min, max, first, last, count, std: sd } = fnList;\n","import DataModel from './datamodel';\nimport {\n compose,\n bin,\n select,\n project,\n groupby as groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n} from './operator';\nimport * as Stats from './stats';\nimport * as enums from './enums';\nimport { DateTimeFormatter } from './utils';\nimport { DataFormat, FilteringMode, DM_DERIVATIVES } from './constants';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport pkg from '../package.json';\n\nconst Operators = {\n compose,\n bin,\n select,\n project,\n groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n};\n\nconst version = pkg.version;\nObject.assign(DataModel, {\n Operators,\n Stats,\n DM_DERIVATIVES,\n DateTimeFormatter,\n DataFormat,\n FilteringMode,\n InvalidAwareTypes,\n version\n}, enums);\n\nexport default DataModel;\n","import { persistDerivations } from '../helper';\nimport { DM_DERIVATIVES } from '../constants';\n\n/**\n * DataModel's opearators are exposed as composable functional operators as well as chainable operators. Chainable\n * operators are called on the instances of {@link Datamodel} and {@link Relation} class.\n *\n * Those same operators can be used as composable operators from `DataModel.Operators` namespace.\n *\n * All these operators have similar behaviour. All these operators when called with the argument returns a function\n * which expects a DataModel instance.\n *\n * @public\n * @module Operators\n * @namespace DataModel\n */\n\n/**\n * This is functional version of selection operator. {@link link_to_selection | Selection} is a row filtering operation.\n * It takes {@link SelectionPredicate | predicate} for filtering criteria and returns a function.\n * The returned function is called with the DataModel instance on which the action needs to be performed.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection opearation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * [Warn] Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * [Error] `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @example\n * const select = DataModel.Operators.select;\n * usaCarsFn = select(fields => fields.Origin.value === 'USA');\n * usaCarsDm = usaCarsFn(dm);\n * console.log(usaCarsDm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {SelectionPredicate} selectFn - Predicate funciton which is called for each row with the current row\n * ```\n * function (row, i) { ... }\n * ```\n * @param {Object} [config] - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const select = (...args) => dm => dm.select(...args);\n\n/**\n * This is functional version of projection operator. {@link link_to_projection | Projection} is a column filtering\n * operation.It expects list of fields name and either include those or exclude those based on {@link FilteringMode} on\n * the resultant variable.It returns a function which is called with the DataModel instance on which the action needs\n * to be performed.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const project = (...args) => dm => dm.project(...args);\n\n/**\n * This is functional version of binnig operator. Binning happens on a measure field based on a binning configuration.\n * Binning in DataModel does not aggregate the number of rows present in DataModel instance after binning, it just adds\n * a new field with the binned value. Refer binning {@link example_of_binning | example} to have a intuition of what\n * binning is and the use case.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non uniform buckets\n * - providing bin count\n * - providing each bin size\n *\n * When custom buckets are provided as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const buckets = {\n * start: 30\n * stops: [80, 100, 110]\n * };\n * const config = { buckets, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(dm);\n *\n * @text\n * When `binCount` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binCount: 5, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @text\n * When `binSize` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binSize: 200, name: 'binnedHorsepower' }\n * const binnedDm = dataModel.bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {String} name Name of measure which will be used to create bin\n * @param {Object} config Config required for bin creation\n * @param {Array.} config.bucketObj.stops Defination of bucket ranges. Two subsequent number from arrays\n * are picked and a range is created. The first number from range is inclusive and the second number from range\n * is exclusive.\n * @param {Number} [config.bucketObj.startAt] Force the start of the bin from a particular number.\n * If not mentioned, the start of the bin or the lower domain of the data if stops is not mentioned, else its\n * the first value of the stop.\n * @param {Number} config.binSize Bucket size for each bin\n * @param {Number} config.binCount Number of bins which will be created\n * @param {String} config.name Name of the new binned field to be created\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const bin = (...args) => dm => dm.bin(...args);\n\n/**\n * This is functional version of `groupBy` operator.Groups the data using particular dimensions and by reducing\n * measures. It expects a list of dimensions using which it projects the datamodel and perform aggregations to reduce\n * the duplicate tuples. Refer this {@link link_to_one_example_with_group_by | document} to know the intuition behind\n * groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupBy = DataModel.Operators.groupBy;\n * const groupedFn = groupBy(['Year'], { horsepower: 'max' } );\n * groupedDM = groupByFn(dm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const groupBy = (...args) => dm => dm.groupBy(...args);\n\n/**\n * Enables composing operators to run multiple operations and save group of operataion as named opration on a DataModel.\n * The resulting DataModel will be the result of all the operation provided. The operations provided will be executed in\n * a serial manner ie. result of one operation will be the input for the next operations (like pipe operator in unix).\n *\n * Suported operations in compose are\n * - `select`\n * - `project`\n * - `groupBy`\n * - `bin`\n * - `compose`\n *\n * @example\n * const compose = DataModel.Operators.compose;\n * const select = DataModel.Operators.select;\n * const project = DataModel.Operators.project;\n *\n * let composedFn = compose(\n * select(fields => fields.netprofit.value <= 15),\n * project(['netprofit', 'netsales']));\n *\n * const dataModel = new DataModel(data1, schema1);\n *\n * let composedDm = composedFn(dataModel);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} operators: An array of operation that will be applied on the\n * datatable.\n *\n * @returns {DataModel} Instance of resultant DataModel\n */\nexport const compose = (...operations) =>\n (dm, config = { saveChild: true }) => {\n let currentDM = dm;\n let firstChild;\n const derivations = [];\n\n operations.forEach((operation) => {\n currentDM = operation(currentDM);\n derivations.push(...currentDM._derivation);\n if (!firstChild) {\n firstChild = currentDM;\n }\n });\n\n if (firstChild && firstChild !== currentDM) {\n firstChild.dispose();\n }\n\n // reset all ancestorDerivation saved in-between compose\n currentDM._ancestorDerivation = [];\n persistDerivations(\n dm,\n currentDM,\n DM_DERIVATIVES.COMPOSE,\n null,\n derivations\n );\n\n if (config.saveChild) {\n currentDM.setParent(dm);\n } else {\n currentDM.setParent(null);\n }\n\n return currentDM;\n };\n","/**\n * Wrapper on calculateVariable() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const calculateVariable = (...args) => dm => dm.calculateVariable(...args);\n\n/**\n * Wrapper on sort() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const sort = (...args) => dm => dm.sort(...args);\n","import { crossProduct } from './cross-product';\nimport { naturalJoinFilter } from './natural-join-filter-function';\n\nexport function naturalJoin (dataModel1, dataModel2) {\n return crossProduct(dataModel1, dataModel2, naturalJoinFilter(dataModel1, dataModel2), true);\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar _containerManager = require('./container-manager');\n\nvar _containerManager2 = _interopRequireDefault(_containerManager);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n M = slLib.win.Math,\n max = M.max,\n round = M.round,\n BLANK = '',\n htmlSplCharSpace = { ' ': ' ' },\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\n/*\n * Create new instance of SmartLabelManager.\n *\n * SmartLabelManager controls the lifetime of the execution space where the text's metrics will be calculated.\n * This takes a string for a given style and returns the height, width.\n * If a bound box is defined it wraps the text and returns the wrapped height and width.\n * It allows to append ellipsis at the end if the text is truncated.\n *\n * @param {String | Number} id - Id of the instance. If the same id is passed, it disposes the old instance and\n * save the new one;\n * @param {String | HTMLElement} container - The id or the instance of the container where the intermediate dom\n * elements are to be attached. If not passed, it appends in div\n *\n * @param {Boolean} useEllipses - This decides if a ellipses to be appended if the text is truncated.\n * @param {Object} options - Control options\n * {\n * maxCacheLimit: No of letter to be cached. Default: 500.\n * }\n * @constructor\n */\nfunction SmartLabelManager(id, container, useEllipses, options) {\n var wrapper,\n prop,\n max,\n prevInstance,\n isBrowserLess = false,\n store = SmartLabelManager.store;\n\n if (typeof id === 'undefined' || typeof id === 'object') {\n return;\n }\n\n if (prevInstance = store[id]) {\n prevInstance.dispose();\n }\n\n store[id] = this;\n options = options || {};\n options.maxCacheLimit = isFinite(max = options.maxCacheLimit) ? max : slLib.maxDefaultCacheLimit;\n\n if (typeof container === 'string') {\n container = doc.getElementById(container);\n }\n\n wrapper = slLib.createContainer(container);\n wrapper.innerHTML = slLib.testStrAvg;\n\n if (documentSupport.isHeadLess || !documentSupport.isIE && !wrapper.offsetHeight && !wrapper.offsetWidth) {\n isBrowserLess = true;\n }\n\n wrapper.innerHTML = '';\n for (prop in slLib.parentContainerStyle) {\n wrapper.style[prop] = slLib.parentContainerStyle[prop];\n }\n\n this.id = id;\n this.parentContainer = wrapper;\n\n this._containerManager = new _containerManager2['default'](wrapper, isBrowserLess, 10);\n this._showNoEllipses = !useEllipses;\n this._init = true;\n this.style = {};\n this.options = options;\n\n this.setStyle();\n}\n\n/*\n * getSmartText returns the text separated by
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'];","(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(\"hyperdis\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hyperdis\"] = factory();\n\telse\n\t\troot[\"hyperdis\"] = 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 = 0);\n","const makeEntry = (arr, sCon) => {\n arr.forEach((elem) => {\n if (elem === undefined || elem === null) {\n return;\n }\n sCon[elem] = 1;\n });\n};\n\nexport default class ForeignSet {\n constructor (arr) {\n this._set = {};\n makeEntry(arr, this._set);\n }\n\n append (arr) {\n makeEntry(arr, this._set);\n return this;\n }\n\n toArray () {\n return Object.keys(this._set);\n }\n\n static difference (set1, set2) {\n let key;\n const filteredKeys = [],\n s1 = set1._set,\n s2 = set2._set;\n for (key in s1) {\n if (!({}).hasOwnProperty.call(s1, key)) {\n continue;\n }\n if (key in s2) {\n continue;\n }\n filteredKeys.push(key);\n }\n return new ForeignSet(filteredKeys);\n }\n}\n","/* global window */\n\nimport ForeignSet from './set';\n\nconst\n 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 minMsThreshold = 16,\n /* istanbul ignore next */win = typeof window === 'undefined' ? (this || {}) : window,\n /* istanbul ignore next */ reqAnimFrame = win.requestAnimationFrame || win.webkitRequestAnimationFrame ||\n win.mozRequestAnimationFrame || win.oRequestAnimationFrame ||\n win.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, minMsThreshold);\n },\n\n getTimeBasedId = () => {\n if (getTimeBasedId.__lastTime === new Date().getTime()) {\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n }\n\n getTimeBasedId.__id = 0;\n getTimeBasedId.__lastTime = new Date().getTime();\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n },\n pullableRecent = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const\n hist = node.history,\n l = hist.length - 1;\n return [hist[l - 1 < 0 ? 0 : l - 1], hist[l]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n pullableEnd = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const hist = node.history;\n return [hist[0], hist[hist.length - 1]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n unique = fns => fns\n .reduce((store, fn) => {\n // @warn function with side effect, it mutates the store passed during initialization\n if (fn.__id in store.map) {\n return store;\n }\n\n store.map[fn.__id] = 1;\n store.unique.push(fn);\n\n return store;\n }, { map: {}, unique: [] })\n .unique,\n compose = fns => () => {\n fns.forEach(fn => fn());\n },\n flat = (...params) => {\n const res = [];\n params.forEach(param => res.push(...param));\n return res;\n },\n identityMap = arrays => arrays,\n splitPathProp = (path) => {\n const pathArr = path.split('.'),\n len = pathArr.length;\n return [pathArr.slice(0, len - 1), pathArr[len - 1]];\n },\n scheduler = (onFinishCallback) => {\n let queue = [],\n animationFrame = null;\n\n onFinishCallback = onFinishCallback &&\n typeof onFinishCallback === 'function' && onFinishCallback || (() => { });\n\n return (listeners, payload) => {\n [].push.apply(queue, listeners);\n if (animationFrame === null) {\n animationFrame = reqAnimFrame(() => {\n const tempQ = queue.slice(0);\n queue.length = 0;\n animationFrame = null;\n\n unique(tempQ).forEach(fn => fn());\n onFinishCallback(payload);\n });\n }\n };\n },\n fetch = namedNode => (...params) => params.map((param) => {\n const node = namedNode[param];\n return {\n name: node.name,\n qualifiedName: node.qualifiedName,\n value: node.seed\n };\n }),\n fetchAggregator = (...params) => ({\n dependencies: params.slice(0, params.length - 1),\n fn: params[params.length - 1]\n }),\n getUpstreamNodes = (list) => {\n let res = [];\n const map = {};\n list.forEach(node => map[node.qualifiedName] = -1);\n function rec (arr) {\n arr.forEach((node) => {\n let qname,\n placedIndex,\n preArr,\n postArr;\n if (!((qname = node.qualifiedName) in map)) {\n map[qname] = res.push(node) - 1;\n } else {\n placedIndex = map[qname];\n if (placedIndex !== -1 && placedIndex !== res.length - 1) {\n // If not the last element, readjust the array so that the later dependency position is saved\n preArr = res.slice(0, placedIndex);\n postArr = res.slice(placedIndex + 1);\n res = preArr.concat(postArr);\n\n // reset the index in map\n postArr.forEach((elem, i) => map[elem.qualifiedName] = i + preArr.length);\n map[qname] = res.push(node) - 1;\n }\n }\n rec(node.outgoingEdges);\n });\n }\n rec(list);\n return res;\n },\n resolver = {\n accumulate: (...params) => {\n const resp = {};\n params.forEach((nodeDetails) => {\n Object.assign(resp, { [nodeDetails.name]: nodeDetails.value });\n });\n return resp;\n },\n identity: nodeDetails => nodeDetails.value\n };\n\nfunction resolveDependencyOrder (node, resolved, resolveMap) {\n let qname;\n node.edges.forEach((neighbour) => {\n resolveDependencyOrder(neighbour, resolved, resolveMap);\n });\n\n if (node.isRoot() || (qname = node.qualifiedName) in resolveMap) {\n return;\n }\n resolved.push(node);\n resolveMap[qname] = 1;\n}\n\nclass CustomResolver {\n constructor (resolver) {\n this.fn = resolver;\n this.dep = [];\n }\n\n addDependencies(...dep) {\n this.dep.push(...dep);\n return this;\n }\n\n getDependencies () {\n return this.dep;\n }\n\n get () {\n return this.fn;\n }\n}\n\nexport {\n isSimpleObject,\n scheduler,\n compose,\n flat,\n identityMap,\n pullableEnd,\n pullableRecent,\n unique,\n splitPathProp,\n resolver,\n ForeignSet,\n resolveDependencyOrder,\n fetch,\n fetchAggregator,\n CustomResolver,\n getUpstreamNodes\n};\n","export default class GraphNode {\n constructor (name, qualifiedName, options) {\n /* istanbul ignore next */options = options || {};\n this.name = name;\n this.qualifiedName = qualifiedName;\n this.edges = [];\n this.outgoingEdges = [];\n this._seed = null;\n this.requireResolve = true;\n this.retriever = options.retriever;\n this.history = [];\n this.resolver = null;\n this.electricEdges = [];\n }\n\n addDependencies (...dep) {\n this.edges.push(...dep);\n dep.forEach(entry => entry.outgoingEdges.push(this));\n return this;\n }\n\n addElectricNode (node) {\n this.electricEdges.push(node);\n return this;\n }\n\n get seed () {\n return this._seed;\n }\n\n set seed (value) {\n this._seed = value;\n this.requireResolve = true;\n return this;\n }\n\n resolve () {\n this.seed = this.resolver(...this.retrieveDetails());\n this.history.push(this.seed);\n this.requireResolve = false;\n return this;\n }\n\n retrieveDetails () {\n if (this.edges.length === 0) {\n return [{\n name: this.name,\n qualifiedName: this.qualifiedName,\n value: this.seed\n }];\n }\n return this.retriever(...this.edges.map(edge => edge.qualifiedName));\n }\n\n repeatHead () {\n const\n history = this.history,\n head = history[history.length - 1];\n // @todo- Akash, write test case if history.length === 0 to pass code coverage\n if (history.length === 0) {\n return this;\n }\n history.push(head);\n return this;\n }\n\n flush () {\n const hist = this.history,\n head = hist[hist.length - 1];\n hist.length = 0;\n hist.push(head);\n return this;\n }\n\n isRoot () {\n return this.name === null;\n }\n}\n","import {\n pullableRecent,\n pullableEnd\n} from './utils';\n\nexport default class ElectricNode {\n constructor () {\n this.edges = [];\n this.listeners = {\n nextFrame: [],\n currentFrame: []\n };\n }\n\n addEdges (...nodes) {\n this.edges.push(...nodes);\n return this;\n }\n\n regListenerForCurrFrame (fn) {\n const lstnrs = this.listeners.currentFrame;\n let index = lstnrs.push(pullableRecent(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.currentFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n regListenerForNextFrame (fn) {\n const lstnrs = this.listeners.nextFrame;\n let index = lstnrs.push(pullableEnd(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.nextFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n hasNextFrameListener () {\n return !!this.listeners.nextFrame.length;\n }\n}\n","import {\n isSimpleObject,\n resolver,\n // upstreamNodes,\n flat,\n resolveDependencyOrder,\n getUpstreamNodes,\n ForeignSet,\n fetch,\n CustomResolver,\n scheduler\n} from './utils';\nimport Node from './graph-node';\nimport ElectricNode from './electric-node';\n\nexport default class Graph {\n constructor () {\n this.qualifiedNodeMap = {};\n this.retriever = fetch(this.qualifiedNodeMap);\n this.root = new Node(null, null, { retriever: this.retriever });\n this.root.resolver = resolver.accumulate;\n\n this._wholeSet = null;\n this._propagate = true;\n this.propagationOverride = {\n currentFrameListeners: false,\n nextFrameListeners: false\n };\n\n this._schedule = scheduler((payload) => {\n let qname;\n for (qname in payload.flushTarget) {\n if (!({}).hasOwnProperty.call(this.qualifiedNodeMap, qname)) {\n return;\n }\n this.qualifiedNodeMap[qname].flush();\n }\n });\n }\n\n createNodesFrom (obj, mount) {\n let val,\n resolveReqList;\n const qualifiedNodeMap = this.qualifiedNodeMap,\n root = this.root,\n retriever = this.retriever;\n\n (function rec (objn, qualifiedName, history) {\n let key,\n qname,\n perv,\n node;\n\n for (key in objn) {\n if (!({}).hasOwnProperty.call(objn, key)) {\n continue;\n }\n qname = `${qualifiedName}${key}`;\n node = new Node(key, qname, { retriever });\n qualifiedNodeMap[qname] = node;\n\n if ((perv = history.perv) !== undefined) {\n perv.addDependencies(node);\n } else {\n // top most level entries\n root.addDependencies(node);\n }\n\n if (isSimpleObject(val = objn[key])) {\n rec(val, `${qualifiedName}${key}.`, { perv: node });\n node.resolver = resolver.accumulate;\n } else if (val instanceof CustomResolver) {\n node.resolver = val.get();\n node.addDependencies(...val.getDependencies().map(qname => qualifiedNodeMap[qname]));\n } else {\n node.resolver = resolver.identity;\n node.seed = val;\n // node.resolve();\n }\n }\n }(obj, mount === null ? '' : `${mount}.`, {\n perv: qualifiedNodeMap[mount]\n }));\n\n this._wholeSet = new ForeignSet(Object.keys(this.qualifiedNodeMap));\n\n // Recalculate the model without firing the listeners\n // @todo selective branch resolve. Currently resolve gets called even for a branch which was updated\n resolveReqList = this.constructor.getResolvedList(root).concat(root).filter(node => node.requireResolve);\n resolveReqList.forEach(node => node.resolve());\n getUpstreamNodes(resolveReqList).forEach(node => node.resolve());\n return this;\n }\n\n getNodeValue (prop) {\n if (prop in this.qualifiedNodeMap) {\n return this.qualifiedNodeMap[prop].seed;\n }\n return undefined;\n }\n\n createElectricNodeOf (props, fnSpec) {\n const nodes = props.map(prop => this.qualifiedNodeMap[prop]),\n eNode = new ElectricNode().addEdges(...nodes);\n\n nodes.forEach(node => node.addElectricNode(eNode));\n return eNode[`regListenerFor${fnSpec.type}`](fnSpec.fn);\n }\n\n update (...params) {\n let changedSet,\n upstreamNodes;\n const\n electricEdges = [],\n nodes = params.map((entry) => {\n entry[0].seed = entry[1];\n return entry[0];\n });\n nodes.forEach(node => node.resolve());\n electricEdges.push(...flat(...nodes.map(node => node.electricEdges)));\n changedSet = new ForeignSet(nodes.map(node => node.qualifiedName));\n\n if (!this._propagate) {\n this.__execUniqueElectricEdges(electricEdges);\n this._propagate = true;\n return this;\n }\n\n upstreamNodes = getUpstreamNodes(nodes);\n upstreamNodes.forEach(upstreamNode => upstreamNode.resolve());\n changedSet.append(upstreamNodes.map(node => node.qualifiedName));\n electricEdges.push(...flat(...upstreamNodes.map(node => node.electricEdges)));\n\n this.__execUniqueElectricEdges(Array.from(new Set(electricEdges)), changedSet);\n return this;\n }\n\n __execUniqueElectricEdges (electricEdges, changedSet) {\n const\n cfLstnrs = [], // current frame listeners\n nfLstnrs = []; // next frame listeners\n if (changedSet) {\n const\n differenceSet = ForeignSet.difference(this._wholeSet, changedSet),\n entries = differenceSet.toArray();\n\n entries.forEach(entry => this.qualifiedNodeMap[entry].repeatHead());\n }\n\n electricEdges.forEach((e) => {\n cfLstnrs.push(...e.listeners.currentFrame);\n });\n electricEdges.forEach((e) => {\n nfLstnrs.push(...e.listeners.nextFrame);\n });\n\n !this.propagationOverride.currentFrameListeners && cfLstnrs.forEach(fn => fn());\n !this.propagationOverride.nextFrameListeners && this._schedule(nfLstnrs, { flushTarget: changedSet });\n this.resetPropagationOverride();\n return this;\n }\n\n resetNodeValue (...qnames) {\n const nodes = qnames.map(qname => this.qualifiedNodeMap[qname]),\n args = nodes.map(node => [node, node.seed]);\n this.update(...args);\n return this;\n }\n\n static getResolvedList (node) {\n const resolved = [];\n resolveDependencyOrder(node, resolved, {});\n return resolved;\n }\n\n stopPropagation () {\n this._propagate = false;\n return this;\n }\n\n resetPropagationOverride () {\n this.propagationOverride.currentFrameListeners = false;\n this.propagationOverride.nextFrameListeners = false;\n return this;\n }\n\n setPropagationOverride (key) {\n this.propagationOverride[`${key}Listeners`] = true;\n return this;\n }\n\n getNodeFromQualifiedName (qname) {\n return this.qualifiedNodeMap[qname];\n }\n}\n","import Graph from './graph';\nimport { CustomResolver, fetchAggregator } from './utils';\n\n/**\n * The container class for Hyperdis. Hyperdis is an enabler for observable object with few interesting features like,\n * calculated property, next frame and same frame listeners, multiple listeners etc with a dependency resolving system.\n * It internally uses a graph to hold the hierarchial relationship of a object. Model is merely a container which\n * ties all the components together.\n *\n * @todo Circular dependency detection is not present\n *\n * @example check src/index.spec.js\n * @class\n */\nclass Model {\n constructor () {\n this._graph = new Graph();\n this._lockFlag = false;\n this._reqQ = [];\n }\n\n /**\n * Static method to create and init the model with an observable seed\n *\n * @param {Object} obj The target object which is required to be made observable\n * @return {Model} instance of the observable object model\n */\n static create (obj) {\n return new Model()._addPropInModel(null, obj);\n }\n\n /**\n * Appends more observable property on the already observable instance. This mutates the original model.\n *\n * This function works in two mode. One being\n * @param {String} mountPoint the property on which the new set of properties will be mounted. If its a nested\n * property then the mountPoint has to be written such a way so it feels like you are\n * accessing the object. If the mount point is not found then he obeservables are added in\n * the root.\n * @param {Object} The target object which is required to be made observable\n *\n * Another being\n * @param {Object} The target object which is required to be made observable\n *\n * @return {Model} instance of the observable object model\n */\n append (...params) {\n let mountPoint,\n obj;\n\n if (params.length === 1) {\n mountPoint = null;\n obj = params[0];\n } else {\n mountPoint = params[0];\n obj = params[1];\n }\n\n this._addPropInModel(mountPoint, obj);\n return this;\n }\n\n /**\n * Creates a calculated variable from existing variable. This variable can't be updated from outside.\n * @param {string} mountpoint property path on which the new variable will be placed\n * @param {string} name name of the variable. If the variable could have hierarchy like `limits.start`\n * @param {Function} fn funtion where the dependent variables are injected based on the dependency requirement\n */\n calculatedProp (...params) {\n let calculationConfig,\n customResolver,\n varName,\n mount,\n fetchFn;\n\n if (params.length > 2) {\n mount = params[0];\n varName = params[1];\n fetchFn = params[2];\n } else {\n mount = null;\n varName = params[0];\n fetchFn = params[1];\n }\n\n calculationConfig = fetchFn(fetchAggregator);\n customResolver = new CustomResolver(calculationConfig.fn);\n customResolver.addDependencies(...calculationConfig.dependencies);\n\n this._addPropInModel(mount, { [varName]: customResolver });\n return this;\n }\n\n // eslint-disable-next-line require-jsdoc\n _addPropInModel (mountPoint, obj) {\n this._graph.createNodesFrom(obj, mountPoint);\n return this;\n }\n\n /**\n * Register a listener in the current frame when a property or group of properties is changed.\n *\n * @example\n * This function takes a single or group of property and handler which is called when any of the properties are\n * changed.\n * When a single property is changed the handler is called with two parameter, what was the old value of the state\n * property and what is the new value.\n * myState.on('range.start', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 9);\n * // Output\n * Value before prop change 1\n * Value after prop change 9\n *\n * If a handler is registered on change of a property which has another state property as value, then the handler\n * gets called whenever any state property connected to it gets changed\n *\n * myState.on('range', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 10);\n * myState.prop('range.type.absolute', false);\n *\n * // Output\n * Value before prop change\n * range {\n * start: 9,\n * end: 5,\n * type: {\n * absolute: true\n * }\n * }\n * Value after prop change\n * range: {\n * start: 10,\n * end: 5,\n * type: {\n * absolute: false\n * }\n * }\n * If a handler is registered with more than one property change then, the handler is called when any of the\n * properties gets changed. In this cast the handler is called with more than one parameter: each for one state\n * property which is registered for listening. Each parameter is of type array containing [oldValue, newValue]\n *\n * myState.on('range.start', 'range.end', (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * myState.prop('range.start', 12);\n *\n * // Output\n * Start [10, 12]\n * End [5, 5]\n *\n * myState.prop('range.end', 7);\n *\n * // Output\n * Start [12, 12]\n * End [5, 7]\n *\n * The on returns a function which is when called the listener registered gets unregistered\n *\n * let unsub = myState.on(['range.start', 'range.end'], (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * // Unsubscribe\n * unsub()\n *\n * On takes an optional boolean value as the last parameter, which if passed as a true value the handler gets called\n * during registration itself.\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n on (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed in the current stack frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'CurrFrame',\n fn\n });\n\n if (instantCall) {\n // Bar current next frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('nextFrame').resetNodeValue(...props);\n }\n return unsub;\n }\n\n /**\n * Register a listener for the next frame when a property or group of properties is changed.\n *\n * @example\n * See the examples for the on listener\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties. Here the oldvalue is last value of the last frame\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n next (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed at the tick of next animation frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'NextFrame',\n fn\n });\n\n // @todo check support for this from the graph side\n if (instantCall) {\n // Bar current frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('currentFrame').resetNodeValue(...props);\n }\n\n return unsub;\n }\n\n /**\n * Lock queues the request of property change and releases the change when unlock is called. This is helpful when\n * multiple property is getting called and the model listeners are to be fired once at the end of update.\n *\n * @return {Model} instance of the model\n */\n lock () {\n this._lockFlag = true;\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * Unlock unleashes the change done after the lock was called.\n\n * @return {Model} instance of the model\n */\n unlock () {\n this._lockFlag = false;\n this.setProp(...this._reqQ);\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * This acts as getter and setter. If the function is called by passing only one argument, it retrieve the value\n * associated with the property. If the same function is called using two parameters, first one being the property\n * and second one being the value, then the value is set for the property and the handlers are called (if any)\n * which got registered using the on function\n *\n * Getter\n * @param {string} prop property path whose value to be retrieved\n * @return {Object} value of the property at the time of call\n *\n * Setter\n * @param {string} property property path whose value to be ser\n * @return {Model} instance of the model\n */\n prop (...params) {\n let prop,\n val,\n len;\n\n switch (len = params.length) {\n case 1:\n prop = params[0];\n break;\n\n case 2:\n prop = params[0];\n val = params[1];\n break;\n\n default:\n return this;\n }\n\n if (len === 2) {\n this._lockFlag ? this._reqQ.push([prop, val]) : this.setProp([prop, val]);\n return this;\n }\n\n return this._graph.getNodeValue(prop);\n }\n\n // eslint-disable-next-line require-jsdoc\n setProp (...props) {\n // Filter out the calculated variables, so that it cant be changed from outside\n // @todo if a node is not leafValue, and change is called, ignore it too\n // props = props.filter(prop => !(VirtualObj.walkTill(prop[0].split('.'), this._vObj).leafValue()\n // instanceof CalculatedVar));\n\n if (props.length === 0) {\n return this;\n }\n\n this._graph.update(...props.map(prop => [this._graph.getNodeFromQualifiedName(prop[0]), prop[1]]));\n return this;\n }\n\n /**\n * Retrieves the graph representation of the object\n * @return {Graph} instance of the graph associated to the model\n */\n graph () {\n return this._graph;\n }\n\n /**\n * Get serialized data from the model\n *\n * @return {Object} Serialized data\n */\n serialize () {\n return this._graph.root.seed;\n }\n}\n\nexport default Model;\n","import Model from './model';\n\nexport default Model;\n","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 copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\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]) // eslint-disable-line no-prototype-builtins\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.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\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\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 formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\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://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) return hcl2lab(o);\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.l < 100 ? 0 : NaN, 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\nfunction hcl2lab(o) {\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\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 hcl2lab(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 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","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 {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","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","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","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(date - date.getMilliseconds());\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, durationSecond} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\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, durationSecond} from \"./duration\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\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","export const UNIT_GLOBAL_NAMESPACE = 'app.units';\nexport const UNIT_LOCAL_NAMESPACE = 'local.units';\nexport const LAYER_LOCAL_NAMESPACE = 'local.layers';\nexport const LAYER_GLOBAL_NAMESPACE = 'app.layers';\nexport const GROUP_GLOBAL_NAMESPACE = 'app.group';\nexport const GROUP_LOCAL_NAMESPACE = 'local.group';\nexport const CANVAS_LOCAL_NAMESPACE = 'local.canvas';\nexport const CANVAS_GLOBAL_NAMESPACE = 'app.canvas';\n\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 MATRIX_CREATED: 'matrixCreated'\n};\n\nexport default CommonProps;\n","export const COORD_TYPES = {\n POLAR: 'polar',\n CARTESIAN: 'cartesian'\n};\nexport const DATA_TYPE = {\n FUNCTION: 'function',\n STRING: 'string',\n NUMBER: 'number',\n BOOLEAN: 'Boolean'\n};\nexport const SORT_ORDER_ASCENDING = 'asc';\nexport const SORT_ORDER_DESCENDING = 'desc';\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, ccw = !!ccw;\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 = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\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 oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var 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","import { defaultValue } from '../common-utils';\n\nconst sortSelection = (dataObjects, updateData, sortFn) =>\n (a, b) => {\n const kA = a[0];\n const kB = b[0];\n return sortFn([a[0], dataObjects.get(kA), updateData.get(kA)], [kB, dataObjects.get(kB), updateData.get(kB)]);\n };\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 (idGetter) {\n this._dataObjects = new Map();\n this._updateData = new Map();\n this._enterData = new Map();\n this._exitData = new Map();\n this._idGetter = idGetter;\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) {\n const entryData = new Map();\n const exitdata = new Map();\n const tempMap = new Map();\n const duplicateData = new Map();\n const updatedData = this._updateData;\n const idGetter = this._idGetter;\n\n newData.forEach((...params) => {\n const key = idGetter ? idGetter(...params) : params[1];\n if (!tempMap.has(key)) {\n tempMap.set(key, params[0]);\n } else {\n duplicateData.push(key, params[0]);\n }\n });\n\n let val;\n // prepare enter data\n let entries = tempMap.entries();\n while (val = entries.next().value) {\n if (!updatedData.has(val[0])) {\n entryData.set(val[0], val[1]);\n } else {\n updatedData.set(val[0], val[1]);\n }\n }\n // prepare exit data\n entries = updatedData.entries();\n while (val = entries.next().value) {\n if (!tempMap.has(val[0])) {\n exitdata.set(val[0], val[1]);\n }\n }\n\n // put duplicate data to exit list\n entries = duplicateData.entries();\n while (val = entries.next().value) {\n exitdata.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = updatedData;\n newSelection._dataObjects = this._dataObjects;\n newSelection._enterData = entryData;\n newSelection._exitData = exitdata;\n\n return newSelection;\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 Selection\n */\n append (callback) {\n let val;\n const dataObjects = new Map();\n const data = new Map();\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n dataObjects.set(val[0], callback(val[1]));\n data.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = data;\n newSelection._dataObjects = dataObjects;\n\n return newSelection;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {Selection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\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 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 (target) {\n const mergedObjects = new Map();\n const mergedData = new Map();\n let val;\n let entries;\n\n // merge Object and data present in this selection\n entries = this._updateData.entries();\n while (val = entries.next().value) {\n if (!this._exitData.has(val[0])) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], this._dataObjects.get(val[0]));\n }\n }\n\n // merge object from target selection\n entries = target._updateData.entries();\n while (val = entries.next().value) {\n if (!(mergedData.has(val[0]) || target._exitData.has(val[0]))) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], target._dataObjects.get(val[0]));\n }\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = mergedData;\n newSelection._dataObjects = mergedObjects;\n\n return newSelection;\n }\n\n each (fn) {\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n fn(val[1], this._updateData.get(val[0]), val[0]);\n }\n }\n\n map (fn) {\n const newdata = new Map();\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n newdata.set(val[0], fn(val[1], this._updateData.get(val[0]), val[0]));\n }\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = this._updateData;\n newSelection._dataObjects = newdata;\n\n return newSelection;\n }\n\n remove () {\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n\n currentData.clear();\n\n return this;\n }\n\n sort (sortFn) {\n const updateData = this._updateData;\n const dataObjects = this._dataObjects;\n const sortSel = sortSelection(dataObjects, updateData, sortFn);\n\n this._updateData = new Map([...updateData.entries()].sort(sortSel));\n this._dataObjects = new Map([...dataObjects.entries()].sort(sortSel));\n return this;\n }\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 let val;\n const objects = [];\n const dataObjects = this._dataObjects;\n // select the data to create object\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n if (dataObjects.has(val[0])) {\n objects.push(dataObjects.get(val[0]));\n }\n }\n\n return objects;\n }\n}\n\nexport default Selection;\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","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype, DateTimeFormatter, DM_DERIVATIVES, default as DataModel } 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 { dataSelect } from './DataSystem';\nimport { DATA_TYPE, SORT_ORDER_ASCENDING, SORT_ORDER_DESCENDING } from './enums';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst { CATEGORICAL, TEMPORAL } = DimensionSubtype;\nconst { STRING, FUNCTION } = DATA_TYPE;\nconst { InvalidAwareTypes } = DataModel;\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.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.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 const domArr = [];\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n for (let i = 0, len = data.length; i < len; i++) {\n const arr = data[i];\n const [field0, field1] = fields;\n const arr0 = arr.filter(d => !isNaN(d[field0]));\n const arr1 = arr.filter(d => !isNaN(d[field1]));\n if (arr0.length || arr1.length) {\n const firstMin = getMin(arr0, field0);\n const secondMin = getMin(arr1, field1);\n const firstMax = getMax(arr0, field0);\n const secondMax = getMax(arr1, field1);\n domArr.push([Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)]);\n }\n }\n domain = domArr.length ? [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))] : [];\n break;\n }\n return domain;\n};\n\nconst sanitizeDomainWhenEqual = (domain) => {\n if (domain[0] === domain[1]) {\n domain[0] = domain[0] > 0 ? 0 : domain[0];\n domain[1] = domain[1] > 0 ? domain[1] : 0;\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 && dom.length);\n if (domains.length) {\n if (fieldType === CATEGORICAL) {\n domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\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\nconst getNearestValue = (data, key) => {\n const filterData = data.filter(d => typeof d === 'number');\n return filterData[getClosestIndexOf(filterData, key)];\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 *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object}\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} name\n * @return {Object}\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\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 * 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\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const { sanitization, preset, onset, typeChecker, defaultValue: defVal } = propInfo[1];\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n if (defVal) {\n context[`_${prop}`] = defVal;\n }\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0], context[`_${prop}`]);\n }\n if (preset) {\n preset(context, value);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n if (onset) {\n onset(context, value);\n }\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 *\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\n .registerImmediateListener(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\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 */\nconst createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect(idFn);\n\n selection = selection.data(data);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n const exitSelection = selection.exit();\n exitSelection.getObjects().forEach(inst => inst.remove());\n exitSelection.remove();\n return mergedSelection;\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 shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? rgbToHsv(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : '';\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\\(([\\d.]+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*(\\d*(?:\\.\\d+)?)\\)$/;\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\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 *\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].internalValue;\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 *\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].internalValue;\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 } else {\n filteredDataModel = dataModel.select(() => false, {\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, ...params) => {\n const propListenerMap = listenerMap(context, ...params);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const { namespace } = params[1];\n let ns = null;\n if (namespace) {\n ns = namespace;\n }\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, false, {\n namespace: ns\n });\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} str\n *\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 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};\n\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\n\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\n\nconst formatTemporal = (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n};\n\nconst temporalFields = (dataModel) => {\n const filteredFields = {};\n Object.entries(dataModel.getFieldspace().getDimension()).forEach(([fieldName, fieldObj]) => {\n if (fieldObj.subtype() === TEMPORAL) {\n filteredFields[fieldName] = fieldObj;\n }\n });\n return filteredFields;\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\nconst getValueParser = config => (val) => {\n if (val instanceof InvalidAwareTypes) {\n return val in config ? config[val] : `${val}`;\n }\n return val;\n};\n\nconst retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => {\n const filteredReducers = {};\n if (dataModel instanceof DataModel) {\n const derivations = [...dataModel.getDerivations().reverse(), ...dataModel.getAncestorDerivations().reverse()];\n const nearestReducers = defaultValue(\n getObjProp(derivations.find(derv => derv.op === DM_DERIVATIVES.GROUPBY), 'criteria'), {});\n\n const measures = dataModel.getFieldspace().getMeasure();\n measureFieldNames = measureFieldNames.length ? measureFieldNames : Object.keys(measures);\n measureFieldNames.forEach((measureName) => {\n if (nearestReducers[measureName]) {\n filteredReducers[measureName] = nearestReducers[measureName];\n } else {\n const measureField = measures[measureName];\n if (measureField) {\n filteredReducers[measureName] = measureField.defAggFn();\n }\n }\n });\n }\n return filteredReducers;\n};\n\nconst retrieveFieldDisplayName = (dm, fieldName) => dm.getFieldspace().fieldsObj()[fieldName].displayName();\n/**\n * Fetches the nearest sort operation details by traversing the chain of parent DataModels\n * @param {Object} dataModel Instance of DataModel\n *\n * @return {Array|null} sort criteria, null if no sort operation found\n */\nconst nearestSortingDetails = (dataModel) => {\n const allDerivations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n const nearestSortDerivation = allDerivations.reverse().find(derivation => derivation.op === DM_DERIVATIVES.SORT);\n\n return nearestSortDerivation ? nearestSortDerivation.criteria : null;\n};\n\n/**\n * Map containing key, value sortingOrder pairs\n */\nconst sortOrderMap = {\n [SORT_ORDER_ASCENDING]: (firstVal, secondVal) => firstVal.localeCompare(secondVal),\n [SORT_ORDER_DESCENDING]: (firstVal, secondVal) => secondVal.localeCompare(firstVal)\n};\n\n/**\n * Sort categorical field based on it's sorting order\n * @param {string} sortOrder Order by which field is to be sorted (asc or desc or func)\n * @param {string} firstVal First sort parameter\n * @param {string} secondVal Second sort parameter\n * @return {number} position|null if sort order is invalid\n*/\nconst sortCategoricalField = (sortOrder, firstVal, secondVal) => {\n const sortOrderType = typeof sortOrder;\n\n if (sortOrderType === FUNCTION) {\n return sortOrder(firstVal, secondVal);\n } else if (sortOrderType === STRING) {\n if (!sortOrderMap[sortOrder]) return null;\n return sortOrderMap[sortOrder](firstVal, secondVal);\n }\n return null;\n};\n\nconst intersect = (arr1, arr2, accessors = [v => v, v => v]) => {\n const [fn1, fn2] = accessors;\n const set = new Set(arr2.map(v => fn2(v)));\n return arr1.filter(value => set.has(fn1(value)));\n};\n\nexport {\n getValueParser,\n require,\n intersect,\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 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 getDependencyOrder,\n objectIterator,\n intSanitizer,\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 getNearestValue,\n retrieveNearestGroupByReducers,\n nearestSortingDetails,\n createSelection,\n formatTemporal,\n temporalFields,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField\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 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 (idFn) {\n return new Selection(idFn);\n}\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","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) > 0)) 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","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\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_join from \"./join\";\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 join: selection_join,\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","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\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 && node.compareDocumentPosition(next) ^ 4) 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\", \"cancel\", \"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 > STARTED) throw new Error(\"too late; already running\");\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 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.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\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(node, 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 {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\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 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\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\";\nimport transition_end from \"./end\";\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 end: transition_end\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 string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, 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 attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i(t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\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","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i(t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\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 {set} from \"./schedule\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(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) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\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 schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\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 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","import Model from 'hyperdis';\nimport { defaultValue, getObjProp, toArray } from './common-utils';\n\nconst initProp = (obj, props, val = () => ({})) => {\n props.forEach((prop) => {\n if (!obj[prop]) {\n obj[prop] = val();\n }\n obj = obj[prop];\n });\n return obj;\n};\n\nconst fetchPropValues = (propNames, params, deps) => params.map((param, i) => {\n const prop = propNames[i];\n\n return param.map(val => (val === undefined || val === null ? val : val[deps[prop]]));\n});\n\nconst addListenerToNamespace = (namespaceInf, fn, context) => {\n let key = namespaceInf.key;\n const namespace = namespaceInf.id;\n const listeners = context._listeners;\n\n if (namespace) {\n !listeners.get(namespace) && (listeners.set(namespace, new Map()));\n const namespaceListeners = listeners.get(namespace);\n\n if (!key) {\n key = namespaceListeners.size;\n }\n namespaceListeners.set(key, fn);\n } else {\n key = key || listeners.size;\n listeners.set(key, fn);\n }\n};\n\nconst setContexts = (contexts, propObj, contextMap) => {\n for (const key of propObj.keys()) {\n contexts[key] = {\n context: contextMap[key],\n deps: propObj.get(key).depProps\n };\n }\n return contexts;\n};\n\nconst registerPropInMaps = (store, props, namespaceInf, type) => {\n const {\n _registeredListeners: registeredListeners,\n _propListenerMap: propListenerMap\n } = store;\n const {\n subNamespace,\n namespace: ns\n } = namespaceInf;\n\n initProp(registeredListeners, [ns]);\n props.forEach((prop) => {\n const subNamespaces = defaultValue(getObjProp(registeredListeners, ns, prop, 'subNamespace'), []);\n let fns = defaultValue(getObjProp(propListenerMap, prop, type, 'fns'), 0);\n\n fns++;\n subNamespace && subNamespaces.push(subNamespace);\n registeredListeners[ns][prop] = {\n subNamespace: subNamespaces,\n allProps: props,\n subNamespaces: {}\n };\n initProp(propListenerMap, [prop, type]);\n propListenerMap[prop][type] = {\n fns,\n _fnCount: fns\n };\n });\n};\n\nconst registerListener = (context, type, ...options) => {\n const [propList, callBack, instantCall, namespaceInf = {}] = options;\n let props = propList;\n\n if (!Array.isArray(propList)) {\n props = [propList];\n }\n\n const { namespace: ns } = namespaceInf;\n const callbackFn = ((propNames, namespaceVal) => (...params) => {\n const { _savedCommits: commits, _propListenerMap: propListenerMap } = context;\n\n if (!propNames.some(prop => getObjProp(propListenerMap, prop, 'disabled'))) {\n if (namespaceVal) {\n const listenersObj = context._registeredListeners[namespaceVal];\n const contextMap = context._contextMap[namespaceVal];\n const contextsObj = {};\n\n propNames.forEach((prop) => {\n const commitsObj = defaultValue(getObjProp(commits, prop, type), {});\n const listeners = listenersObj[prop].subNamespaces;\n const propDeps = propListenerMap[prop][type];\n\n for (const nm in commitsObj) {\n const fnInf = defaultValue(propDeps[nm], { fns: 0 });\n let { fns } = fnInf;\n\n if (fns > 0) {\n setContexts(contextsObj, listeners[nm], contextMap);\n fns--;\n }\n\n if (fns <= 0) {\n delete commitsObj[nm];\n }\n fnInf.fns = fns;\n }\n });\n for (const key in contextsObj) {\n const obj = contextsObj[key];\n\n callBack(obj.context, ...fetchPropValues(propNames, params, obj.deps));\n }\n } else {\n callBack(...params);\n }\n }\n })(props, ns, type);\n\n const fn = context.model[type](props, callbackFn, instantCall);\n\n if (ns) {\n registerPropInMaps(context, props, namespaceInf, type);\n }\n addListenerToNamespace(namespaceInf, fn, context);\n};\n\nconst retrieveNamespaces = (names, key) => {\n if (names instanceof Object) {\n return [names[key]];\n } else if (names instanceof Array) {\n return names;\n }\n return [names];\n};\n\nconst createMap = () => new Map();\n\nconst listenerTypes = ['next', 'on'];\n\nconst removePropValue = (context, map, propInf) => {\n const { subNamespace: sns, prop, propListenerMap } = propInf;\n const propObj = propListenerMap[prop];\n\n listenerTypes.forEach((type) => {\n if (type in propObj) {\n delete propObj[type][sns];\n }\n });\n if (map.has(sns)) {\n const value = context.get(prop);\n\n if (value instanceof Object && sns in value) {\n delete value[sns];\n }\n map.delete(sns);\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 */\nexport class 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 = new Map();\n this._registeredListeners = {};\n this._contextMap = {};\n this._commits = {};\n this._savedCommits = {};\n this._queuedProps = {};\n this._propListenerMap = {};\n this._locked = false;\n }\n\n lockModel () {\n this.model.lock();\n this._locked = true;\n return this;\n }\n\n unlockModel () {\n this._locked = false;\n this.model.unlock();\n return this;\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 lockCommits (props) {\n props.forEach((prop) => {\n this._commits[prop] = {\n locked: true,\n queue: []\n };\n });\n return this;\n }\n\n unlockCommits (props) {\n const commitsObj = this._commits;\n\n this.lockModel();\n props.forEach((prop) => {\n commitsObj[prop].locked = false;\n const queuedProps = {};\n const { queue } = commitsObj[prop];\n\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n if (namespace) {\n const propObj = initProp(queuedProps, [propName, namespace]);\n\n Object.assign(propObj, value);\n }\n });\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n this.commit(propName, propName in queuedProps ? queuedProps[propName][namespace] : value,\n namespace);\n });\n delete commitsObj[prop];\n });\n this.unlockModel();\n return this;\n }\n\n addSubNamespace (sns, namespace, context) {\n // Get all the listeners registered by the component\n const listeners = this._registeredListeners[namespace];\n const propListenerMap = this._propListenerMap;\n\n initProp(this._contextMap, [namespace]);\n this._contextMap[namespace][sns] = context;\n for (const key in listeners) {\n const obj = listeners[key];\n const propObj = propListenerMap[key];\n const propFns = listenerTypes.reduce((acc, type) => {\n const val = defaultValue(getObjProp(propObj, type, 'fns'), 0);\n val && (acc[type] = val);\n return acc;\n }, {});\n const { allProps, subNamespaces, subNamespace } = obj;\n const snsArr = subNamespace.length ? subNamespace : [sns];\n\n snsArr.forEach((ns) => {\n const nsObj = ns instanceof Function ? ns(context) : ns;\n const names = retrieveNamespaces(nsObj, key);\n const depProps = allProps.reduce((acc, prop) => {\n acc[prop] = ns instanceof Function ? nsObj[prop] : ns;\n return acc;\n }, {});\n\n names.forEach((nm) => {\n initProp(subNamespaces, [nm], createMap).set(sns, {\n depProps\n });\n\n for (const type in propFns) {\n initProp(propObj, [type, nm]);\n const fns = propFns[type];\n\n propObj[type][nm] = {\n fns,\n _fnCount: fns\n };\n }\n });\n });\n }\n return this;\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, namespace, disableListener = false) {\n let sanitizedVal = value;\n const commits = this._commits;\n const savedCommits = this._savedCommits;\n const locked = getObjProp(commits, propName, 'locked');\n const propListenerMap = this._propListenerMap[propName] || {};\n\n propListenerMap.disabled = disableListener;\n\n if (locked) {\n commits[propName].queue.push([propName, value, namespace]);\n return this;\n }\n\n if (namespace) {\n if (this._locked) {\n const queuedProps = initProp(this._queuedProps, [propName]);\n queuedProps[namespace] = value;\n sanitizedVal = queuedProps;\n } else {\n sanitizedVal = defaultValue(this.get(propName), {});\n sanitizedVal[namespace] = value;\n }\n\n listenerTypes.forEach((type) => {\n initProp(savedCommits, [propName, type]);\n savedCommits[propName][type][namespace] = true;\n if (getObjProp(propListenerMap, type, namespace)) {\n propListenerMap[type][namespace].fns = propListenerMap[type][namespace]._fnCount;\n }\n });\n }\n\n this.model.prop(propName, sanitizedVal);\n return this;\n }\n\n /**\n * This method is used to register a callback 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 (...params) {\n registerListener(this, 'next', ...params);\n return this;\n }\n\n /**\n * This method is used to register a callback 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 (...params) {\n registerListener(this, 'on', ...params);\n }\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, subNamespace) {\n const value = this.model.prop(propName);\n return subNamespace ? value && value[subNamespace] : value;\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 append (...params) {\n this.model.append(...params);\n return this;\n }\n\n unsubscribeAll () {\n Object.values(this._listeners).forEach(fn => fn());\n return this;\n }\n\n unsubscribe (namespaceInf = {}) {\n const { id, key } = namespaceInf;\n const listenersMap = this._listeners;\n const listeners = listenersMap.get(id);\n\n if (key) {\n const fn = listenersMap.get(key);\n\n fn && fn();\n } else {\n for (const fn of listeners.values()) {\n fn();\n }\n listenersMap.set(id, []);\n }\n return this;\n }\n\n removeSubNamespace (subNamespace, namespace) {\n const {\n _registeredListeners: listenerMap,\n _contextMap: contextMap,\n _propListenerMap: propListenerMap\n } = this;\n const listenersObj = listenerMap[namespace];\n\n for (const prop in listenersObj) {\n const { subNamespaces } = listenersObj[prop];\n const propInf = {\n subNamespace,\n prop,\n propListenerMap\n };\n\n if (subNamespaces[subNamespace]) {\n removePropValue(this, subNamespaces[subNamespace], propInf);\n delete subNamespaces[subNamespace];\n } else {\n for (const ns in subNamespaces) {\n const snsMap = subNamespaces[ns];\n\n removePropValue(this, snsMap, propInf);\n if (!snsMap.size) {\n delete subNamespaces[ns];\n }\n }\n }\n }\n delete contextMap[namespace][subNamespace];\n return this;\n }\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 * sanitization: // 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}\n */\nexport const transactor = (holder, options, model, namespaceInf = {}) => {\n let conf;\n const store = model instanceof Store ? model : new Store({});\n const stateProps = {};\n const { namespace, subNamespace } = namespaceInf;\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n const nameSpaceProp = namespace ? `${namespace}.${prop}` : prop;\n\n if (subNamespace) {\n const value = defaultValue(store.get(nameSpaceProp), {});\n value[subNamespace] = conf.value;\n stateProps[nameSpaceProp] = value;\n } else {\n stateProps[prop] = conf.value;\n }\n\n holder[prop] = ((context, meta, nsProp) => (...params) => {\n const paramsLen = params.length;\n if (paramsLen) {\n const { takesMultipleParams = false } = meta || {};\n // If parameters are passed then it's a setter\n let val = takesMultipleParams ? params : params[0];\n\n if (meta) {\n let values;\n const prevVal = context.get(nsProp, subNamespace);\n const { sanitization, typeCheck, typeExpected } = meta;\n if (typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n const typeCheckResult = typeCheck(val);\n\n if (typeCheckResult) {\n values = val;\n }\n } else if (typeof typeCheck === 'string' && typeCheck === 'constructor') {\n if (val && val.constructor.name === typeExpected) {\n values = val;\n }\n } else {\n values = val;\n }\n\n const preset = meta.preset;\n const oldValues = toArray(context.get(nsProp, subNamespace));\n preset && preset(values, holder);\n if (takesMultipleParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values && context.commit(nsProp, values, subNamespace);\n } else {\n context.commit(nsProp, val, subNamespace);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.get(nsProp, subNamespace);\n })(store, conf.meta, nameSpaceProp, Array.isArray(conf.value));\n }\n }\n\n if (subNamespace) {\n for (const key in stateProps) {\n store.commit(key, stateProps[key][subNamespace], subNamespace);\n }\n } else if (namespace === undefined) {\n store.append(stateProps);\n } else {\n store.append(namespace, stateProps);\n }\n\n return [holder, store];\n};\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed',\n 'animationend'\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';\nimport { createPromise } from './helper';\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] = resolver(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 const promise = this._makeNotifierPromise(eventName);\n this._promises.set(eventName, promise);\n createPromise(promise, eventName, this);\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","/**\n * Creates a new promise when the given promise is resolved. This needs to be done so that after the lifecycle event\n * is completed, then again when the event gets completed, then a new promise gets resolved.\n *\n * @param {Promise} promise Instance of promise\n * @param {string} eventName name of event\n * @param {LifeCycleManager} context Instance of lifecyclemanager\n */\nexport const createPromise = (promise, eventName, context) => {\n promise.then(() => {\n const prm = context._makeNotifierPromise(eventName);\n context._promises.set(eventName, prm);\n createPromise(prm, eventName, context);\n });\n};\n","import { default as DataModel } from 'datamodel';\nimport * as scales from './scales';\nimport * as colorSchemes from './color-schemes';\nimport * as STATE_NAMESPACES from './enums/namespace';\n\nconst InvalidAwareTypes = DataModel.InvalidAwareTypes;\n\nexport {\n InvalidAwareTypes,\n DataModel\n};\n\nexport {\n ReservedFields,\n CommonProps,\n COORD_TYPES\n} from './enums';\n\nexport { STATE_NAMESPACES };\n\nexport {\n scales,\n colorSchemes\n};\n\nexport {\n getNearestValue,\n getValueParser,\n transformColors,\n detectColor,\n hslToRgb,\n rgbToHsv,\n hexToHsv,\n hsvToRgb,\n escapeHTML,\n angleToRadian,\n generateGetterSetters,\n getArraySum,\n ERROR_MSG,\n interpolator,\n colorInterpolator,\n numberInterpolator,\n piecewiseInterpolator,\n reqAnimFrame,\n cancelAnimFrame,\n nextAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n replaceCSSPrefix,\n symbolFns,\n defaultValue,\n easeFns,\n clone,\n interpolateArray,\n getMinPoint,\n getMaxPoint,\n getClosestIndexOf,\n registerListeners,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n enableChainedTransaction,\n isHTMLElem,\n isEqual,\n isSimpleObject,\n nextFrame,\n getObjProp,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n transposeArray,\n toArray,\n extendsClass,\n concatModels,\n assembleModelFromIdentifiers,\n isValidValue,\n nestCollection,\n stack,\n getSymbol,\n Scales,\n Symbols,\n pathInterpolators,\n hslInterpolator,\n getSmallestDiff,\n require,\n formatTemporal,\n nearestSortingDetails,\n createSelection,\n temporalFields,\n retrieveNearestGroupByReducers,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField,\n intersect\n} from './common-utils';\n\nexport {\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 hasTouch\n} from './renderer-utils';\n\nexport {\n Store,\n transactor\n} from './store';\n\nexport {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'd3-time';\n\nexport { default as Smartlabel } from 'fusioncharts-smartlabel';\nexport { dataSelect } from './DataSystem';\n\nexport { default as LifeCycleManager } from './lifecycle-manager';\n\nexport {\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n DateTimeFormatter,\n DM_DERIVATIVES,\n GROUP_BY_FUNCTIONS\n} from 'datamodel';\n\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 SelectionSet from './selection-set';\n\nexport default SelectionSet;\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. This keeps\n * information of which rows are in previous and new entry set and previous and new exit set. This is initialized by\n * {@link Firebolt}.\n *\n * @public\n *\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n *\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. This also moves the other rows to exit set.\n *\n * @public\n * @param {Array.} ids Array of unique ids.\n *\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 an array of ids to the old entry set.\n *\n * @param {Array.} ids Array of unique ids\n *\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 * Moves all ids which in new entry set to old entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\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 * Moves an array of ids which are in new exit set to old exit set.\n *\n * @public\n *\n * @param {Array.} ids Array of unique ids.\n *\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 an array of ids from the selection set. It also moves the remaining row ids to entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\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 an array of ids in the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set which means they are neither in entry set nor in exit set. If no ids are passed,\n * then it resets all the ids to null.\n *\n * @public\n *\n * @param {Array} ids Array of unique ids.\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 *\n * @public\n *\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 *\n * @public\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 /**\n * Returns a set of unique ids which are already present in exit set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old exit set or new exit set\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 array of ids which are in the exit set.\n *\n * @public\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 /**\n * Gets all the ids which are either in exit or entry set.\n *\n * @public\n * @return {Array} Array of unique ids\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, retrieveNearestGroupByReducers } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const formalName = SideEffect.formalName();\n const sideEffectInstance = sideEffectsMap[formalName];\n sideEffectsMap[formalName] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const setSideEffectConfig = (sideEffects, config) => {\n for (const key in sideEffects) {\n const sideEffect = sideEffects[key];\n const formalName = sideEffect.constructor.formalName();\n const sideEffectConf = config[formalName];\n\n sideEffectConf && sideEffect.config(sideEffectConf);\n }\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 mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n const conditions = conditionsMap[type];\n if (model && conditions) {\n return model.select((fields, i) =>\n (conditions.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 if (type === 'mergedEnter') {\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 let aggFns = retrieveNearestGroupByReducers(model);\n if (!existingModel) {\n existingModel = models[type] = model;\n } else if (`${model.getSchema().map(d => d.name).sort()}` ===\n `${existingModel.getSchema().map(d => d.name).sort()}`) {\n aggFns = Object.assign({}, retrieveNearestGroupByReducers(existingModel));\n existingModel = models[type] = model.union(existingModel);\n } else {\n existingModel = model;\n }\n combinedSet[type].model = existingModel;\n combinedSet[type].aggFns = aggFns;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\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 setSideEffectConfig\n} from './helper';\n\n/**\n * This class is responsible for dispatching behavioural actions and side effects. It also keeps the information of\n * registered physical actions, behavioural actions and side effects. Also, it keeps the map of physical and behavioural\n * actions and behavioural actions and side effects. Whenever any behavioural action is dispatched, it also propagates\n * the rows which got affected to the other datamodels. This class is initialized by {@link VisualUnit} and legend to\n * manage it's interaction.\n *\n * @public\n * @class Firebolt\n * @module Firebolt\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 this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\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 this._config = mergeRecursive(this._config, config[0]);\n setSideEffectConfig(this.sideEffects(), this._config);\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 this.initializeSideEffects();\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, key = 'default') {\n const behaviourConditions = this._sourceBehaviours[behaviour] || (this._sourceBehaviours[behaviour] = {});\n if (value instanceof Function) {\n behaviourConditions[key] = value;\n } else {\n behaviourConditions[key] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value, key = 'default') {\n const sideEffectConditions = this._sourceSideEffects[sideEffect] || (this._sourceSideEffects[sideEffect] = {});\n if (value instanceof Function) {\n sideEffectConditions[key] = value;\n } else {\n sideEffectConditions[key] = () => value;\n }\n }\n\n removeSideEffectPolicy (sideEffect, key) {\n delete this._sourceSideEffects[sideEffect][key];\n return this;\n }\n\n removeBehaviourPolicy (behaviour, key) {\n delete this._sourceBehaviours[behaviour][key];\n return this;\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 this.mapActionsAndBehaviour(key);\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 this._entryExitSet[key] = null;\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 /**\n * Allows to propagate the datamodel with only the supplied fields. When propagation is done, then the fields\n * which are supplied for the specified behavioural action is propagated.\n *\n * @public\n *\n * @param {string} action Name of behavioural action. If '*' is specified, then for all behavioural actions it is\n * applied.\n * @param {Array} fields Array of field names which will be propagated.\n * @param {boolean} append If true, then it is appended to the existing propagation data model fields else only\n * those fields are projected from propagation data model and propagated.\n *\n * @return {Firebolt} Instance of firebolt\n */\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\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\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour (phyAction) {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map) && action === (phyAction || action)) {\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 bind && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n this._actionBehaviourMap = mergeRecursive(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 (!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 return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? propagationInf.entryRowIds :\n filteredDataModel[0].getUids())\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 /**\n * Returns the entry and exit set information of the specified behavioural action.\n *\n * @public\n *\n * @param {string} behaviour Name of behavioural action.\n *\n * @return {Object} Entry exit set information.\n */\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\n/**\n * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural\n * action needs to extend this class.\n *\n * @public\n * @class GenericBehaviour\n * @module GenericBehaviour\n */\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n /**\n * Returns entry and exit set information. This method is called by firebolt when ```dispatchBehaviour``` is called\n * dynamically or when any physical action is triggered on the chart.\n *\n * @param {Object} payload Payload information.\n * @param {Object|Array} payload.criteria Identifiers of data interacted with.\n *\n * @return {Array} Entry and exit set information.\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 /**\n * Updates the selection set by adding uids to the instance of {@link SelectionSet} or removing them.\n * {@link SelectionSet} keeps the information of which rows are in the entry set and exit set.\n *\n * @public\n * @param {Array} addSet Array of row ids which got affected during interaction.\n * @param {SelectionSet} selectionSet Instance of selection set.\n *\n * @return {GenericBehaviour} Instance of behaviour.\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 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 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, MeasureSubtype } 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;\n const yFieldType = fieldsConfig[yField].def.subtype;\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 === MeasureSubtype.CONTINUOUS ? (yFieldType === MeasureSubtype.CONTINUOUS ?\n ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.invertExtent(stPos.x, endPos.x);\n const yRange = yAxis.invertExtent(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","const ANCHORS = 'anchors';\nconst TOOLTIP = 'tooltip';\nconst BRUSH_ANCHORS = 'brush-anchors';\nconst PERSISTENT_ANCHORS = 'persistent-anchors';\nconst FILTER = 'filter';\nconst HIGHLIGHTER = 'highlighter';\nconst CROSSLINE = 'crossline';\n\nexport {\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS,\n FILTER,\n HIGHLIGHTER,\n CROSSLINE,\n TOOLTIP\n};\n","export const PROPS = {\n valueParser: {\n defaultValue: val => val\n }\n};\n","import GenericSideEffect from './generic-sideeffect';\n\nexport default GenericSideEffect;\n","import { mergeRecursive, getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { PROPS } from './props';\n\n/**\n * This is the base class of all side effects. It contains all common methods like setting configuration, disabling,\n * enabling side effect, etc. Every new side effect has to inherit this class or {@link SpawnableSideEffect} or\n * {@link SurrogateSideEffect} class. All side effects are initialized by firebolt. The instance of firebolt is\n * passed on initialization. The firebolt instance contains ```context``` which is the instance of visual unit with\n * which the firebolt is attached.\n *\n * @public\n * @class\n * @module GenericSideEffect\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 generateGetterSetters(this, PROPS);\n this.config(this.constructor.defaultConfig());\n }\n\n /**\n * Returns the default configuration of the side effect.\n *\n * @public\n * @return {Object} Default configuration of side effect.\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the formal name of a side effect. This method must be implemented by all side effects which changes\n * or adds any element in the visualization.\n *\n * @return {string} Formal name of side effect.\n */\n static formalName () {\n return 'generic';\n }\n\n static target () {\n return 'all';\n }\n\n /**\n * Returns true if the side effects mutates the data of chart.\n *\n * @public\n *\n * @return {boolean} If the side effect mutates the data of chart.\n */\n static mutates () {\n return false;\n }\n\n /**\n * Sets or gets the configuration of side effect.\n *\n * When setter,\n * @param {Object} config Configuration of side effect.\n * @return {GenericSideEffect} Side effect instance.\n *\n * When getter,\n * @return {Object} Side effect configuration.\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 /**\n * Applies the interaction effect on the chart. This is where the implemntation of the side effect is defined.\n *\n * @param {Object} selectionSet Contains the entry and exit set of data which got affected during interaction.\n * @param {Object} selectionSet.mergedEnter Combined previous entry and new entry set.\n * @param {DataModel} selectionSet.mergedEnter.model Instance of data model containing all rows which got\n * affected during interaction.\n * @param {Array} selectionSet.mergedEnter.uids Ids of all rows which were affected during interaction.\n * @param {Object} selectionSet.mergedExit Combined previous exit and new exit set.\n * @param {DataModel} selectionSet.mergedExit.model Instance of data model containing rows which were not affected\n * during interaction.\n * @param {Array} selectionSet.mergedExit.uids Ids of all rows which were not affected during interaction.\n * @param {Object} selectionSet.entrySet Entry set information.\n * @param {Array} selectionSet.entrySet[0].uids All row ids which got affected during previous interaction.\n * @param {Array} selectionSet.entrySet[1].uids All row ids which got affected during current interaction.\n * @param {Array} selectionSet.exitSet[0].uids All row ids which were not affected during previous interaction.\n * @param {Array} selectionSet.exitSet[1].uids All row ids which were not affected during current interaction.\n * @param {Object} payload Payload information of the behavioural action on trigger of which this side effect\n * is applied.\n * @param {Object} options Optional information for side effect like strategy, etc.\n */\n apply () {\n return this;\n }\n\n /**\n * Adds a new strategy method for this side effect. The strategy method is implemented by side effect class.\n *\n * @param {string} name Name of the strategy.\n * @param {Function} fn Strategy method.\n *\n * @return {GenericSideEffect} Instance of side effect.\n */\n setStrategy (name, fn) {\n if (fn) {\n this._strategies[name] = fn;\n }\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\n/**\n * This class is inherited by all side effects which changes the look of any existing elements in the visualization.\n * For example, if a side effect wants to change the color of bar plots, then it is a surrogate side effect.\n *\n * To use this,\n * ```\n * const SurrogateSideEffect = muze.SideEffects.standards.SurrogateSideEffect;\n *\n * class BarColorChanger extends SurrogateSideEffect {\n * static formalName () {\n * return 'colorChanger';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n *\n * @module SurrogateSideEffect\n * @class\n * @extends GenericSideEffect\n */\nexport default class SurrogateSideEffect extends GenericSideEffect {\n /**\n * Applies or removes interaction styles from plot elements. An array of row ids needs to be passed\n * which identifies the plot elements and applies styles to them.\n *\n * To apply the interaction style,\n * ```\n * const entryRowIds = entrySet[0].uids;\n * const interactionStyle = [{\n * type: 'fill',\n * intensity: [0, 0, 15, 0] // hsla configuration\n * }];\n *\n * this.applyInteractionStyle(entryRowIds, interactionStyle, 'brighten', true);\n * ```\n * @public\n * @param {Array} set Array of row ids.\n * @param {Array} config Style configuration.\n * @param {Object} config[0] fill or stroke configuration.\n * @param {string} config[0].type Type of style - fill or stroke.\n * @param {Array} config[0].intensity hsla configuration.\n * @param {string} interactionType Type of interaction. This is needed for storing the styles for\n * each type of interaction in the plot elements.\n * @param {boolean} apply Whether to apply or remove the interaction style.\n *\n * @return {SurrogateSideEffect} Instance of surrogate side effect.\n */\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 return this;\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\n/**\n * Any side effect which will add any new element to the chart like drawing a rectangular box or any annotation over\n * the chart needs to inherit this class. This class has methods which returns the container where the dom elements\n * needs to be created.\n *\n * To use this,\n * ```\n * const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect;\n *\n * class SelectionBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'selectionBox';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n * @class\n * @extends GenericSideEffect\n * @module SpawnableSideEffect\n */\nexport default class SpawnableSideEffect extends GenericSideEffect {\n /**\n * Creates a html or svg element in the container.\n *\n * @public\n * @param {SVGElement|HTMLElement} container Container where the dom element will be rendered.\n * @param {string} elemType Type of dom element.\n * @param {Array} data Array of objects with which the dom elements will be binded.\n * @param {string} className class name of the element.\n *\n * @return {Selection} D3 Selection of the element.\n */\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n /**\n * Returns the drawing information for side effect like svg container, dimensions of the visual unit.\n *\n * @public\n * @return {Object} Drawing information for side effect.\n * ```\n * sideEffectGroup: // svg container where the side effect needs to be appended.\n * svgContainer: // svg container of the {@link VisualUnit}.\n * htmlContainer: // html div container of the {@link VisualUnit}.\n * width: // Width of the {@link VisualUnit}\n * height: // Height of the {@link VisualUnit}\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};\nexport const TABLE_FORMAT = 'table';\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: '4px 0 4px 0',\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 selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { TABLE_FORMAT } from './constants';\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._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._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 const { classPrefix } = config;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter(this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n const mountHtmlTooltip = makeElement(mount, 'div', [1], `${classPrefix}-tooltip-html-container`);\n mountHtmlTooltip.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], `${classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === TABLE_FORMAT) {\n const table = makeElement(body, 'table', [1], `${classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, '', {\n update: (elem, elemData) => elem.attr('class', elemData.className)\n });\n const cells = makeElement(rows, 'span', d => d.data, `${classPrefix}-tooltip-content`);\n cells.attr('class', `${classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block' // '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","export const SELECTION_SUMMARY = 'selectionSummary';\nexport const HIGHLIGHT_SUMMARY = 'highlightSummary';\n","import {\n FieldType,\n GROUP_BY_FUNCTIONS,\n formatTemporal,\n DimensionSubtype,\n MeasureSubtype,\n DataModel,\n defaultValue,\n retrieveFieldDisplayName,\n nestCollection,\n getObjProp,\n intersect\n} from 'muze-utils';\nimport { TABLE_FORMAT } from '@chartshq/muze-tooltip';\nimport { SELECTION_SUMMARY, HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\n\nconst { SUM, COUNT } = GROUP_BY_FUNCTIONS;\nconst { InvalidAwareTypes } = DataModel;\nconst FIRST_VALUE_MARGIN = '10px';\nconst SINGLE_DATA_MARGIN = 10;\n\nconst formatters = (formatter, interval, valueParser) => ({\n [DimensionSubtype.TEMPORAL]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatTemporal(Number(value), interval)),\n [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatter(value.toFixed(2))),\n [DimensionSubtype.CATEGORICAL]: value => valueParser(value)\n});\n\nconst getTabularData = (dataObj, fieldInf) => {\n const rows = [];\n const { data, schema } = dataObj;\n rows.push(schema.map(d => fieldInf[d.name].displayName));\n\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const value = fieldInf[fieldObj.name].fn(d[i]);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nconst getKeyValue = (params) => {\n const { field, value, classPrefix, margin, isSelected, removeKey } = params;\n\n if (!removeKey) {\n const keyObj = {\n value: field,\n className: `${classPrefix}-tooltip-key`\n };\n const valueObj = {\n value,\n className: `${classPrefix}-tooltip-value`\n };\n if (margin !== undefined) {\n keyObj.style = {\n 'margin-left': `${margin}px`\n };\n valueObj.style = {\n 'margin-left': `${margin}px`\n };\n }\n\n return ({\n className: isSelected ? `${classPrefix}-tooltip-row ${classPrefix}-tooltip-selected-row`\n : `${classPrefix}-tooltip-row`,\n data: [keyObj, valueObj]\n }\n );\n }\n return ({\n data: [{\n className: '',\n value,\n style: {\n 'margin-left': FIRST_VALUE_MARGIN\n }\n }],\n className: `${classPrefix}-tooltip-first`\n });\n};\n\nconst generateRetinalFieldsValues = (valueArr, retinalFields, content, context) => {\n const { fieldsConfig, dimensionMeasureMap, axes, config, fieldInf, dataLen, target } = context;\n const { classPrefix, margin, separator } = config;\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const REF_VALUES_INDEX = 1;\n const REF_KEYS_INDEX = 0;\n\n for (const retField in retinalFields) {\n const retIndex = fieldsConfig[retField].index;\n const retinalFieldValue = valueArr[retIndex];\n const measuresArr = dimensionMeasureMap[retField];\n const icon = {\n type: 'icon',\n color: colorAxis.getColor(retinalFieldValue),\n shape: shapeAxis.getShape(retinalFieldValue),\n size: sizeAxis.getSize(retinalFieldValue) * config.iconScale\n };\n const { displayName, fn } = fieldInf[retField];\n const formattedRetinalValue = fn(retinalFieldValue);\n\n if (dataLen === 1) {\n content.push(getKeyValue({\n field: displayName,\n value: formattedRetinalValue,\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n } else {\n const hasMultipleMeasures = measuresArr.length > 1;\n hasMultipleMeasures && (content.push({ data: [icon, formattedRetinalValue] }));\n const selectedContext = target[REF_VALUES_INDEX][target[REF_KEYS_INDEX].indexOf(retField)];\n const isSelected = selectedContext === retinalFieldValue;\n measuresArr.forEach((measure) => {\n const measureIndex = fieldsConfig[measure].index;\n const { displayName: dName, fn: formatterFn } = fieldInf[measure];\n const value = formatterFn(valueArr[measureIndex]);\n const keyValue = getKeyValue({\n field: hasMultipleMeasures ? `${dName}${separator}` : formattedRetinalValue,\n value,\n classPrefix,\n margin: hasMultipleMeasures ? margin : undefined,\n isSelected\n });\n if (!hasMultipleMeasures) {\n keyValue.data = [icon, ...keyValue.data];\n }\n content.push(keyValue);\n });\n }\n }\n};\n\nconst getFieldInf = (schema, dataModel, context) => {\n const { valueParser, timeDiffs } = context;\n const fieldsObj = dataModel.getFieldspace().fieldsObj();\n const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL];\n\n return schema.reduce((inf, field) => {\n const { subtype, name, type } = field;\n const interval = subtype === DimensionSubtype.TEMPORAL ? timeDiffs[name] : 0;\n const nf = type === FieldType.MEASURE ? fieldsObj[name].numberFormat() : val => val;\n inf[name] = {\n fn: defaultValue(formatters(nf, interval, valueParser)[subtype], defFormatter),\n displayName: `${retrieveFieldDisplayName(dataModel, name)}`\n };\n return inf;\n }, {});\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let nestedDataObj;\n let fieldValues = [];\n const { data, schema } = dataModel.getData();\n const fieldspace = dataModel.getFieldspace();\n const fieldsConfig = dataModel.getFieldsConfig();\n const { color, shape, size } = context.firebolt.context.retinalFields();\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 containsDetailField = !!intersect(schema, detailFields).length;\n const dataLen = data.length;\n const {\n dimensionMeasureMap,\n axes\n } = context;\n const fieldInf = getFieldInf(schema, dataModel, context);\n\n let displayFormat;\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData({\n data,\n schema,\n fieldspace\n }, fieldInf);\n displayFormat = TABLE_FORMAT;\n } else {\n const retinalFields = [color.field, shape.field, size.field].reduce((acc, field) => {\n field && fieldsConfig[field].def.type === FieldType.DIMENSION && (acc[field] = 1);\n return acc;\n }, {});\n const filteredDimensions = dimensions.filter(field => !retinalFields[field.name]);\n const indices = filteredDimensions.map(dim => fieldsConfig[dim.name].index);\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1) : measures;\n\n nestedDataObj = nestCollection({\n data,\n keys: indices\n });\n nestedDataObj = !getObjProp(nestedDataObj[0], 'key') ? [{\n values: nestedDataObj\n }] : nestedDataObj;\n\n const generateTooltipContent = (nestedData, index = 0, content = []) => {\n const { classPrefix, separator } = config;\n for (let i = 0, len = nestedData.length; i < len; i++) {\n const { values, key } = nestedData[i];\n const field = getObjProp(schema, indices[index], 'name');\n const margin = dataLen === 1 || Object.keys(retinalFields).length === 0\n ? SINGLE_DATA_MARGIN : undefined;\n if (field) {\n const { displayName, fn } = fieldInf[field];\n const formattedValue = fn(key);\n const removeKey = values.length > 1;\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n value: formattedValue,\n classPrefix,\n margin,\n isSelected: undefined,\n removeKey\n }));\n }\n\n if (values[0] && values[0].key) {\n generateTooltipContent(values, index + 1, content);\n } else {\n for (let j = 0, len2 = values.length; j < len2; j++) {\n const valueArr = values[j];\n generateRetinalFieldsValues(valueArr, retinalFields, content, {\n fieldInf,\n axes,\n config,\n fieldsConfig,\n dimensionMeasureMap,\n dataLen,\n target: context.payload.target\n });\n\n filteredMeasures.forEach((measure) => {\n const { name } = measure;\n const { displayName, fn } = fieldInf[name];\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n value: fn(valueArr[fieldsConfig[name].index]),\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n });\n }\n }\n }\n };\n generateTooltipContent(nestedDataObj, 0, fieldValues);\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\nexport const strategies = {\n [SELECTION_SUMMARY]: (dm, config, context) => {\n const { selectionSet } = context;\n const aggFns = selectionSet.mergedEnter.aggFns;\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] = aggFns[v.name] === COUNT ? SUM : aggFns[v.name];\n return acc;\n }, {\n saveChild: false\n }));\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 const data = aggregatedModel.getData().data;\n measureNames.forEach((measure) => {\n const value = data[0][fieldsConf[measure].index];\n value instanceof InvalidAwareTypes ? values.push([]) : values.push([`(${aggFns[measure].toUpperCase()})`,\n `${retrieveFieldDisplayName(dm, measure)}`,\n {\n value: `${value.toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]);\n });\n if (measureNames.length === 1) {\n values = [[...values[0], ...values[1]]];\n }\n return ([{\n data: values[0]\n }]);\n },\n [HIGHLIGHT_SUMMARY]: (data, config, context) => buildTooltipData(data, config, context)\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType, mergeRecursive, defaultValue } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport { TOOLTIP } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\nimport { HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\n\nconst configResolvers = {\n [HIGHLIGHT_SUMMARY]: (specificConf, config) => defaultValue(specificConf, config),\n default: specificConf => defaultValue(specificConf, {})\n};\n\nconst sanitizeConfig = (config, context) => {\n const strategyObj = context._strategies;\n const sanitizedConf = Object.assign({}, config);\n for (const key in strategyObj) {\n sanitizedConf[key] = defaultValue(configResolvers[key], configResolvers.default)(config[key], config);\n }\n return sanitizedConf;\n};\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = mergeRecursive({}, strategies);\n this._strategy = HIGHLIGHT_SUMMARY;\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n },\n highlightSummary: {\n dataTransform: (dt, fields) => (fields ? dt.project(fields, { saveChild: false }) : dt\n )\n },\n selectionSummary: {\n dataTransform: (dt, fields) => {\n const fieldspace = dt.getFieldspace();\n const dimensions = Object.keys(fieldspace.getDimension());\n const measures = Object.keys(fieldspace.getMeasure());\n const projectedFields = defaultValue(fields, measures.length ? [measures[0]] : []);\n return dt.project([...dimensions, ...projectedFields], {\n saveChild: false\n });\n }\n }\n };\n }\n\n static formalName () {\n return TOOLTIP;\n }\n\n config (...params) {\n if (params.length) {\n const config = this._config = mergeRecursive(this._config, sanitizeConfig(params[0], this));\n const strategyObj = this._strategies;\n for (const key in strategyObj) {\n const formatter = config[key].formatter;\n this.setStrategy(key, formatter);\n }\n return this;\n }\n return this._config;\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)) {\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 const strategy = defaultValue(options.strategy, this._strategy);\n const strategyConf = config[strategy];\n const { dataTransform, fields: projectFields } = strategyConf;\n const strategyObj = this._strategies;\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 const dt = dataTransform(dataModels[i], projectFields, this);\n\n enter[i] = true;\n const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf;\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 sourceInf.valueParser = context.valueParser();\n sourceInf.selectionSet = selectionSet;\n tooltipInst.context(sourceInf);\n const strategyFn = strategyObj[strategy];\n tooltipInst.content(strategy, dt, {\n formatter: strategyFn,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: parentContainerDimensions.width,\n height: parentContainerDimensions.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 { CROSSLINE } from '../../enums/side-effects';\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 layers = this.firebolt.context.layers();\n const plotWidth = Math.max(...layers.map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...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 !isNaN(px) && 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';\nimport { HIGHLIGHTER } from '../../enums/side-effects';\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 strategy(selectionSet, this, options.strategy || this._strategy);\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, getObjProp } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport { ANCHORS } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nconst addLayer = (layerRegistry, context, sideEffect) => {\n context.addLayer((layerDefs) => {\n const layers = [];\n\n if (layerDefs) {\n layerDefs.forEach((layerDef) => {\n const mark = layerDef.mark;\n const layerCls = layerRegistry[mark];\n\n if (layerCls && layerCls.shouldDrawAnchors()) {\n const depLayerEncoding = layerDef.def.encoding;\n const encoding = {\n x: getObjProp(depLayerEncoding, 'x', 'field'),\n y: getObjProp(depLayerEncoding, 'y', 'field'),\n color: getObjProp(depLayerEncoding, 'color', 'field'),\n size: {\n field: getObjProp(depLayerEncoding, 'size', 'field'),\n value: sideEffect.defaultSizeValue()\n }\n };\n const commonName = sideEffect.constructor.formalName();\n const name = `${layerDef.def.name}-${commonName}`;\n\n layers.push({\n name,\n mark: 'point',\n groupId: commonName,\n className: sideEffect.constructor.defaultConfig().className,\n encoding,\n transform: {\n type: 'identity'\n },\n calculateDomain: false,\n transition: sideEffect.getTransitionConfig(),\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n owner: layerDef.def.name\n });\n }\n });\n }\n return layers;\n });\n};\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._layersMap = {};\n this.addAnchorLayers();\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 () {\n const context = this.firebolt.context;\n const layerRegistry = context.registry().layerRegistry;\n\n addLayer(layerRegistry, context, this);\n return this;\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 dataModel = selectionSet.mergedEnter.model;\n const formalName = this.constructor.formalName();\n\n const context = this.firebolt.context;\n const layers = context.layers().filter(layer => layer.config().groupId === formalName);\n\n layers.forEach((layer) => {\n const linkedLayer = context.getLayerByName(layer.config().owner);\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n\n layer.data(transformedDataModel);\n });\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\nimport { PERSISTENT_ANCHORS } from '../enums/side-effects';\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';\nimport { BRUSH_ANCHORS } from '../enums/side-effects';\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: 'selectionSummary',\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 TEXT = 'text';\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 RADIUS: 'radius',\n RADIUS0: 'radius0',\n ANGLE: 'angle',\n ANGLE0: 'angle0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AGG_FN_SUM = 'sum';\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","import { COORD_TYPES, mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nconst { CARTESIAN } = COORD_TYPES;\nexport const props = {\n axes: {},\n mount: {},\n measurement: {},\n metaInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {\n defaultValue: CARTESIAN\n },\n [PROPS.CONFIG]: {\n value: null,\n sanitization: (context, config) => {\n context._customConfig = config;\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n\n return constructor.defaultPolicy(newConf, config);\n }\n }\n};\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\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 BAND = 'band';\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 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\nexport const DEFAULT_ANGLE_DOMAIN = [1];\nexport const MIN_NO_OF_TICKS = 2;\nexport const DEFAULT_NO_OF_TICKS = 10;\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 *\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 *\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 adjustRange: false,\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: null,\n smartTicks: null\n },\n orientation: 'left',\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: null,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: true,\n showOuterTicks: true,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: 0,\n yOffset: 0\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) => {\n let rotation;\n const axis = instance.axis();\n const config = instance.config();\n const renderConfig = instance.renderConfig();\n const smartTicks = instance.smartTicks();\n const scale = axis.scale();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n const ticks = labelFunc();\n const {\n orientation,\n fixedBaseline,\n type\n } = config;\n const {\n labels\n } = renderConfig;\n\n rotation = labels.rotation;\n\n const tickSize = instance.getTickSize();\n tickText.each(function (d, index) {\n let yShift;\n let xShift;\n let datum = smartTicks[index] ? smartTicks[index].text : d;\n\n datum = datum.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n\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 = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize}\n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift - xShift / 2 : xShift;\n\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize}\n ${yShift + tickSize}) rotate(${rotation})`);\n }\n selectElement(this).transition()\n .duration(1000).text(datum);\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 renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n orientation,\n classPrefix\n } = config;\n const {\n labels\n } = renderConfig;\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 && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager);\n } else if (!rotation && !isSmartTicks) {\n tickText.attr('transform', '');\n } else {\n tickText.text('');\n if (orientation === TOP || orientation === BOTTOM) {\n tickText.attr('y', 0)\n .attr('x', 0)\n .attr('transform', '')\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => {\n if (_smartTicks[i]) {\n return _smartTicks[i].lines;\n } return [];\n }, `${classPrefix}-smart-text`);\n\n tspan.attr('dy', '0')\n .style('opacity', '0')\n\n .transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[0].oriTextHeight;\n }\n return -_smartTicks[0].oriTextHeight * (_smartTicks[0].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .text(e => e)\n .attr('x', 0);\n } else {\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, `${classPrefix}-smart-text`);\n tspan.text(e => e);\n }\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n const {\n showInnerTicks\n } = axisInstance.renderConfig();\n const domain = axisInstance.domain();\n if (fixedBaseline && domain.length && showInnerTicks) {\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 availableSpace\n } = measures;\n\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})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 renderConfig = axisInstance.renderConfig();\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 _tickLabelStyle: tickLabelStyle,\n _tickFormatter: axisTickFormatter\n } = axisInstance;\n const {\n orientation,\n axisNamePadding,\n className,\n id,\n classPrefix\n } = config;\n const {\n show,\n xOffset,\n yOffset,\n showAxisName,\n labels,\n smartAxisName\n } = renderConfig;\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 const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n const ticks = axis.tickValues() || labelFunc();\n\n axis.tickFormat(axisTickFormatter(ticks));\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.axisComponentDimensions().largestTickDimensions;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false || tickSize === 0) {\n selectContainer.transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .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\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [smartAxisName], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d.text);\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 const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: smartAxisName.height,\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 {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'muze-utils';\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\n// Longest Word for each level based on which tick skipping is decided\nconst longestWord = {\n month: 'September',\n quarter: 'October',\n halfYearly: 'July',\n year: 9999,\n day: 'September',\n hour: '24 AM',\n mintues: '60:60',\n seconds: ':60',\n week: 'Wed 31'\n};\n\n// These are the various levels of ticks that can be shown by Muze.\n// Each level is described as how frequently the ticks appear\n// The format is as follows:\n// [Frequency, Milliseconds, Name of Seconds, Tick Generator, Level Type]\nconst tickIntervals = [\n [1, 1, 'milliseconds', timeMillisecond.every(1), 'seconds'],\n [1, durationSecond, 'seconds', timeSecond.every(1), 'seconds'],\n [5, 5 * durationSecond, 'five seconds', timeSecond.every(5), 'seconds'],\n [10, 10 * durationSecond, 'ten seconds', timeSecond.every(10), 'seconds'],\n [15, 15 * durationSecond, 'fifteen seconds', timeSecond.every(15), 'seconds'],\n [30, 30 * durationSecond, 'thirty seconds', timeSecond.every(30), 'seconds'],\n [1, durationMinute, 'minute', timeMinute.every(1), 'minutes'],\n [5, 5 * durationMinute, 'five minutes', timeMinute.every(5), 'minutes'],\n [10, 10 * durationMinute, 'ten minutes', timeMinute.every(10), 'minutes'],\n [15, 15 * durationMinute, 'fifteen minutes', timeMinute.every(15), 'minutes'],\n [30, 30 * durationMinute, 'thirty minutes', timeMinute.every(30), 'minutes'],\n [1, durationHour, 'hour', timeHour.every(1), 'hour'],\n [3, 3 * durationHour, 'three hours', timeHour.every(3), 'hour'],\n [6, 6 * durationHour, 'six hours', timeHour.every(6), 'hour'],\n [12, 12 * durationHour, 'twelve hours', timeHour.every(12), 'hour'],\n [1, durationDay, 'daily', timeDay.every(1), 'day'],\n [1, durationWeek, 'weekly', timeWeek.every(1), 'week'],\n [1, durationMonth, 'monthly', timeMonth.every(1), 'week'],\n [3, 3 * durationMonth, 'quaterly', timeMonth.every(3), 'quarter'],\n [6, 6 * durationMonth, 'half yearly', timeMonth.every(6), 'halfYearly'],\n [1, durationYear, 'yearly', timeYear.every(1), 'year'],\n [2, 2 * durationYear, '2 year', timeYear.every(2), 'year'],\n [3, 3 * durationYear, '3 year', timeYear.every(3), 'year'],\n [5, 5 * durationYear, '5 year', timeYear.every(5), 'year'],\n [10, 10 * durationYear, 'decade', timeYear.every(10), 'year'],\n [100, 100 * durationYear, 'century', timeYear.every(100), 'year'],\n [1000, 1000 * durationYear, 'millenium', timeYear.every(1000), 'year']\n];\n/**\n * Get the actual tick interval based on the available width, number of ticks\n * and the distance between two ticks\n *\n * @param {Object} context Axis Context\n * @param {number} noOfTicks Number of Ticks based on which interval is calculated\n * @return {number} The width for the tick interval\n */\nconst getActualTickInterval = (context, noOfTicks) => {\n const minTickDistance = context._minTickDistance;\n const minWidthBetweenTicks = minTickDistance.width;\n\n const { width } = context.availableSpace();\n const actualTickInterval = Math.floor(((width - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks));\n\n return actualTickInterval;\n};\n\n/**\n * Get the tick interval based on the current level of ticks. Levels are decided on\n * the number of ticks that are possible to show\n *\n * @param {Object} context Axis Context\n * @param {string} type Type of level (yearly, monthly, etc)\n * @return {number} The width for the tick interval\n */\nconst getTickIntervalBasedOnCurrentLevel = (context, type) => {\n const labelManager = context._dependencies.labelManager;\n const longestWordType = longestWord[type];\n const measure = labelManager.getOriSize(longestWordType);\n\n return measure.width;\n};\n\nconst getTickIntervalFnBasedOnNumberOfTicks = (interval, count, context) => {\n let possibleTickLevelIndex = tickIntervals.length - 1;\n let maxPossibleTicks = 1;\n let tickIntervalLevelInfo = null;\n\n // Decide possible tick level based on min tick width (with ellipses)\n for (let i = tickIntervals.length - 1; i >= 0; i--) {\n const tickIntervalInfo = tickIntervals[i];\n const numOfPossibleTicks = Math.floor(interval / tickIntervalInfo[1]);\n if (numOfPossibleTicks <= count) {\n possibleTickLevelIndex = i;\n maxPossibleTicks = numOfPossibleTicks;\n }\n }\n\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex];\n\n // Get actual tick interval based on the level of ticks generated\n const actualTickInterval = getActualTickInterval(context, maxPossibleTicks);\n\n // Maximum Possible tick Interval for a particular level based on a pre decided set of values\n const maxTickInterval = getTickIntervalBasedOnCurrentLevel(context, tickIntervalLevelInfo[4]);\n\n // Display the next level involving tick skipping if current level does not meet the requirement\n // for displaying max tick\n if (actualTickInterval < maxTickInterval && possibleTickLevelIndex < tickIntervals.length - 1) {\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex + 1];\n }\n return tickIntervalLevelInfo[3];\n};\n\nexport const getSkippedTicks = (context, maxPossibleTicks) => {\n let actualNumberOfTicks = maxPossibleTicks;\n const domain = context.domain();\n const minDiff = context._minDiff;\n // Get the interval in ms from the domain\n const millisecondInterval = domain[1] - domain[0];\n // Get number of ticks based on the minimum difference in the data\n const numOfTicksAccordingToMinDiff = Math.floor(millisecondInterval / minDiff);\n\n // Show ticks according to min diff if possible\n if (maxPossibleTicks >= numOfTicksAccordingToMinDiff) {\n actualNumberOfTicks = numOfTicksAccordingToMinDiff;\n }\n\n return getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval, actualNumberOfTicks, context);\n};\n","import { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { getSkippedTicks } from './skip-ticks';\nimport { TIME, LINEAR, BAND } from '../enums/scale-type';\n\nexport const applyTickSkipping = (context) => {\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n\n const { width } = context.availableSpace();\n\n const maxTicks = Math.floor((width + minWidthBetweenTicks) / (minTickWidth + minWidthBetweenTicks));\n\n const ticks = context.scale().ticks(getSkippedTicks(context, maxTicks));\n\n context.renderConfig({\n tickValues: ticks\n });\n};\n\nconst adjustHorizontalRange = (range, diff) => {\n range[0] += diff;\n range[1] -= diff;\n return range;\n};\n\nconst adjustVerticalRange = (range, diff) => {\n range[0] -= diff;\n range[1] += diff;\n return range;\n};\n\nconst rangeAdjustmentMap = {\n [TOP]: adjustHorizontalRange,\n [BOTTOM]: adjustHorizontalRange,\n [LEFT]: adjustVerticalRange,\n [RIGHT]: adjustVerticalRange\n};\n\nexport const setAxisRange = (context, type, rangeBounds, offset) => {\n context.range(rangeBounds);\n offset && context.renderConfig({ [`${type}Offset`]: offset });\n};\n\nconst getAxisOffset = (timeDiff, range, domain) => {\n const avWidth = Math.abs(range[1] - range[0]);\n const pvr = avWidth / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\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 getAdjustedRange = (minDiff, range, domain, config) => {\n const {\n orientation,\n adjustRange\n } = config;\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (adjustRange) {\n return rangeAdjustmentMap[orientation](range, diff);\n }\n return range;\n};\n\nexport const spaceSetter = (context, spaceConfig) => {\n let tickInterval;\n let heightForTicks;\n const config = context.config();\n const {\n width: availWidth,\n height: availHeight,\n padding\n } = context.availableSpace();\n const {\n top,\n left,\n bottom,\n right\n } = padding;\n const {\n isOffset\n } = spaceConfig;\n const {\n showAxisName,\n labels\n } = context.renderConfig();\n const {\n rotation\n } = labels;\n const {\n fixedBaseline,\n axisNamePadding,\n tickValues\n } = config;\n const {\n tickDimensions,\n allTickDimensions,\n axisNameDimensions,\n tickSize\n } = context.getAxisDimensions();\n const {\n height: tickDimHeight,\n width: tickDimWidth\n } = tickDimensions;\n\n const namePadding = showAxisName ? axisNamePadding : 0;\n const labelConfig = { smartTicks: true, rotation: labels.rotation };\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minDiff = context._minDiff;\n const domain = context.domain();\n const axisNameHeight = axisNameDimensions.height;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = Math.min(minTickSpace.width, tickDimWidth);\n const minTickHeight = Math.min(minTickSpace.height, tickDimHeight);\n\n return {\n [TIME]: {\n x: () => {\n !tickValues && context.applyTickSkipping();\n const noOfTicks = context.getTickValues().length;\n\n // Get the Tick Interval\n tickInterval = ((availWidth - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks);\n\n // Get height for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation;\n // Remove ticks if not enough height\n if (tickInterval < minTickHeight) {\n heightForTicks = availHeight;\n tickInterval = minTickHeight;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n const tickShifter = Math.min(tickInterval, tickDimWidth);\n // set range for axis\n setAxisRange(context, 'y', getAdjustedRange(minDiff, [tickShifter / 2,\n availWidth - left - right - tickShifter / 2], domain, config),\n isOffset ? availHeight : null);\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n\n return labelConfig;\n },\n y: () => {\n let widthForTicks = availWidth;\n const tickShifter = tickDimHeight / 2;\n\n setAxisRange(context, 'x', getAdjustedRange(minDiff,\n [availHeight - top - bottom - tickShifter, tickShifter], domain, config),\n isOffset ? availWidth : null);\n\n if ((availWidth - axisNameHeight - namePadding) <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [BAND]: {\n x: () => {\n setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null);\n const range = context.range();\n\n // Get Tick Interval\n tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minWidthBetweenTicks;\n\n // Get height available for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation === null ? -90 : rotation;\n labelConfig.smartTicks = false;\n\n tickInterval = Math.max(heightForTicks, minTickWidth);\n\n if (heightForTicks < minTickWidth) {\n context.renderConfig({ showAxisName: false });\n }\n } else if (tickValues) {\n const interval = (availWidth / domain.length) - minWidthBetweenTicks;\n if (interval < minTickWidth) {\n context.range([minTickHeight / 2, availWidth - minTickHeight / 2]);\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null);\n\n let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding;\n if (widthForTicks <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [LINEAR]: {\n x: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimWidth / 2;\n\n const baseline = fixedBaseline ? 0 : tickShifter;\n\n setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter],\n isOffset ? availHeight : null);\n\n const range = context.range();\n\n // Get Tick widths and available space\n const totalTickWidth = allTickDimensions.length * (tickDimWidth + minWidthBetweenTicks);\n const availableWidth = range[1] - range[0];\n\n // Rotate labels if not enough width\n if (availableWidth < totalTickWidth && labels.rotation !== null) {\n if (availHeight - tickDimWidth - namePadding - tickSize > axisNameHeight) {\n labelConfig.rotation = null;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: true\n });\n } else {\n labelConfig.rotation = -90;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: false\n\n });\n }\n }\n\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n },\n y: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimensions.height / 2;\n const baseline = fixedBaseline ? 1 : tickShifter;\n\n setAxisRange(context, 'x', [availHeight - bottom - baseline, tickShifter + top],\n isOffset ? availWidth : null);\n\n // Remove display of ticks if no space is left\n if (availWidth < tickDimWidth + axisNameHeight + namePadding) {\n context.renderConfig({ showInnerTicks: false });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n }\n }\n };\n};\n","import { defaultValue } from 'muze-utils';\nimport { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { MIN_NO_OF_TICKS, DEFAULT_NO_OF_TICKS } from '../enums/constants';\nimport { setAxisRange, getAdjustedRange } from './space-setter';\n\nexport const getRotatedSpaces = (rotation = 0, width, height) => {\n let rotatedHeight = height;\n let rotatedWidth = width;\n if (rotation) {\n const angle = ((rotation || 0) * Math.PI) / 180;\n rotatedWidth = Math.abs(height * Math.sin(angle)) + Math.abs(width * Math.cos(angle));\n rotatedHeight = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n }\n return { width: rotatedWidth, height: rotatedHeight };\n};\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.renderConfig({ xOffset: x, yOffset: y });\n};\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n let numberOfValues = 0;\n let tickValues = [];\n let { numberOfTicks } = axisInstance.config();\n const ticks = axis.scale().ticks();\n const tickLength = ticks.length;\n const minTickDistance = axisInstance._minTickDistance.width;\n\n numberOfValues = tickLength;\n\n if (tickLength * (labelDim + minTickDistance) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim + minTickDistance));\n }\n\n numberOfTicks = numberOfTicks || numberOfValues;\n numberOfValues = Math.min(numberOfTicks, Math.max(MIN_NO_OF_TICKS, numberOfValues));\n\n tickValues = axis.scale().ticks(numberOfValues);\n\n if (tickValues.length > numberOfValues) {\n tickValues = tickValues.filter((e, i) => i % 2 === 0);\n }\n\n if (numberOfValues === MIN_NO_OF_TICKS) {\n tickValues = axis.scale().ticks(DEFAULT_NO_OF_TICKS);\n tickValues = [tickValues[0], tickValues[tickValues.length - 1]];\n }\n return tickValues;\n};\n\nexport const getAxisComponentDimensions = (context) => {\n let largestTick = '';\n let largestTickDimensions = { width: 0, height: 0 };\n let smartTick = {};\n let axisTicks;\n const allTickDimensions = [];\n const scale = context.scale();\n const { tickValues, showAxisName } = context.renderConfig();\n const { name } = context.config();\n const { labelManager } = context.dependencies();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(context._tickLabelStyle);\n\n // get the values along the domain\n axisTicks = tickValues || labelFunc();\n\n // Get the tick labels\n axisTicks = axisTicks.map((originalLabel, i) => {\n const label = context.getFormattedText(originalLabel, i, axisTicks);\n\n // convert to string for quant values\n const tickDimensions = labelManager.getOriSize(label);\n\n // Get spaces for all labels\n allTickDimensions.push(tickDimensions);\n\n // Getting largest label\n if (tickDimensions.width > largestTickDimensions.width) {\n largestTick = label;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n\n largestTickDimensions = tickDimensions;\n smartTick = smartTick || tickDimensions;\n }\n return label;\n });\n\n labelManager.setStyle(context._axisNameStyle);\n const axisNameDimensions = showAxisName ? labelManager.getOriSize(name) : { width: 0, height: 0 };\n\n return {\n axisNameDimensions,\n largestTick,\n largestTickDimensions,\n allTickDimensions,\n axisTicks,\n smartTick,\n tickSize: context.getTickSize()\n };\n};\n\nexport const computeAxisDimensions = (context) => {\n let tickDimensions = {};\n const { labels } = context.renderConfig();\n const { smartTicks, rotation } = labels;\n const {\n largestTickDimensions,\n axisTicks,\n smartTick,\n axisNameDimensions,\n allTickDimensions,\n tickSize\n } = getAxisComponentDimensions(context);\n const { height: labelHeight, width: labelWidth } = largestTickDimensions;\n\n // get the domain of axis\n const domain = context.domain();\n // const angle = ((rotation || 0) * Math.PI) / 180;\n\n if (domain.length === 0) {\n return null;\n }\n\n if (smartTicks) {\n tickDimensions = smartTick;\n } else {\n tickDimensions = { width: labelWidth, height: labelHeight };\n }\n tickDimensions = getRotatedSpaces(rotation, tickDimensions.width, tickDimensions.height);\n\n if (tickSize === 0) {\n tickDimensions = { width: 0, height: 0 };\n }\n return {\n allTickDimensions,\n tickSize,\n tickDimensions,\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, range) => {\n let width;\n let height;\n const domain = context.domain();\n const minTickDistance = context._minTickDistance.width;\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n width = range && range.length ? range[1] - range[0] : ((tickDimWidth + minTickDistance) * 3);\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!range || !range.length) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n\n height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize;\n\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getVerticalAxisSpace = (context, axisDimensions) => {\n let height;\n let width;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\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 axisDimensions = context.getAxisDimensions();\n\n const { orientation } = context.config();\n const { show } = context.renderConfig();\n const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions;\n const { height: largestDimHeight } = largestTickDimensions;\n const minTickWidth = context._minTickDistance.width;\n if (orientation === TOP || orientation === BOTTOM) {\n let {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n\n if (!range || !range.length) {\n width = allTickDimensions.reduce((t, n) =>\n t + Math.min(n.width, n.height) + minTickWidth, 0);\n }\n\n if (show === false) {\n height = 0;\n width = 0;\n }\n return {\n width,\n height\n };\n }\n\n let {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n if (!height || height === 0) {\n height = axisTicks.length * (largestDimHeight + context._minTickDistance.height);\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 axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show, showAxisName } = context.renderConfig();\n const { axisNameDimensions } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisNameWidth } = axisNameDimensions;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n const axisWidth = Math.max(width, axisNameWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n const {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n const effHeight = Math.max(height, showAxisName ? axisNameWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n/**\n * Overwrites domain with user defined domain (if present)\n * @param {Object} context reference to current axes\n * @param {Array} domain default domain\n *\n * @return {Array} domain\n */\nexport const getValidDomain = (context, domain) => {\n const { domain: userDom } = context.config();\n\n if (userDom) {\n domain = userDom;\n }\n\n return defaultValue(domain, []);\n};\n\nexport const setContinousAxisDomain = (context, domain) => {\n const { nice } = context.config();\n const scale = context.scale.bind(context);\n\n scale().domain(domain);\n nice && scale().nice();\n context._domain = scale().domain();\n};\n\n/**\n * Checks if any of the properties have changed between two objects\n * @param {Object} obj first object\n * @param {Object} obj1 second object\n * @param {Array} properties properties to be compared between two objects\n *\n * @return {Boolean} boolean value\n */\nexport const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => {\n if (!Object.keys(obj).length || !Object.keys(obj1).length) {\n return false;\n }\n return properties.some(key => obj[key] !== obj1[key]);\n};\n\nexport const resetTickInterval = (context, domain) => {\n const {\n orientation,\n isOffset\n } = context.config();\n\n const minDiff = context._minDiff;\n // Set available space on interaction\n if (context.range().length && (orientation === TOP || orientation === BOTTOM)) {\n context.applyTickSkipping();\n const {\n largestTickDimensions\n } = context.getAxisDimensions();\n\n const noOfTicks = context.getTickValues().length;\n\n const { width, height, padding } = context.availableSpace();\n const {\n left,\n right\n } = padding;\n // Get the Tick Interval\n const tickInterval = Math.min(largestTickDimensions.width,\n ((width - (noOfTicks - 1) * (context._minTickDistance.width)) / noOfTicks));\n\n context.maxTickSpaces({\n width: tickInterval\n });\n\n const adjustedRange = getAdjustedRange(minDiff, [tickInterval / 2,\n width - left - right - tickInterval / 2], domain, context.config());\n\n // set range for axis\n setAxisRange(context, 'y', adjustedRange, isOffset ? height : null);\n\n context.setTickConfig();\n }\n};\n\nexport const getSmartAxisName = (name, width, labelManager) => {\n const oriSize = labelManager.getOriSize(name);\n\n labelManager.useEllipsesOnOverflow(true);\n\n return labelManager.getSmartText(name, width, oriSize.height, true);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { hasAxesConfigChanged } from './helper';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n axisComponentDimensions: {},\n config: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._config || {});\n const mockedOldConfig = mergeRecursive({}, oldConfig);\n value = mergeRecursive(mockedOldConfig, value);\n\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n const shouldAxesScaleUpdate = hasAxesConfigChanged(\n value, oldConfig, ['interpolator', 'exponent', 'base', 'orientation']\n );\n const tickFormatter = context.sanitizeTickFormatter(value);\n\n if (shouldAxesScaleUpdate) {\n context._scale = context.createScale(value);\n context._axis = context.createAxis(value);\n }\n\n context._tickFormatter = ticks => tickFormatter(ticks);\n\n context.resetRenderConfig(value);\n return value;\n }\n },\n renderConfig: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._renderConfig || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n return value;\n }\n },\n\n smartTicks: {},\n tickSize: {},\n maxTickSpaces: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._maxTickSpaces || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n valueParser: {\n defaultValue: val => val\n }\n};\n","import {\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 { spaceSetter } from './space-setter';\nimport {\n getAxisComponentDimensions,\n computeAxisDimensions,\n calculateContinousSpace,\n setOffset,\n getValidDomain,\n getSmartAxisName\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._axisDimensions = {};\n this._smartTicks = [];\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\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n const dist = dependencies.labelManager.getOriSize('w');\n\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n this._minTickSpace = dependencies.labelManager.getOriSize('www...');\n\n generateGetterSetters(this, PROPS);\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n this._animationDonePromises = [];\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 resetDomain () {\n this._domain = [];\n return this;\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 *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n this.scale().domain(domainValue);\n this._domain = this.scale().domain();\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n setAxisComponentDimensions () {\n this.axisComponentDimensions(getAxisComponentDimensions(this));\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n *\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 sanitizeTickFormatter (value) {\n const { tickFormat, numberFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), val, i, ticks);\n }\n\n return () => val => numberFormat(val);\n }\n\n resetRenderConfig (config) {\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n } = config;\n this.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n });\n return this;\n }\n\n resetLogicalSpace () {\n this.logicalSpace(null);\n this.range([]);\n\n this.resetRenderConfig(this.config());\n }\n\n getFormattedText (text, index, axisTicks) {\n const formatter = this._tickFormatter;\n\n return formatter(axisTicks)(text, index);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n setTickValues (tickValues) {\n const renderConfig = this.renderConfig();\n this.config({ ...renderConfig, tickValues });\n this.tickValues = tickValues;\n this.axis().tickValues(tickValues);\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 let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n const type = this.constructor.type();\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset })[type].x();\n } else {\n labelConfig = spaceSetter(this, { isOffset })[type].y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.setSmartAxisName();\n return this;\n }\n\n setSmartAxisName () {\n const { orientation, name } = this.config();\n const dimType = (orientation === TOP || orientation === BOTTOM) ? 'width' : 'height';\n const widthDim = this.availableSpace()[dimType];\n const labelManager = this.dependencies().labelManager;\n labelManager.setStyle(this._axisNameStyle);\n this.renderConfig({\n smartAxisName: getSmartAxisName(name, widthDim, labelManager)\n });\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\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 *\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 (...params) {\n this.axisDimensions(computeAxisDimensions(this, ...params));\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 }\n setOffset(this);\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 return this.scale().invert(value);\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 *\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n return [v1, v2];\n }\n\n invertExtent (v1, v2) {\n return [this.invert(v1), this.invert(v2)];\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\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 /**\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 this.setTickConfig();\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n remove () {\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n *\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 * Notifies when all animations/transitions of the axis are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n}\n\n","import { sanitizeDomainWhenEqual } from 'muze-utils';\nimport { 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 if (domain.length) {\n domain = sanitizeDomainWhenEqual(domain);\n }\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 const scale = this._scale;\n if (domainVal <= 0) {\n return scale(scale.domain()[0]);\n }\n\n return scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n domain[0] = Math.max(1, domain[0]);\n }\n if (domain[1] <= 0) {\n domain[1] = Math.max(1, domain[1]);\n }\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 {\n getNumberOfTicks,\n getValidDomain,\n setContinousAxisDomain\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 *\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 *\n *\n * @static\n *\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 *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainVal = this._interpolator.sanitizeDomain(getValidDomain(this, domain[0]));\n setContinousAxisDomain(this, domainVal);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\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 (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n const {\n tickValues,\n showInnerTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n if (!showInnerTicks) {\n axis.tickValues([]);\n return this;\n }\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n }\n const newTickValues = this.getTickValues();\n\n axis.tickValues(newTickValues);\n const smartLabel = this.dependencies().labelManager;\n smartLabel.setStyle(this._tickLabelStyle);\n const formatter = this._tickFormatter(newTickValues);\n const smartTicks = newTickValues.map((val, i) => {\n const text = formatter(val, i);\n const tickSpace = smartLabel.getOriSize(text);\n\n tickSpace.text = text;\n return tickSpace;\n });\n\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation\n\n } = this.config();\n const {\n tickValues\n } = this.renderConfig();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = this.axisComponentDimensions().largestTickDimensions;\n\n if (tickValues) {\n return 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.renderConfig().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 } = this.config();\n const {\n labels\n } = this.renderConfig();\n\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const ticks = axis.tickValues();\n const smartTicks = this.smartTicks();\n\n if (smartTicks && smartTicks.length) {\n const { width, height } = this.smartTicks()[0];\n\n axis.tickTransform((d) => {\n if (d === ticks[0]) {\n if ((orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n\n if ((orientation === TOP || orientation === BOTTOM) && !rotation) {\n return `translate(${width / 2}px, ${0}px)`;\n }\n } return '';\n });\n }\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { calculateBandSpace, setOffset, getRotatedSpaces } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n /**\n *\n *\n * @static\n *\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const domain = this.domain();\n const { labelManager } = this._dependencies;\n const { padding } = this.config();\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n tickValues && this.axis().tickValues(tickValues);\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n // Update padding between plots\n if (typeof padding === 'number') {\n const paddingNormalized = Math.min(1, Math.max(0, padding));\n this.scale().padding(paddingNormalized);\n }\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\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 }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n *\n *\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n formatTickValue (val) {\n return this.valueParser()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(this.formatTickValue(val), val, i, ticks);\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\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 invertExtent (v1, v2) {\n return this.scale().invertExtent(v1, v2);\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 const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n const extent = this.invertExtent(v1, v2);\n const p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n const p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { TIME } from '../enums/scale-type';\nimport { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset,\n resetTickInterval } from './helper';\nimport { applyTickSkipping } from './space-setter';\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 *\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 *\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n formatTickValue (val) {\n return this.scale().tickFormat()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return (ticks) => {\n const rawTicks = ticks.map(t => t.getTime());\n return (val, i) => tickFormat(this.formatTickValue(val), val.getTime(), i, rawTicks);\n };\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\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 *\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.renderConfig().tickValues || this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n *\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n applyTickSkipping () {\n applyTickSkipping(this);\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n setContinousAxisDomain(this, domainValue);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n\n resetTickInterval(this, domainValue);\n return this;\n }\n return this._domain;\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 }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\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 (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n\n tickValues && this.axis().tickValues(tickValues);\n\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n\n this.smartTicks(smartTicks);\n return this;\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, defaultValue } 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, defaultValue(Number(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 { InvalidAwareTypes, getObjProp } from 'muze-utils';\n\nexport const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => {\n if (domainVal instanceof InvalidAwareTypes) {\n return minDomainScaledVal;\n }\n return scaledVal;\n};\n\nexport const resolveAxisConfig = (propVal, defaultVal, context) => {\n const constructor = getObjProp(propVal, 'constructor');\n switch (constructor) {\n case Function:\n return propVal(defaultVal, context);\n case Array:\n return propVal;\n default:\n return defaultVal;\n }\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\nimport { treatNullMeasures } from '../helper';\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*\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 *\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 *\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 *\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(sanitizeDomainWhenEqual(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 *\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 *\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return treatNullMeasures(domainValue, scale(numVal), scale(0));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) => treatNullMeasures(domainValue, scale(domainValue),\n scale(domain[0]));\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) =>\n strategies()[`${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, defaultValue } 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, getActualHslColor } 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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n *\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 *\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n return strategyGetter(domainType, rangeType, schemeType);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n *\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 if (color) {\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 }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n *\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 = Math.min(defaultValue(color[3], 0), 1);\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = Math.min(a + transformationArr[3] || 0, 1);\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 getHslArray (color) {\n return getActualHslColor(color);\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';\nimport { treatNullMeasures } from '../helper';\n\n/**\n *\n *\n * @param {*} domain\n *\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 *\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n *\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 *\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 treatNullMeasures(domainValue, interpolator(numVal), interpolator(domain[0]));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\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, domain) =>\n treatNullMeasures(domainValue, scale(domainValue), scale(domain[0]));\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 *\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n *\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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\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, InvalidAwareTypes } 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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n *\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value || value instanceof InvalidAwareTypes) {\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 *\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 { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => mergeRecursive(context.config(), config),\n preset: (context, config) => {\n const { range, domain } = config;\n range && context.range(range);\n domain && context.domain(domain);\n }\n },\n domain: {},\n range: {}\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, Symbols, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_ANGLE_DOMAIN } from '../enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst { pie } = Symbols;\n\nconst createAngleValues = (context) => {\n const angleData = context._angleFn(context._domain);\n angleData.forEach((v) => {\n v.startAngle -= Math.PI / 2;\n v.endAngle -= Math.PI / 2;\n });\n context._angleValues = angleData.reduce((values, d) => {\n const key = d.data;\n !values[key] && (values[key] = []);\n values[key].push(d);\n return values;\n }, {});\n};\n\n/**\n* This class is used to instantiate a AngleAxis.\n* @class AngleAxis\n*/\nexport default class AngleAxis {\n\n /**\n * Creates an instance of AngleAxis.\n * @param {Object} config input parameters.\n * @memberof AngleAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._range = [0, 360];\n this._angleFn = pie()\n .value(d => (typeof d === 'string' ? 1 : d))\n .sortValues(null);\n this._angleValues = {};\n }\n\n static defaultConfig () {\n return {};\n }\n\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n getScaleValue (domainVal) {\n return this._angleValues[domainVal];\n }\n\n padAngle (angle) {\n this._angleFn = this._angleFn.padAngle(angle);\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n const domain = domainVal[0].length ? domainVal[0] : DEFAULT_ANGLE_DOMAIN;\n this._domain = resolveAxisConfig(customDomain, domain, this);\n createAngleValues(this);\n return this;\n }\n return this._domain;\n }\n\n range (...range) {\n if (range.length) {\n const { range: customRange } = this.config();\n this._range = resolveAxisConfig(customRange, range[0], this);\n const domain = this.domain();\n const [startAngle, endAngle] = this._range;\n this._angleFn\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180);\n if (domain && domain.length) {\n createAngleValues(this);\n }\n return this;\n }\n return this._range;\n }\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\nexport const ANGLE0 = 'angle0';\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 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 * Ordering type\n */\nexport const ASCENDING = 'asc';\n/**\n * Ordering type\n */\nexport const DESCENDING = 'desc';\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, mergeRecursive, generateGetterSetters, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { LINEAR } from '../../../visual-group/src/enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst adjustDomain = (context) => {\n const minOuterRadius = context.config().minOuterRadius;\n const domain = context._domain;\n if (context._range.length) {\n const scale = context._scale;\n const value = scale.invert(minOuterRadius) - scale.invert(0);\n context._domain = [domain[0] - value, domain[1]];\n scale.domain(context._domain);\n }\n};\n\n/**\n* This class is used to instantiate a RadiusAxis.\n* @class RadiusAxis\n*/\nexport default class RadiusAxis {\n\n /**\n * Creates an instance of RadiusAxis.\n * @param {Object} config input parameters.\n * @memberof RadiusAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._range = [];\n this._radiusFactor = 1;\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._scale = this.createScale({\n scale: LINEAR\n });\n }\n\n static defaultConfig () {\n return {\n padding: [0, 1],\n minOuterRadius: 10\n };\n }\n\n config (...params) {\n if (params.length) {\n const config = mergeRecursive(this.config(), params[0]);\n this._config = config;\n return this;\n }\n return this._config;\n }\n\n createScale (strategy) {\n return createScale({\n type: strategy.scale,\n range: this.range()\n });\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n let domain = resolveAxisConfig(customDomain, domainVal[0], this);\n domain = sanitizeDomainWhenEqual(domain);\n this._scale.domain(domain);\n this._domain = domain;\n adjustDomain(this);\n }\n return this._domain;\n }\n\n getInnerRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[0];\n }\n return this._scale(domainVal);\n }\n\n getOuterRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[1];\n }\n const radius = this._scale(domainVal) * this._radiusFactor;\n return radius;\n }\n\n range (...range) {\n if (range.length) {\n const { padding, range: customRange } = this.config();\n const sanitizedRange = range[0].map((v, i) => v + (i ? -padding[i] : padding[i]));\n const rangeVal = resolveAxisConfig(customRange, sanitizedRange, this);\n this._range = rangeVal;\n this._scale.range(rangeVal);\n adjustDomain(this);\n }\n return this._range;\n }\n\n setRadiusFactor (val) {\n this._radiusFactor = val;\n return this;\n }\n}\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n TEMPORAL: '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.TEMPORAL]: ScaleType.TIME\n};\n\n","import { nestCollection, InvalidAwareTypes } 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 const groupedData = nestCollection({\n keys: groupByIndices,\n data\n });\n\n groupedData.forEach((d) => {\n const key = d.key;\n if (InvalidAwareTypes.isInvalid(key)) {\n d.key = InvalidAwareTypes.getInvalidType(key);\n }\n });\n return groupedData;\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 retrieveNearestGroupByReducers,\n getObjProp,\n COORD_TYPES,\n CommonProps,\n defaultValue\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM, ASCENDING, TEXT } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\nconst { POLAR, CARTESIAN } = COORD_TYPES;\n\nconst transformColor = (colorAxis, datum, styleType, intensity) => {\n const meta = datum.meta;\n const stateColor = defaultValue(meta.stateColor[styleType], meta.originalColor[styleType]);\n const colorInfo = colorAxis.transformColor(stateColor, intensity);\n\n meta.stateColor[styleType] = colorInfo.hsla;\n return colorInfo;\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.forEach((elem) => {\n elem.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 = transformColor(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 transformColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor[styleType];\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a})`;\n }));\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 *\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\nexport const encodingFieldInfRetriever = {\n [POLAR]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.RADIUS, ENCODING.RADIUS0, ENCODING.ANGLE, ENCODING.ANGLE0, COLOR, SHAPE, SIZE, TEXT]\n .forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n });\n return encodingInf;\n },\n [CARTESIAN]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE, TEXT].forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n encodingInf[`${e}FieldType`] = getObjProp(fieldsConfig, field, 'def', 'type');\n encodingInf[`${e}FieldSubType`] = getObjProp(fieldsConfig, field, 'def', 'subtype');\n });\n\n return encodingInf;\n }\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n *\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\nconst dataNormalizers = {\n [POLAR]: (transformedData, encodingFieldInf, fieldsConfig) => {\n const {\n radiusFieldIndex,\n angleFieldIndex,\n radius0FieldIndex,\n angle0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map(data => data.map((d) => {\n const pointObj = {\n radius: d[radiusFieldIndex],\n angle: angleFieldIndex !== undefined ? d[angleFieldIndex] : 1,\n radius0: d[radius0FieldIndex],\n angle0: d[angle0FieldIndex]\n };\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n return pointObj;\n })).filter(d => d.length);\n },\n [CARTESIAN]: (transformedData, encodingFieldInf, fieldsConfig, transformType) => {\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 transformedData.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.source = tuple;\n pointObj.rowId = tuple[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = tuple[encodingFieldInf[`${enc}FieldIndex`]];\n });\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n }\n return pointObj;\n });\n }).filter(d => d.length);\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, context) => {\n const transformType = context.transformType();\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const encodingFieldInf = context.encodingFieldsInf();\n const fieldsConfig = context.data().getFieldsConfig();\n return dataNormalizers[context.coord()](transformedDataArr, encodingFieldInf, fieldsConfig, transformType);\n};\n\nexport const domainCalculator = {\n [POLAR]: (data, layerInst) => {\n const config = layerInst.config();\n const { sort } = config;\n let angleValues = data[0];\n const radius0Field = getObjProp(config.encoding.radius0, 'field');\n if (sort) {\n angleValues = angleValues.sort((a, b) => (sort === ASCENDING ? a.radius - b.radius : b.radius - a.radius));\n }\n const radiusDomain = getDomainFromData(data, [ENCODING.RADIUS, radius0Field ?\n ENCODING.RADIUS0 : ENCODING.RADIUS]);\n return {\n radius: radiusDomain,\n angle: angleValues.map(d => d.angle),\n angle0: angleValues.map(d => d.angle0)\n };\n },\n [CARTESIAN]: (data, layerInst) => {\n const transformType = layerInst.transformType();\n const encodingFieldInf = layerInst.encodingFieldsInf();\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};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d.rowId !== 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\nexport const renderLayer = (context) => {\n const mount = context.mount();\n if (mount) {\n context.render(mount);\n context.dependencies().throwback.commit(CommonProps.ON_LAYER_DRAW, true, context.metaInf().parentNamespace);\n }\n};\n\nconst transformResolverPredicates = (encodingFieldInf, context, groupByField) => {\n const fieldsConfig = context.data().getFieldsConfig();\n const { xField, yField, xFieldType, yFieldType } = encodingFieldInf;\n const dimensionField = ['xField', 'yField'].find(type =>\n encodingFieldInf[`${type}Type`] === FieldType.DIMENSION);\n\n return [\n !xField,\n !yField,\n !groupByField,\n getObjProp(fieldsConfig[groupByField], 'def', 'type') === FieldType.MEASURE,\n xFieldType === FieldType.DIMENSION && yFieldType === FieldType.DIMENSION,\n dimensionField && encodingFieldInf[dimensionField] === groupByField\n ];\n};\n\nexport const resolveInvalidTransformType = (context) => {\n const encodingFieldInf = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n\n if (transformResolverPredicates(encodingFieldInf, context, groupByField).some(value => value)) {\n return IDENTITY;\n }\n return null;\n};\n\nexport const getValidTransform = context => resolveInvalidTransformType(context) || context.config().transform.type;\n\nexport const getValidTransformForAggFn = (context) => {\n const resolvedInvalidTransformType = resolveInvalidTransformType(context);\n if (resolvedInvalidTransformType) {\n return resolvedInvalidTransformType;\n }\n\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const isCustomTransformTypeProvided = !!getObjProp(context._customConfig, 'transform', 'type');\n let transformType = context.config().transform.type;\n\n if (!isCustomTransformTypeProvided && groupByField && xFieldType !== yFieldType) {\n const measureField = xFieldType === FieldType.MEASURE ? xField : yField;\n const { [measureField]: aggFn } = retrieveNearestGroupByReducers(context.data(), measureField);\n transformType = aggFn === AGG_FN_SUM ? STACK : GROUP;\n }\n\n return transformType;\n};\n\nexport const getMarkId = (source, schema) => source.filter((val, i) => schema[i] &&\n schema[i].type === FieldType.DIMENSION).join();\n\nexport const resolveEncodingValues = (data, i, dataArr, layerInst) => {\n const transformedValues = {};\n const values = data.values;\n const encoding = layerInst.config().encoding;\n for (const key in values) {\n const value = getObjProp(encoding[key], 'value');\n if (value instanceof Function) {\n transformedValues[key] = value(values, i, dataArr, layerInst);\n } else {\n transformedValues[key] = values[key];\n }\n }\n return transformedValues;\n};\n\nexport const getColorMetaInf = (colorInf, colorAxis) => ({\n originalColor: Object.keys(colorInf).reduce((acc, key) => {\n if (colorInf[key]) {\n acc[key] = colorAxis.getHslArray(colorInf[key]);\n }\n return acc;\n }, {}),\n stateColor: {},\n colorTransform: {}\n});\n\nconst getCoordValue = (radius, trig, angle, offset) => radius * Math[trig](angle) + offset;\n\nconst coordValueGetter = (radius, angle, xOffset, yOffset) => ({\n x: getCoordValue(radius, 'cos', angle, xOffset),\n y: getCoordValue(radius, 'sin', angle, yOffset)\n});\n\nexport const toCartesianCoordinates = (points, measurement, rangePlot = false) => {\n const xOffset = measurement.width / 2;\n const yOffset = measurement.height / 2;\n for (let i = 0, len = points.length; i < len; i++) {\n const point = points[i];\n const { angle, radius, radius0, angle0 } = point.update;\n point.update = coordValueGetter(radius, angle, xOffset, yOffset);\n if (rangePlot) {\n const update = point.update = coordValueGetter(radius0, angle0, xOffset, yOffset);\n const { x: x0, y: y0 } = coordValueGetter(radius, angle, xOffset, yOffset);\n update.x0 = x0;\n update.y0 = y0;\n }\n }\n return points;\n};\n\nexport const sortData = (data, axes) => {\n const { x: xAxis, y: yAxis } = axes;\n const axisArr = [xAxis, yAxis];\n for (let i = 0, len = axisArr.length; i < len; i++) {\n const axis = axisArr[i];\n if (axis.constructor.type() === BAND) {\n const key = i ? 'y' : 'x';\n const dom = axis.domain();\n const indices = dom.reduce((acc, v, idx) => {\n acc[v] = idx;\n return acc;\n }, {});\n data.sort((a, b) => indices[a[key]] - indices[b[key]]);\n break;\n }\n }\n return data;\n};\n","import * as PROPS from '../enums/props';\n\nexport const localOptions = {\n [PROPS.DATA]: {\n value: null\n }\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\nimport * as PROPS from '../enums/props';\nimport { encodingFieldInfRetriever } from '../helpers';\n\nexport const listenerMap = [\n {\n props: [`${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${PROPS.DATA}`],\n type: 'registerImmediateListener',\n listener: (context, [, data]) => {\n const config = context.config();\n if (data && config) {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n const encodingValue = config.encoding;\n if (encodingValue) {\n const fieldsConfig = data.getFieldsConfig();\n const encodingFieldsInf = encodingFieldInfRetriever[context.coord()](encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.resolveTransformType();\n context._transformedData = context.getTransformedData(data, config,\n context.transformType(), encodingFieldsInf);\n context._normalizedData = context.getNormalizedData(context._transformedData, fieldsConfig);\n if (config.calculateDomain !== false) {\n const domain = context.calculateDomainFromData(context._normalizedData,\n context.encodingFieldsInf(), context.data().getFieldsConfig());\n context.domain(domain);\n }\n }\n }\n },\n namespace: context => context.metaInf().namespace\n }\n];\n","import {\n getUniqueId,\n mergeRecursive,\n FieldType,\n selectElement,\n ReservedFields,\n DataModel,\n clone,\n generateGetterSetters,\n STATE_NAMESPACES,\n COORD_TYPES,\n transactor,\n defaultValue,\n getObjProp\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport { props } from './props';\nimport {\n transformData,\n getNormalizedData,\n applyInteractionStyle,\n getValidTransform,\n domainCalculator,\n renderLayer\n} from '../helpers';\nimport { localOptions } from './local-options';\nimport { listenerMap } from './listener-map';\n\nconst layerNs = [STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * An abstract class which gives definition of common layer functionality like\n * - transforming data for various modes. Supported modes: identity, group and stack.\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 * @module BaseLayer\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n * @constructor\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.size 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} dependencies.smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies = {}) {\n super();\n\n generateGetterSetters(this, props);\n this.axes(axes);\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 this._animationDonePromises = [];\n this._graphicElems = {};\n this._customConfig = null;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys(localOptions).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getListeners () {\n return {\n store: [...listenerMap, {\n type: 'registerChangeListener',\n props: [`${layerNs[1]}.${PROPS.DATA}`,\n ...['x', 'y', 'radius'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context) => {\n renderLayer(context);\n },\n subNamespace: (context) => {\n const { unitRowIndex, unitColIndex, namespace } = context.metaInf();\n return {\n [`${layerNs[1]}.${PROPS.DATA}`]: namespace,\n [`${groupNs}.domain.x`]: `${unitColIndex}0`,\n [`${groupNs}.domain.y`]: `${unitRowIndex}0`,\n [`${groupNs}.domain.radius`]: `${unitRowIndex}-${unitColIndex}`\n };\n }\n }],\n throwback: []\n };\n }\n\n static getQualifiedStateProps () {\n const layerState = BaseLayer.getState();\n return layerState.map((state, i) => Object.keys(state).map(prop => `${layerNs[i]}.${prop}`));\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { namespace } = this.metaInf();\n store.addSubNamespace(namespace, BaseLayer.formalName(), this);\n\n transactor(this, localOptions, store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}`\n });\n return this;\n }\n return this._store;\n }\n\n domain (...dom) {\n const prop = `${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`;\n const store = this.store();\n if (dom.length) {\n const { parentNamespace, namespace } = this.metaInf();\n const domain = defaultValue(store.get(prop, parentNamespace), {});\n domain[namespace] = dom[0];\n this.store().commit(prop, domain, parentNamespace);\n return this;\n }\n return this.store().get(prop, this.metaInf().namespace);\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 * .layers([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @return {string} name of layer\n */\n static formalName () {\n return 'base';\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 *\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 * @public\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 * @public\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Returns the transformed data based on given transform type.\n * It first 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 */\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 categorical 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 = domainCalculator[this.coord()](data, this);\n }\n return domains;\n }\n\n static 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 { parentNamespace, namespace } = this.metaInf();\n const domains = getObjProp(this.store()\n .get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, parentNamespace), namespace);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Normalizes the transformed data and returns it.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData) {\n return getNormalizedData(transformedData, this);\n }\n\n /**\n * Gets the nearest point closest to the given x and y coordinate. If no nearest point is found, then it returns\n * null.\n *\n * @public\n *\n * @param {number} x X Coordinate.\n * @param {number} y Y Coordinate.\n *\n * @return {Object} Information of the nearest point.\n * ```\n * {\n * // id property contains the field names and their corresponding values in a 2d array. This is the data\n * // associated with the nearest point.\n * id: // Example data: [['Origin'], ['USA']],\n * dimensions: // Physical dimensions of the point.\n * layerId: // Id of the layer instance.\n * }\n * ```\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply, styles) {\n const interactionConfig = this.config().interaction || {};\n\n let interactionStyles = interactionConfig[interactionType];\n interactionStyles = styles || interactionStyles;\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n disableUpdate () {\n this._updateLock = true;\n return this;\n }\n\n enableUpdate () {\n this._updateLock = false;\n return this;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransform(this);\n }\n\n transformType () {\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 *\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer.\n *\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n const { namespace, parentNamespace } = this.metaInf();\n const store = this.store();\n store.removeSubNamespace(namespace, BaseLayer.formalName());\n const layersDomain = store.get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`);\n const unitDom = layersDomain[parentNamespace];\n unitDom && (delete unitDom[namespace]);\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 *\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 *\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getSchema();\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 hasPlotSpan () {\n return false;\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 * Returns the information of the marks corresponding to the supplied identifiers. Identifiers are a set of field\n * names and their corresponding values in an array. It can also be an instance of datamodel.\n *\n * For example,\n * ```\n * const identifiers = [\n * ['Origin', 'Cylinders'],\n * ['USA', '8']\n * ];\n * const points = barLayer.getPointsFromIdentifiers(identifiers);\n * ```\n * @public\n * @param {Array|DataModel} identifiers Identifiers of the marks.\n * @param {Object} config Optional configuration which describes how to get the information.\n * @param {boolean} config.getAllAttrs If true, then returns all the information of the points, else returns only\n * the positions of the points.\n * @param {boolean} config.getBBox If true, then returns the bounding box of all the marks.\n *\n * @return {Array} Array of points contains\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 { source, rowId } = 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] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -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._normalizedData;\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.source;\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.source;\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().getSchema()];\n }\n\n /**\n * Returns the dom elements associated with the supplied set of row ids.\n * Each element in the layer is mapped with a row of the datamodel. When given an array of row ids, it returns all\n * the elements which is mapped with those row ids.\n *\n * @public\n * @param {Array} set Array of row ids\n *\n * @return {Selection} D3 Selection of dom elements.\n */\n getPlotElementsFromSet (set) {\n const graphicElems = this._graphicElems;\n const elems = [];\n for (let i = 0, len = set.length; i < len; i++) {\n const elem = graphicElems[set[i]];\n if (elem) {\n elems.push(elem);\n }\n }\n return elems;\n }\n\n /**\n * Notifies when all animations/transitions of the layer are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n getRenderProps () {\n if (this.coord() === COORD_TYPES.POLAR) {\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`];\n }\n const { unitRowIndex: rowIndex, unitColIndex: colIndex } = this.metaInf();\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${rowIndex}0`,\n `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${colIndex}0`];\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\nconst filterFn = (d) => {\n const { update } = d;\n return update.y !== null && update.x !== null;\n};\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 { layer, 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(filterFn);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(filterFn);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', points.length ? [points[0].className] : []);\n element.attr('class', d => d);\n if (!transition.disabled) {\n element = element.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\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 InvalidAwareTypes,\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 {\n attachDataToVoronoi,\n animateGroup,\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\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 static formalName () {\n return 'line';\n }\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 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 static 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) {\n let points = [];\n const axes = this.axes();\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const { xFieldType, yFieldType } = 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 sortData(data, axes);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2;\n const color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color\n },\n data: d\n }, i, data, this);\n\n const point = {\n enter: {},\n update: {\n x: d.x instanceof InvalidAwareTypes ? null : resolvedEncodings.x,\n y: d.y instanceof InvalidAwareTypes ? null : resolvedEncodings.y\n },\n style: {\n stroke: resolvedEncodings.color,\n 'fill-opacity': 0\n },\n rowId: d.rowId,\n source: d.source,\n meta: getColorMetaInf({\n stroke: resolvedEncodings.color\n }, colorAxis)\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\n points = points.filter((point) => {\n const { update } = point;\n return !isNaN(update.x) && !isNaN(update.y);\n });\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 normalizedData = this._normalizedData;\n const transformedData = this._transformedData;\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);\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.source[colorFieldIndex] !== null &&\n d.source[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal.source[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n layer: this,\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].source[colorFieldIndex] || d[0].rowId);\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 { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\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 { layer, 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(points.length ? [points[0].className] : []);\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 .on('end', layer.registerAnimationDoneHook())\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n element.attr('class', d);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType, InvalidAwareTypes, getObjProp } 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 {\n getAxesScales,\n positionPoints,\n getIndividualClassName,\n getValidTransformForAggFn,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\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 *\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 && getObjProp(domains[type], 'length')) {\n domains[type][0] = Math.min(domains[type][0], 0);\n domains[type][1] = Math.max(0, domains[type][1]);\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) {\n let points = [];\n const transformType = this.transformType();\n const axes = this.axes();\n const colorAxis = axes.color;\n const config = this.config();\n const fieldsConfig = this.data().getFieldsConfig();\n const { xField, yField, y0Field } = this.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 const minYVal = yAxis.domain()[0];\n const basePos = minYVal < 0 ? yAxis.getScaleValue(0) : yAxis.getScaleValue(minYVal);\n sortData(data, axes);\n points = data.map((d, i) => {\n let color;\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) : basePos;\n color = colorAxis.getColor(d.color);\n const invalidY = d.y instanceof InvalidAwareTypes;\n const invalidY0 = d.y0 instanceof InvalidAwareTypes;\n const resolvedValues = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, this);\n color = resolvedValues.color;\n const style = {\n fill: color\n };\n\n const point = {\n enter: {\n x: xPx,\n y: invalidY ? null : basePos,\n y0: invalidY0 ? null : basePos\n },\n update: {\n x: xPx,\n y: invalidY ? null : resolvedValues.y,\n y0: invalidY0 ? null : resolvedValues.y0\n },\n source: d.source,\n rowId: d.rowId,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta: getColorMetaInf(style, colorAxis)\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 points = points.filter((point) => {\n const update = point.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(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 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 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 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 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 Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport { getIndividualClassName, resolveEncodingValues, getColorMetaInf } from '../../helpers';\nimport { tweenPie, tweenExitPie, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates.\n *\n * @public\n *\n * @class\n * @module ArcLayer\n * @extends BaseLayer\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 static formalName () {\n return 'arc';\n }\n\n elemType () {\n return 'path';\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 { source, rowId } = dataPoint;\n return {\n id: this.getIdentifiersFromData(source, rowId),\n layerId: this.id()\n };\n }\n return null;\n }\n\n translatePoints (data) {\n const { angle, color: colorAxis, radius: radiusAxis } = this.axes();\n const pieIndex = {};\n const prevData = this._points[0] || [];\n const points = [];\n const angleV = {};\n\n this._prevPieData = {};\n prevData.forEach((e, index) => {\n this._prevPieData[e.rowId] = [e, index];\n pieIndex[e.index] = e;\n });\n data.forEach((d, i) => {\n const angles = angle.getScaleValue(d.angle);\n if (angles) {\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const uid = d.rowId;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n radius: radiusAxis.getOuterRadius(d.radius),\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color: colorAxis.getColor(d.color),\n angle0: startAngle,\n angle: endAngle,\n startAngle,\n endAngle,\n startAngle0: startAngle,\n endAngle0: endAngle\n },\n data: d\n }, i, data, this);\n const color = resolvedEncodings.color;\n points.push({\n source: d.source,\n index: i,\n enter: {},\n update: {\n angle0: resolvedEncodings.angle0,\n angle: resolvedEncodings.angle,\n radius0: resolvedEncodings.radius0,\n radius: resolvedEncodings.radius\n },\n color,\n meta: getColorMetaInf({\n fill: color\n }, colorAxis),\n rowId: uid,\n _previousInfo: this._prevPieData[uid] ? this._prevPieData[uid][0] :\n getPreviousPoint(pieIndex, i, this)\n });\n }\n });\n return points;\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const measurement = this.measurement();\n const {\n classPrefix,\n defClassName,\n cornerRadius,\n padAngle,\n padRadius,\n transition\n } = this.config();\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // This returns a function that generates the arc path based on the datum provided\n const path = this._arcFn = arc()\n .cornerRadius(cornerRadius)\n .startAngle(d => d.update.angle0 + Math.PI / 2)\n .endAngle(d => d.update.angle + Math.PI / 2)\n .padAngle(padAngle)\n .padRadius(padRadius)\n .outerRadius(d => d.update.radius)\n .innerRadius(d => d.update.radius0);\n\n this._points = this._normalizedData.map(arr => this.translatePoints(arr));\n const graphicElems = this._graphicElems = {};\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', this._points, `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${measurement.width / 2},\n ${measurement.height / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', d => [d], `${qualClassName[0]}-path`)\n .style('fill', d => d.color)\n .each(function (d) {\n graphicElems[d.rowId] = selectElement(this);\n })\n .transition()\n .duration(transition.duration)\n .on('end', this.registerAnimationDoneHook())\n .attrTween('d', (...params) => tweenPie(path, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, this._points, 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', d => d, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, path);\n return this;\n }\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 { source, rowId } = tData;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const measurement = this.measurement();\n const centroid = this._arcFn.centroid(pieSliceInf);\n return [{\n x: centroid[0] + measurement.width / 2,\n y: centroid[1] + measurement.height / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\nexport const getPreviousPoint = (prevData, currIndex, context) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n const [startAngle, endAngle] = context.axes().angle.range();\n if (prevArc && nextArc) {\n return {\n update: {\n angle0: getObjProp(prevArc, 'update', 'angle'),\n angle: getObjProp(nextArc, 'update', 'angle0')\n }\n };\n } else if (!nextArc) {\n return {\n update: {\n angle0: (endAngle - 90) * Math.PI * 2 / 360,\n angle: (endAngle - 90) * Math.PI * 2 / 360\n }\n };\n }\n return {\n update: {\n angle0: (startAngle - 90) * Math.PI * 2 / 360,\n angle: (startAngle - 90) * Math.PI * 2 / 360\n }\n };\n};\n\nexport const tweenPie = (path, b) => {\n const datum = b[0];\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\nexport const tweenExitPie = (consecutiveExits, transition, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.update.angle0;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.update.angle;\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 return path(interpolator()(datum, {\n update: {\n angle0: mid,\n angle: mid,\n radius: datum.radius,\n radius0: datum.radius0\n }\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, layerInst) => {\n const selection = selectElement(container).selectAll('g').data(data);\n const { smartLabel } = layerInst._dependencies;\n const graphicElems = layerInst._graphicElems;\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 graphicElems[dataObj.rowId] = element;\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 textEl.attr('alignment-baseline', dataObj['alignment-baseline']);\n textEl.attr('transform', `rotate(${dataObj.rotation} ${update.x} ${update.y})`);\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 size: {},\n radius: {},\n angle: {},\n text: {\n value: '',\n formatter: (val, i, data, context) => {\n const valueParser = context.valueParser();\n return valueParser(val);\n },\n background: {\n padding: 10\n }\n },\n rotation: {\n value: 0\n },\n 'alignment-baseline': {\n value: 'middle'\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 { positionPoints, getIndividualClassName, resolveEncodingValues, getColorMetaInf, toCartesianCoordinates }\n from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\n\nimport './styles.scss';\n\nconst defaultEncoding = defaultConfig.encoding;\nconst alignmentBaseLine = defaultEncoding['alignment-baseline'].value;\nconst defRotation = defaultEncoding.rotation.value;\n\nconst pointTranslators = {\n polar: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { radius: radiusAxis, color: colorAxis, angle: angleAxis } = axes;\n const { formatter: textFormatter } = textEncoding;\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const angleV = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const source = d.source;\n const text = d.text;\n\n const color = colorAxis.getColor(d.color);\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n\n const angle = (startAngle + endAngle) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n angle,\n radius,\n color,\n text,\n startAngle,\n endAngle,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n angle: resolvedVal.angle,\n radius: resolvedVal.radius\n },\n text: textFormatter ? textFormatter(text, i, data, layerInst) : resolvedVal.text,\n color: resolvedVal.color,\n rotation: resolvedVal.rotation,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedVal['alignment-baseline'],\n meta: getColorMetaInf({\n fill: resolvedVal.color\n }, colorAxis),\n style: {},\n source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = toCartesianCoordinates(positionPoints(layerInst, points), layerInst.measurement());\n\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n },\n cartesian: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const colorAxis = axes.color;\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\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.source;\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 = colorAxis.getColor(d.color, colorAxis);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n text: textValue,\n color,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n },\n text: textFormatter(resolvedEncodings.text, i, data, layerInst),\n color: resolvedEncodings.color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedEncodings['alignment-baseline'],\n rotation: resolvedEncodings.rotation,\n meta: getColorMetaInf({\n fill: resolvedEncodings.color\n }, colorAxis),\n style: {},\n source: d.source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = positionPoints(layerInst, points);\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n};\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\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 getPointTranslator (val) {\n return pointTranslators[val];\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, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\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 const config = this.config();\n const normalizedData = this._normalizedData;\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n this._graphicElems = {};\n\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group) => {\n const node = group.node();\n const points = this.translatePoints(dataArr, {}, this);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this);\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 *\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, groupElement) {\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, groupElement);\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 makeElement(groupElement, () => newShape, [1]);\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, groupElement);\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 const { layer, container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n const graphicElems = layer._graphicElems;\n mount.attr('class', className);\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const { enter } = d;\n group.attr('transform', `translate(${enter.x},${enter.y})`);\n },\n update: (group, d) => {\n createShape(d, group);\n graphicElems[d.rowId] = group;\n const { update, style } = d;\n objectIterator(style, key => group.style(key, style[key]));\n group.attr('class', className);\n group.classed(d.className, true);\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n group.attr('transform', `translate(${update.x},${update.y})`);\n },\n exit: (exitGroup) => {\n if (!disabled) {\n exitGroup.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', () => exitGroup.remove())\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroup.remove();\n }\n }\n }, params.keyFn);\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: 'stroke',\n intensity: [0, 0, 0, +1]\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 stroke: {\n value: 'hsla(0,0%,0%,0)'\n },\n fill: {},\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 {\n attachDataToVoronoi,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName,\n getMarkId,\n getColorMetaInf,\n resolveEncodingValues\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to create various symbols for each data point. This is commonly used in\n * scatterplot visualizations. The mark type of this layer is ```point```.\n *\n * @public\n *\n * @class\n * @module PointLayer\n * @extends BaseLayer\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 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 static formalName () {\n return 'point';\n }\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, config = {}) {\n let points = [];\n const encoding = this.config().encoding;\n const axes = this.axes();\n const {\n x,\n y\n } = encoding;\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 measurement = this.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const stroke = encoding.stroke.value;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const size = sizeAxis.getSize(d.size);\n const shape = shapeAxis.getShape(d.shape);\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 let color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color,\n shape,\n size,\n data: d\n },\n data: d\n }, i, data, this);\n color = resolvedEncodings.color;\n\n const style = {\n fill: color,\n stroke\n };\n const pos = {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: pos,\n update: pos,\n shape: resolvedEncodings.shape,\n size: Math.abs(resolvedEncodings.size),\n meta: getColorMetaInf(style, colorAxis),\n style,\n source: d.source,\n rowId: d.rowId\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._transformedData.map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._normalizedData;\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 this._graphicElems = {};\n\n const schema = this.data().getSchema();\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 layer: this,\n container: group.node(),\n points,\n interpolate: config.interpolate,\n className: seriesClassName,\n transition,\n keyFn: v => getMarkId(v.source, schema)\n });\n }\n }, data => data[0].rowId);\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 [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, 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 { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\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 = (layer, elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n\n const selTransition = disabled ? selection :\n selection.transition()\n .duration(duration)\n .ease(easeFns[effect])\n .on('end', layer.registerAnimationDoneHook());\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 { layer, points, container, keyFn } = params;\n const graphicElems = layer._graphicElems;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) {\n graphicElems[d.rowId] = elem;\n transitionBars(layer, elem, d, i, params);\n }\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 { MeasureSubtype, DimensionSubtype } from 'muze-utils';\nimport { STACK } from '../../enums/constants';\nimport { positionPoints, getIndividualClassName, getColorMetaInf, resolveEncodingValues } from '../../helpers';\n\nconst positionRetriever = {\n x: (xPx, isNegativeVal, barBasePos) => (isNegativeVal ? [xPx, barBasePos] : [barBasePos, xPx]),\n y: (yPx, isNegativeVal, barBasePos) => (isNegativeVal ? [barBasePos, yPx] : [yPx, barBasePos])\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n *\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 === MeasureSubtype.CONTINUOUS || 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 minDomVal = axis.domain()[0];\n const barBasePos = minDomVal < 0 ? axis.getScaleValue(0) : axis.getScaleValue(minDomVal);\n pos = axis.getScaleValue(data[type]);\n let endPos = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n const isNegativeVal = data[type] < 0;\n if (transformType !== STACK) {\n [pos, endPos] = positionRetriever[type](pos, isNegativeVal, barBasePos);\n }\n space = Math.abs(pos - endPos);\n enter = barBasePos;\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 *\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 sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context.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\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\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 let color = colorAxis.getColor(d.color);\n\n const update = dimensions.update;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: update.x,\n y: update.y,\n width: update.width,\n height: update.height,\n color\n },\n data: d\n }, i, data, context);\n color = resolvedEncodings.color;\n const { x, y, width, height } = resolvedEncodings;\n const style = {\n fill: color\n };\n\n if (!isNaN(x) && !isNaN(y) && d.rowId !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update: {\n x,\n y,\n width,\n height\n },\n source: d.source,\n rowId: d.rowId,\n style,\n meta: getColorMetaInf(style, colorAxis)\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 getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n Scales,\n getNearestValue,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getPlotMeasurement, getValidTransformForAggFn } 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 rectangle marks. The mark type of this layer is ```bar```. This layer can be used\n * to create stacked or grouped bars, range bars, heatmap plots and also reference bands by using\n * the encoding properties.\n *\n * @public\n *\n * @class\n * @module BarLayer\n * @extends BaseLayer\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 *\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n *\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 *\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 *\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 && getObjProp(domain[d], 'length')) {\n if (encodingFieldInf[`${d}0Field`]) {\n domain[d] = domain[d].sort((a, b) => a - b);\n } else {\n domain[d][0] = Math.min(domain[d][0], 0);\n domain[d][1] = Math.max(0, domain[d][1]);\n }\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 normalizedDataArr = this._normalizedData;\n const transformedData = this._transformedData;\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 this._graphicElems = {};\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 layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d.source[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n *\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 resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\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 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 === MeasureSubtype.CONTINUOUS) {\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 value = getNearestValue(filterData, value);\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.source;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound.rowId);\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 hasPlotSpan () {\n return true;\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 interpolate: 'linear',\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n radius: {},\n radius0: {},\n angle: {},\n angle0: {},\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\n","import { selectElement, Symbols, pathInterpolators } from 'muze-utils';\n\nconst line = Symbols.line;\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, interpolate, layer } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n const graphicElems = layer._graphicElems;\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 graphicElems[d.rowId] = selection;\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 curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(e => e[0])\n .y(e => e[1]);\n d.className && selection.classed(d.className, true);\n selection.attr('d', linepath([[update.x, update.y], [x0, y0]]));\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 { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, positionPoints, getIndividualClassName,\n getColorMetaInf, resolveEncodingValues, toCartesianCoordinates } from '../../helpers';\n\nconst pointTranslators = {\n polar: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { radius: radiusAxis, angle: angleAxis, angle0: angle0Axis } = axes;\n const measurement = layerInst.measurement();\n\n const colorAxis = axes.color;\n const angleV = {};\n const angle0V = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const color = colorAxis.getColor(d.color);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const angles0 = angle0Axis.getScaleValue(d.angle0);\n !angle0V[d.angle0] && (angle0V[d.angle0] = 0);\n const { startAngle: startAngle0, endAngle: endAngle0 } = angles0[angle0V[d.angle0]++];\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angle = (startAngle + endAngle) / 2;\n const angle0 = (startAngle0 + endAngle0) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n radius,\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color,\n angle,\n angle0,\n startAngle,\n endAngle,\n startAngle0,\n endAngle0\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedVal.color\n };\n\n const point = {\n enter: {},\n update: {\n radius: resolvedVal.radius,\n radius0: resolvedVal.radius0,\n angle: resolvedVal.angle,\n angle0: resolvedVal.angle0\n },\n style,\n source: d.source,\n rowId: d.rowId,\n meta: getColorMetaInf(style, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n points = toCartesianCoordinates(positionPoints(layerInst, points), measurement, true);\n return points;\n },\n cartesian: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = layerInst.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 measurement = layerInst.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.source;\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 color = colorAxis.getColor(d.color);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedEncodings.color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y,\n x0: resolvedEncodings.x0,\n y0: resolvedEncodings.y0\n },\n style,\n source: row,\n rowId: d.rowId,\n meta: getColorMetaInf(style, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @staticg\n *\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n *\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, config) {\n return pointTranslators[this.coord()](data, config, this);\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","export 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 { 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. It also registers the definition of composite layers.\n *\n * @public\n *\n * @module LayerFactory\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, ...params) => {\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(...params);\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n getLayerClass: mark => factoryObj._layerRegistry[mark],\n /**\n * Registers a new composite layer definition in the layer factory.\n *\n * @public\n *\n * @param {string} layerType Mark type of the new composite layer.\n * @param {Array} layerDefs Layer definitions of the composite layer.\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 layerFactory from './layer-factory';\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 LAYER_TYPES from './enums/layer-types';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [LAYER_TYPES.AREA_LAYER]: AreaLayer,\n [LAYER_TYPES.ARC_LAYER]: ArcLayer,\n [LAYER_TYPES.LINE_LAYER]: LineLayer,\n [LAYER_TYPES.TEXT_LAYER]: TextLayer,\n [LAYER_TYPES.POINT_LAYER]: PointLayer,\n [LAYER_TYPES.TICK_LAYER]: TickLayer,\n [LAYER_TYPES.BAR_LAYER]: BarLayer,\n [LAYER_TYPES.BASE_LAYER]: BaseLayer\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\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 * @module\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 { 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","import {\n FieldType,\n getDependencyOrder,\n getObjProp,\n defaultValue,\n objectIterator,\n unionDomain,\n makeElement,\n DimensionSubtype,\n toArray,\n MeasureSubtype,\n getNearestValue\n} from 'muze-utils';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\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 (getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION && measures.length) {\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, namespaces) => {\n let instances = existingLayer;\n const dependencies = context._dependencies;\n const metaInf = context.metaInf();\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n toArray(instances).forEach((inst, i) => {\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: namespaces[i],\n parentNamespace: metaInf.namespace\n })\n .dependencies(dependencies)\n .store(context.store());\n });\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.coord(context.coord());\n instance.config(def);\n instance.valueParser(context.valueParser());\n instance.dataProps({\n timeDiffs: context._timeDiffs\n });\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 sanitizeLayerDef = (layerDefs) => {\n const sanitizedDefs = [];\n layerDefs.forEach((layerDef, i) => {\n const def = layerDef.def;\n const mark = layerDef.mark;\n if (!def) {\n const sConf = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n if (!sConf.name) {\n sConf.name = `${mark}-${i}`;\n }\n sanitizedDefs.push({\n mark: layerDef.mark,\n def: sConf\n });\n } else {\n if (!def.name) {\n def.name = `${mark}-${i}`;\n }\n sanitizedDefs.push(layerDef);\n }\n });\n return sanitizedDefs;\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) :\n (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 const axisArr = axes[key] || [];\n const axisIndex = axisInf[key] >= 0 ? axisInf[key] : axisArr.length - 1;\n axes[key] && (axesObj[key] = defaultValue(axes[key][axisIndex]));\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nconst { X, Y, RADIUS, ANGLE, ANGLE0, RADIUS0 } = ENCODING;\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, ANGLE, ANGLE0, RADIUS].forEach((type) => {\n let index;\n const specificField = getObjProp(encoding, type, 'field');\n const encodingField = type === RADIUS ? defaultValue(specificField, getObjProp(encoding, RADIUS0, 'field'))\n : getObjProp(encoding, type, 'field');\n const field = defaultValue(getObjProp(axis, type), encodingField);\n if (fields[type] && fields[type].length) {\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\nconst getValidDomain = (domain, domain1, encodingType, fieldType) => {\n if (encodingType === ANGLE || encodingType === ANGLE0) {\n return domain.concat(domain1.filter(d => domain.indexOf(d) === -1));\n }\n return unionDomain([domain, domain1], fieldType);\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 domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const field = getObjProp(axisFields, encodingType, axisIndex);\n !fieldDomain[encodingType] && (fieldDomain[encodingType] = {});\n const encodingDomain = fieldDomain[encodingType];\n if (field) {\n const fieldStr = `${field}`;\n encodingDomain[fieldStr] = encodingDomain[fieldStr] || [];\n encodingDomain[fieldStr] = getValidDomain(encodingDomain[fieldStr],\n domain[1], encodingType, fieldsConfig[field.getMembers()[0]].def.subtype);\n }\n return fieldDomain;\n }, domains);\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 const layerDepOrder = getDependencyOrder(context._layerDepOrder);\n const groups = {};\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n groups[layer.alias()] = {\n group,\n layer\n };\n }\n });\n\n const layerSeq = layerDepOrder.map(name => groups[name]);\n layerSeq.forEach((o) => {\n const layer = o.layer;\n const group = o.group;\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context._timeDiffs\n });\n layer.config().render !== false && layer.mount(group.node());\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].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\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 !== MeasureSubtype.CONTINUOUS && yFieldType !== MeasureSubtype.CONTINUOUS)) {\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 = getNearestValue(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 createRenderPromise = (unit) => {\n const renderedPromise = unit._renderedPromise;\n renderedPromise.then(() => {\n unit._renderedPromise = new Promise((resolve) => {\n unit._renderedResolve = resolve;\n });\n createRenderPromise(unit);\n });\n};\n\nexport const getRadiusRange = (width, height, config = {}) => {\n const {\n innerRadius,\n outerRadius\n } = config;\n\n return [innerRadius || 0, outerRadius || Math.min(height,\n width) / 2];\n};\n\nexport const setAxisRange = (context) => {\n const axes = context.axes();\n const { radius: radiusAxes } = axes;\n if (radiusAxes) {\n radiusAxes.forEach((axis) => {\n axis.range(getRadiusRange(context.width(), context.height()));\n });\n }\n};\n\nexport const isXandYMeasures = (context) => {\n const { x: xFields, y: yFields } = context.fields();\n const [xMeasures, yMeasures] = [xFields, yFields].map(fields => fields\n .every(field => field.type() === FieldType.MEASURE));\n return xMeasures && yMeasures;\n};\n\nconst getKey = (arr, row) => {\n let key = row[arr[0]];\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${row[arr[i]]}`;\n }\n return key;\n};\n\nexport const getValuesMap = (model, context) => {\n const valuesMap = {};\n const { data: dataArr, schema, uids } = model.getData();\n const fieldsConfig = model.getFieldsConfig();\n const fieldIndices = isXandYMeasures(context) ? schema.map((d, i) => i) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldsConfig[d].index);\n dataArr.forEach((row, i) => {\n const key = getKey(fieldIndices, row);\n valuesMap[key] = uids[i];\n });\n return valuesMap;\n};\n\nexport const getSelectionRejectionModel = (model, propModel, measures, propValuesMap) => {\n let rejectionModel;\n const { data, schema } = propModel.getData();\n const entryRowIds = [];\n const exitRowIds = [];\n\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n const rowIdsObj = {};\n const filteredSchema = measures ? schema.map((d, idx) => idx) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldMap[d].index);\n data.forEach((row) => {\n const key = getKey(filteredSchema, row);\n const id = propValuesMap[key];\n if (key in propValuesMap) {\n entryRowIds.push(id);\n rowIdsObj[id] = 1;\n }\n });\n rejectionModel = model.select((fields, i) => {\n if (!rowIdsObj[i]) {\n exitRowIds.push(i);\n return true;\n }\n return false;\n }, {\n saveChild: false\n });\n } else {\n rejectionModel = propModel;\n }\n\n return {\n model: [propModel, rejectionModel],\n entryRowIds,\n exitRowIds\n };\n};\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRID_LINE_PARENT_GROUP_CLASS = 'grid-lines';\nexport const GRID_BAND_PARENT_GROUP_CLASS = 'grid-bands';\nexport const GRID_PARENT_GROUP = 'grid-parent-group';\nexport const BAND = 'band';\nexport const TICK = 'tick';\nexport const GRID_BAND = 'gridBands';\nexport const GRID_LINE = 'gridLines';\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","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel, createSelection } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer';\nimport {\n GRID_BAND,\n GRID_LINE,\n GRID_BAND_PARENT_GROUP_CLASS,\n GRID_LINE_PARENT_GROUP_CLASS,\n GRID_PARENT_GROUP\n} from '../enums/constants';\n\nconst { BAR_LAYER, TICK_LAYER } = LAYER_TYPES;\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 === GRID_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 === GRID_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 === GRID_BAND) {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n const { color, shape, size } = context.axes();\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n name: orientation,\n calculateDomain: false,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== GRID_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 === GRID_BAND ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis,\n color: color[0],\n shape: shape[0],\n size: size[0]\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 axes = context.axes();\n if (!axes[axisType]) {\n return null;\n }\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, axes[axisType][0]));\n\n return show ? getLayerDefinition(context, axes, type, axisType) : null;\n}).filter(d => d !== null);\n\nconst dimensionSubTypes = Object.values(DimensionSubtype).reduce((acc, v) => {\n acc[v] = 1;\n return acc;\n}, {});\nconst getValidSubtype = subtype => (!dimensionSubTypes[subtype] ? DimensionSubtype.CATEGORICAL : subtype);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n\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: getValidSubtype(subtype)\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype: getValidSubtype(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) => {\n const vuConf = context.config();\n const metaInf = context.metaInf();\n const store = context.store();\n const timeDiffs = context._timeDiffs;\n [GRID_BAND, GRID_LINE].forEach((type) => {\n let mark;\n let config;\n if (type === GRID_BAND) {\n mark = BAR_LAYER;\n config = vuConf.gridBands;\n } else {\n mark = TICK_LAYER;\n config = vuConf.gridLines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n const sel = `_${type}Selection`;\n context[sel] = createSelection(context[sel], (atomicDef) => {\n const inst = layerFactory.getLayerInstance({ mark });\n inst.dependencies(context._dependencies);\n const name = atomicDef.definition.name;\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: `${metaInf.namespace}${type}${name}`,\n parentNamespace: metaInf.namespace\n })\n .store(store);\n return inst;\n }, definitions, atomicDef => atomicDef.definition.name);\n context[sel].each((layer, atomicDef) => {\n const definition = atomicDef.definition;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n const axesObj = atomicDef.axes;\n layer.config(sConf)\n .dataProps({\n timeDiffs\n })\n .axes(axesObj);\n });\n context[`_${type}`] = context[sel].getObjects();\n });\n};\n\nexport const attachDataToGridLineLayers = (context) => {\n const axes = context.axes();\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n if (gridLines.length || gridBands.length) {\n const gridLayerData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n [].concat(...gridBands, ...gridLines).forEach((inst) => {\n inst.data(inst.axes().x ? gridLayerData.x : gridLayerData.y);\n });\n }\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const config = context.config();\n const classPrefix = config.classPrefix;\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n const gridLineParentGroup = makeElement(container, 'g', [1], `${classPrefix}-${GRID_PARENT_GROUP}`);\n\n [[gridLines, `${classPrefix}-${GRID_LINE_PARENT_GROUP_CLASS}`],\n [gridBands, `${classPrefix}-${GRID_BAND_PARENT_GROUP_CLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(gridLineParentGroup, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.dataProps({ timeDiffs: context._timeDiffs })\n .measurement(measurement)\n .mount(group.node());\n }\n });\n });\n};\n","import { STATE_NAMESPACES, temporalFields, getObjProp, defaultValue } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers\n} from './helper';\n\nimport { createGridLineLayer } from './helper/grid-lines';\n\nconst removeExitLayers = (layerDefs, context) => {\n const layersMap = context._layersMap;\n const markSet = {};\n layerDefs.forEach((layerDef, i) => {\n const id = defaultValue(layerDef.name, `${layerDef.mark}-${i}`);\n markSet[id] = true;\n });\n\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};\n\nexport const calculateDomainListener = (context) => {\n const { namespace } = context.metaInf();\n const domain = unionDomainFromLayers(context.layers(), context.fields(), context._layerAxisIndex,\n context.data().getFieldsConfig());\n context.store().commit(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, domain, namespace);\n};\n\nexport const listenerMap = [\n {\n type: 'registerImmediateListener',\n props: [PROPS.LAYERDEFS],\n listener: (context, [, layerDefs]) => {\n const fieldsVal = context.fields();\n if (layerDefs && fieldsVal) {\n removeExitLayers(layerDefs, context);\n const queuedLayerDefs = context._queuedLayerDefs;\n let layerDefArr = layerDefs;\n queuedLayerDefs.forEach((defFn) => {\n layerDefArr = [...layerDefArr, ...defFn(layerDefs)];\n });\n context.addLayer(layerDefArr);\n const adjustRange = context.layers().some(inst => inst.hasPlotSpan());\n ['x', 'y'].forEach((type) => {\n const axisArr = defaultValue(getObjProp(context.axes(), type), []);\n axisArr.forEach((axis) => {\n axis.config({\n adjustRange\n });\n });\n });\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'initialized',\n formalName: 'layer'\n });\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA],\n listener: (context, [, dataModel]) => {\n if (dataModel) {\n const axesObj = context.axes();\n const timeDiffs = {};\n const timeDiffsByField = {};\n\n Object.entries(temporalFields(dataModel)).forEach(([fieldName, fieldObj]) => {\n timeDiffsByField[fieldName] = fieldObj.minimumConsecutiveDifference();\n });\n\n Object.entries(context.fields()).forEach(([type, [field]]) => {\n if (field) {\n const timeDiff = timeDiffsByField[`${field}`];\n if (timeDiff) {\n timeDiffs[type] = timeDiff;\n axesObj[type].forEach(axis => axis.minDiff(timeDiff));\n }\n }\n });\n\n context._timeDiffsByField = timeDiffsByField;\n context._timeDiffs = timeDiffs;\n const firebolt = context.firebolt();\n const originalData = context.cachedData()[0];\n firebolt.createSelectionSet(context.data().getUids());\n firebolt.attachPropagationListener(originalData);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: (context, [, config]) => {\n if (config) {\n context.firebolt().config(config.interaction);\n createGridLineLayer(context);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA, PROPS.TRANSFORM],\n listener: (context, [, dataModel], [, transform]) => {\n if (dataModel) {\n const dataModels = transformDataModels(transform, dataModel);\n const metaInf = context.metaInf();\n context.store().commit(`${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${PROPS.TRANSFORMEDDATA}`,\n dataModels, metaInf.namespace);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.TRANSFORMEDDATA, PROPS.LAYERS],\n listener: (context, [, transformedData], [, layers]) => {\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = context.axes();\n const dataModel = context.data();\n if (transformedData && layers && axesVal && layerAxisIndexVal) {\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModel, transformedData);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModel.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n }\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 TRANSFORM = 'transform';\nexport const TRANSFORMEDDATA = 'transformedData';\nexport const DATADOMAIN = 'dataDomain';\nexport const FIELDS = 'fields';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\nexport const LAYERS = 'layers';\nexport const DOMAIN = 'domain';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [CACHED_DATA]: {},\n detailFields: {},\n axes: {\n defaultValue: {\n x: [],\n y: []\n }\n },\n fields: {\n defaultValue: {\n x: [],\n y: []\n },\n sanitization: (context, value) => mergeRecursive({\n x: [],\n y: []\n }, value)\n },\n metaInf: {},\n registry: {},\n parentContainerInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {}\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 derivedSchema = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION,\n subtype: d.subtype()\n }));\n const dataAtFirstPos = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n derivedSchema.forEach((obj, i) => {\n tuple[obj.name] = dataAtFirstPos[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...derivedSchema]);\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, intersect } from 'muze-utils';\nimport { Firebolt, SIDE_EFFECTS } from '@chartshq/muze-firebolt';\nimport { isXandYMeasures, getSelectionRejectionModel } from '../helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\nconst sideEffectPolicy = (propPayload, context, propagationInf) => {\n const { sourceIdentifiers, propagationData } = propagationInf;\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig).filter(field =>\n fieldsConfig[field].def.type !== FieldType.MEASURE);\n const propFields = Object.keys(propagationData[0].getFieldsConfig());\n const hasCommonCanvas = propPayload.sourceCanvas === context.parentAlias();\n return intersect(sourceIdentifierFields, propFields).length || hasCommonCanvas;\n};\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 const {\n TOOLTIP,\n HIGHLIGHTER,\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS\n } = SIDE_EFFECTS;\n\n const disabledSideEffects = [TOOLTIP, HIGHLIGHTER, ANCHORS, BRUSH_ANCHORS, PERSISTENT_ANCHORS];\n disabledSideEffects.forEach((sideEffect) => {\n this.changeSideEffectStateOnPropagation(sideEffect, sideEffectPolicy, 'sourceTargetPolicy');\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 sideEffectCheckers = Object.values(sourceSideEffects[se.name || se] || {});\n const { sourceIdentifiers, data: propagationData } = propagationInf;\n return sideEffectCheckers.length ? sideEffectCheckers.every(checker =>\n checker(propagationInf.propPayload, context, {\n sourceIdentifiers,\n propagationData\n })) : 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 isMutableAction = false;\n const context = this.context;\n if (!context.mount()) {\n return;\n }\n const {\n model: propagationData,\n entryRowIds,\n exitRowIds\n } = getSelectionRejectionModel(context.data(), data, isXandYMeasures(context), context._cachedValuesMap());\n const {\n enabled: enabledFn,\n sourceIdentifiers,\n action,\n payload: propPayload\n } = config;\n\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n const payload = payloadFn(context, propagationData, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFns = Object.values(sourceBehaviours[action] || sourceBehaviours['*'] || {});\n let enabled = filterFns.every(fn => fn(propPayload || {}, context, {\n sourceIdentifiers,\n propagationData\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: propagationData,\n entryRowIds,\n exitRowIds,\n propPayload,\n sourceIdentifiers,\n persistent: false,\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 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 { SpawnableSideEffect } from '@chartshq/muze-firebolt';\n\nexport const initSideEffects = (sideEffects, firebolt) => {\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = firebolt.context;\n return context.getDrawingContext();\n });\n sideEffects[key].valueParser(firebolt.context.valueParser());\n }\n }\n};\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","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 minOuterRadius: 10,\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","import { mergeRecursive, DataModel } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props';\nimport { sanitizeLayerDef, getValuesMap } from './helper';\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 meta: {\n preset: layerDef => sanitizeLayerDef(layerDef)\n }\n },\n [TRANSFORM]: {\n value: null\n },\n [LAYERS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n preset: (data, context) => {\n context._cachedValuesMap = ((model) => {\n let valuesMap = null;\n return () => {\n if (valuesMap) {\n return valuesMap;\n }\n valuesMap = getValuesMap(model, context);\n return valuesMap;\n };\n })(data);\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.cachedData()[0];\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n },\n [TRANSFORMEDDATA]: {\n value: null\n },\n width: {\n value: null\n },\n height: {\n value: null\n }\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n makeElement,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n CommonProps,\n toArray,\n STATE_NAMESPACES\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 getLayerAxisIndex,\n sanitizeLayerDef,\n createSideEffectGroup,\n resolveEncodingTransform,\n createRenderPromise,\n setAxisRange\n} from './helper';\nimport { renderGridLineLayers, attachDataToGridLineLayers } from './helper/grid-lines';\nimport { calculateDomainListener, listenerMap } from './listener-map';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport { initSideEffects, dispatchQueuedSideEffects, clearActionHistory } from './firebolt/helper';\nimport './styles.scss';\nimport localOptions from './local-options';\nimport { WIDTH, HEIGHT } from './enums/reactive-props';\n\nconst FORMAL_NAME = 'unit';\nconst unitNs = [STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * Visual Unit is hierarchical component created by {@link VisualGroup}. This component accepts layer definitions\n * and creates concrete layer instances from them, binds data and attaches axis to them. It also retreives the domain\n * from the layers and unions them and sets them on corresponding axis instances. This also creates the parent svg\n * groups for all the layers and delegates the rendering to all the layers.\n *\n * @public\n * @module VisualUnit\n * @class\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit.\n *\n * @param {Object} registry Component registry\n * @param {Object} dependencies Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n createRenderPromise(this);\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridLinesSelection = null;\n this._gridBandsSelection = null;\n this._gridLines = [];\n this._gridBands = [];\n this._layerAxisIndex = {};\n this._queuedLayerDefs = [];\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.registry(registry);\n this.cachedData([]);\n }\n\n static formalName () {\n return FORMAL_NAME;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys((localOptions)).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getQualifiedStateProps () {\n const unitState = VisualUnit.getState();\n return unitState.map((state, i) => Object.keys(state).map(prop => `${unitNs[i]}.${prop}`));\n }\n\n static getListeners () {\n return {\n store: [...listenerMap.map((d) => {\n const o = Object.assign({}, d);\n const localNs = unitNs[1];\n o.props = o.props.map(prop => `${localNs}.${prop}`);\n return o;\n }), {\n type: 'registerImmediateListener',\n props: [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`],\n listener: calculateDomainListener\n }, {\n type: 'registerImmediateListener',\n props: [`${unitNs[1]}.${WIDTH}`,\n `${unitNs[1]}.${HEIGHT}`,\n ...['x', 'y'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context, [, width], [, height]) => {\n if (width && height) {\n attachDataToGridLineLayers(context);\n }\n },\n subNamespace: (context) => {\n const { rowIndex, colIndex, namespace } = context.metaInf();\n return {\n [`${unitNs[1]}.${WIDTH}`]: namespace,\n [`${unitNs[1]}.${HEIGHT}`]: namespace,\n [`${groupNs}.domain.x`]: `${colIndex}0`,\n [`${groupNs}.domain.y`]: `${rowIndex}0`\n };\n }\n }],\n throwback: [\n {\n type: 'registerChangeListener',\n props: [CommonProps.ON_LAYER_DRAW],\n listener: (context, [, drawn]) => {\n if (drawn) {\n const firebolt = context.firebolt();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n context._renderedResolve();\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'drawn',\n formalName: 'layer'\n });\n }\n }\n ]\n };\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { throwback, fireboltDeps } = this._dependencies;\n const { namespace } = this.metaInf();\n\n store.addSubNamespace(namespace, FORMAL_NAME, this);\n throwback.addSubNamespace(namespace, FORMAL_NAME, this);\n transactor(this, localOptions, store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}`\n });\n\n this.firebolt(new UnitFireBolt(this, {\n physical: Object.assign({}, physicalActions, fireboltDeps.physicalActions),\n behavioural: Object.assign({}, behaviouralActions, fireboltDeps.behaviouralActions),\n physicalBehaviouralMap: actionBehaviourMap\n }, Object.assign({}, sideEffects, fireboltDeps.sideEffects), behaviourEffectMap));\n return this;\n }\n return this._store;\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 * Returns the instance of firebolt associated with this visual unit. Firebolt dispatches the behavioural actions\n * when any physical action happens on the elements of visual unit.\n *\n * @public\n *\n * @return {Firebolt} Instance of firebolt.\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 * Returns the unique id of this visual unit.\n *\n * @public\n * @return {string} Unique identifier.\n */\n id () {\n return this._id;\n }\n\n lockModel () {\n this.store().lockModel();\n return this;\n }\n\n unlockModel () {\n this.store().unlockModel();\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 *\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\n setAxisRange(this);\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n const firebolt = this.firebolt();\n initSideEffects(firebolt.sideEffects(), firebolt);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Caches all the datamodels in an array from the next `data()` call on visual unit until `clearCaching()` or\n * `resetData()` is called on it.\n *\n * @public\n * @return {VisualUnit} Instance of visual unit.\n */\n\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n * Clears all the previous cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n * Returns the drawing information from visual unit.Drawing context contains the dimensions of unit and the svg\n * container of the visual unit.\n *\n * @public\n *\n * @return {Object} Drawing information.\n * ```\n * {\n * htmlContainer: // Html container of svg container of the visual unit\n * svgContainer: // Root svg container\n * width: // Width of the visual unit\n * height: // Height of the visual unit\n * sideEffectGroup: // Svg group for drawing side effect elements.\n * parentContainer: // Parent html container of the visual unit.\n * xOffset: // x offset space from the starting x position of the container,\n * yOffset: // y offset space from the starting y position of the container\n * }\n * ```\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n const { el, dimensions } = this.parentContainerInf();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: el,\n parentContainerDimensions: dimensions,\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n *\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.axes().map(axis => axis.serialize())\n };\n }\n\n mount (...mount) {\n if (mount.length) {\n this._mount = mount[0];\n this.render(mount[0]);\n this.firebolt().mapActionsAndBehaviour();\n return this;\n }\n return this._mount;\n }\n\n /**\n * Adds a new layer to the visual unit. It takes a layer definition and creates layer instances from them. It does\n * not render the layers. It returns the layer instances in an array. If the layer definition is a composite layer,\n * then multiple layer instances will be returned in the array.\n *\n * To add a layer in the unit,\n * ```\n * unit.addLayer({\n * name: 'bullet',\n * mark: 'bar',\n * encoding: {\n * x: 'Year',\n * y: 'Acceleration',\n * color: 'Origin'\n * }\n * });\n * ```\n * @public\n * @param {Object} layerDef Definition of new layer.\n *\n * @return {Array} Array of layer instances.\n */\n addLayer (layerDefinition) {\n if (layerDefinition instanceof Function) {\n this._queuedLayerDefs.push(layerDefinition);\n return this;\n }\n const layerDefinitions = sanitizeLayerDef(toArray(layerDefinition));\n\n const layersMap = this._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: this\n }\n };\n let layerIndex = 0;\n const metaInf = this.metaInf();\n const layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef) => {\n const definition = layerDef.def;\n const markId = definition.name;\n const defArr = toArray(definition);\n const namespaces = [];\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n const namespace = `${metaInf.namespace}-${def.mark}-${getUniqueId()}`;\n namespaces.push(namespace);\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(this, definition, layersMap[markId], namespaces);\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\n store.unit = this;\n const layerdeps = {};\n const layersArr = [].concat(...Object.values(this._layersMap));\n layersArr.forEach((layer) => {\n const alias = layer.alias();\n store.layers[alias] = layer;\n layerdeps[alias] = [];\n });\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n this._layerDepOrder = layerdeps;\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, getLayerAxisIndex(layers, this.fields()));\n this.layers(layersArr);\n return layers;\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n remove () {\n const formalName = this.constructor.formalName();\n const { lifeCycleManager, throwback } = this._dependencies;\n const { namespace } = this.metaInf();\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n const layers = this.layers();\n this.store().removeSubNamespace(namespace, formalName);\n throwback.removeSubNamespace(namespace, FORMAL_NAME);\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: layers, action: 'beforeremove', formalName: 'layer' });\n [...layers, ...this._gridLines, ...this._gridBands].forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: 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 *\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 * Resets the data of visual unit to original data model. It also clears the cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n *\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 getDataDomain () {\n return this.store().get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`, this.metaInf().namespace);\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n * Returns an array of layer instances which matches the supplied mark type.\n *\n * @public\n *\n * @param {string} type Mark type of layer.\n *\n * @return {Array} Array of layer instances.\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n * Returns the layer instance which matches the supplied layer name. If no layer is found, then it returns\n * undefined.\n *\n * @public\n * @param {string} name Name of layer.\n *\n * @return {VisualUnit} Layer instance.\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n * Returns the point located nearest to the supplied x and y position. It returns the unique identifiers of the\n * point. This function also accepts an additional configuration `getAllPoints` inside `config` object in the third\n * argument which if set to true, then it returns the identifiers of all the points which falls on the nearest\n * x value or y value if any one of the field is a dimension. Additionally, a target property is also returned\n * which contains the identifier of the nearest point. If no nearest point is found, then it returns identifier\n * as null.\n *\n * @public\n *\n * @param {number} x X Position of the point from where nearest point is to be found.\n * @param {number} y Y Position of the point from where nearest point is to be found.\n * @param {Object} config Additional configuration options.\n * @param {boolean} config.getAllPoints If true, then returns all the points nearest to the x value or y value if\n * it is dimension.\n * @param {Object} config.data Data associated with the nearest point.\n * @return {Object} Nearest point information\n * ```\n * {\n * id: [['Origin'], ['USA'], ['Japan']], // Identifiers of all the points closest to the x value.\n * target: [['Origin'], ['Japan']] // Identifier of the nearest point.\n * }\n * ```\n */\n getNearestPoint (x, y, config) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && config.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, config);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, config) || { 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 * Get the information of all the marks such as x, y position and size from supplied identifiers. It\n * returns an array of points whose data matches the given identifiers.\n *\n * @public\n *\n * @param {Array|Object} identifiers Field names and their corresponding values.\n * ```\n * identifiers can be given in an array of array,\n * ['Origin', 'Name'], // Names of the fields supplied in first array\n * ['USA', 'ford'], // Data values of each field supplied in rest of the arrays.\n * ['Japan', 'ford']\n * or in an object,\n * {\n * Origin: ['USA']\n * }\n * ```\n * @param {Object} config Optional configurations which decides which information of the mark will\n * be retrieved.\n * @param {boolean} [config.getAllAttrs = false] If true, then returns all the information of each mark.\n * @param {boolean} [config.getBBox = false] If true, then returns the bounding box of each mark.\n *\n * @return {Array} Array of objects containing the information of each point.\n * ```\n * By default, the method returns the array of points in this structure,\n * [\n * {\n * x: 20,\n * y: 100,\n * width: 200,\n * height: 100\n * }\n * ]\n * If 'config.getAllAttrs' is true, then it returns all the information of each mark,\n * [\n * // Positions of mark on initial state of transition.\n * enter: {\n * x: 0,\n * y: 0\n * },\n * // Final positions of the mark\n * update: {\n * x: 20,\n * y: 10\n * },\n * style: // css styles of each mark\n * source: [200, 'USA'] // Row information of each mark\n * id: 20 // Row id of each mark\n * ]\n * ```\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 * Removes the layer instance which matches the supplied layer name.\n *\n * @public\n * @param {string} name Name of layer\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n * Removes all the layer instances which matches the supplied mark type.\n *\n * @public\n * @param {string} type Mark type of layer.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n}\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 * This is a wrapper on top of multiple variables which are of same type but they are shown in the same axis.This is\n * required in case of range plots or ohlc plots where one plot is mapped to multiple measure fields. At that time,\n * we need to create a composed variable from multiple variables. This class just wraps them into one variable instance\n * and provides methods to get the type and other common functionalities which can be performed on a simple variable\n * instance.\n *\n * @public\n * @class ComposeVars\n */\nclass ComposedVars extends Variable {\n\n /**\n * Creates an instance of ComposeVars.\n *\n * @param {Array} vars Array of SimpleVars.\n */\n constructor (...vars) {\n super();\n this.vars(vars);\n }\n\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n * Get all the field names from composed variable instance.\n *\n * @public\n * @return {Array} Array of field names.\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n * Type of field associated with this composed variable.\n *\n * @return {string} Type of variable (Measure/Dimension).\n */\n type () {\n return this.vars()[0].type();\n }\n\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n * Returns the number formatter function of the variable.\n *\n * @return {Function} Number formatter function of the variable.\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n format (values) {\n return this.vars()[0].format(values);\n }\n\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.vars()[0]].def;\n }\n\n /**\n * Returns the subtype of the fields associated with this variable instance.\n *\n * @public\n * @return {string} Subtype of the variable.\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n * Returns the consecutive minimum difference of the field values.\n *\n * @public\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n\n /**\n * Returns the display name of the fields.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return this.vars().map(d => d.displayName()).join(',');\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter, retrieveFieldDisplayName, DimensionSubtype } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n * This is a wrapper on top of fields passed in rows or columns in canvas. This is used to get the type of field or\n * get min difference from the field values.\n *\n * @public\n * @class SimpleVariable\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n * Creates an instance of simple variable instance.\n *\n * @param {string} name Field name.\n */\n constructor (name) {\n super();\n this.oneVar(name);\n }\n\n /**\n * Gets the field name associated with this variable instance.\n *\n * @public\n * @return {string} Name of the field.\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n toString () {\n return this.oneVar();\n }\n\n /**\n * Gets the number formatter function of this variable.\n *\n * @public\n * @return {Function} Number formatter function.\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()];\n return formatter.numberFormat();\n } return val => val;\n }\n\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n * Returns a formatter function which transforms the input value to its original form.\n *\n * @public\n * @return {Function} Returns raw formatter function.\n */\n rawFormat () {\n if (this.subtype() === DimensionSubtype.TEMPORAL) {\n const dateFormat = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n return val => DateTimeFormatter.formatAs(val, dateFormat);\n }\n return val => val;\n }\n\n /**\n * Return the field names associated with this variable instance.\n *\n * @public\n * @return {Array} Array of fields.\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n * Returns the type of the variable. Whether it is measure or dimension.\n *\n * @public\n * @return {string} Type of variable.\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n * Returns the subtype of the variable. Subtype can be categorical or temporal. If no subtype is found, then it\n * returns the type of the variable.\n *\n * @public\n * @return {string} Subtype of variable.\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n * Returns the minimum consecutive difference between the data values of this variable.\n *\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].minimumConsecutiveDifference();\n }\n\n /**\n * Returns true if two variable instances are same.If both variable has the same field names, they are equal.\n *\n * @return {Boolean} Whether two variable instances are same.\n */\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n\n /**\n * Returns the display name of the field.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return retrieveFieldDisplayName(this.data(), this.oneVar());\n }\n\n /**\n * Returns the schema defination of the field.\n *\n * @return {Object} schema def\n */\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.oneVar()].def;\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 *\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 *\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 *\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 *\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 *\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 *\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 temporal: ScaleType.TIME,\n measure: ScaleType.LINEAR,\n continuous: ScaleType.LINEAR\n};\n","import { mergeRecursive, getObjProp } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { ENCODING } from '@chartshq/visual-layer';\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, COLOR, SHAPE, SIZE, ANGLE0 } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst getAxisConfig = (axisInfo, field, axesCreators, indices, facetFields) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const { rowIndex, columnIndex } = indices;\n const rawUserAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n\n // Change config object to a function if not already one\n const userAxisConfigFn = typeof rawUserAxisConfig !== 'function' ?\n () => rawUserAxisConfig : rawUserAxisConfig;\n const userAxisConfig = userAxisConfigFn(rowIndex, columnIndex, {\n axisFields: field.getMembers(),\n facetFields\n });\n\n // If current config does not specifes config for an axis, retain old config\n if (!userAxisConfig) {\n return {};\n }\n\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.displayName(),\n field: field.toString(),\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n showAxisName: true,\n show: true,\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 *\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\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 [min[0], max[0]],\n [min[1], max[1]]\n ];\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n *\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo, indices, facetFields) => {\n let axisKey;\n const { groupAxes, valueParser } = axesInfo;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n const commonAxisKey = getAxisKey(axisType, index);\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators, indices, facetFields);\n\n let axis;\n if (!map.has(axisKey)) {\n axis = createSimpleAxis(axisConfig, field, axesCreators);\n } else {\n axis = map.get(axisKey);\n axis._rotationLock = false;\n axis.config(axisConfig);\n }\n axis.valueParser(valueParser);\n currentAxes.push(axis);\n map.set(axisKey, axis);\n });\n\n if (currentAxes.length) {\n map.set(commonAxisKey, currentAxes);\n groupAxes.add(commonAxisKey);\n }\n\n return currentAxes;\n};\n\nexport const sanitizeIndividualLayerConfig = (encodingConfigs, def) => {\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\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 }\n });\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 *\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 *\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 *\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\nexport const resolveAxisConfig = (context, fieldInf, axisInfo) => {\n const { rowIndex, columnIndex, axesObj } = axisInfo;\n const { config, facetFields, resolver } = context;\n const resolverAxes = resolver.axes();\n const { RADIUS, ANGLE } = ENCODING;\n [RADIUS, ANGLE, ANGLE0].forEach((enc) => {\n const axesArr = resolverAxes[enc];\n if (!axesArr[rowIndex]) {\n axesArr[rowIndex] = [];\n }\n axesArr[rowIndex][columnIndex] = axesObj[enc];\n const axisConfig = getObjProp(config.axes, enc) || {};\n\n axesObj[enc].forEach((axis, i) => {\n let userConfig = axisConfig;\n if (axisConfig instanceof Function) {\n userConfig = axisConfig(rowIndex, columnIndex, {\n axisFields: [fieldInf[enc][i]],\n facetFields\n });\n }\n axis.config(userConfig);\n });\n });\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n unionDomain,\n COORD_TYPES,\n toArray,\n sortCategoricalField\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport {\n generateAxisFromMap,\n getDefaultMark,\n getIndex,\n getLayerConfFromFields,\n getAdjustedDomain,\n sanitizeIndividualLayerConfig\n} from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\nconst CARTESIAN = COORD_TYPES.CARTESIAN;\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n *\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\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 { resolver, facetFields, geomCell } = context;\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, {\n groupAxes: axis === X ? xAxes : yAxes,\n valueParser: resolver.valueParser()\n }, indices, facetFields);\n });\n geomCell.axes(geomCellAxes);\n return geomCellAxes;\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const resolver = context.resolver();\n const units = resolver.units();\n const domains = {\n 0: {},\n 1: {}\n };\n const config = context.config();\n const fieldsObj = {\n 0: {},\n 1: {}\n };\n\n for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) {\n const unitsArr = units[rIdx];\n for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) {\n const unit = unitsArr[cIdx];\n const axisFields = unit.fields();\n const encodingDomains = unit.getDataDomain();\n ['x', 'y'].forEach((axisType, axisTypeIndex) => {\n const fieldArr = axisFields[axisType];\n fieldArr.forEach((field, axisIndex) => {\n const key = !axisTypeIndex ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`;\n const dom = encodingDomains[axisType];\n const typeOfField = field.subtype();\n fieldsObj[axisTypeIndex][key] = field;\n\n if (dom && Object.keys(dom).length !== 0) {\n domains[axisTypeIndex][key] = unionDomain([(domains[axisTypeIndex] &&\n domains[axisTypeIndex][key]) || [], dom[`${field}`]], typeOfField);\n }\n });\n });\n }\n }\n\n const { x: xAxes, y: yAxes } = resolver.axes();\n store.lockModel();\n [xAxes, yAxes].forEach((axesArr, axisType) => {\n axesArr.forEach((axes, idx) => {\n let key;\n let domain = [];\n let adjustedDomain = [];\n const min = [];\n const max = [];\n const typeOfAxis = axes[0].constructor.type();\n\n if (axes.length > 1 && typeOfAxis === ScaleType.LINEAR && axes[0].config().alignZeroLine) {\n axes.forEach((axis, i) => {\n key = !axisType ? `0${idx}${i}` : `${idx}0${i}`;\n domain = domains[axisType][key];\n min[i] = domain[0];\n max[i] = domain[1];\n });\n adjustedDomain = getAdjustedDomain(max, min);\n } else if (typeOfAxis === ScaleType.BAND) {\n /* Sort categorical fields to ensure consistency across all rows\n only if sorted by user */\n key = !axisType ? `0${idx}0` : `${idx}00`;\n const currentFieldName = fieldsObj[axisType][key].oneVar();\n const sortingOrder = config.sort && config.sort[currentFieldName];\n\n if (sortingOrder) {\n domains[axisType][key].sort((a, b) => sortCategoricalField(sortingOrder, a, b));\n }\n }\n\n axes.forEach((axis, index) => {\n key = !axisType ? `0${idx}${index}` : `${idx}0${index}`;\n domain = adjustedDomain[index] || domains[axisType][key];\n\n domain && axis.domain(domain);\n const type = !axisType ? 'x' : 'y';\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}`, domain, `${idx}${index}`);\n });\n });\n });\n store.unlockModel();\n }\n\n /**\n *\n *\n * @param {*} fields\n *\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 *\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n *\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 sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\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 this.sanitizeLayerConfig(retinalConfig, layerConfig);\n }\n}\n","import { AngleAxis, RadiusAxis } from '@chartshq/muze-axis';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n GROUP_BY_FUNCTIONS,\n COORD_TYPES,\n toArray,\n getObjProp,\n defaultValue\n} from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { SIZE, MEASURE, ARC, COLOR } from '../enums/constants';\nimport { sanitizeIndividualLayerConfig, resolveAxisConfig } from './encoder-helper';\nimport { SimpleVariable } from '../variable';\n\nconst POLAR = COORD_TYPES.POLAR;\nconst { RADIUS, ANGLE, ANGLE0 } = ENCODING;\n\nconst axesCls = {\n [RADIUS]: RadiusAxis,\n [ANGLE]: AngleAxis,\n [ANGLE0]: AngleAxis\n};\n\nconst getSizeMultiplier = (sizeVal, sizeAxis) => {\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n return sizeMultiplier;\n};\n\nconst setRadiusFactor = (context) => {\n const data = context.data();\n const sizeField = context.retinalFields().size.field;\n const { radius, size } = context.axes();\n\n if (sizeField && radius && radius.length) {\n const sizeFieldIndex = data.getFieldsConfig()[sizeField].index;\n const sizeVal = data.getData().data.reduce((acc, val) => acc + val[sizeFieldIndex], 1);\n const sizeMultiplier = getSizeMultiplier(sizeVal, size[0]);\n radius.forEach(axis => axis.setRadiusFactor(sizeMultiplier));\n }\n};\n\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 *\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\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 const axesObj = {};\n const { geomCell, resolver } = context;\n const layers = resolver.matrixLayers();\n const resolverAxes = resolver.axes();\n const cellLayers = layers[rowIndex][columnIndex];\n const fields = {\n radius: {},\n angle: {},\n angle0: {}\n };\n\n cellLayers.forEach((layerConf) => {\n const def = layerConf.def;\n [ANGLE, ANGLE0, RADIUS].forEach((enc) => {\n const field = getObjProp(def.encoding, enc, 'field');\n field && (fields[enc][field] = 0);\n });\n });\n const fieldInf = {};\n const varInstances = {};\n\n for (const encType in fields) {\n fieldInf[encType] = Object.keys(fields[encType]);\n axesObj[encType] = [];\n varInstances[encType] = [];\n fieldInf[encType].forEach((field, i) => {\n varInstances[encType][i] = new SimpleVariable(field);\n axesObj[encType][i] = new axesCls[encType]();\n });\n axesObj[encType][axesObj[encType].length] = new axesCls[encType]();\n }\n resolveAxisConfig(context, fieldInf, {\n axesObj,\n rowIndex,\n columnIndex\n });\n geomCell.axes(axesObj)\n .fields(Object.assign({}, varInstances, geomCell.fields()));\n resolverAxes.pie = pieAxes;\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n *\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 unionUnitDomains (context) {\n const store = context.store();\n store.lockModel();\n const domainProps = {\n radius: [],\n angle: [],\n angle0: []\n };\n const axes = context.resolver().axes();\n context.matrixInstance().value.each((cell, rIdx, cIdx) => {\n const unit = cell.valueOf();\n const unitDomains = unit.getDataDomain();\n const fields = unit.fields();\n setRadiusFactor(unit);\n [RADIUS, ANGLE, ANGLE0].forEach((encType) => {\n const encodingFields = fields[encType];\n const domains = unitDomains[encType] || {};\n encodingFields.forEach((field, i) => {\n !domainProps[encType][rIdx] && (domainProps[encType][rIdx] = []);\n !domainProps[encType][rIdx][cIdx] && (domainProps[encType][rIdx][cIdx] = []);\n domainProps[encType][rIdx][cIdx][i] = domains[`${field}`] || [];\n });\n });\n });\n\n for (const key in domainProps) {\n const specificAxes = axes[key];\n specificAxes.forEach((axesArr, rIdx) => {\n axesArr.forEach((axisArr, cIdx) => {\n axisArr.forEach((axis, i) => {\n axis.domain(defaultValue(getObjProp(domainProps[key], rIdx, cIdx, i), []));\n\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${key}`, domainProps[key],\n `${rIdx}-${cIdx}`);\n });\n });\n });\n }\n store.unlockModel();\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n *\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.groupedModel;\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]: GROUP_BY_FUNCTIONS.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 *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\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 const sanitizedConfig = this.sanitizeLayerConfig(retinalConfig, layerConfig);\n this.layers(sanitizedConfig);\n return sanitizedConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n *\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 sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n def.forEach((conf) => {\n const encoding = conf.encoding || (conf.encoding = {});\n !encoding.angle && (encoding.angle = {});\n const angleField = getObjProp(encoding.angle, 'field');\n const angle0Field = getObjProp(encoding.angle0, 'field');\n if (!angleField) {\n Object.assign(encoding.angle, {\n field: encodingConfigs.color && encodingConfigs.color.field\n });\n }\n if (!angle0Field) {\n !encoding.angle0 && (encoding.angle0 = {});\n Object.assign(encoding.angle0, {\n field: encoding.angle.field\n });\n }\n });\n\n layerConfig.push(config);\n });\n return layerConfig;\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 *\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 *\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} context\n *\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, FieldType, COORD_TYPES, getObjProp, DataModel } from 'muze-utils';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\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 ARC,\n RADIUS,\n ANGLE\n} from '../enums/constants';\n\nconst POLAR = COORD_TYPES.POLAR;\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, ...params) => `${axisName}-axis-${params.join('-')}`;\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 *\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 *\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 *\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager }) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({\n type: HEADER,\n className: `${classPrefix}-grid-headers`\n }, {\n 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 *\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 *\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d.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\nconst hasPolarEncodings = layerConf => layerConf.mark === ARC || [RADIUS, ANGLE].some(field =>\n getObjProp(layerConf.encoding, field));\n\n/**\n *\n *\n * @param {*} layers\n *\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers.length) {\n // Figuring out the kind of layers the group will have\n encoder = layers.some(layerConf => hasPolarEncodings(layerConf)) ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n *\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 *\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\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/**\n * This method sorts the facets fields inplace if field is of categorical type\n * @param {Object} facets Array of facets\n * @param {Array} keys Array of the facet field values\n * @param {Object} config configuration object\n * @return {Array} Returns sorted facets\n */\nexport const sortFacetFields = (facets, keys, config) => {\n /**\n * Check if the facet sorted by the user is plotted\n * If an incorrect field is sorted, return the keys as is\n */\n const schema = [];\n const facetNames = [];\n const sortInfo = [];\n const sortConfig = config.sort;\n\n facets.forEach((facet) => {\n const name = `${facet}`;\n const facetSortConfig = sortConfig[name];\n\n if (facetSortConfig) {\n sortInfo.push([name, facetSortConfig]);\n } else {\n sortInfo.push([name, null]);\n }\n schema.push(facet.getSchemaDef());\n });\n\n return new DataModel([facetNames, ...keys], schema).getData({ sort: sortInfo }).data;\n};\n\nexport const removeExitCells = (resolver) => {\n const exitCells = resolver.cacheMaps().exitCellMap;\n const store = resolver.store();\n const qualifiedStateProps = [].concat(...VisualUnit.getQualifiedStateProps(),\n ...BaseLayer.getQualifiedStateProps());\n store.lockCommits(qualifiedStateProps);\n exitCells.forEach((placeholder) => {\n placeholder.remove();\n });\n store.unlockCommits(qualifiedStateProps);\n};\n","import { DataModel } from 'muze-utils';\nimport { sortFacetFields } from './group-utils';\n\n/**\n* Gets name of fields form the variables\n*\n* @param {*} fields1\n* @param {*} [fields2=[]]\n*\n*/\nconst getFieldNames = fieldVar => fieldVar.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []);\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareProjectionInfo = (fieldInfo) => {\n const {\n colProjections,\n rowProjections\n } = fieldInfo;\n const uniqueFields = [];\n let indices = [];\n let projections = [];\n\n rowProjections.forEach((rowProj, rIndex) => {\n const newRIndex = rIndex;\n colProjections.forEach((colProj, cIndex) => {\n const newCIndex = cIndex;\n const newRowProj = getFieldNames(rowProj);\n const newColProj = getFieldNames(colProj);\n\n uniqueFields.push([...newRowProj, ...newColProj]);\n indices.push({ rowIndex: newRIndex, colIndex: newCIndex });\n projections.push({ rowFields: rowProj, columnFields: colProj });\n });\n });\n indices = indices.length ? indices : [{ rowIndex: 0, colIndex: 0 }];\n projections = projections.length ? projections : [{ rowFields: [], columnFields: [] }];\n return { uniqueFields, indices, projections };\n};\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareFacetInfo = (fieldInfo) => {\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const rowFacetNames = getFieldNames(rowFacets);\n const colFacetNames = getFieldNames(colFacets);\n const allFacets = [...rowFacetNames, ...colFacetNames];\n\n return { rowFacetNames, colFacetNames, allFacets, rowFacets, colFacets };\n};\n\n/**\n*\n*\n* @param {*} context\n* @param {*} facetNames\n* @param {*} hashMap\n* @param {*} keys\n* @param {*} index\n* @returns\n*/\nconst prepareHashMaps = (context, facetNames, hashMap, keys, index) => {\n const rowKey = [];\n facetNames.forEach((name) => {\n const key = context._derivation[context._derivation.length - 1].meta.keys[name];\n\n rowKey.push(key);\n });\n\n const joinedRowKey = rowKey.join(',');\n\n if (hashMap[joinedRowKey] === undefined) {\n hashMap[joinedRowKey] = index++;\n keys.push(rowKey);\n }\n return rowKey;\n};\n\nconst createJoinedKeys = keys => keys.map(e => ({\n keyArr: e,\n joinedKey: e.join(',')\n}));\n\n/**\n*\n*\n* @param {*} splitModels\n* @param {*} facetInfo\n* @returns\n*/\nconst getSplitModelHashMap = (splitModels, facetInfo, config) => {\n const {\n rowFacetNames,\n colFacetNames,\n rowFacets,\n colFacets\n } = facetInfo;\n\n const rowKeyHashMap = {};\n const colKeyHashMap = {};\n\n const rowKeys = [];\n const colKeys = [];\n const rowIndex = 0;\n\n const splitModelsHashMap = {};\n\n splitModels.forEach((splitContext) => {\n const rowKey = prepareHashMaps(splitContext, rowFacetNames, rowKeyHashMap, rowKeys, rowIndex);\n const colKey = prepareHashMaps(splitContext, colFacetNames, colKeyHashMap, colKeys, 1);\n\n splitModelsHashMap[`${rowKey}-${colKey}`] = splitContext;\n });\n\n return {\n splitModelsHashMap,\n rowKeys: createJoinedKeys(sortFacetFields(rowFacets, rowKeys, config)),\n colKeys: createJoinedKeys(sortFacetFields(colFacets, colKeys, config))\n };\n};\n\n/**\n * Formats row or columns keys with the provided formatter.\n *\n * @param {Array} keys - The collection of row or column keys.\n * @param {Array} formatterList - The list of corresponding formatter.\n */\nconst formatKeys = (keys, formatterList) => {\n const formattedKeys = [];\n keys.forEach((rKeys, rIdx) => {\n formattedKeys[rIdx] = [];\n rKeys.forEach((key, idx) => {\n formattedKeys[rIdx][idx] = formatterList[idx](key);\n });\n });\n return formattedKeys;\n};\n\n/**\n*\n*\n* @param {Object} context\n* @param {Object} fieldInfo\n* @returns\n*/\nconst splitByColumn = (context, optionalProjections) => {\n const {\n matrix,\n dataModel,\n rowIndex,\n colIndex,\n facetInfo,\n projectionInfo,\n geomCellCreator\n } = context;\n const {\n indices,\n uniqueFields,\n projections\n } = projectionInfo;\n\n const commonFields = optionalProjections;\n\n dataModel.splitByColumn(uniqueFields, commonFields).forEach((model, i) => {\n let { rowIndex: row, colIndex: col } = indices[i];\n row += rowIndex;\n col += colIndex;\n\n matrix[row] = matrix[row] || [];\n\n const projectionIndexObject = {\n indices: {\n rowIndex: row,\n columnIndex: col\n },\n projections: projections[i]\n };\n\n matrix[row][col] = geomCellCreator(model, projectionIndexObject, facetInfo);\n });\n const lastIndex = indices[indices.length - 1];\n\n return {\n rowIndex: lastIndex.rowIndex + rowIndex,\n colIndex: lastIndex.colIndex + colIndex\n };\n};\n\nconst createColumnDataModels = (colContext, fieldInfo, sourceDM) => {\n let context = {};\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n const {\n rowKeyArr,\n rowKey,\n colKeyObj,\n newRowIndex,\n splitModelsHashMap,\n currentColumnIndex\n } = colContext;\n\n const { keyArr: colKeyArr, joinedKey: colKey } = colKeyObj;\n const hashMapKey = splitModelsHashMap[`${rowKey}-${colKey}`];\n\n if (hashMapKey) {\n context = { dataModel: hashMapKey };\n } else {\n const emptyDm = new DataModel([], sourceDM.getData().schema);\n context = { dataModel: emptyDm };\n }\n\n context = {\n ...context,\n ...colContext,\n facetInfo: {\n rowFacets: [rowFacets, rowKeyArr],\n colFacets: [colFacets, colKeyArr]\n },\n rowIndex: newRowIndex,\n colIndex: currentColumnIndex\n };\n const dataModels = splitByColumn(context, fieldInfo.optionalProjections);\n\n return {\n columnIndex: dataModels.colIndex + 1,\n rowIndex: dataModels.rowIndex\n };\n};\n\nconst createRowDataModels = (rowContext, fieldInfo, sourceDM) => {\n let currentColumnIndex = 0;\n let rowIndexForCurrentKey = 0;\n const {\n colKeys,\n rowKeyObj,\n currentRowIndex\n } = rowContext;\n const newRowIndex = currentRowIndex;\n const { keyArr: rowKeyArr, joinedKey: rowKey } = rowKeyObj;\n const colContext = {\n ...rowContext,\n rowKeyArr,\n rowKey,\n newRowIndex\n };\n rowIndexForCurrentKey = currentRowIndex;\n if (colKeys.length) {\n colKeys.forEach((colKeyObj) => {\n colContext.colKeyObj = colKeyObj;\n colContext.currentColumnIndex = currentColumnIndex;\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n });\n } else {\n colContext.colKeyObj = { keyArr: [], joinedKey: '' };\n colContext.currentColumnIndex = currentColumnIndex;\n\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n }\n return {\n rowIndex: ++rowIndexForCurrentKey\n };\n};\n\n/**\n* Gets Matrixes for corresponding datamodel, facets and projections\n*\n* @param {Object} dataModel input datamodel\n* @param {Object} fieldInfo Information about the fields\n* @param {Function} geomCellCreator 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, geomCellCreator, globalConfig) => {\n let currentRowIndex = 0;\n const matrix = [];\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const projectionInfo = prepareProjectionInfo(fieldInfo);\n const facetInfo = prepareFacetInfo(fieldInfo);\n const allSplitModels = dataModel.splitByRow(facetInfo.allFacets);\n\n const {\n splitModelsHashMap,\n rowKeys,\n colKeys\n } = getSplitModelHashMap(allSplitModels, facetInfo, globalConfig);\n\n const generalContext = {\n matrix,\n geomCellCreator,\n projectionInfo,\n splitModelsHashMap,\n colKeys\n };\n if (rowKeys.length) {\n rowKeys.forEach((rowKeyObj) => {\n const rowContext = {\n ...generalContext,\n rowKeyObj,\n currentRowIndex\n };\n const { rowIndex } = createRowDataModels(rowContext, fieldInfo, dataModel);\n\n currentRowIndex = rowIndex;\n });\n } else if (colKeys.length) {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n\n colKeys.forEach((colKeyObj) => {\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj,\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n });\n } else {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj: { keyArr: [], joinedKey: '' },\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n }\n\n const formattedColKeys = formatKeys(colKeys.map(e => e.keyArr),\n colFacets.map(facetField => facetField.rawFormat()));\n const formattedRowKeys = formatKeys(rowKeys.map(e => e.keyArr),\n rowFacets.map(facetField => facetField.rawFormat()));\n\n // Getting column keys\n const transposedColKeys = formattedColKeys.length > 0 ? formattedColKeys[0].map((col, i) =>\n formattedColKeys.map(row => row[i])) : formattedColKeys;\n\n return { matrix, rowKeys: formattedRowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport {\n getObjProp,\n FieldType,\n retrieveNearestGroupByReducers,\n mergeRecursive,\n createSelection,\n DataModel\n} from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n getFieldsFromSuppliedLayers,\n extractFields,\n removeExitCells\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP,\n BOTTOM, PRIMARY, SECONDARY, X, Y, TEMPORAL } from '../enums/constants';\nimport { SimpleVariable } from '../variable';\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 *\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 sortedFields = config.sort;\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || [],\n context.retinalConfig);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const facetFields = allFacets.slice();\n facetFields[0] = facetFields[0].map(facetField => facetField.oneVar());\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\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n // Sort datamodel if user has sorted a field\n const sortConfig = Object.keys(sortedFields).map(field => [field, sortedFields[field]]);\n if (sortConfig.length) {\n datamodel = datamodel.sort(sortConfig, { saveChild: true });\n }\n\n geomCell.data(datamodel)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n\n encoder.createAxis(axesCreators, fieldInfo, Object.assign({}, context, { geomCell, facetFields }));\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\nconst extractAxisIndex = id => getObjProp(id.match(/^[0-9]*?(?=-)/g), 0);\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 */\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((currObj, 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 }).sort((a, b) => extractAxisIndex(a[0]) - extractAxisIndex(b[0]));\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.rowsSecondary = createAxisCells(selObj.rowSec, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n selObj.columnsSecondary = createAxisCells(selObj.colSec, 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) => {\n const textCell = new cells.TextCell({}, { labelManager });\n textCell.source(label);\n return textCell;\n }, headers, (key, i) => key + i);\n\nconst extractFacetIndex = id => id.split('-').pop();\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n *\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facet\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n\n const selObjUpdater = createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys,\n (keySet, i) => `${keySet.join(',')}-${i}`)\n .sort((a, b) => extractFacetIndex(a[0]) - extractFacetIndex(b[0]));\n\n return selObjUpdater.map((keySet, data) => {\n let textCells = createTextCells(null, data, cells, labelManager);\n textCells = textCells.map((cell, k) => cell.source(k).config(facet));\n return textCells;\n });\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 facet,\n encoders,\n resolver\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 keys = keys.map(arr => arr.map(val => resolver.valueParser()(val)));\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.facet = facet.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facet = facet.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n\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 facet,\n encoders,\n resolver\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\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]\n .map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n let rowPriority = rowSec.length ? 1 : -1;\n rowPrime.length && rowPriority++;\n let colPriority = colSec.length ? 1 : -1;\n colPrime.length && colPriority++;\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 colPriority,\n rowPriority\n };\n};\n\nconst getAxisFields = (projections, fieldHolder = []) =>\n projections.reduce((acc, item) =>\n [...acc, ...item.reduce((ac, field) =>\n (field instanceof SimpleVariable ? [...ac, field.oneVar()] : ac), [])], fieldHolder);\n\nconst sortDmTemporalFields = (resolver, datamodel) => {\n let axisFields = [];\n const projections = resolver.projections();\n axisFields = getAxisFields(projections.rowProjections, getAxisFields(projections.colProjections));\n\n const fieldConfig = datamodel.getFieldsConfig();\n const temporalFields = axisFields.reduce((acc, field) =>\n ((fieldConfig[field].def.subtype === TEMPORAL) ? [...acc, [field]] : acc), []);\n return temporalFields.length ? datamodel.sort(temporalFields, { saveChild: true }) : datamodel;\n};\n\nconst transformDataModel = (dataModel, config, resolver) => {\n let groupedModel;\n\n const fieldsConfig = dataModel.getFieldsConfig();\n const resolvedData = resolver.data();\n const { groupBy, suppliedLayers, facetsAndProjections } = config;\n\n if (resolvedData instanceof DataModel) {\n resolvedData.dispose();\n }\n groupedModel = dataModel.project(dataModel.getSchema().map(d => d.name));\n resolver.data(groupedModel);\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(suppliedLayers, groupedModel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n const dimensions = allFields.filter(field =>\n getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n const measureNames = Object.keys(groupedModel.getFieldspace().getMeasure());\n const nearestAggFns = retrieveNearestGroupByReducers(groupedModel, ...measureNames);\n const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns);\n\n groupedModel = groupedModel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns)\n .project(allFields);\n }\n // sort temporal fields if any in the given rows and columns\n groupedModel = sortDmTemporalFields(resolver, groupedModel);\n return groupedModel;\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 facet: globalConfig.facet || {},\n axisFrom: globalConfig.axisFrom || {},\n selection,\n resolver\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 retinalConfig: {\n color: config.color,\n size: config.size,\n shape: config.shape\n }\n };\n\n const groupedModel = transformDataModel(datamodel, {\n facetsAndProjections,\n suppliedLayers: valueCellContext.suppliedLayers,\n groupBy\n }, resolver);\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, globalConfig);\n\n removeExitCells(resolver);\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n resolver.createUnits(componentRegistry, config);\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const {\n rows,\n columns,\n selectionObj,\n rowPriority,\n colPriority\n } = 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 priority: {\n row: rowPriority,\n col: colPriority\n },\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","export const RESOLVER_PROPS = {\n dependencies: {},\n units: {},\n datamodelTransform: {},\n layerConfig: {},\n matrixLayers: {},\n colCells: {},\n rowCells: {},\n rowMatrix: {},\n columnMatrix: {},\n valueMatrix: {},\n encoder: {},\n valueParser: {},\n data: {}\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { generateGetterSetters, STATE_NAMESPACES, getUniqueId } from 'muze-utils';\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';\nimport { RESOLVER_PROPS } from './resolver-props';\n\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 = { rowFacets: [], colFacets: [] };\n this._projections = { rowProjections: [], colProjections: [] };\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._fireboltDeps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: [],\n radius: [],\n angle: [],\n angle0: []\n };\n generateGetterSetters(this, RESOLVER_PROPS);\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 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 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 *\n *\n * @param {*} facets\n *\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 *\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 *\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 *\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 radius: [],\n angle: [],\n angle0: [],\n pie: []\n });\n }\n\n setFireboltDependencies (prop, deps) {\n Object.assign(this._fireboltDeps, {\n [prop]: deps\n });\n return this;\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 coord\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager,\n throwback\n } = this.dependencies();\n const fireboltDeps = this._fireboltDeps;\n\n // Provide the source for the matrix\n const units = [[]];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n const store = this.store();\n store.lockModel();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n const namespace = `unit${i}-${j}-${getUniqueId()}`;\n\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager,\n throwback,\n fireboltDeps\n });\n unit.metaInf({\n rowIndex: i,\n colIndex: j,\n namespace\n });\n unit.store(store);\n unit.coord(coord);\n el.source(unit);\n }\n !units[i] && (units[i] = []);\n units[i][j] = unit;\n unit.parentAlias(alias)\n .valueParser(this.valueParser())\n .coord(coord);\n el.config(unitConfig);\n });\n store.unlockModel();\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 resetFacetsAndProjections () {\n this._facets = {};\n this._projections = {};\n return this;\n }\n\n /**\n *\n *\n *\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 *\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 const props = [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`,\n `${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`];\n const store = this.store();\n store.lockCommits(props);\n store.lockModel();\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(Object.assign(el.axes(), retinalAxes));\n el.source() && el.source().retinalFields(config);\n el.layerDef(matrixLayers[i][j]);\n el.updateModel();\n\n units.push(el.source());\n });\n store.unlockModel()\n .unlockCommits([props[0]])\n .unlockCommits([props[1]]);\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n *\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 {\n showHeaders,\n classPrefix\n } = config;\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], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager }),\n right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell,\n { classPrefix, 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 *\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 store (...params) {\n if (params.length) {\n this._store = params[0];\n return this;\n }\n return this._store;\n }\n\n clear () {\n const cacheMaps = this._cacheMaps;\n for (const key in cacheMaps) {\n cacheMaps[key].clear();\n }\n }\n\n}\n","/**\n * This is a wrapper class over the matrix of cells which gets created in visual group. Visual Group creates left,\n * right, bottom and top and center matrices and wraps them using this class.\n *\n * @public\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n * Creates an instance of ValueMatrix.\n *\n * @param {Array} matrixArr Matrix array.\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 instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n * Returns the array of matrices contained in this instance.\n *\n * @public\n * @return {Array} Array of matrices.\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 * Sets a filter criteria. This filter criteria gets applied when each function is called.\n *\n * @public\n * @param {Function} fn Filter function.\n *\n * @return {ValueMatrix} Instance of value matrix.\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 * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\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 * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\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 * Iterates through the two dimensional matrix array and calls the given callback function with the cell instance,\n * row index, column index and the matrix array.\n *\n * @param {Function} fn Callback function which will get called for every cell.\n * @return {ValueMatrix} Instance of the value matrix.\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 findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n clear () {\n this.each(cell => cell.remove());\n this.matrix([]);\n }\n}\n\nexport default ValueMatrix;\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { getEncoder, getBorders } from '../group-helper';\nimport { RetinalEncoder } from '../encoder';\nimport { registerDomainChangeListener, unsubscribeChangeListeners } from './change-listener';\nimport ValueMatrix from './value-matrix';\n\nexport const createUnitState = (context) => {\n const [globalState, localState] = VisualUnit.getState();\n const store = context.store();\n store.append(STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE, localState);\n};\n\nexport const initializeGlobalState = (context) => {\n const globalState = context.constructor.getState()[0];\n const store = context.store();\n store.append(STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const createLayerState = (context) => {\n const [globalState, localState] = BaseLayer.getState();\n context.store().append(STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE, localState);\n};\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\nexport const setMatrixInstances = (context, placeholder) => {\n let {\n values,\n rows,\n columns\n } = placeholder;\n values = values || [];\n rows = rows || [];\n columns = columns || [];\n context._composition.matrices = {\n value: new ValueMatrix(values),\n left: new ValueMatrix(rows[0]),\n right: new ValueMatrix(rows[1]),\n top: new ValueMatrix(columns[0]),\n bottom: new ValueMatrix(columns[1])\n };\n\n context._dependencies.throwback.commit(CommonProps.MATRIX_CREATED, true);\n return context;\n};\n\nexport const createMatrices = (context) => {\n const rows = context.rows();\n const columns = context.columns();\n const color = context.color();\n const datamodel = context.data();\n const size = context.size();\n const detail = context.detail();\n const layers = context.layers();\n const transform = context.transform();\n const config = context.config();\n const shape = context.shape();\n\n // Get the resolver for the matrices\n const resolver = context.resolver();\n resolver.store(context.store());\n resolver.valueParser(context.valueParser());\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config || {},\n rows,\n columns,\n detail,\n layers,\n transform\n };\n\n unsubscribeChangeListeners(context);\n\n const retinalConfig = sanitizeRetinalConfig({\n color,\n shape,\n size\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);\n matrixConfig.coord = encoders.simpleEncoder.constructor.type();\n resolver.encoder(encoders.simpleEncoder);\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 ? config.axisFrom : {}, fields);\n // Setting layers for the code\n layers && resolver.layerConfig(layers);\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));\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 resolver.encoder().unionUnitDomains(context);\n\n registerDomainChangeListener(context);\n return context;\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\n\nimport { STATE_NAMESPACES } from 'muze-utils';\n\nexport const setupChangeListeners = (context) => {\n const store = context.store();\n const stores = {\n throwback: context._dependencies.throwback,\n store\n };\n\n ['x', 'y'].forEach((axisType) => {\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${axisType}`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes[axisType].forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n });\n\n [VisualUnit, BaseLayer].forEach((comp) => {\n const formalName = comp.formalName();\n ['store', 'throwback'].forEach((type) => {\n const listeners = comp.getListeners()[type];\n const storeInst = stores[type];\n listeners.forEach((listenerInf) => {\n storeInst[listenerInf.type](listenerInf.props, listenerInf.listener, false, {\n namespace: formalName,\n subNamespace: listenerInf.subNamespace\n });\n });\n });\n });\n};\n\nexport const registerDomainChangeListener = (context) => {\n const store = context.store();\n store.registerChangeListener([`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`], () => {\n context.resolver().encoder().unionUnitDomains(context);\n }, false, {\n key: 'unionDomain'\n });\n};\n\nexport const unsubscribeChangeListeners = (context) => {\n context.store().unsubscribe({\n key: 'unionDomain'\n });\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\nexport const PROPS = {\n alias: {},\n data: {},\n cornerMatrices: {\n defaultValue: {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: []\n }\n },\n groupType: {},\n\n metaData: {\n defaultValue: {\n border: {}\n }\n },\n placeholderInfo: {\n defaultValue: {}\n },\n resolver: {},\n valueParser: {\n defaultValue: val => val\n },\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 [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n findInGroup\n} from '../group-helper';\nimport { createUnitState, initializeGlobalState, setMatrixInstances, createMatrices, createLayerState } from './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 * VisualGroup is instantiated by canvas for creating {@link VisualUnit} and axes instances.It creates the\n * the matrix of visual units and axes. It also creates the layout instance which manages the allocation\n * of space of matrices.\n *\n * To get instance of visual group,\n * ```\n * const visualGroup = canvas.composition().visualGroup;\n * ```\n * @public\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 *\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 generateGetterSetters(this, localOptions);\n // Populate the store with default values\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n // matrix instance store each of the matrices\n setMatrixInstances(this, {});\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n }\n\n static getState () {\n return [{\n domain: {\n x: null,\n y: null,\n radius: null,\n angle: null,\n angle0: null\n }\n }, {}];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n initializeGlobalState(this);\n createUnitState(this);\n createLayerState(this);\n // Register listeners\n setupChangeListeners(this);\n return this;\n }\n return this._store;\n }\n\n /**\n * Return the instances of matrices created by the visual group.\n *\n * @return {Object} Instance of matrices.\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 visual group.\n *\n * @public\n *\n * @return {Object} Composition of visual group. It contains instance of matrices {@link ValueMatrix}\n * and instances of axis.\n * ```\n * {\n * matrices: {\n * value: // Instance of center value matrix.\n * left: // Instance of left value matrix\n * right: // Instance of right value matrix\n * bottom: // Instance of bottom value matrix\n * top: // Instance of top value matrix.\n * },\n * axes: {\n * x: // Array of x axis.\n * y: // Array of y axis\n * color: // Array of color axis\n * shape: // Array of shape axis\n * size: // Array of size axis.\n * }\n * }\n * ```\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 */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n * Returns the channel name of the variable. Channels are rows, columns, color, shape and size.\n *\n * @public\n * @param {string} variable Name of the variable.\n *\n * @return {string} Name of the channel.\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n * Gets the axis instances of the visual group based on the given axis type.\n *\n * @public\n * @param {string} type Type of axis. X,Y or retinal axes.\n *\n * @return {Array} Array of axis instances.\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n * Returns the instances of cells based on the given type. Type can be given as `row' or `col`.\n *\n * @public\n * @return {Array} Two dimensional array of cells.\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n return channel === Y ? rowProjections : colProjections;\n }\n\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\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 /**\n * Returns the grouped datamodel prepared by visual group. If there is no group by performed, then it returns the\n * original data model passed to visual group.\n *\n * @return {DataModel} Grouped data model.\n */\n getGroupByData () {\n return this._groupedDataModel;\n }\n\n createMatrices () {\n createMatrices(this);\n }\n\n remove () {\n this.matrixInstance().value.clear();\n this.resolver().clear();\n const info = this.placeholderInfo();\n info.rows = null;\n info.columns = null;\n info.values = null;\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 MAXWIDTH = 'max-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 context = firebolt.context;\n const type = context.constructor.type();\n const payload = config.payload;\n const data = context.data();\n const metaData = context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = 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.rawVal);\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].internalValue >= values[i][0] && fields[field].internalValue <= 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 === 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.rawVal) !== -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","import { getEvent } from 'muze-utils';\n\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 event = getEvent();\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 const event = getEvent();\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 labelManager: {},\n minTickDistance: {},\n valueParser: {\n defaultValue: val => val\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, i, data, context) => context.valueParser()(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 MAXWIDTH\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n *\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 * Function to recompute the stops in array in case to left and right alignment of legend.\n *\n * @param {string} param - parameter to measure\n * @param {Object} requiredMeasure - required measure parameters\n * @param {Object} availableMeasure - available meassure parameters\n * @param {Array} domainForLegend - array\n * @param {Object} smartLabelCalc - smartLabel Manager\n * @return {Array} - Array\n */\nconst getcomputedArray = (computationhelper, requiredMeasure, availableMeasure, domainForLegend) => {\n // declaring Current and Next Tick Value variable\n let currentTickValue;\n let nextTickValue;\n const upperBound = domainForLegend[domainForLegend.length - 1];\n const param = computationhelper.measureParam;\n const smartLabelCalc = computationhelper.smartLabelCalc;\n\n // calculating pixel required per Tick Values\n const pixelPerTick = (availableMeasure[param] / upperBound);\n\n // checking if available max width is smaller than required width for legend.\n if (availableMeasure[param] >= requiredMeasure[param]) {\n return domainForLegend;\n }\n\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[0]))[param]);\n for (let i = 1; i < domainForLegend.length - 1; i++) {\n nextTickValue = Math.floor((currentTickValue / pixelPerTick) + domainForLegend[i - 1]);\n if (domainForLegend[i] < nextTickValue) {\n domainForLegend.splice(i, 1);\n i -= 1;\n }\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[i]))[param]);\n }\n return domainForLegend;\n};\n\n/**\n * function to recompute the Stops Array provided to prevent the Overlapping of values\n * @param {Array} domainForLegend - Stops Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - modified Stops Array\n */\nexport const getInterpolatedArrayData = (domainForLegend, scaleParams) => {\n // defining param for height/width selector\n let measureParam;\n\n // declaring variable for required Width\n let requiredWidth;\n\n // declaring variable for required height\n let requiredHeight;\n\n // declaring the variable for upperbound\n let upperBound = domainForLegend[domainForLegend.length - 1];\n\n // Initializing Minimum Tick Difference Variable and checking if it's less than 1 or not\n let minTickDiff = Math.ceil(domainForLegend[1] - domainForLegend[0]);\n\n // calculating max tick difference\n const maxTickDiff = Math.ceil(upperBound - domainForLegend[0]);\n\n // gradient Alignment\n const { alignment } = scaleParams;\n\n // getting SmartLabel Manager to calculate tick Params\n const smartLabelCalc = scaleParams.smartLabel;\n\n // scale Measurements (i.e MaxWidth and MaxHeight available)\n const availableSpace = scaleParams.measures;\n\n // getting minimum Tick size (i.e height and width)\n const minimumTickSize = scaleParams.minTickDistance;\n\n // getting domain upperbound dimensions\n const { height: tickDimHeight, width: tickDimWidth } = smartLabelCalc.getOriSize((upperBound));\n\n /* Checking if UpperBound of Domain is Floating or Not.\n In case of floating constricting it to 2 decimals after point. */\n if (!Number.isInteger(upperBound)) {\n upperBound = ((upperBound).toFixed(2));\n }\n\n // Calculating minimum tick difference\n minTickDiff = minTickDiff < 1 ? 1 : minTickDiff;\n\n // required width to render legend\n requiredWidth = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * (tickDimWidth + (minimumTickSize.width));\n\n requiredWidth -= Math.abs(maxTickDiff);\n\n // require height to render legend\n requiredHeight = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * tickDimHeight;\n\n requiredHeight -= Math.abs(maxTickDiff);\n\n // checking the alignment of legend\n if (alignment === TOP || alignment === BOTTOM) {\n measureParam = WIDTH;\n } else {\n measureParam = HEIGHT;\n }\n\n // calculating computed array\n domainForLegend = getcomputedArray({\n smartLabelCalc,\n measureParam\n }, {\n height: requiredHeight,\n width: requiredWidth\n }, {\n height: availableSpace.maxHeight,\n width: availableSpace.maxWidth\n }, domainForLegend);\n\n return domainForLegend;\n};\n\n/**\n * function to recalculate steps on providing more number of stops than canvas can accomodate.\n * @param {Array} domain - Array\n * @param {Array} steps - Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - recalculated Step Array\n */\nexport const getInterpolatedData = (domain, steps, scaleParams) => {\n // declaring recomputeSteps Variable\n let recomputeSteps = 0;\n\n const getTickMeasure = scaleParams.smartLabel;\n const { maxWidth, maxHeight } = scaleParams.measures;\n const { alignment } = scaleParams;\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n // getting tick measure(i.e height and width)\n const tickValue = getTickMeasure.getOriSize(domain[1].toFixed(2));\n\n // To round the floating values to Integer and checking if value is 1.\n steps = Math.round(steps);\n steps = steps < 1 ? (steps + 1) : steps;\n\n // checking alignment of the Axis\n if (alignment === TOP || alignment === BOTTOM) {\n recomputeSteps = Math.floor(maxWidth / (tickValue.width));\n } else {\n recomputeSteps = Math.floor(maxHeight / (tickValue.height));\n }\n steps = Math.min(steps, recomputeSteps);\n\n // scaling the axis based on steps provided\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 titleWidth = Math.min(measurement.maxWidth, measurement.width);\n\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${titleWidth}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, `${titleWidth}px`)\n .style(MAXWIDTH, `${titleWidth}px`)\n .style(HEIGHT, '100%')\n .style('line-height', 1)\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .style('overflow-x', 'scroll')\n .node();\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\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 *\n */\nexport const getItemMeasures = (context, prop, formatter) => {\n const space = [];\n const data = context.data();\n const labelManager = context._labelManager;\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value, index, data, context));\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 *\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);\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 const labelWidth = labelSpaces[i].width;\n const newLabelWidth = (maxItemSpaces.width - maxIconWidth);\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = Math.max(labelWidth, newLabelWidth);\n totalWidth = Math.max(totalWidth, itemSpace.width);\n }\n }\n });\n totalWidth = Math.ceil(Math.max(totalWidth, titleWidth)) + effPadding;\n totalHeight += titleHeight + effPadding;\n totalHeight = Math.ceil(totalHeight);\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n *\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, RIGHT, LEFT, TOP, BOTTOM } 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 const dist = dependencies.labelManager.getOriSize('w');\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\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 *\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\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 *\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 *\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 *\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, VALUE, 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());\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 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, maxWidth } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n maxWidth,\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 position\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 let marginPosition;\n switch (position) {\n case TOP:\n marginPosition = `margin-${BOTTOM}`;\n break;\n case LEFT:\n marginPosition = `margin-${RIGHT}`;\n break;\n case BOTTOM:\n marginPosition = `margin-${TOP}`;\n break;\n default:\n marginPosition = `margin-${LEFT}`;\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(`${marginPosition}`, `${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 *\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.rawVal]];\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\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 *\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 *\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 *\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 const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context))\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 const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import {\n FieldType,\n DimensionSubtype,\n formatTemporal\n} from 'muze-utils';\nimport 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 *\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof DiscreteLegend\n */\n dataFromScale () {\n const scale = this.scale();\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const field = this.metaData().getFieldspace().fields[0];\n const { type, subtype } = field.schema();\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n const rawVal = domainForLegend[i];\n if (type === FieldType.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 let domainVal = rawVal;\n if (subtype === DimensionSubtype.TEMPORAL) {\n domainVal = formatTemporal(domainForLegend[i], field.minimumConsecutiveDifference());\n }\n value = domainVal;\n range = [domainVal];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range,\n rawVal\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 *\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 *\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\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0]) || 1}%`)\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 labels: {\n rotation: null\n }\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 *\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 axis.source().render();\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().tickDimensions;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxItemSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(Math.min(height, maxHeight) - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(Math.min(width, maxWidth) - (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\n applyStyle(legendContainer, {\n height: `${maxItemSpaces.height + border + padding}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\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${maxWidth}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, getInterpolatedArrayData } 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 *\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n *\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 *\n * @memberof GradientLegend\n */\n dataFromScale () {\n let domainForLegend = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\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 // Sorting the domain Array\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n domainForLegend = getInterpolatedArrayData(domainForLegend, scaleParams);\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1, scaleParams);\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 *\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 *\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 *\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 *\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof StepLegend\n */\n dataFromScale () {\n let domainLeg = [];\n const scale = this.scale();\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 // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\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, scaleParams);\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 } else if (domainLeg.length === 1) {\n value = ele.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\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\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 *\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 *\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';\nexport const MUZE_PREFIX = 'muze';\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';\nexport const HORIZONTAL_CENTER = 'h-center';\nexport const VERTICAL_CENTER = 'v-center';\nexport const HIDDEN = 'hidden';\nexport const OVERFLOW = 'overflow';\nexport const OVERFLOW_X = 'overflow-x';\nexport const OVERFLOW_Y = 'overflow-y';\nexport const AUTO = 'auto';\nexport const VISIBLE = 'visible';\nexport const VERTICAL_SCROLL_BAR = 'verticalScrollBar';\nexport const HORIZONTAL_SCROLL_BAR = 'horizontalScrollBar';\nexport const GRID = 'grid';\nexport const MESSAGE = 'message';\nexport const NO_DATA_MESSAGE = 'No data to display';\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. This is required when we have multiple\n * variables on a single axis and the union of domain of all the variables needs to be set on the axis.\n *\n * To create a new composed variable from multiple fields,\n * ```\n * const sharedVar = share('open', 'high', 'low', 'close');\n * canvas.rows([sharedVar])\n * .columns(['date']);\n * ```\n *\n * @module Operators\n * @public\n * @function share\n * @param {Array} vars Variable names.\n *\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 *\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 string according to the allowed html tags.\n * This is used to render html in canvas components like title and tooltip.\n *\n * To render html in canvas components,\n * ```\n * canvas.title(html`TITLE`);\n * ```\n *\n * @public\n * @module Operators\n * @function html\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n *\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, CommonProps } 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\nconst listenerFn = (canvas, fn) => () => {\n const valueMatrix = canvas.composition().visualGroup.matrixInstance().value;\n valueMatrix.each(cell => fn(cell.valueOf().firebolt()));\n};\n\nconst canvasIterator = (canvases, iteratorFn, cFn) => {\n canvases.forEach((canvas) => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => iteratorFn(cell.valueOf().firebolt()));\n cFn && cFn(canvas);\n // Also register actions on canvas update\n const throwback = canvas._throwback;\n\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED],\n listenerFn(canvas, iteratorFn));\n });\n};\n\nconst registerActions = (context, type, fnName, deps) => {\n const canvases = context._registrableComponents;\n\n canvases.forEach((canvas) => {\n const vGroup = canvas.composition().visualGroup;\n\n vGroup.resolver().setFireboltDependencies(type, deps);\n canvas.firebolt()[fnName](deps);\n });\n};\n\n/**\n * This class is initiated only once in lifecycle and is reponsible for regisration of physical and behavioural\n * actions and side effects and the mapping between them.\n *\n * To get the instance of action model\n * ```\n * const ActionModel = muze.ActionModel;\n * ```\n *\n * @public\n * @module ActionModel\n */\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n /**\n * Takes an array of canvases on which the physical and behavioural actions will get registered.\n *\n * @public\n * @param {Canvas} components Array of canvases\n *\n * @return {ActionModel} Instance of action model.\n */\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n /**\n * Registers physical actions on the canvases. It takes an object with key as the name of action and value having\n * the definition of the action.\n *\n * To register a {@link PhysicalAction},\n * ```\n * const ActionModel = muze.ActionModel;\n * ActionModel\n * // Physical actions will be registered on these canvases.\n * .for(canvas)\n * .registerPhysicalActions({\n * // Key is the name of physical action.\n * ctrlClick: (firebolt) => (targetEl, behaviours) => {\n * targetEl.on('click', function (data) {\n * const event = utils.getEvent();\n * const pos = utils.getClientPoint(event, this);\n * // Get the data point nearest to the mouse position.\n * const nearestPoint = firebolt.context.getNearestPoint(pos, {\n * data\n * });\n * // Prepare the payload\n * const payload = {\n * criteria: nearestPoint.id\n * };\n * behaviours.forEach((behaviour) => firebolt.dispatchBehaviour(behaviour, payload));\n * });\n * }\n * });\n * ```\n * @public\n *\n * @param {Object} action Names of physical actions and their definitions.\n *\n * @return {ActionModel} Instance of the action model.\n */\n registerPhysicalActions (action) {\n registerActions(this, 'physicalActions', 'registerPhysicalActions', action);\n return this;\n }\n\n /**\n * Registers behavioural actions on the canvases. It takes definitions of the behavioural actions and registers\n * them on the canvases. Every behavioural action must inherit the {@link GenericBehaviour} class.\n *\n * To register a behavioural action\n * ```\n * // Define a new behavioural action\n * class SingleSelectBehaviour extends GenericBehaviour {\n * static formalName () {\n * return 'singleSelect';\n * }\n *\n * setSelectionSet (addSet, selectionSet) {\n * if (addSet === null) {\n * selectionSet.reset();\n * } else if (addSet.length) {\n * const existingAddSet = selectionSet.getExistingEntrySet(addSet);\n * if (existingAddSet.length){\n * selectionSet.reset();\n * } else {\n * selectionSet.add(addSet);\n * }\n * } else {\n * selectionSet.reset();\n * }\n * }\n * }\n * muze.ActionModel.registerBehaviouralActions(SingleSelectBehaviour);\n * ```\n *\n * @public\n *\n * @param {GenericBehaviour} actions Definition of behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerBehaviouralActions (...actions) {\n registerActions(this, 'behaviouralActions', 'registerBehaviouralActions', actions);\n return this;\n }\n\n /**\n * Registers the mapping of physical and behavioural actions. This mapping is used to establish which behavioural\n * actions should be dispatched on any triggering of physical actions.\n *\n * To map physical actions with behavioural actions,\n * ```\n * muze.ActionModel.registerPhysicalBehaviouralMap({\n * ctrlClick: {\n * behaviours: ['select'] // This array must be the formal names of the behavioural actions.\n * }\n * });\n * ```\n *\n * @public\n * @param {Object} map Contains the physical and behavioural action map.\n * ```\n * {\n * // Name of the physical action\n * click: {\n * // Target element selector. This is an optional field. If not passed, then by default takes the\n * // container element of visual unit.\n * target: '.muze-layers-area path',\n * // Behaviours which should be dispatched on triggering of the mapped physical action.\n * behaviours: ['select']\n * }\n * }\n * ```\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPhysicalBehaviouralMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalBehaviouralMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalBehaviouralMap(map);\n });\n return this;\n }\n\n /**\n * Registers what behaviour to propagate on dispatch of a certain behavioural action. By default, when any\n * behavioural action is dispatched, then the same behavioural action gets propagated to all the other canvases.\n * This can be changed using this api.\n *\n * To register what behaviour should be propagated on dispatch of any behavioural action,\n * ```\n * ActionModel.for(canvas1, canvas2).registerPropagationBehaviourMap({\n * select: 'filter',\n * brush: 'filter'\n * });\n * ```\n *\n * @public\n * @param {Object} map Propagation behaviour map.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPropagationBehaviourMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPropagationBehaviourMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPropagationBehaviourMap(map);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of side effects and behavioural actions. It takes an object which contains key as the\n * name of behavioural action and the side effects which will be linked to it.\n *\n * To map side effects to select behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: ['infoBox'] // This array must be the formal names of the side effects\n * });\n * ```\n *\n * To map side effects to select behaviour, but disable all the default side effects attached with this behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: {\n * effects: ['infoBox'],\n * preventDefaultActions: true\n * }\n * });\n * @public\n * @param {Object} map Mapping of behavioural actions and side effects.\n * ```\n * {\n * select: ['infoBox']\n * }\n * ```\n * @return {ActionModel} Instance of action model.\n */\n mapSideEffects (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.mapSideEffects(map);\n }, (canvas) => {\n canvas.firebolt().mapSideEffects(map);\n });\n return this;\n }\n\n /**\n * Registers the side effects on the registered canvases. It takes definitions of side effects and registers them\n * on the canvases. Every side effect must inherit the base class {@link GenericSideEffect} or\n * {@link SpawnableSideEffect} or {@link SurrogateSideEffect} class.\n *\n * ```\n * // Define a custom side effect\n * class InfoBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'infoBox';\n * }\n *\n * apply (selectionSet) {\n * }\n * }\n * muze.ActionModel.registerSideEffects(InfoBox);\n * ```\n * @public\n * @param {GenericSideEffect} sideEffects Definition of side effects.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerSideEffects (...sideEffects) {\n registerActions(this, 'sideEffects', 'registerSideEffects', sideEffects);\n return this;\n }\n\n /**\n * Breaks the link between behavioural actions and physical actions. It takes an array of behavioural action\n * and it's physical action.\n *\n * To dissociate behavioural actions from physical actions\n * ```\n * muze.ActionModel.dissociateBehaviour(['select', 'click'], ['highlight', 'hover']);\n * ```\n * @public\n * @param {Array} maps Array of behavioural action and physical action.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateBehaviour (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateBehaviour(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateBehaviour(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * Breaks the link between side effects and behavioural actions. It takes an array of formal names of the side\n * effects and it's linked behavioural action.\n *\n * To dissociate side effects from behavioural actions\n * ```\n * muze.ActionModel.dissociateSideEffect(['crossline', 'highlight'], ['selectionBox', 'brush']);\n * ```\n * @public\n * @param {Array} maps Array of side effects and behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateSideEffect (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateSideEffect(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateSideEffect(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * By default cross interactivity is disabled between canvases. This enables cross interaction between the canvases\n * so that any action happening in one canvas gets dispatched on other canvases as well. An optional policy can also\n * be passed in this method. The policy can be used to control on which canvases the behavioural actions and\n * side effects gets dispatched.\n *\n * To just enable cross interactivity between two canvases,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity();\n * ```\n *\n * To enable cross interactivity but enable any behavioural action only when it is triggered from canvas1.\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * behaviours: {\n * // Here * stands for any behavioural action name. We can also give any name of behavioural action\n * // in place of this.\n * '*': (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n *\n * To enable cross interactivity but enable tooltip effect if the action is propagated from canvas1,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * sideEffects: {\n * tooltip: (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n * @public\n * @param {Object} policy Policy definition.\n *\n * @return {ActionModel} Instance of action model.\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","import { MUZE_PREFIX } from '../constants';\n\nexport const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 4,\n className: `${MUZE_PREFIX}-title-container`\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16,\n maxLines: 2,\n className: `${MUZE_PREFIX}-subtitle-container`\n};\n\nexport const MESSAGE_CONFIG = {\n className: `${MUZE_PREFIX}-message-container`\n};\n\nexport const CANVAS = 'canvas';\n","import { mergeRecursive } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\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 * @module LocalOptions\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' || !config) {\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' || !config) {\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' || !config) {\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: [],\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};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([title, titleConfig]) => {\n let t = title;\n if (typeof title === 'string' || !title) {\n t = () => title;\n }\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return [t, mergeRecursive(defConfig, titleConfig)];\n }\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([subtitle, subtitleConfig]) => {\n let sub = subtitle;\n if (typeof subtitle === 'string' || !subtitle) {\n sub = () => subtitle;\n }\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return [sub, mergeRecursive(defConfig, subtitleConfig)];\n }\n }\n }\n};\n","export default class LayoutComponent {\n constructor (name, dimensions, seed) {\n this._seed = seed;\n this._boundBox = {\n height: dimensions.height,\n width: dimensions.width,\n top: null,\n left: null\n };\n this._renderAt = null;\n this._alignWith = null;\n this._alignment = null;\n this._target = null;\n this._position = null;\n this._componentName = name;\n this._className = null;\n }\n\n getLogicalSpace () {\n throw new Error('getLogicalSpace is not defined');\n }\n\n setSpatialConfig () {\n throw new Error('setSpatialSpace is not defined');\n }\n\n name (param) {\n if (param) {\n this._componentName = param;\n }\n return this._componentName;\n }\n\n target (param) {\n if (param) {\n this._target = param;\n }\n return this._target;\n }\n\n position (param) {\n if (param) {\n this._position = param;\n }\n return this._position;\n }\n\n alignment (param) {\n if (param) {\n this._alignment = param;\n }\n return this._alignment;\n }\n\n alignWith (param) {\n if (param) {\n this._alignWith = param;\n }\n return this._alignWith;\n }\n\n renderAt (param) {\n if (param) {\n this._renderAt = param;\n }\n return this._renderAt;\n }\n\n boundBox (param) {\n if (param) {\n Object.assign(this._boundBox, param);\n }\n return this._boundBox;\n }\n\n className (param) {\n if (param) {\n this._className = param;\n }\n return this._className;\n }\n\n draw () {\n throw new Error('draw is not defined');\n }\n\n attachListener () {\n return this;\n }\n }\n\n","import LayoutComponent from './layoutComponent';\n\nclass DummyComponent extends LayoutComponent {\n getLogicalSpace () {\n return {\n width: this.boundBox().width,\n height: this.boundBox().height\n };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n return this;\n }\n\n draw () {\n if (!this.component) {\n throw new Error(`Component not set for ${this.componentName}`);\n }\n this.component.mount(document.getElementById(this.renderAt)); // Change the draw method to component draw\n return this;\n }\n}\n\nexport default DummyComponent;\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n pagination: 'scroll',\n scrollBar: {\n thickness: 10,\n speed: 2,\n vertical: {\n align: 'right'\n },\n horizontal: {\n align: 'bottom'\n }\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 facet: {\n rows: {\n minCharacters: 3\n },\n columns: {\n maxLines: 2,\n verticalAlign: 'middle',\n minCharacters: 1\n }\n },\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 invalidValues: {},\n sort: {}\n};\n","import { DEFAULT_CONFIG } from '../../../../muze/src/defaults';\n\nconst DEFAULT_WIDTH = 600;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_CLASS_NAME = `${DEFAULT_CONFIG.classPrefix}-layout-container-component`;\nconst NODE_PREFIX = `${DEFAULT_CONFIG.classPrefix}-layout-container`;\n\nexport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n DEFAULT_CLASS_NAME,\n NODE_PREFIX\n};\n","export default class DefinitionModel {\n constructor (config) {\n this._host = config.host || null;\n this._cut = config.cut || null;\n this._ratioWeight = config.ratioWeight === 0 ? 0 : config.ratioWeight || 1;\n this._preferred = config.preferred || false;\n this._lanes = config.lanes || [];\n this._remainingHeight = 0;\n this._remainingWidth = 0;\n }\n\n host (host) {\n if (host) {\n this._host = host;\n }\n return this._host;\n }\n\n preferred (preferred) {\n if (preferred) {\n this._preferred = preferred;\n }\n return this._preferred;\n }\n\n cut (cut) {\n if (cut) {\n this._cut = cut;\n }\n return this._cut;\n }\n\n ratioWeight (ratioWeight) {\n if (ratioWeight) {\n this._ratioWeight = ratioWeight;\n }\n return this._ratioWeight;\n }\n\n lanes (lanes) {\n if (lanes) {\n this._lanes = lanes;\n }\n return this._lanes;\n }\n\n remainingHeight (remainingHeight) {\n if (remainingHeight) {\n this._remainingHeight = remainingHeight;\n }\n return this._remainingHeight;\n }\n\n remainingWidth (remainingWidth) {\n if (remainingWidth) {\n this._remainingWidth = remainingWidth;\n }\n return this._remainingWidth;\n }\n}\n","import { NODE_PREFIX } from '../../constants/defaults';\nimport DefinitionModel from '../definition-manager/definitionModel';\nimport DummyComponent from '../../layout-component/dummy-component';\n/**\n * Compares two strings in lowercase\n *\n * @export\n * @param {string} value the value to be compared\n * @param {string} compareTo whom the value would be compared\n * @return {boolean} true if values are equal\n */\nexport function isEqual (value, compareTo) {\n if (typeof value !== 'string' || typeof compareTo !== 'string') {\n throw new TypeError('value and compareTo must be string');\n }\n return value.toLowerCase() === compareTo.toLowerCase();\n}\n\nexport const getNodeId = (() => {\n let _uid = 0;\n return () => `${NODE_PREFIX}-${++_uid}`;\n})();\n\nexport function yExtraSpace (node) {\n let smallestHeight = 0;\n if (node.getCutType() === 'v') {\n smallestHeight = smallestExtraHeightHorizontally(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'h') {\n node.children().forEach((child) => {\n smallestHeight += yExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerHeight = node.boundBox().height;\n const hostHeight = node.model().host().getLogicalSpace().height;\n\n smallestHeight = containerHeight - hostHeight;\n if (smallestHeight < 0) {\n smallestHeight = 0;\n }\n } else {\n smallestHeight = 0;\n }\n return smallestHeight;\n}\n\nexport function smallestExtraHeightHorizontally (node) {\n let smallestHeight = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const h = yExtraSpace(child);\n if (h < smallestHeight) {\n smallestHeight = h;\n }\n });\n return smallestHeight;\n}\n\nexport function xExtraSpace (node) {\n let smallestWidth = 0;\n if (node.getCutType() === 'h') {\n smallestWidth = smallestExtraWidthVertically(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'v') {\n node.children().forEach((child) => {\n smallestWidth += xExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerWidth = node.boundBox().width;\n const hostWidth = node.model().host().getLogicalSpace().width;\n smallestWidth = containerWidth - hostWidth;\n if (smallestWidth < 0) {\n smallestWidth = 0;\n }\n } else {\n smallestWidth = 0;\n }\n return smallestWidth;\n}\n\nexport function smallestExtraWidthVertically (node) {\n let smallestWidth = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const w = xExtraSpace(child);\n if (w < smallestWidth) {\n smallestWidth = w;\n }\n });\n return smallestWidth;\n}\n\nexport function determineBoundBox (bb, i, arr, instance) {\n if (i) {\n // if not first sibling, take boundbox from previous sibling\n const lastSibling = arr[i - 1];\n const { top: _top, left: _left, height: _height, width: _width } = lastSibling.boundBox();\n return {\n width: bb.width,\n height: bb.height,\n\n top: instance.parentCut() === 'h'\n ? _top + _height : _top,\n\n left: instance.parentCut() === 'h'\n ? _left : _left + _width\n };\n }\n // if first sibling, take boundbox from parent\n const { top: _top, left: _left } = instance.parent().boundBox();\n return {\n width: bb.width,\n height: bb.height,\n top: _top,\n left: _left\n };\n}\n\n// prepares the targetComponent Map for target Mapping ie. where a component should lie\nexport function prepareTargetComponentMap (context) {\n context.targetComponentMap(new Map());\n context.componentMap().forEach((value) => {\n if (context.targetComponentMap().has(value.target())) {\n context.targetComponentMap().get(value.target()).push(value);\n } else {\n const temp = [];\n temp.push(value);\n context.targetComponentMap().set(value.target(), temp);\n }\n });\n}\n\nexport function getComponent (canvasComponent, componentName) {\n const comp = canvasComponent.find(component => component.name() === componentName);\n return (comp && comp !== -1) ? comp : null;\n}\nexport function createPlaceHolderComponent (height, width, position) {\n const comp = new DummyComponent(0, { height, width });\n comp.name('placeHolder');\n comp.position(position);\n return comp;\n}\n\nexport function placeComponent (definitionModel, component, isPreferred = false, isGridComponent = false) {\n let cut = '';\n let componentRatioWidth = 1;\n let leftOvercomponentRationWidth = 1;\n let leftHeight = 0;\n let leftWidth = 0;\n\n if (!component) {\n return { first: definitionModel, second: definitionModel };\n }\n\n const { height: componentHeight, width: componentWidth } = component.getLogicalSpace();\n const position = component.position();\n if (position === 'top' || position === 'bottom') {\n cut = 'h';\n componentRatioWidth = componentHeight / definitionModel.remainingHeight();\n leftHeight = definitionModel.remainingHeight() - componentHeight;\n leftWidth = definitionModel.remainingWidth();\n } else {\n cut = 'v';\n componentRatioWidth = componentWidth / definitionModel.remainingWidth();\n leftWidth = definitionModel.remainingWidth() - componentWidth;\n leftHeight = definitionModel.remainingHeight();\n }\n leftOvercomponentRationWidth = 1 - componentRatioWidth;\n\n// update parentModel\n definitionModel.cut(cut);\n const firstLaneConfig = {\n host: component.name(),\n cut: null,\n ratioWeight: componentRatioWidth,\n preferred: isGridComponent ? false : isPreferred,\n lanes: []\n };\n const firstLane = new DefinitionModel(firstLaneConfig);\n firstLane.remainingHeight(componentHeight);\n firstLane.remainingWidth(componentWidth);\n\n const secondLaneConfig = {\n host: null,\n cut: null,\n ratioWeight: leftOvercomponentRationWidth,\n preferred: isGridComponent ? false : !isPreferred,\n lanes: []\n };\n const secondLane = new DefinitionModel(secondLaneConfig);\n secondLane.remainingHeight(leftHeight);\n secondLane.remainingWidth(leftWidth);\n if (isPreferred) {\n definitionModel.lanes([firstLane]);\n } else if (position === 'top' || position === 'left') {\n definitionModel.lanes([firstLane, secondLane]);\n } else {\n definitionModel.lanes([secondLane, firstLane]);\n }\n return { first: firstLane, second: secondLane };\n}\n\nexport function placeGridComponent (definitionModel, gridComponents) {\n let tempDefModel = definitionModel;\n const rows = gridComponents.length;\n const column = rows ? gridComponents[0].length : 0;\n const height = gridComponents.reduce((acc, val) => (acc + val[0].getLogicalSpace().height), 0);\n\n for (let i = 0; i < column; i++) {\n const iscolumnPreffered = i === column - 1;\n const columnPlaceHolderComponent = createPlaceHolderComponent(height,\n gridComponents[0][i].getLogicalSpace().width, 'left');\n const { first, second } = placeComponent(tempDefModel, columnPlaceHolderComponent, iscolumnPreffered);\n tempDefModel = first;\n for (let j = 0; j < rows; j++) {\n const rowpreffred = j === (rows - 1);\n tempDefModel = placeComponent(tempDefModel, gridComponents[j][i], rowpreffred, true).second;\n }\n tempDefModel = second;\n }\n return tempDefModel;\n}\n\nexport function negotiateDimension (node) {\n let preferred;\n let cumultiveExtraSpaceAmt = 0;\n let alteredDim;\n let nonAlteredDim;\n\n const childrenLength = node.children().length;\n\n for (let index = 0; index < childrenLength; index++) {\n let fn;\n let extraSpaceAmt;\n const child = node.children()[index];\n\n if (child.parentCut() === 'h') {\n fn = yExtraSpace;\n alteredDim = 'height';\n nonAlteredDim = 'width';\n } else {\n fn = xExtraSpace;\n alteredDim = 'width';\n nonAlteredDim = 'height';\n }\n // if vertical then get extra height from other node and push it to the preferred node.\n // for horizontal cut the same thing is to be done with width\n if (child.isPreferred()) {\n // push extra space in sink. Execute it when all non preferred space are computed.\n preferred = child;\n\n continue; // eslint-disable-line no-continue\n }\n // reduce own height and save it in a var\n cumultiveExtraSpaceAmt += (extraSpaceAmt = fn(child));\n child.boundBox()[alteredDim] -= extraSpaceAmt;\n // update nonaltered dim from parent for any change which happened during negotiation\n child.boundBox()[nonAlteredDim] = child.parent().boundBox()[nonAlteredDim];\n\n negotiateDimension(child);\n }\n\n if (preferred) {\n preferred.boundBox()[alteredDim] += cumultiveExtraSpaceAmt;\n preferred.boundBox()[nonAlteredDim] = preferred.parent().boundBox()[nonAlteredDim];\n negotiateDimension(preferred);\n }\n}\n\nexport function computePosition (node) {\n node.children().forEach((child, i, children) => {\n const boundBox = determineBoundBox(child.boundBox(), i, children, child);\n child.boundBox(boundBox);\n computePosition(child);\n });\n}\n\nexport function allocateBoundingBox (node) {\n const totalWeight = node.children()\n .map(child => child.model().ratioWeight())\n .reduce((carry, val) => carry + val, 0);\n\n node.children().forEach((child, i, children) => {\n const lastSibling = children[i - 1];\n const ratio = child.model().ratioWeight() / totalWeight;\n\n if (child.parentCut() === 'h') {\n child.boundBox({\n top: i ? lastSibling.boundBox().top + lastSibling.boundBox().height : 0,\n left: child.parent().boundBox().left,\n height: child.parent().boundBox().height * ratio,\n width: child.parent().boundBox().width\n });\n } else {\n child.boundBox({\n top: child.parent().boundBox().top,\n left: i ? lastSibling.boundBox().left + lastSibling.boundBox().width : 0,\n height: child.parent().boundBox().height,\n width: child.parent().boundBox().width * ratio\n });\n }\n allocateBoundingBox(child);\n });\n}\n\n","import { getNodeId } from '../helper';\nimport { LayoutComponent } from '../../layout-component';\n\nclass Node {\n constructor (data) {\n this._model = data;\n this._parent = null;\n this._children = [];\n this._parentCut = null;\n this._boundBox = {\n top: null,\n left: null,\n height: null,\n width: null\n };\n\n this._id = this._model.host() instanceof LayoutComponent && this._model.host().renderAt() ?\n this._model.host().renderAt() :\n getNodeId();\n }\n\n addChildren (entries) {\n this._children.push(...entries);\n entries.forEach((e) => { e.parent(this); });\n }\n\n isRoot () {\n return this._parent === null;\n }\n\n isLeaf () {\n return !this._children.length;\n }\n\n getCutType () {\n return this._model.cut();\n }\n\n isPreferred () {\n return !!this._model.preferred();\n }\n\n children (children) {\n if (children) {\n this._children = children;\n }\n return this._children;\n }\n\n parent (parent) {\n if (parent) {\n this._parent = parent;\n }\n return this._parent;\n }\n\n parentCut (parentCut) {\n if (parentCut) {\n this._parentCut = parentCut;\n }\n return this._parentCut;\n }\n\n id (id) {\n if (id) {\n this._id = id;\n }\n return this._id;\n }\n\n model (model) {\n if (model) {\n this._model = model;\n }\n return this._model;\n }\n\n boundBox (bound) {\n if (bound) {\n this._boundBox = {\n top: bound.top,\n left: bound.left,\n height: bound.height,\n width: bound.width\n };\n }\n return this._boundBox;\n }\n /**\n * function to search a node and update it with the config provided.\n * @param {Object} nodeconfig\n */\n updateNode (nodeconfig) {\n if (this._id === nodeconfig._id) {\n this._model.cut(nodeconfig.cut);\n this._model.ratioWeight(nodeconfig.ratioWeight);\n } else {\n this._children.forEach((node) => {\n if (node._id === nodeconfig._id) {\n node.model.cut(nodeconfig.cut);\n node.model.ratioWeight(nodeconfig.ratioWeight);\n return;\n }\n this.searchNode(node, nodeconfig);\n });\n }\n }\n\n // Recursive function to search a node\n searchNode (node, nodeconfig) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeconfig._id) {\n childNode.model().cut(nodeconfig.cut);\n childNode.model().ratioWeight(nodeconfig.ratioWeight);\n } else {\n this.searchNode(childNode, nodeconfig);\n }\n });\n }\n\n /**\n * function to delete a node from tree Structure.\n * @param {String} nodeId - node Id of the Node\n */\n delete (nodeId) {\n this._children.forEach((node) => {\n if (node.id() === nodeId) {\n const index = this._children.indexOf(node);\n this._model.lanes().splice(index, 1);\n }\n this.deleteSearchNode(node, nodeId);\n });\n }\n\n // Recursive function to search a node\n deleteSearchNode (node, nodeId) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeId) {\n const index = node.children().indexOf(childNode);\n node.model().lanes().splice(index, 1);\n } else {\n this.deleteSearchNode(childNode, nodeId);\n }\n });\n }\n}\n\nexport default Node;\n","import Node from '../tree';\nimport {\n allocateBoundingBox,\n negotiateDimension,\n computePosition\n} from '../helper';\n\nexport default class LayoutModel {\n constructor (measurements, config) {\n this._measurements = measurements;\n this._config = config;\n this._root = this.createTree(this._config, null);\n this.setBoundBox();\n }\n\n createTree (config, parent) {\n const node = new Node(config);\n if (parent) {\n node.parentCut(parent.getCutType());\n parent.addChildren([node]);\n } else {\n this._root = node;\n }\n for (const lane of config.lanes()) {\n this.createTree(lane, node);\n }\n\n return this._root;\n }\n\n setBoundBox () {\n this._root.boundBox({\n top: 0,\n left: 0,\n width: this._measurements.width,\n height: this._measurements.height\n });\n allocateBoundingBox(this._root);\n }\n\n setHostPosition (node) {\n node.children().forEach((child) => {\n LayoutModel.setHostSpatialConfig(child);\n this.setHostPosition(child);\n });\n }\n\n static setHostSpatialConfig (node) {\n const bb = node.boundBox();\n const host = node.model().host();\n if (host && host.setSpatialConfig) {\n const conf = {\n x: bb.left,\n y: bb.top,\n width: bb.width,\n height: bb.height,\n renderAt: node.id()\n };\n host.setSpatialConfig(conf);\n }\n }\n\n negotiate () {\n negotiateDimension(this._root);\n computePosition(this._root);\n return this;\n }\n\n broadcast () {\n this.setHostPosition(this._root);\n return this;\n }\n\n tree () {\n return this._root;\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\nexport const ROW_MATRIX_INDEX = {\n 0: 'top',\n 1: 'center',\n 2: 'bottom'\n};\n\nexport const COLUMN_MATRIX_INDEX = {\n 0: 'left',\n 1: 'middle',\n 2: 'right'\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';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const GRID = 'grid';\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n\nexport const PAGINATION = 'pagination';\nexport const BUFFER = 'buffer';\nexport const HOLISTIC = 'holistic';\nexport const SCROLL = 'scroll';\nexport const MIDDLE = 'middle';\nexport const NO_BORDERS = null;\n\nexport const MAX_WIDTH_AVAIL_FOR_COL_MATRIX = 'maxWidthAvailableForColumnMatrix';\nexport const COLUMN_MATRIX = 'columnMatrix';\nexport const MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX = 'maxHeightAvailableForRowMatrix';\nexport const ROW_MATRIX = 'rowMatrix';\n","/* eslint no-undef: \"off\" */\n/* eslint default-case: \"off\" */\nexport class Utils {\n static isDOMElement (element) {\n return element instanceof Element;\n }\n\n static getID (element) {\n return element.id;\n }\n\n static getElement (id) {\n return document.getElementById(id);\n }\n\n static findContainer (data) {\n return data.filter(coordinate => coordinate.parent == null)[0];\n }\n /**\n * static method to remove the div\n * @param {} divId - div ID to be removed.\n */\n static removeDiv (divId) {\n if (document.getElementById(divId) !== null) { document.getElementById(divId).remove(); }\n }\n}\n","import { DEFAULT_CLASS_NAME } from '../constants/defaults';\nimport { LayoutComponent } from '../layout-component';\n\nexport default class DataPoint {\n constructor (node) {\n this._node = node;\n this._className = node.model().host() instanceof LayoutComponent ?\n node.model().host().className() : DEFAULT_CLASS_NAME;\n }\n\n node () {\n return this._node;\n }\n\n hasHost () {\n return this._node.model().host() instanceof LayoutComponent;\n }\n\n className () {\n return this._className || DEFAULT_CLASS_NAME;\n }\n}\n","import { getnodePoints } from './helper';\n\nexport class DataParser {\n constructor (data) {\n this._data = data;\n }\n\n defaultDataPointLogic () {\n const nodepoints = [];\n getnodePoints(this._data, nodepoints);\n return nodepoints;\n }\n\n}\n","import DataPoint from './data-point';\n\nexport const getnodePoints = (node, nodepoints) => {\n const datapoint = new DataPoint(node);\n nodepoints.push(datapoint);\n node.children().forEach((child) => {\n getnodePoints(child, nodepoints);\n });\n};\n","import { DataParser } from './data-parser';\n\nexport class HTMLDataAdapter extends DataParser {\n getCoordinates () {\n return super.defaultDataPointLogic();\n }\n}\n","export class Renderer {\n\n initRenderer (node, tree) {\n node.__logicalTree = tree;\n }\n}\n","import { HTMLDataAdapter } from '../data-adapters/html-data';\nimport { Utils } from '../utils';\nimport { Renderer } from './renderer';\n\nexport class HTMLRenderer extends Renderer {\n constructor (data) {\n super();\n this._data = data;\n this._coordinates = new HTMLDataAdapter(this._data).getCoordinates();\n }\n\n createhtml (mount, className) {\n const mainDiv = mount;\n super.initRenderer(mainDiv, this._data); // Initialise node with layout id\n this.parentDiv = this.createAndCustomiseParent(className);\n this._coordinates.forEach((node) => {\n if (node.hasHost()) {\n const host = node.node();\n this.parentDiv.appendChild(this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: node.className() }));\n }\n });\n mainDiv.appendChild(this.parentDiv);\n }\n\n createAndPositionDiv (config) {\n const { top, left, height, width, className, id } = config;\n const existingDiv = document.getElementById(id);\n const div = existingDiv || document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = `${left}px`;\n div.style.top = `${top}px`;\n div.style.height = `${height}px`;\n div.style.width = `${width}px`;\n div.id = id;\n div.className = className;\n return div;\n }\n\n createAndCustomiseParent (className) {\n const container = Utils.findContainer(this._coordinates);\n const host = container.node();\n const parentDiv = this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: container.className() });\n parentDiv.className = className;\n parentDiv.style.position = 'relative';\n return parentDiv;\n }\n\n coordinates () {\n return this._coordinates;\n }\n}\n","import { selectElement } from 'muze-utils';\nimport { HTMLRenderer } from '../renderers/html-renderer';\nimport { LayoutComponent } from '../layout-component';\n\nexport const getChildNode = (context, config) =>\n context.renderer().createAndPositionDiv(config);\n\nexport const findNode = (context, nodeID) =>\n context.renderer().coordinates().find(point => point.node().id() === nodeID);\n\nexport const renderHTML = (context) => {\n context.renderer(new HTMLRenderer(context.data()));\n context.renderer().createhtml(context.mount(), context.className());\n};\n\nexport const drawLayout = context => renderHTML(context);\n\nexport const drawComponent = (componentData) => {\n componentData.children().forEach((node) => {\n const host = node.model().host();\n if (host instanceof LayoutComponent) {\n host.draw();\n }\n drawComponent(node);\n });\n};\n\nexport const removeElement = (elemID) => {\n if (elemID) {\n selectElement(`#${elemID}`).remove();\n }\n};\n\nconst setAlignConfig = (alignment, params) => {\n let newNodeConfig = {};\n const { node, refNode } = params;\n switch (alignment) {\n case 'left':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(refNode.left - node.left))\n };\n break;\n\n case 'right':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(node.left + node.width - (refNode.left + refNode.width)))\n };\n break;\n\n case 'top':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: Math.abs(node.height - Math.abs(refNode.top - node.top)),\n width: node.width\n };\n break;\n\n case 'bottom':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: Math.abs(node.top - refNode.top + refNode.height),\n width: node.width\n };\n break;\n\n case 'h-center':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: refNode.width\n };\n break;\n\n case 'v-center':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: refNode.top,\n width: node.width\n };\n break;\n default:\n break;\n }\n return newNodeConfig;\n};\n\nexport const resolveAligment = (context, componentData) => {\n componentData.children().forEach((component) => {\n const host = component.model().host();\n\n if (host instanceof LayoutComponent && host.alignWith()) {\n const componentToAlign = context.componentMap().get(host.alignWith());\n\n if (componentToAlign) {\n const point = findNode(context, component.id()).node();\n const node = point.boundBox();\n const refNode = findNode(context, componentToAlign.renderAt())\n .node()\n .boundBox();\n const newNodeConfig = setAlignConfig(host.alignment(), { node, refNode });\n\n // check if model in parent component\n Object.assign(newNodeConfig, { id: point.id(), className: host.className() });\n context.renderer().createAndPositionDiv(newNodeConfig);\n context.componentMap().get(host.name()).setSpatialConfig({\n x: newNodeConfig.left,\n y: newNodeConfig.top,\n height: newNodeConfig.height,\n width: newNodeConfig.width\n\n });\n }\n }\n\n resolveAligment(context, component);\n });\n};\n","import { Utils } from '../utils';\nimport { drawLayout, resolveAligment, drawComponent } from './helper';\n\nexport class DrawingManager {\n constructor (data, renderer, container) {\n this._data = data.tree;\n this._componentMap = data.componentMap;\n this._layoutClassName = data.layoutClassName;\n this._renderer = renderer;\n this._mount = Utils.isDOMElement(container) ? container : Utils.getElement(container);\n }\n\n draw () {\n drawLayout(this);\n resolveAligment(this, this._data);\n drawComponent(this._data);\n return this;\n }\n\n data (data) {\n if (data) {\n this._data = data;\n }\n return this._data;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n className (param) {\n if (param) {\n this._layoutClassName = param;\n }\n return this._layoutClassName;\n }\n\n renderer (param) {\n if (param) {\n this._renderer = param;\n }\n return this._renderer;\n }\n\n mount (param) {\n if (param) {\n this._mount = param;\n }\n return this._mount;\n }\n}\n","import DefinitionModel from './definitionModel';\nimport { prepareTargetComponentMap, getComponent, placeComponent, placeGridComponent } from '../helper';\n\nexport default class DefinitionManager {\n constructor (componentMap, sequence, totalHeight, totalWidth) {\n this._componentMap = componentMap;\n this._prioritySequence = sequence;\n this._totalHeight = totalHeight;\n this._totalWidth = totalWidth;\n this._targetComponentMap = null;\n }\n\n // create the config model\n generateConfigModel () {\n prepareTargetComponentMap(this);\n const canvasComponent = this._targetComponentMap.get('canvas');\n const definitionModel = new DefinitionModel({});\n let tempDefModel = definitionModel;\n definitionModel.remainingHeight(this._totalHeight);\n definitionModel.remainingWidth(this._totalWidth);\n\n let componentRef = null;\n\n this._prioritySequence.forEach((name) => {\n componentRef = getComponent(canvasComponent, name);\n if (name !== 'grid') {\n tempDefModel = placeComponent(tempDefModel, componentRef).second;\n } else {\n tempDefModel = placeGridComponent(tempDefModel, componentRef.component);\n }\n });\n return definitionModel;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n targetComponentMap (param) {\n if (param) {\n this._targetComponentMap = param;\n }\n return this._targetComponentMap;\n }\n}\n","import { sanitizeConfig } from './helper';\n\nexport class LayoutDef {\n constructor () {\n this._componentMap = new Map();\n this._layoutDefinition = null;\n }\n\n addComponent (component) {\n this._componentMap.set(component.name(), component);\n }\n\n layoutDefinition (def) {\n if (def) {\n this._layoutDefinition = def;\n }\n return this._layoutDefinition;\n }\n\n addMultipleComponent (componentArray) {\n componentArray.forEach((comp) => {\n this.addComponent(comp);\n });\n }\n\n sanitizedDefinition () {\n sanitizeConfig(this, this._layoutDefinition);\n return this.layoutDefinition();\n }\n\n componentMap () {\n return this._componentMap;\n }\n resetComponentMap () {\n this._componentMap.clear();\n }\n}\n","import DefinitionManager from '../layout-definition/definition-manager';\n\nexport function sanitizeConfig (context, hostObj) {\n const hostID = hostObj.host();\n if (hostObj.lanes() && hostObj.lanes().length) {\n hostObj.lanes().forEach(childHost => sanitizeConfig(context, childHost));\n }\n if (hostID != null && typeof (hostID) === 'string') {\n if (context.componentMap().get(hostID) !== undefined) {\n hostObj.host(context.componentMap().get(hostID));\n }\n }\n}\n\nexport function calLayOutDef (context) {\n const { height, width } = context.dimension();\n const defManager = new DefinitionManager(context.layoutDef().componentMap(),\n context.prioritySequence(),\n height,\n width);\n const genLayoutdef = defManager.generateConfigModel();\n return genLayoutdef;\n}\n","import {\n LayoutModel\n} from '../layout-definition';\n\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT\n} from '../constants/defaults';\n\nimport {\n GRID\n} from '../../enums/constants';\n\nimport { DrawingManager } from '../drawing-manager';\nimport { removeElement } from '../drawing-manager/helper';\nimport { Utils } from '../utils';\nimport { LayoutDef } from './layout-def';\nimport { calLayOutDef } from './helper';\n\nexport default class LayoutManager {\n constructor (conf) {\n this._renderAt = conf.renderAt;\n this._layoutClassName = conf.className;\n this._dimension = {\n width: conf.width || DEFAULT_WIDTH,\n height: conf.height || DEFAULT_HEIGHT\n };\n\n this._skeletonType = conf.skeletonType || 'html';\n this._layoutDefinition = null;\n this._layoutDef = new LayoutDef();\n this._drawingManager = null;\n this._prioritySequence = [];\n this.tree = null;\n this._rootNodeID = null;\n }\n\n layoutDef (param) {\n if (param) {\n this._layoutDef = param;\n }\n return this._layoutDef;\n }\n\n prioritySequence (param) {\n if (param) {\n this._prioritySequence = param;\n }\n return this._prioritySequence;\n }\n\n dimension (param) {\n if (param) {\n Object.assign(this._dimension, param);\n }\n return this._dimension;\n }\n\n addComponent (component) {\n this._layoutDef.addComponent(component);\n }\n\n addMultipleComponent (componentArray) {\n this._layoutDef.addMultipleComponent(componentArray);\n }\n\n resetNode (node) {\n if (this.con) {\n this.con.resetNode(node);\n }\n }\n\n /**\n * function to update the node and rerender the layout.\n * @param {} config - node configuration to change.\n */\n updateNode (config) {\n this.tree.updateNode(config);\n this._layoutDefinition = this.tree.model;\n this.compute();\n }\n\n compute () {\n //----\n if (Utils.isDOMElement(this._renderAt)) {\n this._renderAt._layout = this;\n } else {\n document.getElementById(this._renderAt)._layout = this;\n }\n //-----\n this._layoutDefinition = calLayOutDef(this);\n this._layoutDef.layoutDefinition(this._layoutDefinition);\n this._layoutDefinition = this._layoutDef.sanitizedDefinition();\n this._layout = new LayoutModel({\n width: this._dimension.width,\n height: this._dimension.height\n },\n this._layoutDefinition);\n this.tree = this._layout.negotiate().tree();\n this._layout.broadcast();\n this._drawingManager = new DrawingManager({\n tree: this.tree,\n componentMap: this._layoutDef.componentMap(),\n layoutClassName: this._layoutClassName\n }, this._skeletonType, this._renderAt);\n\n if (this._rootNodeID) {\n this.tree.id(this._rootNodeID);\n } else {\n this._rootNodeID = this.tree.id();\n }\n // this will draw all the components by calling their draw method\n this._drawingManager.draw();\n }\n\n getRootNodeId () {\n return this._rootNodeID;\n }\n\n /**\n * This function takes the LayoutComponents and Register them in component store\n * @param {Array} layoutComponents\n */\n registerComponents (layoutComponents) {\n this._prioritySequence.length = 0;\n this._layoutDef.resetComponentMap();\n layoutComponents.forEach((container) => {\n if (container) {\n this._prioritySequence.push(container.name());\n this.addComponent(container);\n if (container.name() === 'grid') {\n container.component.forEach((componentArr) => {\n componentArr.forEach((compo) => {\n this.addComponent(compo);\n });\n });\n }\n }\n });\n return this;\n }\n\n getComponent (componentName) {\n return this._layoutDef.componentMap().get(componentName);\n }\n\n deleteElement (component, elementName) {\n this._layoutDef.componentMap().delete(elementName);\n const deleteElementId = component.renderAt();\n return removeElement(deleteElementId);\n }\n\n removeComponent (name) {\n const component = this.getComponent(name);\n if (component) {\n if (name === GRID) {\n return component.component.map(comp => comp.map(\n co => this.deleteElement(co, co.name())\n ));\n }\n return this.deleteElement(component, name);\n }\n return this;\n }\n\n renderAt (mount) {\n if (mount) {\n this._renderAt = mount;\n }\n return this._renderAt;\n }\n}\n","import { isEqual, STATE_NAMESPACES, selectElement, getValueParser } from 'muze-utils';\nimport { VisualGroup } from '@chartshq/visual-group';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, DATA, CONFIG, GRID }\n from '../constants';\nimport { canvasOptions } from './local-options';\nimport { LayoutManager } from '../../../layout/src/tree-layout';\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.} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, Object.assign({\n throwback: context._throwback\n }, context.dependencies()))];\n};\n\nexport const fixScrollBarConfig = (config) => {\n config.scrollBar.thickness = Math.min(50, Math.max(10, config.scrollBar.thickness));\n return config;\n};\n\nexport const setLayoutInfForUnits = (context) => {\n const layoutManager = context._layoutManager;\n const gridLayout = layoutManager.getComponent(GRID);\n const boundBox = gridLayout && gridLayout.getBoundBox();\n const valueMatrix = context.composition().visualGroup.matrixInstance().value;\n const parentContainer = selectElement(`#${layoutManager.getRootNodeId()}`).node();\n valueMatrix.each((cell) => {\n cell.valueOf().parentContainerInf({\n el: parentContainer,\n dimensions: boundBox\n });\n });\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 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 const { invalidValues } = context.config();\n\n visualGroup.valueParser(getValueParser(invalidValues));\n visualGroup.createMatrices();\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\nconst equalityChecker = (props, params) => {\n let checker = () => false;\n return !props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n checker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n checker = isEqual('Object');\n break;\n default:\n checker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return checker(oldVal, newVal);\n });\n};\n\nconst updateChecker = (props, params) => props.every((option, i) => {\n const val = params[i][1];\n switch (option) {\n case ROWS:\n case COLUMNS:\n return val !== null;\n\n case DATA:\n return val && !val.isEmpty();\n\n default:\n return true;\n\n }\n});\n\nexport const notifyAnimationEnd = (context) => {\n const viewInfo = context.layout().viewInfo();\n const centerMatrix = viewInfo && viewInfo.viewMatricesInfo.matrices.center[1] || [];\n const promises = [];\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n promises.push(cell.valueOf().done());\n });\n });\n const lifeCycleManager = context.lifeCycle();\n if (promises.length) {\n Promise.all(promises).then(() => {\n // Update life cycle\n lifeCycleManager.notify({ client: context, action: 'drawn' });\n const animDonePromises = [];\n\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n cell.valueOf().layers().forEach((layer) => {\n animDonePromises.push(layer.animationDone());\n });\n });\n });\n\n [context.xAxes(), context.yAxes()].forEach((axisArr) => {\n axisArr = axisArr || [];\n axisArr.forEach((axes) => {\n axes.forEach((axisInst) => {\n animDonePromises.push(axisInst.animationDone());\n });\n });\n });\n\n Promise.all(animDonePromises).then(() => {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n });\n });\n } else {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n }\n};\n\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n const nameSpaceProps = [...allOptions, ...Object.keys(canvasOptions)].map(prop =>\n `${STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE}.${prop}`);\n store.registerChangeListener(nameSpaceProps, (...params) => {\n const equalityProps = equalityChecker(props, params);\n const updateProps = updateChecker(props, params);\n // inform attached board to rerender\n if (equalityProps && context.mount()) {\n if (updateProps) {\n dispatchProps(context);\n } else {\n context.composition().visualGroup.remove();\n }\n context.render();\n }\n notifyAnimationEnd(context);\n }, true);\n};\n\nexport const applyInteractionPolicy = (firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n if (visualGroup) {\n const valueMatrix = visualGroup.matrixInstance().value;\n const interactionPolicy = firebolt._interactionPolicy;\n interactionPolicy(valueMatrix, firebolt);\n const crossInteractionPolicy = firebolt._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\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/**\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 */\nexport const 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 const rotationVal = xAxes[i][j].renderConfig().labels.rotation;\n if (rotationVal && rotationVal !== 0) {\n rotation = rotationVal;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.renderConfig({ labels: { rotation } });\n axis.smartTicks(axis.setTickConfig());\n });\n });\n }\n};\n\nexport const createGroupState = (context) => {\n const [globalState, localState] = VisualGroup.getState();\n const store = context._store;\n store.append('app.group', globalState);\n store.append('local.group', localState);\n};\n\nexport const removeChild = (mount) => {\n while (mount.firstChild) {\n mount.removeChild(mount.firstChild);\n }\n};\n\nexport const createLayoutManager = () => {\n const layoutManager = new LayoutManager({\n className: 'muze-group-container'\n });\n return layoutManager;\n};\n","/**\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 * @module GlobalOptions\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { fixScrollBarConfig } from './canvas/helper';\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, null],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n takesMultipleParams: true,\n sanitization: ([config, auxConfig = {}], oldConfig) => {\n // Stores additional config, if passed\n const { reset = false } = auxConfig;\n let oldConf = {};\n\n if (!reset) {\n oldConf = mergeRecursive({}, config === null ? {} : oldConfig);\n }\n\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return fixScrollBarConfig(newConf);\n }\n\n }\n }\n};\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 *\n * @memberof GenericLayout\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 this._config.border.width = Math.max(0, this._config.border.width);\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.PAGINATION]: 'scroll',\n [FieldNames.BUFFER]: 20,\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","/**\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 *\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 *\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.setAvailableSpace();\n const space = placeholder.getLogicalSpace();\n const minSecondMeasure = placeholder.getMinMeasures(minMeasures[secondMeasure]);\n\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minSecondMeasure);\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\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\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\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, ERROR_MSG } from 'muze-utils';\nimport {\n createTree,\n combineMatrices,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { 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._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\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 computeLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n computeViewableSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getPriorityDistribution () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 redistributeSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n static defaultConfig () {\n return defaultConfig;\n }\n\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\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.redistributeSpaces(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 * 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 getViewableMatrices () {\n return this.viewableMatrix;\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","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n computeLogicalSpace,\n createMatrixEachLevel\n } from '../utils';\nimport { ROW_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class RowVisualMatrix extends 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 super(matrix, config);\n\n this._breakPointer = (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: ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\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 computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, false);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height\n } = measures;\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = [height, height];\n const columnMeasures = widths;\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\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 tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n let remainingAvailWidth;\n let remainingWidth;\n let cWidths = [];\n let conditions = [];\n let maxPrioritySpace = 0;\n const {\n matrix,\n width: availableWidth,\n maxMeasures: maxWidths,\n maxWidth: currentWidth,\n height\n } = measures;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length ? this.primaryMatrix()[0].length : 0;\n\n const dist = [];\n\n remainingAvailWidth = availableWidth;\n remainingWidth = currentWidth;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n // divider = Math.min(2, matrixLen);\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n // divider = Math.min(1, matrixLen);\n }\n conditions.forEach((i) => {\n dist[i] = maxWidths[i];\n maxPrioritySpace += maxWidths[i];\n remainingAvailWidth -= dist[i];\n remainingWidth -= dist[i];\n });\n matrix[0].forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n dist[i] = remainingAvailWidth * (maxWidths[i] / remainingWidth);\n }\n });\n matrix.forEach(row => row.forEach((col, cIdx) => {\n if (conditions.indexOf(cIdx) === -1) {\n col.setAvailableSpace(dist[cIdx], height);\n\n cWidths[cIdx] = Math.max(cWidths[cIdx] || 0, Math.floor(col.getLogicalSpace().width));\n } else {\n cWidths[cIdx] = 0;\n }\n }));\n\n const prioritySpace = availableWidth - cWidths.reduce((t, n) => t + n);\n if (prioritySpace < 0) {\n cWidths = cWidths.map(() => 0);\n } else {\n conditions.forEach((i) => {\n cWidths[i] = Math.floor(prioritySpace * (dist[i] / maxPrioritySpace || 1));\n });\n }\n return cWidths;\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 const { height } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n\n return Math.min(widthMeasures.length - 1, i);\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 redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const maxMeasures = this.maxMeasures();\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n const logicalWidths = this.getPriorityDistribution({\n matrix: this._layoutMatrix,\n maxWidth,\n maxMeasures,\n width,\n height\n });\n\n this.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, logicalWidths };\n const measures = this.redistributeViewSpaces(options);\n maxWidths = measures.maxWidths;\n maxHeights = measures.maxHeights;\n });\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, height, maxHeights, maxWidths, logicalWidths } = measures;\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n measures.maxMeasures = maxMeasures;\n measures.maxWidth = maxWidth;\n if (maxWidth > 0) {\n cWidths = logicalWidths;\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 if (maxWidths.length > 0) {\n cWidths = cWidths.map((e, i) => Math.max(e, maxWidths[0][i] || 0));\n }\n maxWidths.push(cWidths);\n for (let x = 0; x < maxWidths.length; x++) {\n maxWidths[x] = cWidths;\n }\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = measures;\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 cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n\n if (rIdx === 0 && cIdx < breakPointer) {\n columnWidths[0][cIdx] = colWidth;\n widths[0] = (widths[0] || 0) + colWidth;\n } else if (rIdx === 0 && cIdx >= breakPointer) {\n columnWidths[1][cIdx - breakPointer] = colWidth;\n widths[1] = (widths[1] || 0) + colWidth;\n }\n if (cIdx === this._lastLevelKey) {\n rowHeights[0][rIdx] = colHeight;\n rowHeights[1][rIdx] = colHeight;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n getDistributedWidth,\n spaceTakenByRow,\n createMatrixEachLevel,\n computeLogicalSpace\n } from '../utils';\nimport { COLUMN_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class ColumnVisualMatrix extends 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 super(matrix, config);\n\n this._breakPointer = matrix[0].length;\n\n // Create Tree\n this._tree = {\n key: COLUMN_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\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 computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, true);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height,\n width\n } = measures;\n\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i, height };\n const {\n heights,\n rowHeights,\n columnWidths\n } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = heights;\n const 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\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\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n const {\n height,\n maxHeights\n } = measures;\n let remainingHeight = height;\n let heightDist = [];\n let conditions = [];\n let divider = 2;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n divider = 2;\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n divider = 1;\n }\n maxHeights.forEach((heights, index) => {\n if (conditions.indexOf(index) === -1) {\n heightDist[index] = heights;\n remainingHeight -= heights;\n }\n });\n if (remainingHeight < 0) {\n heightDist = heightDist.map(() => 0);\n } else {\n conditions.forEach((condition) => {\n heightDist[condition] = Math.min(maxHeights[condition], (remainingHeight) / divider);\n });\n }\n return heightDist;\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) {\n let j;\n const { width } = this.availableSpace();\n\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, 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 redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n\n this.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 = this.redistributeViewSpaces(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let rHeights = [];\n const {\n matrix,\n width,\n maxHeights,\n maxWidths\n } = measures;\n const borderWidth = this.config().unitMeasures.border;\n\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();\n\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace.height);\n\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, Math.floor(col.getLogicalSpace().height));\n }));\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n maxHeights.push(rHeights);\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} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, height, maxWidths, maxHeights, matrixIndex } = measures;\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 const heightDistribution = this.getPriorityDistribution({ height, maxHeights: maxHeights[0] || [] });\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = heightDistribution[rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n\n if (cIdx === 0 && rIdx < breakPointer) {\n rowHeights[0][rIdx] = colHeight;\n heights[0] = (heights[0] || 0) + colHeight;\n } else if (cIdx === 0 && rIdx >= breakPointer) {\n rowHeights[1][rIdx - breakPointer] = colHeight;\n heights[1] = (heights[1] || 0) + colHeight;\n }\n if (rIdx === this._lastLevelKey) {\n columnWidths[0][cIdx] = colWidth;\n columnWidths[1][cIdx] = colWidth;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import {\n HEIGHT, WIDTH, COLUMN, ROW, HORIZONTAL, VERTICAL, HOLISTIC,\n MAX_WIDTH_AVAIL_FOR_COL_MATRIX, COLUMN_MATRIX, MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX, ROW_MATRIX, SCROLL\n} 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\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\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\nconst paginationDetailsMap = {\n column: {\n maxMeasure: MAX_WIDTH_AVAIL_FOR_COL_MATRIX,\n matrix: COLUMN_MATRIX,\n measureType: WIDTH,\n scrollType: HORIZONTAL\n },\n row: {\n maxMeasure: MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX,\n matrix: ROW_MATRIX,\n measureType: HEIGHT,\n scrollType: VERTICAL\n }\n};\n\n/**\n * This method provides the required width/height in the different pagination stages.\n * If the pagination is holistic, then only the max width/height will be provided for layouting\n * If scroll is enabled, then the entire width/height shall be provided for layouting\n * Note: width is required for scrolling the columns while height is required for scrolling rows\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {Object} measureDetails different measure details for row/column\n * @param {number} maxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst getMatrixMeasureForPagination = (layout, measureDetails, maxMeasure, buffer) => {\n const {\n pagination\n } = layout.config();\n const {\n matrix,\n measureType,\n scrollType\n } = measureDetails;\n\n switch (pagination) {\n case HOLISTIC:\n return maxMeasure;\n default: {\n const actualMeasure = getMatrixMeasurement(layout[matrix](), measureType) + buffer;\n\n if (actualMeasure > maxMeasure) {\n layout.scrollInfo({ [scrollType]: true });\n }\n return Math.max(maxMeasure, actualMeasure);\n }\n }\n};\n\n/**\n * This method uses the getMatrixMeasureForPagination function to calculate maximum measure\n * depending on the layouting algorithm used\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {string} matrixType row/column\n * @param {number} relatedMaxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst paginationMeasureGetter = (layout, matrixType, relatedMaxMeasure, buffer) =>\n getMatrixMeasureForPagination(layout, paginationDetailsMap[matrixType], relatedMaxMeasure, buffer);\n\nconst getMatrixWidthDetails = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const {\n width\n } = layout.measurement();\n const {\n border,\n buffer\n } = layout.config();\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Get maximum width allowed for the row matrix\n const maxRowMatrixWidth = Math.min(rowMatrixWidth + buffer, width / 2);\n\n // Get maximum width available for the column matrix\n const maxWidthAvailableForColumnMatrix = width - maxRowMatrixWidth - borderWidth;\n\n // Set width for column matrix\n const columnMatrixWidth = paginationMeasureGetter(layout, COLUMN, maxWidthAvailableForColumnMatrix, 0);\n\n return {\n rowMatrixWidth,\n maxRowMatrixWidth,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n\nconst getHeightRequiredByColMatrix = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const columnMatrix = layout.columnMatrix();\n\n // Get maximum allowed height for colum matrix\n const maxColumnMatrixHeight = Math.min(columnMatrix.getLogicalSpace().height, height / 2);\n\n // Set the computed width and max height to column matrix to determine the actual height\n // that will be taken by the column matrix\n columnMatrix.setAvailableSpace(columnMatrixWidth, maxColumnMatrixHeight);\n\n // Get the set of pages column view\n const columnViewPages = columnMatrix.getViewableSpaces();\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 return {\n columnMatrixHeight,\n maxColumnMatrixHeight\n };\n};\n\nconst getMatrixHeightDetails = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const {\n buffer\n } = layout.config();\n\n // Get actual height required by column matrix\n const { columnMatrixHeight, maxColumnMatrixHeight } = getHeightRequiredByColMatrix(layout, columnMatrixWidth);\n\n // Based on column height, compute max height available for row matrix\n const maxHeightAvailableForRowMatrix = height - Math.min(maxColumnMatrixHeight, columnMatrixHeight);\n\n // Get height for row matrix\n const rowMatrixHeight = paginationMeasureGetter(layout, ROW, maxHeightAvailableForRowMatrix, buffer);\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n };\n};\n\nconst setValueMatrixMeasurements = (layout, rowViewableSpaces, columnViewableSpaces) => {\n const centerMatrix = layout.centerMatrix();\n\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get the heights for each cell in the row matrix\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n\n // Get the widths for each of the row matrix cells(primary and secondary)\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n\n // Get the widths for each cell in the column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n\n // Get the widths for each of the column matrix cells(primary and secondary)\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix computed throught the row and\n // column matrices\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n\n // Set the heights and widths for the corner matrices namely:\n // TOP_LEFT\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n // TOP_RIGHT\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n // BOTTOM_LEFT\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n // BOTTOM_RIGHT\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n};\n\nconst bufferCondition = {\n isScroll: true,\n pagination: SCROLL\n};\n\nconst getBufferFromCondition = (layout, type) => {\n const scrollInfo = layout.scrollInfo();\n const {\n pagination\n } = layout.config();\n\n const currentBufferType = {\n pagination,\n isScroll: scrollInfo[type]\n };\n\n return Object.keys(bufferCondition).every(e => bufferCondition[e] === currentBufferType[e]);\n};\n\nconst getActualBufferFromConfig = (layout) => {\n const {\n buffer\n } = layout.config();\n const [horizontalBuffer, verticalBuffer] = [HORIZONTAL, VERTICAL].map((type) => {\n if (getBufferFromCondition(layout, type)) {\n return buffer;\n }\n return 0;\n });\n\n return {\n horizontalBuffer,\n verticalBuffer\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\n // Compute the widths of the row and column matrices\n const {\n rowMatrixWidth,\n maxRowMatrixWidth,\n maxWidthAvailableForColumnMatrix,\n columnMatrixWidth\n } = getMatrixWidthDetails(layout);\n\n // Compute the heights of the row and column matrices\n const {\n columnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n } = getMatrixHeightDetails(layout, columnMatrixWidth);\n\n const {\n horizontalBuffer,\n verticalBuffer\n } = getActualBufferFromConfig(layout);\n rowMatrix.setAvailableSpace(maxRowMatrixWidth - verticalBuffer, rowMatrixHeight - horizontalBuffer);\n\n // Get row and columns viewable spaces\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n\n // Set view spaces for row and columns\n setViewSpaces(layout, ROW, rowViewableSpaces);\n setViewSpaces(layout, COLUMN, columnViewableSpaces);\n\n // Set measures for each cell of the value matrix\n setValueMatrixMeasurements(layout, rowViewableSpaces, columnViewableSpaces);\n\n return {\n rowMatrixHeight: rowMatrixHeight - horizontalBuffer,\n rowMatrixWidth: rowMatrixWidth - verticalBuffer,\n maxHeightAvailableForRowMatrix: maxHeightAvailableForRowMatrix - horizontalBuffer,\n\n columnMatrixHeight,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\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.getViewableMatrices();\n const columnMatrices = columnMatrix.getViewableMatrices();\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\nconst measureSum = measureArr => measureArr.reduce((total, measure) => total + measure, 0);\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, maxRowHeight, maxColWidth) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowSpaces = rowMatrix.getViewableSpaces()[rowPointer];\n const colSpaces = columnMatrix.getViewableSpaces()[columnPointer];\n\n const {\n rowHeights,\n width: rowMatrixWidth\n } = rowSpaces;\n const {\n columnWidths,\n height: columnMatrixHeight\n } = colSpaces;\n\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = measureSum(rowHeights.primary);\n const centerWidth = measureSum(columnWidths.primary);\n const viewWidth = [leftWidth, Math.min(centerWidth, maxColWidth), rightWidth];\n const viewHeight = [topHeight, Math.min(centerHeight, maxRowHeight), bottomHeight];\n\n return {\n viewWidth,\n viewHeight,\n actualCenterMeasures: {\n height: centerHeight,\n width: centerWidth\n },\n totalMeasures: {\n width: measureSum(viewWidth),\n height: measureSum(viewHeight)\n },\n unitHeights: rowHeights,\n unitWidths: columnWidths\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, mergeRecursive } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements } from './computations';\nimport { getViewMeasurements, getViewMatrices } from './view-info-getter';\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 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 this._scrollInfo = { horizontal: false, vertical: false };\n }\n\n static defaultViewInfo () {\n return Object.assign({}, {\n layoutDimensions: {\n border: this.defaultConfig().border,\n viewHeight: [0, 0, 0],\n viewWidth: [0, 0, 0]\n },\n viewMatricesInfo: {\n columnPages: 0,\n rowPages: 0,\n matrices: { top: [], center: [], bottom: [] }\n }\n });\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 this.scrollInfo({ horizontal: false, vertical: false });\n const {\n maxHeightAvailableForRowMatrix,\n maxWidthAvailableForColumnMatrix\n } = computeLayoutMeasurements(this);\n\n this.setViewInformation(maxHeightAvailableForRowMatrix, maxWidthAvailableForColumnMatrix);\n return this;\n }\n\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.viewInfo();\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 pages (type) {\n const { viewMatricesInfo } = this.viewInfo();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n viewInfo (...viewInfo) {\n if (viewInfo.length) {\n this._viewInfo = viewInfo[0];\n return this;\n }\n return this._viewInfo;\n }\n\n scrollInfo (...scrollInfo) {\n if (scrollInfo.length) {\n this._scrollInfo = mergeRecursive(this._scrollInfo, scrollInfo[0]);\n return this;\n }\n return this._scrollInfo;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation (maxRowHeight, maxColWidth) {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this, maxRowHeight, maxColWidth);\n layoutDimensions.border = border;\n this.viewInfo({\n viewMatricesInfo,\n layoutDimensions\n });\n return this;\n }\n}\n","import RowMatrix from '../visual-matrix/row-matrix';\nimport ColumnMatrix from '../visual-matrix/column-matrix';\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 priority\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\n context.rowMatrix(new RowMatrix([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 priority: priority.row,\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 ColumnMatrix([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 priority: priority.col,\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import {\n TOP, BOTTOM, LEFT, RIGHT, CENTER, BLANK_BORDERS, COLUMN, ROW,\n VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS\n} from '../enums/constants';\n\nconst borderMap = {\n [`${TOP}-${LEFT}`]: NO_BORDERS,\n [`${TOP}-${MIDDLE}`]: COLUMN,\n [`${TOP}-${RIGHT}`]: NO_BORDERS,\n [`${CENTER}-${LEFT}`]: ROW,\n [`${CENTER}-${MIDDLE}`]: CENTER,\n [`${CENTER}-${RIGHT}`]: ROW,\n [`${BOTTOM}-${LEFT}`]: NO_BORDERS,\n [`${BOTTOM}-${MIDDLE}`]: COLUMN,\n [`${BOTTOM}-${RIGHT}`]: NO_BORDERS\n};\n\nconst applySpecificBorder = (cells, color, type, style) => {\n cells.style(`border-${type}`, `${style} ${color}`);\n};\n\nconst specificBorderApplier = (borderTypes, showBorders, cells, borderInfo) => {\n const {\n color,\n width,\n style\n } = borderInfo;\n const borderStyle = `${width}px ${style}`;\n\n borderTypes.forEach((borderType) => {\n applySpecificBorder(cells, showBorders[borderType] ? color : BLANK_BORDERS, borderType, borderStyle);\n });\n};\n\nconst borderApplier = (cells, borderInfo) => {\n const {\n showRowBorders,\n showColBorders,\n showValueBorders\n } = borderInfo;\n return {\n row: () => specificBorderApplier([TOP, BOTTOM], showRowBorders, cells, borderInfo),\n column: () => specificBorderApplier([LEFT, RIGHT], showColBorders, cells, borderInfo),\n center: () => specificBorderApplier([LEFT, RIGHT, TOP, BOTTOM], showValueBorders, cells, borderInfo)\n };\n};\n\nexport const applyBorders = (cells, border, row, column) => {\n const borderApplierFn = borderApplier(cells, border);\n const borderMapVal = borderMap[`${ROW_MATRIX_INDEX[VIEW_INDEX[row]]}-${COLUMN_MATRIX_INDEX[column]}`];\n if (borderMapVal) {\n borderApplierFn[borderMapVal]();\n }\n};\n","import { selectElement } from 'muze-utils';\nimport {\n TOP, BOTTOM, ROW_SPAN, COL_SPAN, CENTER, ROW, COLUMN\n} from '../enums/constants';\n\nconst orderMaker = arr => Array.from(Array(arr.length).keys());\n\nconst nestByStack = (stack, updateArr, optionalParams = {}) => {\n let {\n order,\n keyFn\n } = optionalParams;\n const arr = updateArr.slice();\n const currStack = stack.slice();\n const prevStack = currStack.slice();\n // Order in which element are to be checked for nesting, default normal looping\n // Order is always in the order of nest, i.e., left to right\n order = order || Array.from(Array(arr.length).keys());\n\n // Key function, if array of objects\n keyFn = keyFn || (v => v);\n\n // Return same array if stack is empty\n if (currStack.length === 0) {\n const newArr = [];\n order.forEach((e) => {\n newArr.push(arr[e]);\n });\n return { prevStack, currStack: arr, arr: newArr };\n }\n\n let arrVal = '';\n let stackVal = '';\n const newArr = [];\n\n // Loop in order\n for (let i = order.length - 1; i >= 0; i--) {\n // Get current element index from the order given\n const currElemIndex = order[i];\n\n // Crete a hashmap for the hierarchy by joining strings of the array for both stack and input array\n arrVal += keyFn(arr[currElemIndex]);\n stackVal += keyFn(currStack[currElemIndex]);\n\n // If the current value and value in stack is same, convert it to null\n if (arrVal === stackVal) {\n newArr[currElemIndex] = null;\n } else {\n stackVal = '';\n // Loop from the current index in order to the last element in order to change the\n // whole hierarchy\n for (let j = i; j < order.length; j++) {\n const newElem = order[j];\n const arrElem = arr[newElem];\n\n newArr[newElem] = arrElem;\n\n // Reset stack to new stack\n currStack[newElem] = arrElem;\n stackVal = arrVal;\n }\n }\n }\n const returnArr = [];\n order.forEach((e) => {\n returnArr.push(newArr[e]);\n });\n return { prevStack, currStack, arr: returnArr };\n};\n\nconst spanCalculator = (colData, colIdx, matrix, rIdx) => {\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData) {\n return () => null;\n }\n\n const conditions = {\n row: count => matrix[rIdx + count] && matrix[rIdx + count][colIdx],\n column: count => matrix[rIdx][colIdx + count]\n };\n\n return (type) => {\n let count = 1;\n let isNull = false;\n\n while (!isNull) {\n if (conditions[type](count) === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n };\n};\n\nconst maskCreator = (matrix, order) => ({\n row: () => {\n let stack = [];\n return matrix.map((e) => {\n const {\n currStack,\n arr\n } = nestByStack(stack, e, { keyFn: val => val.valueOf(), order });\n\n stack = currStack;\n return arr;\n });\n },\n column: () => {\n let stack = [];\n const viewMatrix = [];\n matrix.length && matrix[0].forEach((cell, colIndex) => {\n const hierarchy = [];\n matrix.forEach((row) => {\n hierarchy.push(row[colIndex]);\n });\n const {\n currStack,\n arr\n } = nestByStack(stack, hierarchy, { keyFn: val => val.valueOf(), order });\n stack = currStack;\n\n matrix.forEach((row, rowIndex) => {\n viewMatrix[rowIndex] = viewMatrix[rowIndex] || [];\n viewMatrix[rowIndex][colIndex] = arr[rowIndex];\n });\n });\n return viewMatrix;\n }\n});\n\nconst spanGenerator = viewMatrix => ({\n row: () => {\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 = spanCalculator(col, i, viewMatrix, ridx)('row');\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return spans;\n },\n column: () => viewMatrix.map((row, ridx) => row.map((col, i) => spanCalculator(col, i, viewMatrix, ridx)('column'))\n .filter(col => col !== null))\n});\n\nconst getOrder = () => ({\n row: matrix => orderMaker(matrix[0]),\n column: matrix => orderMaker(matrix)\n});\n\nconst matrixSpanGeneratorMap = {\n [`${TOP}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${BOTTOM}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${CENTER}-0`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n },\n [`${CENTER}-2`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n }\n};\n\nconst matrixSpanGenerator = (type) => {\n const generator = matrixSpanGeneratorMap[type];\n if (generator) {\n return generator;\n }\n return {\n orderGetter: () => null,\n viewMatrixMaker: matrix => () => matrix,\n spanMaker: () => () => null\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 spans = null;\n let viewMatrix = matrix;\n const {\n orderGetter,\n viewMatrixMaker,\n spanMaker\n } = matrixSpanGenerator(`${type}-${index}`);\n\n if (matrix.length) {\n const order = orderGetter(matrix);\n viewMatrix = viewMatrixMaker(matrix, order)();\n spans = spanMaker(viewMatrix)();\n }\n return { viewMatrix, spans };\n}\n\nconst spaceAllocationDueToSpan = (span = 1, placeholder, config, index) => {\n const height = placeholder.availHeight();\n const width = placeholder.availWidth();\n const borderWidth = config.border.width;\n const { unitWidths } = config.dimensions;\n const { col } = index;\n\n return {\n [ROW_SPAN] () {\n placeholder.setAvailableSpace(width, height * span);\n if (span === 1) {\n selectElement(this).style('height', `${height * span + borderWidth}px`);\n }\n },\n [COL_SPAN] () {\n const primaryUnitWidth = unitWidths.primary[col];\n if (span > 1) {\n let cumulativeWidth = 0;\n for (let i = col; i < col + span; i++) {\n cumulativeWidth += unitWidths.primary[i] - borderWidth;\n }\n placeholder.setAvailableSpace(cumulativeWidth + borderWidth, height);\n } else if (primaryUnitWidth) {\n placeholder.setAvailableSpace(primaryUnitWidth - borderWidth, height);\n }\n selectElement(this).style('height', `${height}px`);\n }\n };\n};\n\nconst spanApplier = (cells, spans, config, type) => {\n let cellCounter = 0;\n cells.attr(type, function (cell, colIndex) {\n if (colIndex === 0) {\n cellCounter = 0;\n }\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n const index = {\n row: cell.rowIndex,\n col: cellCounter\n };\n\n spaceAllocationDueToSpan(span, placeholder, config, index)[type].bind(this)();\n cellCounter += span;\n return span;\n });\n};\n\nconst spanApplierMap = {\n [`${TOP}-0`]: null,\n [`${TOP}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${TOP}-2`]: null,\n [`${CENTER}-0`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${CENTER}-1`]: null,\n [`${CENTER}-2`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${BOTTOM}-0`]: null,\n [`${BOTTOM}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${BOTTOM}-2`]: null\n};\n\nexport const applySpans = (cells, spans, config, type) => {\n const applier = spanApplierMap[type];\n if (applier) {\n applier(cells, spans, config);\n }\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 *\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';\nexport const MAX_LINES = 'maxLines';\nexport const MIN_CHARS = 'minCharacters';\nexport const ROTATION = 'rotation';\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 getMinMeasures (providedMinMeasure = 0) {\n return providedMinMeasure;\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]: null,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true,\n [CONSTANTS.MAX_LINES]: 0,\n [CONSTANTS.MIN_CHARS]: 0,\n [CONSTANTS.ROTATION]: null\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 minSpacing: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {},\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nconst textProps = {\n smartText: {}\n};\nexport const PROPS = {\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [TEXT]: mergeRecursive(textProps, 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, BOTTOM, TOP } 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\n if (width || height) {\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.source().logicalSpace(null);\n } else {\n this.source().resetLogicalSpace();\n }\n this.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 let actualWidth = 0;\n let actualHeight = 0;\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 orientation\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 selection.classed(`${CLASSPREFIX}-axis-container-${orientation}`, true);\n\n this.mount(mount);\n if (!availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (!availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n actualWidth = availWidth;\n actualHeight = availHeight;\n if (!show) {\n actualWidth = (orientation === TOP || orientation === BOTTOM) ? availWidth : 0;\n actualHeight = (orientation === TOP || orientation === BOTTOM) ? 0 : availHeight;\n }\n wrapperDiv.style(WIDTH, `${actualWidth}px`)\n .style(HEIGHT, `${actualHeight}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\n getMinMeasures () {\n return 0;\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\nconst setSmartText = (context) => {\n const source = context.source();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n rotation\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const labelManager = context.dependencies().labelManager;\n\n labelManager.setStyle(context._computedStyle);\n\n !rotation && context.smartText(labelManager.getSmartText(source, availWidth, availHeight, false));\n rotation && context.smartText(labelManager.getSmartText(source, availHeight, availWidth, true));\n\n return context;\n};\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 {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n show,\n maxLines,\n minCharacters\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const source = context.source();\n const space = context.smartText();\n const minText = new Array(minCharacters).fill('W').join('');\n const _minTextSpace = labelManager.getOriSize(minText);\n\n context.config({ rotation: false });\n if (space.width > (availWidth || 0) && maxLines) {\n space.height = space.oriTextHeight * maxLines;\n }\n if (availWidth && availWidth < space.width) {\n space.width = _minTextSpace.width;\n }\n if (availWidth && availWidth < Math.min(_minTextSpace.width, space.oriTextWidth)) {\n const smartSpace = labelManager.getSmartText(source, availHeight, _minTextSpace.height, true);\n space.width = smartSpace.height;\n space.height = smartSpace.width;\n context.config({ rotation: true });\n context.smartText(smartSpace);\n }\n\n if (show) {\n return {\n width: Math.ceil(space.width) + paddedWidth,\n height: Math.ceil(space.height) + paddedHeight\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 generateGetterSetters(this, PROPS[TEXT]);\n const space = this._dependencies.labelManager.getOriSize('w');\n this.minSpacing({ width: Math.floor(space.width * 3 / 4), height: Math.floor(space.height / 2) });\n setSmartText(this);\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 setSmartText(this);\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 availHeight = this.availHeight();\n const {\n margin,\n show,\n verticalAlign,\n textAlign,\n rotation\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 const vAlign = verticalAlign || rotation ? 'middle' : 'top';\n const {\n width,\n height\n } = this.smartText();\n const {\n height: minHeightSpace\n } = this.minSpacing();\n const translation = {\n top: width + minHeightSpace / 2,\n middle: width / 2 + minHeightSpace,\n bottom: minHeightSpace\n };\n\n container.style('vertical-align', vAlign);\n\n // Set class name\n elem.classed(this._className, true);\n\n // Apply styles\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n elem.style('transform', rotation ? `translate(${height / 2}px,\n ${translation[vAlign]}px) rotate(-90deg)` : '');\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n container.style(`margin-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n this._dependencies.labelManager.setStyle(this._computedStyle);\n elem.html(this._dependencies.labelManager.getSmartText(this.source(), availWidth, availHeight, true).text);\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.clearCaching();\n [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\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 .width(width).height(height - this.getCaptionSpace().height)\n .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';\nimport { TOP } from '../constants';\n\n/**\n *\n *\n * @param {*} rawContent\n *\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 *\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n let margin = {};\n const {\n content,\n classPrefix,\n maxLines\n } = config;\n const cell = prevCell || new TextCell(\n {\n type: cellType === 'title' ? 'header' : 'text',\n className: `${classPrefix}-${cellType}-cell`\n }, {\n labelManager\n })\n .config({ maxLines }).minSpacing({ width: 0, height: 0 });\n\n cell.source(content);\n cell._minTickDiff = { height: 0, width: 0 };\n\n if (config.position === TOP) {\n margin = { top: 0, bottom: config.padding };\n } else {\n margin = { top: config.padding, bottom: 0 };\n }\n cell.config({ margin });\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 *\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type,\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 const subtitle = context.subtitle();\n const isSubtitle = resolveTitleSubTitleContent(subtitle[0]);\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.height = context.height();\n config.classPrefix = context.config().classPrefix;\n config.content = content;\n config.padding = (type === 'title' && !isSubtitle.length) ? subtitle[1].padding : config.padding;\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;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport { getValueParser, retrieveFieldDisplayName, DataModel, getObjProp } from 'muze-utils';\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 *\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 && scale) {\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({\n scale,\n canvas,\n fieldName: scaleProps.field,\n title: retrieveFieldDisplayName(canvas.data(), scaleProps.field),\n LegendCls,\n scaleType\n });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n *\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 const { invalidValues } = canvas.config();\n\n const parser = getValueParser(invalidValues);\n legendInfo.forEach((dataInfo, index) => {\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n title: titleText,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || titleText;\n if (config.show) {\n config.position = position;\n config.align = align;\n let legend = getObjProp(prevLegends[scaleType], index);\n if (!legend) {\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 const metaData = legend.metaData();\n if (metaData instanceof DataModel) {\n metaData.dispose();\n }\n legend.scale(scale)\n .valueParser(parser)\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 *\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 *\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.composition().legend || {});\n};\n","import { LayoutComponent } from '../../../../layout/src/tree-layout';\n\nexport default class MuzeComponent extends LayoutComponent {\n getLogicalSpace () {\n const { width, height } = this.boundBox();\n return { width, height };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n }\n\n getBoundBox () {\n return this.boundBox();\n }\n\n updateWrapper () {\n throw Error('Update is not implemented');\n }\n\n setParams () {\n throw Error('set params is not implemented');\n }\n}\n","import { selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { LEFT } from '../../constants';\n\nexport default class HeaderComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n renderHeader (container) {\n const layoutConfig = this.params.config;\n container = selectElement(container);\n const { align } = layoutConfig;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([this.name]);\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 const { height, width } = this.boundBox();\n this.component.setAvailableSpace(width, height);\n\n this.component && this.component.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (layoutConfig && this.component) {\n cont.style('float', LEFT)\n .style('text-align', align);\n // .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n }\n\n draw (container) {\n this.renderHeader(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.setParams(params);\n this.name(params.name);\n this.boundBox(params.component.getLogicalSpace());\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y,\n left: conf.x,\n width: conf.width,\n height: conf.height });\n this.renderAt(conf.renderAt);\n }\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport {\n LEFT, RIGHT, VERTICAL, HORIZONTAL, TOP, BOTTOM, HORIZONTAL_CENTER, VERTICAL_CENTER\n} from '../../constants';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\nfunction defaultAlignmentHelper (position) {\n let alignment = null;\n const alignWith = `${ROW_MATRIX_INDEX[1]}-${COLUMN_MATRIX_INDEX[1]}`;\n switch (position) {\n case TOP:\n case BOTTOM:\n alignment = HORIZONTAL_CENTER;\n break;\n case LEFT:\n case RIGHT:\n alignment = VERTICAL_CENTER;\n break;\n default:\n alignment = VERTICAL_CENTER;\n }\n return { alignment, alignWith };\n}\nexport default class LegendComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.measurement.legendSpace, 0);\n this.setParams(params);\n }\n\n renderLegend (container) {\n container = selectElement(container);\n const sectionComponents = [];\n const { position, classPrefix } = this.params.config;\n const legendMount = makeElement(container, 'div', [this.components],\n `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = this.newDimensions.width;\n const legHeight = this.newDimensions.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 this.components.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 // mount.each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true));\n mount.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 mount.classed(`${classPrefix}-legend-horizontal-section`, true);\n mount.classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', this.components, `${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 draw (container) {\n this.renderLegend(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.measurement.legendSpace);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.components = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n const { alignWith, alignment } = defaultAlignmentHelper(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith || alignWith);\n this.alignment(params.config.alignment || alignment);\n }\n\n}\n","import {\n selectElement,\n makeElement,\n getD3Drag,\n getEvent,\n getWindow,\n hasTouch\n} from 'muze-utils';\nimport './scroll-bar.scss';\nimport { WIDTH, HEIGHT } from '../../../constants';\n\nconst d3Drag = getD3Drag();\n\nconst arrowSizeMap = {\n left: WIDTH,\n right: WIDTH,\n top: HEIGHT,\n bottom: HEIGHT\n};\n\nexport const getUnitPositions = (unitMeasures, totalLength, viewLength) => {\n let currentLen = 0;\n const measures = unitMeasures.primary && unitMeasures.primary.length ?\n unitMeasures.primary : unitMeasures.secondary;\n\n return measures.map((e) => {\n const unitPosition = currentLen * 100 / (totalLength - viewLength);\n currentLen += e;\n return unitPosition;\n });\n};\n\nexport const createScrollBarArrow = (mount, type, config) => {\n const {\n classPrefix,\n thickness\n } = config;\n const arrow = makeElement(mount, 'div', [type], `${classPrefix}-scroll-arrow-${type}`);\n\n arrow.classed(`${classPrefix}-scroll-arrow`, true);\n arrow.style(arrowSizeMap[type], `${thickness}px`);\n\n const chevron = makeElement(arrow, 'div', [1], `${classPrefix}-scroll-arrow-chevron`);\n\n chevron.attr('id', `${classPrefix}-scroll-arrow-chevron-${type}`);\n\n return arrow;\n};\n\nexport const createScrollBarRect = (mount, config) => {\n const {\n classPrefix\n } = config;\n const rect = makeElement(mount, 'div', [1], `${classPrefix}-scroll-rect`);\n const mover = makeElement(rect, 'div', [1], `${classPrefix}-scroll-mover`);\n\n return { rect, mover };\n};\n\nexport const applyRectClick = (scrollMaker, moverRect) => {\n const {\n rect\n } = moverRect;\n\n rect.on('click', () => {\n const event = getEvent();\n scrollMaker.emptyScrollAreaClick(event);\n });\n};\n\nconst applyMoverDrag = (scrollMaker, moverRect) => {\n let startPos = {};\n let moverStartPos = 0;\n let rectStartPos = 0;\n let endPos = {};\n const {\n mover,\n rect\n } = moverRect;\n\n mover.call(d3Drag()\n .on('start', () => {\n const event = getEvent();\n\n moverStartPos = mover.node().getBoundingClientRect();\n rectStartPos = rect.node().getBoundingClientRect();\n startPos = {\n x: event.x,\n y: event.y\n };\n })\n .on('drag', () => {\n const event = getEvent();\n const window = getWindow();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n const distanceMoved = {\n x: endPos.x - startPos.x,\n y: endPos.y - startPos.y\n };\n const actualPosition = {\n x: moverStartPos.x + distanceMoved.x - rectStartPos.x + window.pageXOffset,\n y: moverStartPos.y + distanceMoved.y - rectStartPos.y + window.pageYOffset\n };\n\n scrollMaker.changeMoverPosition(actualPosition);\n }));\n};\n\nconst applyScrollMouseDownAction = (moverRect, scrollMaker, speed) => {\n const {\n mover,\n rect\n } = moverRect;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n scrollMaker.changeMoverPosition({ x: x - rectX + speed, y: y - rectY + speed });\n};\n\nconst registerListenerOnArrow = (scrollMaker, moverRect, arrowType, speed) => {\n let timer = '';\n const arrow = scrollMaker._components[arrowType];\n const isTouchDevice = hasTouch();\n\n arrow.on(isTouchDevice ? 'touchstart' : 'mousedown', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n timer = setInterval(() => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n }, 100);\n }).on(isTouchDevice ? 'touchend' : 'mouseup', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n clearInterval(timer);\n }).on('click', () => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n });\n};\n\nexport const registerListeners = (scrollMaker) => {\n const {\n moverRect\n } = scrollMaker._components;\n\n const speed = scrollMaker.config().speed;\n\n registerListenerOnArrow(scrollMaker, moverRect, 'prevArrow', -speed);\n applyMoverDrag(scrollMaker, moverRect);\n applyRectClick(scrollMaker, moverRect);\n registerListenerOnArrow(scrollMaker, moverRect, 'nextArrow', speed);\n};\n\nexport const scrollContainerHelper = (mountPoint, config, dimensions, type) => {\n const {\n classPrefix\n } = config;\n const scrollBarContainer = makeElement(selectElement(mountPoint), 'div', [1], `#${classPrefix}-scroll-bar-${type}`);\n\n scrollBarContainer.classed(`${classPrefix}-scroll-bar`, true);\n scrollBarContainer.style(WIDTH, `${dimensions.width}px`);\n scrollBarContainer.style(HEIGHT, `${dimensions.height}px`);\n return scrollBarContainer;\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n\n config: {\n sanitization: (context, value) => {\n value = mergeRecursive(context._config, value);\n return value;\n }\n },\n manager: {},\n unitPositions: {},\n logicalSpace: {}\n};\n\n","import { ERROR_MSG, generateGetterSetters } from 'muze-utils';\nimport {\n scrollContainerHelper,\n registerListeners\n} from './helper';\nimport { PROPS } from './props';\n\nexport class ScrollMaker {\n\n constructor () {\n this._components = {};\n this._logicalSpace = {};\n this._attachedScrollAction = () => {};\n this._config = {\n thickness: 10,\n speed: 2\n };\n this._unitPositions = null;\n\n generateGetterSetters(this, PROPS);\n }\n\n static type () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n emptyScrollAreaClick () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n changeMoverPosition () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollDeltaTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n createScroll (mountPoint) {\n const config = this.config();\n\n return {\n scrollBarContainer: scrollContainerHelper(mountPoint, config, this.logicalSpace(), this.constructor.type())\n };\n }\n\n attachScrollAction (externalScrollAction) {\n this._attachedScrollAction = externalScrollAction;\n return this;\n }\n\n detachScrollAction () {\n this._attachedScrollAction = () => {};\n return this;\n }\n\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n registerListeners () {\n registerListeners(this);\n return this;\n }\n\n remove () {\n this._components.scrollBarContainer.remove();\n return this;\n }\n}\n\n","import MuzeComponent from './muze-chart-component';\nimport { HorizontalScrollMaker } from './scroll-bar-maker/horizontal-scroll-maker';\nimport { VerticalScrollMaker } from './scroll-bar-maker/vertical-scroll-maker';\n\nconst scrollMakerMap = {\n horizontal: HorizontalScrollMaker,\n vertical: VerticalScrollMaker\n};\n\n/**\n * Scroll Component acts as a wrapper over the scoll bars created using the respective Scroll Makers\n * This provides a consistent API for layouting using the tree layout system.\n *\n *\n * @class\n * @public\n * @module ScrollComponent\n */\nexport default class ScrollComponent extends MuzeComponent {\n\n constructor (params) {\n const ScrollMaker = scrollMakerMap[params.config.type];\n\n params.component = new ScrollMaker();\n params.component.config(params.config.scrollBarComponentConfig);\n params.component.logicalSpace(params.dimensions);\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n manager (...manager) {\n if (manager.length) {\n this.component.manager(manager[0]);\n return this;\n }\n return this.component.manager();\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollDeltaTo (delta) {\n this.component.scrollDeltaTo(delta);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollTo (scrollPercentage) {\n this.component.scrollTo(scrollPercentage);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page based on the unit index.\n * The input is provided as a number represting the index for the unit.\n * For vertical scroll, it's the row index that will be required.\n * For horizontal scroll, it's the column index that will be required\n *\n * @public\n *\n * @param {number} unitIndex Index of the unit appearing in the grid\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollToUnitIndex (unitIndex) {\n const unitPositions = this.component.unitPositions();\n const sanitizedUnitIndex = Math.min(Math.max(0, unitIndex), unitPositions.length - 1);\n this.component.scrollTo(unitPositions[sanitizedUnitIndex]);\n return this;\n }\n\n /**\n * Provides the positions of the units(either horizontal or vertical based on the type\n * of scroll bar it wraps) relative to it's container. The position of the first unit starts at 0\n *\n *\n * @public\n *\n * @return {Array} Positions of units either horizontal or vertical\n */\n getScrollPositionsForUnits () {\n return this.component.unitPositions();\n }\n\n draw (container) {\n this.component.createScroll(container || document.getElementById(this.renderAt()));\n return this;\n }\n\n /**\n * Can be used to attach a scroll action whenever scrolling occurs in the canvas\n *\n * @public\n * @param {number} externalAction Action to be attached during scroll\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n attachScrollAction (externalAction) {\n this.component.attachScrollAction(externalAction);\n return this;\n }\n\n /**\n * Can be used to detach the scroll action already bound to the scroll bar\n *\n * @public\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n detachScrollAction () {\n this.component.detachScrollAction();\n return this;\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.component.config(params.config.scrollBarComponentConfig);\n this.component.logicalSpace(params.dimensions);\n this.boundBox(this.component.getLogicalSpace());\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component || this.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n remove () {\n this.component.remove();\n }\n}\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { HORIZONTAL, HEIGHT, WIDTH, LEFT } from '../../../constants';\n\nexport class HorizontalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: horizontal\n */\n static type () {\n return HORIZONTAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, config, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'left', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'right', config);\n const {\n mover,\n rect\n } = moverRect;\n\n const { height, width, totalLength, viewLength, unitWidths } = this.logicalSpace();\n const scrollBarWithouArrowLength = width - height * 2;\n\n rect.style(WIDTH, `${dimensions.width - height * 2}px`);\n rect.style(HEIGHT, `${100}%`);\n mover.style(WIDTH, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(HEIGHT, `${100}%`);\n mover.style(LEFT, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n this.unitPositions(getUnitPositions(unitWidths, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n let positionAdjuster = speed * 10;\n if (event.x < x) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n const {\n totalLength\n } = this.logicalSpace();\n\n if (newPosition.x < 0) {\n currentPos = 0;\n } else if (newPosition.x + moverPos.width > rectStartPos.width) {\n currentPos = rectStartPos.width - moverPos.width;\n } else {\n currentPos = newPosition.x;\n }\n\n mover.style(LEFT, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: 0, x: moverPos.x - rectStartPos.x - delta });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {HorizontalScrollMaker} Instance of the HorizontalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.width)) / 100;\n\n this.changeMoverPosition({ y: 0, x: movement });\n return this;\n }\n\n}\n\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { VERTICAL, TOP, HEIGHT, WIDTH } from '../../../constants';\n\nexport class VerticalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: vertical\n */\n static type () {\n return VERTICAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'top', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'bottom', config);\n const {\n mover,\n rect\n } = moverRect;\n const { height, width, totalLength, viewLength, unitHeights } = this.logicalSpace();\n const scrollBarWithouArrowLength = height - width * 2;\n\n rect.style(HEIGHT, `${scrollBarWithouArrowLength}px`);\n rect.style(WIDTH, `${100}%`);\n mover.style(WIDTH, `${100}%`);\n mover.style(HEIGHT, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(TOP, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n\n this.unitPositions(getUnitPositions(unitHeights, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n let positionAdjuster = speed * 10;\n if (event.y < y) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const {\n totalLength\n } = this.logicalSpace();\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n\n if (newPosition.y < 0) {\n currentPos = 0;\n } else if (newPosition.y + moverPos.height > rectStartPos.height) {\n currentPos = rectStartPos.height - moverPos.height;\n } else {\n currentPos = newPosition.y;\n }\n mover.style(TOP, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: moverPos.y - rectStartPos.y - delta, x: 0 });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.height)) / 100;\n\n this.changeMoverPosition({ x: 0, y: movement });\n return this;\n }\n\n}\n","import { makeElement } from 'muze-utils';\nimport { cellSpanMaker, applySpans } from '../../../../layout/src/grid-layout/span-maker';\nimport { applyBorders } from '../../../../layout/src/grid-layout/border-helper';\n\nimport {\n TOP, CENTER\n} from '../../../../layout/src/enums/constants';\nimport MuzeComponent from './muze-chart-component';\nimport { WIDTH, HEIGHT, HIDDEN, OVERFLOW, AUTO, VISIBLE } from '../../constants';\n\nconst renderPlaceholders = (cells) => {\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder.render(this);\n });\n};\n\nexport default class MatrixComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n this.className(params.config.className);\n }\n\n applyScroll (container) {\n const row = this.params.config.row;\n const column = this.params.config.column;\n const { horizontal, vertical } = this.params.config.scrollInfo;\n container.style(OVERFLOW, VISIBLE);\n container.style(WIDTH, AUTO);\n container.style(HEIGHT, AUTO);\n\n if (horizontal && column === 1) {\n container.style(OVERFLOW, HIDDEN);\n container.style(WIDTH, '100%');\n }\n\n if (vertical && row === CENTER) {\n container.style(OVERFLOW, HIDDEN);\n container.style(HEIGHT, '100%');\n }\n }\n\n renderMatrix (mountPoint) {\n // Creating containers for each matrix individually\n const classPrefix = this.params.config.classPrefix;\n const row = this.params.config.row;\n const column = this.params.config.column;\n const dimensions = this.params.config.dimensions;\n const border = this.params.config.border;\n\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${row}-${column + 1}`)\n .classed(`${classPrefix}-grid-${row}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n this.applyScroll(containerForMatrix);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(this.component, row, column);\n\n // Rendering the table components\n const { cells } = this.renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n applySpans(cells, spans, { dimensions, border }, `${row}-${column}`);\n renderPlaceholders(cells);\n\n cells.exit().each((cell) => {\n cell.placeholder.remove();\n });\n\n applyBorders(cells, border, row, column);\n }\n\n 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\n draw (container) {\n this.renderMatrix(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(TOP);\n this.className(params.config.className);\n }\n}\n","import { selectElement, getEvent } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport MatrixComponent from './matrix-component';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\nimport { WHEEL_DELTA_MODIFIER } from '../../enums/constants';\n\n/**\n * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific\n * elements based on the scroll distance provided\n *\n *\n */\nconst applyScrollAction = (elem, classPrefix, scollDistance, type) => {\n selectElement(elem)\n .selectAll(`.${classPrefix}-grid`)\n .property(type, scollDistance);\n};\n\n/**\n * Applies the action of the scroll by actually scrolling the respective matrices based on the\n * type of scroll. It returns a function which has both the scroll methods available\n *\n * @return {Object} contains the horizontal and vertical scroll actions on the grid component\n */\nconst scrollActionApplier = (movement, context) => {\n const classPrefix = context.params.config.classPrefix;\n\n return {\n horizontal: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[e][1].renderAt()}`, classPrefix, movement, 'scrollLeft'));\n },\n vertical: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[1][e].renderAt()}`, classPrefix, movement, 'scrollTop'));\n }\n };\n};\n\nexport default class GridComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.gridComponents = [];\n this.setParams(params);\n }\n\n sanitizeGrid () {\n let height = 0;\n let width = 0;\n const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo();\n const scrollInfo = this.component.scrollInfo();\n const {\n viewHeight,\n viewWidth,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n\n for (let i = 0; i < 3; i++) {\n if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) {\n this.gridComponents[i] = [];\n }\n for (let j = 0; j < 3; j++) {\n const matrixDim = {\n height: viewHeight[i],\n width: viewWidth[j],\n unitHeights,\n unitWidths\n };\n const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j];\n const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`;\n const matrixConfig = {\n dimensions: matrixDim,\n border: layoutDimensions.border,\n classPrefix: this.params.config.classPrefix,\n scrollInfo,\n row: ROW_MATRIX_INDEX[i],\n column: j\n };\n if (this.gridComponents[i][j] instanceof MuzeComponent) {\n this.gridComponents[i][j].updateWrapper({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n } else {\n const matrixWrapper = new MatrixComponent({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n this.gridComponents[i].push(matrixWrapper);\n }\n if (i === 0) {\n width += matrixDim.width;\n }\n if (j === 0) {\n height += matrixDim.height;\n }\n }\n }\n this.boundBox({ height, width });\n\n this.component = this.gridComponents;\n this.allComponents = this.gridComponents;\n }\n\n scrollBarManager (...manager) {\n if (manager.length) {\n this._scrollBarManager = manager[0];\n return this;\n }\n return this._scrollBarManager;\n }\n\n /**\n * Attaches a mousewheel listener to the center matrix, based on which the scrolling can occur.\n * It uses the scroll component to change the position of the scroller, which ultimately scrolls the center matrix\n *\n *\n * @return {GridComponent} Instance of the GridComponent\n */\n attachScrollListener () {\n const scrollBarManager = this.scrollBarManager();\n selectElement(`#${this.component[1][1].renderAt()}`)\n .on('wheel', () => {\n const event = getEvent();\n const {\n wheelDeltaX,\n wheelDeltaY\n } = event;\n\n // Scrolling horizontally\n if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('horizontal', event)\n .triggerScrollBarAction('horizontal', wheelDeltaX / WHEEL_DELTA_MODIFIER);\n }\n\n // Scrolling Vertically\n if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('vertical', event)\n .triggerScrollBarAction('vertical', wheelDeltaY / WHEEL_DELTA_MODIFIER);\n }\n });\n return this;\n }\n\n performScrollAction (direction, movedView) {\n scrollActionApplier(movedView, this)[direction]();\n return this;\n }\n\n getBoundBox () {\n const { top, left } = this.component[0][0].boundBox();\n const { height, width } = this.boundBox();\n\n return {\n top,\n left,\n height,\n width\n };\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.className(params.config.className);\n this.sanitizeGrid();\n return this;\n }\n\n attachListener () {\n this.attachScrollListener();\n return this;\n }\n}\n","export const SIDE_EFFECT_COMMON = 'common';\nexport const SIDE_EFFECT_INDIVIDUAL = 'individual';\nexport const TOOLTIP_CONSOLIDATED = 'consolidated';\nexport const TOOLTIP_FRAGMENTED = 'fragmented';\nexport const WHEEL_DELTA_MODIFIER = 30;\n","import { selectElement, makeElement, applyStyle } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\n\nexport default class MessageComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n }\n\n render (container) {\n const parent = selectElement(container);\n\n const { config } = this.params;\n const { className } = config.classPrefix;\n\n const node = makeElement(parent, 'div', [1], className);\n const { height, width } = config.dimensions;\n const { message } = config;\n\n applyStyle(node, { width: `${width}px`, height: `${height}px` });\n\n const child = makeElement(node, 'div', [1], `${className}-child`);\n const textElement = makeElement(child, 'text', [1]);\n\n textElement.html(message);\n }\n\n draw (container) {\n this.render(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n const { target, className } = params.config;\n this.target(target);\n this.className(className);\n return this;\n }\n}\n","import {\n TITLE,\n SUB_TITLE,\n LEGEND, VERTICAL,\n HORIZONTAL,\n WIDTH,\n HEIGHT,\n TOP,\n LEFT,\n RIGHT,\n MESSAGE,\n GRID,\n NO_DATA_MESSAGE,\n HORIZONTAL_CENTER\n} from '../constants';\nimport HeaderComponent from './components/headerComponent';\nimport LegendComponent from './components/legendComponent';\nimport ScrollComponent from './components/scroll-component';\nimport GridComponent from './components/grid-component';\nimport MessageComponent from './components/message-component';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG, CANVAS, MESSAGE_CONFIG } from './defaults';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, CENTER } from '../../../layout/src/enums/constants';\n\n// Mapping between types of headers and their required configs for wrapper creation\nconst headerMap = {\n title: {\n headerCell: 'titleCell',\n configType: TITLE_CONFIG\n },\n subtitle: {\n headerCell: 'subtitleCell',\n configType: SUB_TITLE_CONFIG\n }\n};\n\n// Mapping of header alignment values\nconst headerAlignmentMap = {\n [LEFT]: LEFT,\n [RIGHT]: RIGHT,\n [CENTER]: HORIZONTAL_CENTER\n};\n\n/**\n * returns if data is Valid\n *\n *\n * @param {Object} params object where data has to be checked for validity\n * @return {Boolean} Returns true if all of the params are valid\n */\nconst checkParamsValidation = params => Object.keys(params).every((param => params[param]));\n\n/**\n * returns if message Component is needed or not\n *\n *\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Boolean} Returns if grid is present\n */\nconst isGridPresent = (renderDetails) => {\n const { rows, columns, values } = renderDetails.components;\n return checkParamsValidation({ rows, columns, values });\n};\n\n/**\n * Creates the wrapper for the header, i.e., title and subtitle to be used in the tree layout\n *\n *\n * @param {string} headerType type of header: title/subtite\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createHeaderWrapper = (headerType, layoutManager, renderDetails) => {\n let wrapper = null;\n\n const { components, layoutConfig } = renderDetails;\n const { headerCell, configType } = headerMap[headerType];\n const target = { target: CANVAS };\n\n if (components.headers && components.headers[headerCell]) {\n let headerConfig = layoutConfig[headerType];\n const header = components.headers[headerCell];\n\n headerConfig = Object.assign({}, headerConfig, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n alignWith: `${ROW_MATRIX_INDEX[0]}-${COLUMN_MATRIX_INDEX[1]}`,\n alignment: headerAlignmentMap[headerConfig.align],\n className: configType.className\n });\n\n const wrapperParams = {\n name: headerType,\n component: header,\n config: headerConfig\n };\n\n const existingComponent = layoutManager.getComponent(headerType);\n if (existingComponent) {\n wrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n wrapper = new HeaderComponent(wrapperParams);\n }\n }\n return wrapper;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} canvas canvas instance\n * @return {Instance} Returns the respective wrappers\n */\nconst createMessageWrapper = (layoutManager, canvas, renderDetails, renderGrid) => {\n const headerValues = Object.values(renderDetails.components.headers);\n let sum = 0;\n for (const val of headerValues) {\n sum += val.logicalSpace().height;\n }\n let messageWrapper = null;\n\n if (!renderGrid) {\n const defaultDimensions = { height: canvas.height() - sum, width: canvas.width() };\n const gridComponent = layoutManager.getComponent(GRID);\n const { height, width } = (gridComponent && gridComponent.getBoundBox()) || defaultDimensions;\n const target = { target: CANVAS };\n const config = {\n ...target,\n dimensions: { height, width },\n message: NO_DATA_MESSAGE,\n classPrefix: MESSAGE_CONFIG\n };\n const wrapperParams = {\n name: MESSAGE,\n component: null,\n config\n };\n const existingComponent = layoutManager.getComponent(MESSAGE);\n\n if (existingComponent) {\n messageWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n messageWrapper = new MessageComponent(wrapperParams);\n }\n return messageWrapper;\n }\n return null;\n};\n\n// Mapping between types of scrollBars and their required configs for wrapper creation\nconst scrollBarMap = config => ({\n vertical: {\n componentName: 'verticalScrollBar',\n width: 'thickness',\n height: 'layoutBasedMeasure',\n layoutBasedMeasure: HEIGHT,\n viewMeasure: 'viewHeight',\n rowAlign: 1,\n colAlign: config.align === 'right' ? 2 : 0,\n position: config.align,\n alignment: TOP\n },\n horizontal: {\n componentName: 'horizontalScrollBar',\n width: 'layoutBasedMeasure',\n layoutBasedMeasure: WIDTH,\n viewMeasure: 'viewWidth',\n height: 'thickness',\n rowAlign: config.align === 'top' ? 0 : 2,\n colAlign: 1,\n position: config.align,\n alignment: LEFT\n }\n});\n\n/**\n * Creates the wrapper for the scroller, i.e., horizontal and vertical to be used in the tree layout\n *\n *\n * @param {string} scrollBarType type of scrollbar: horizontal/vertical\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst createScrollBarWrapper = (scrollBarType, layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let scrollBarWrapper = null;\n const { layoutConfig } = renderDetails;\n const target = { target: CANVAS };\n const { scrollBar } = layoutConfig;\n const { layoutDimensions } = grid.viewInfo();\n const {\n actualCenterMeasures,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n const {\n componentName, layoutBasedMeasure, width, height, rowAlign, colAlign,\n viewMeasure, position, alignment\n } = scrollBarMap(scrollBar[scrollBarType])[scrollBarType];\n const dimensions = {\n thickness: scrollBar.thickness,\n layoutBasedMeasure: layoutDimensions[viewMeasure][1]\n };\n const isScroll = grid.scrollInfo()[scrollBarType];\n const totalLength = actualCenterMeasures[layoutBasedMeasure];\n const viewLength = layoutDimensions[viewMeasure][1];\n\n const scrollConfig = Object.assign({}, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n scrollBarComponentConfig: {\n ...scrollBar,\n classPrefix: layoutConfig.classPrefix\n },\n\n type: scrollBarType,\n alignWith: `${ROW_MATRIX_INDEX[rowAlign]}-${COLUMN_MATRIX_INDEX[colAlign]}`,\n alignment,\n position\n });\n\n const wrapperParams = {\n name: componentName,\n config: scrollConfig,\n dimensions: {\n width: dimensions[width],\n height: dimensions[height],\n totalLength,\n viewLength,\n unitHeights,\n unitWidths\n }\n };\n\n const existingComponent = layoutManager.getComponent(componentName);\n\n if (!isScroll) {\n existingComponent && existingComponent.remove();\n return null;\n }\n\n if (existingComponent) {\n scrollBarWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n scrollBarWrapper = new ScrollComponent(wrapperParams);\n }\n\n return scrollBarWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the legend to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createLegendWrapper = (layoutManager, renderDetails, renderGrid) => {\n if (renderGrid) {\n let legendWrapper = null;\n const { components, layoutConfig, measurement } = renderDetails;\n const target = { target: CANVAS };\n\n if (components.legends && components.legends.length) {\n const legendConfig = { ...layoutConfig.legend, ...target, measurement };\n const wrapperParams = {\n name: LEGEND,\n component: components.legends,\n config: legendConfig\n };\n\n const existingComponent = layoutManager.getComponent(LEGEND);\n\n if (existingComponent) {\n legendWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n legendWrapper = new LegendComponent(wrapperParams);\n }\n }\n return legendWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst gridLayoutWrapper = (layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let gridWrapper = null;\n const target = { target: CANVAS };\n const { layoutConfig } = renderDetails;\n\n const config = {\n ...target,\n pagination: layoutConfig.pagination,\n classPrefix: layoutConfig.classPrefix,\n dimensions: { height: 0, width: 0 }\n };\n const wrapperParams = {\n name: GRID,\n component: grid,\n config\n };\n const existingComponent = layoutManager.getComponent(GRID);\n if (existingComponent) {\n gridWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n gridWrapper = new GridComponent(wrapperParams);\n }\n return gridWrapper;\n }\n return null;\n};\n/**\n * Responsible for providing the wrapper creators for every component in Muze.\n * This function, when called, returns the set of components and their respective wrappers.\n *\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} grid Instance of the grid layout\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers for each component\n */\nexport const componentWrapperMaker = (canvas, grid, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const renderGrid = isGridPresent(renderDetails);\n return {\n title: createHeaderWrapper(TITLE, layoutManager, renderDetails),\n subtitle: createHeaderWrapper(SUB_TITLE, layoutManager, renderDetails),\n message: createMessageWrapper(layoutManager, canvas, renderDetails, renderGrid),\n legend: createLegendWrapper(layoutManager, renderDetails, renderGrid),\n grid: gridLayoutWrapper(layoutManager, renderDetails, grid, renderGrid),\n verticalScrollBar: createScrollBarWrapper(VERTICAL, layoutManager, renderDetails, grid, renderGrid),\n horizontalScrollBar: createScrollBarWrapper(HORIZONTAL, layoutManager, renderDetails, grid, renderGrid)\n };\n};\n","export class ScrollManager {\n\n constructor () {\n this._scrollBarComponents = {};\n this._attachedComponents = {};\n }\n\n scrollBarComponents (...sbc) {\n if (sbc.length) {\n this._scrollBarComponents = sbc[0];\n return this;\n }\n return this._scrollBarComponents;\n }\n\n attachedComponents (...abc) {\n if (abc.length) {\n this._attachedComponents = abc[0];\n return this;\n }\n return this._attachedComponents;\n }\n\n preventBrowserScroll (type, event) {\n if (this.scrollBarComponents()[type]) {\n // Prevent default behaviour and stop propagating\n event.preventDefault();\n event.stopPropagation();\n }\n return this;\n }\n\n performAttachedScrollFunction (type, movedViewLength) {\n Object.values(this.attachedComponents()).forEach((e) => {\n e.performScrollAction(type, movedViewLength);\n });\n return this;\n }\n\n triggerScrollBarAction (type, delta) {\n this.scrollBarComponents()[type] && this.scrollBarComponents()[type].scrollDeltaTo(delta);\n return this;\n }\n}\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { componentWrapperMaker } from './component-wrapper-maker';\nimport {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n TITLE,\n SUB_TITLE,\n LEGEND,\n VERTICAL_SCROLL_BAR,\n HORIZONTAL_SCROLL_BAR,\n GRID,\n MESSAGE\n} from '../constants';\nimport { ScrollManager } from './scroll-manager';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const prepareLayout = (layout, renderDetails) => {\n const { components, layoutConfig, measurement } = renderDetails;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n if (rows && columns) {\n layout.measurement(measurement)\n .config(layoutConfig)\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 *\n * @param {*} context\n * @param {*} mount\n *\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 priority,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend,\n pagination,\n scrollBar\n } = context.config();\n\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\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 buffer: scrollBar.thickness,\n pagination,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual,\n mount,\n priority\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n\nconst componentIndexes = {\n title: 0,\n subtitle: 1,\n legend: 2,\n verticalScrollBar: 3,\n horizontalScrollBar: 4,\n grid: 5,\n message: 6\n};\n\nconst componentNames = {\n 0: TITLE,\n 1: SUB_TITLE,\n 2: LEGEND,\n 3: VERTICAL_SCROLL_BAR,\n 4: HORIZONTAL_SCROLL_BAR,\n 5: GRID,\n 6: MESSAGE\n};\n\nconst attachListeners = (componentWrappers) => {\n componentWrappers.forEach((componentWrapper) => {\n if (componentWrapper) {\n componentWrapper.attachListener();\n }\n });\n};\n\n/**\n * Responsible for creating a scroll manager that manages interactions between the grid\n * component and the scroll bar components\n *\n * @param {Array} componentWrappers Contains the wrappers for all the components\n * @param {Canvas} canvas Instance of the current canvas\n * @return {Array} Positions of units either horizontal or vertical\n */\nconst createScrollManager = (componentWrappers, canvas) => {\n const {\n horizontalScrollBar,\n verticalScrollBar,\n grid\n } = componentIndexes;\n\n const horizontalScrollWrapper = componentWrappers[horizontalScrollBar];\n const verticalScrollWrapper = componentWrappers[verticalScrollBar];\n const gridWrapper = componentWrappers[grid];\n const scrollBarManager = new ScrollManager();\n const scrollBarComponents = {};\n\n verticalScrollWrapper && (scrollBarComponents.vertical = verticalScrollWrapper);\n horizontalScrollWrapper && (scrollBarComponents.horizontal = horizontalScrollWrapper);\n\n scrollBarManager\n .scrollBarComponents(scrollBarComponents)\n .attachedComponents({\n grid: gridWrapper\n });\n canvas.composition().hScrollBar = horizontalScrollWrapper;\n canvas.composition().vScrollBar = verticalScrollWrapper;\n\n [horizontalScrollWrapper, verticalScrollWrapper].forEach((wrapper) => {\n wrapper && wrapper.manager(scrollBarManager);\n });\n\n gridWrapper.scrollBarManager(scrollBarManager);\n};\n\nexport const renderLayout = (canvas, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const gridLayout = canvas.layout();\n const {\n\n grid\n } = componentIndexes;\n\n // Get the component wrappers\n const compWrappers = componentWrapperMaker(canvas, gridLayout, renderDetails);\n const componentWrappers = Object.keys(componentIndexes).map(e => compWrappers[e]);\n const gridWrapper = componentWrappers[grid];\n if (gridWrapper) {\n createScrollManager(componentWrappers, canvas);\n }\n\n componentWrappers.forEach((componentWrapper, index) => {\n if (!componentWrapper) {\n const deleteElementName = componentNames[index];\n layoutManager.removeComponent(deleteElementName);\n }\n });\n layoutManager.registerComponents(componentWrappers).compute();\n attachListeners(componentWrappers);\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive,\n isSimpleObject,\n CommonProps\n} from 'muze-utils';\nimport { Firebolt } from '@chartshq/muze-firebolt';\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 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 selectionBox: () => false\n }\n};\n\n/**\n * This class is responsible for dispatching any behavioural action to all the visual units housed by the canvas.\n * It is created by {@link Canvas}. This class does not handle any physical actions. Physical actions get triggered\n * in {@link VisualUnit} which is managed by it's own firebolt instance. The firebolt instance of canvas only\n * propagates the action to all the visual units in it's composition.\n *\n * To get the firebolt instance of {@link Canvas}\n * ```\n * const firebolt = canvas.firebolt();\n * ```\n *\n * @class GroupFireBolt\n * @public\n */\nexport default class GroupFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy());\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 const context = this.context;\n applyInteractionPolicy(this);\n context._throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => {\n applyInteractionPolicy(this);\n });\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n /**\n * Dispatches a behavioural action with a payload. It takes the name of the behavioural action and a payload\n * object which contains the criteria aend an array of side effects which determines what side effects are\n * going to be shown in each visual unit of the canvas. It prepares the datamodel from the given criteria\n * and initiates a propagation from the datamodel of canvas. Then all the visual units of canvas which listens\n * to the propagation gets informed on which rows got selected and dispatches the behavioural action sent during\n * propagation.\n *\n * To dispatch a behavioural action on the canvas\n * ```\n * // Get the firebolt instance of the canvas\n * const firebolt = canvas.firebolt();\n * // Dispatch a brush behaviour\n * firebolt.dispatchBehaviour('brush', {\n * // Selects all the rows with Horsepower having range between 100 and 200.\n * criteria: {\n * Horsepower: [100, 200]\n * }\n * });\n * // On dispatch of this behavioural action, a selection box gets created and plots gets faded out which are the\n * // default side effects mapped to this behavioural action.\n * ```\n *\n * ```\n * Additionally, it can also be passed an array of side effects in the payload.\n * // Dispatch a select behaviour with only crossline as side effect.\n * firebolt.dispatchBehaviour('select', {\n * criteria: {\n * Cylinders: ['8']\n * },\n * sideEffects: ['crossline']\n * });\n * ```\n *\n * @public\n *\n * @param {string} behaviour Name of the behavioural action\n * @param {Object} payload Object which contains the interaction information.\n * @param {Object | Array.} payload.criteria Identifiers by which the selection happens.\n * @param {Array.} payload.sideEffects Side effects which needs to be shown.\n *\n * @return {GroupFireBolt} Instance of firebolt.\n */\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.composition().visualGroup.getGroupByData();\n const fieldsConfig = data.getFieldsConfig();\n const model = getDataModelFromIdentifiers(data, criteria);\n const behaviouralAction = this._actions.behavioural[behaviour];\n\n if (behaviouralAction) {\n const fields = isSimpleObject(criteria) ? Object.keys(criteria) : (criteria ? criteria[0] : []);\n const validFields = fields.filter(field => field in fieldsConfig);\n const mutates = behaviouralAction.constructor.mutates();\n const propConfig = {\n payload: propPayload,\n action: behaviour,\n criteria: model,\n sourceId: this.context.alias(),\n isMutableAction: mutates,\n propagateInterpolatedValues: validFields.every(field => fieldsConfig[field].def.type ===\n FieldType.MEASURE)\n };\n data.propagate(model, propConfig, true);\n }\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","import GroupFireBolt from './group-firebolt';\n\nexport default GroupFireBolt;\n","export const APP_INITIAL_STATE = {\n app: {\n group: {},\n units: {},\n layers: {},\n canvas: {}\n },\n local: {\n canvas: {},\n group: {},\n units: {},\n layers: {}\n }\n};\n\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId, selectElement, STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout, renderLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { APP_INITIAL_STATE } from './app-state';\nimport { initCanvas,\n setupChangeListener,\n setLabelRotationForAxes,\n createGroupState,\n createLayoutManager,\n setLayoutInfForUnits\n} from './helper';\n/**\n * Canvas is a logical component which houses a visualization by taking multiple variable in different encoding channel.\n * Canvas manages lifecycle of many other logical component and exposes one consistent interface for creation of chart.\n * Canvas is intialized from environment with settings from environment and singleton dependencies.\n *\n * To create an instance of canvas\n * ```\n * const env = Muze();\n * const canvas = env.canvas()\n * ```\n *\n *\n * @class\n * @public\n * @module Canvas\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(APP_INITIAL_STATE);\n\n this._throwback = new Store({\n [CommonProps.MATRIX_CREATED]: false,\n [CommonProps.ON_LAYER_DRAW]: null\n });\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE;\n const allOptions = Object.assign({}, options, localOptions, canvasOptions);\n\n transactor(this, allOptions, this._store, {\n namespace\n });\n\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this, {\n behavioural: behaviouralActions,\n physical: physicalActions,\n physicalBehaviouralMap: {}\n }, sideEffects, behaviourEffectMap));\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 // init layoutManager\n this._layoutManager = createLayoutManager();\n }\n\n /**\n * Retrieves an instance of layout which is responsible for layouting. Layout is responsible for creating faceted\n * presentation using table layout.\n *\n * @public\n *\n * @return {GridLayout} Instance of layout attached to canvas.\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n * Retrieves the composition for a canvas\n *\n * @public\n *\n * @return {object} Instances of the components which canvas requires to draw the full visualization.\n * ```\n * {\n * layout: // Instance of {@link GridLayout}\n * legend: // Instance of {@link Legend}\n * subtitle: // Instance of {@link TextCell} using which the title is rendered\n * title: // Instance of {@link TextCell} using which the title is rendered\n * visualGroup: // Instance of {@link visualGroup}\n * }\n * ```\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 * Sets or gets the alias of the canvas. Alias is a name by which the canvas can be referred.\n *\n * When setter\n * @param {string} alias Name of the alias.\n *\n * @return {Canvas} Instance of the canvas.\n *\n * When getter\n *\n * @return {string} Alias of canvas.\n *\n * @public\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 *\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n * Returns the instance of firebolt associated with this canvas. The firebolt instance can be used to dispatch a\n * behaviour dynamically on the canvas. This firebolt does not handle any physical actions. It is just used to\n * propagate the action to all the visual units in it's composition.\n *\n * @public\n *\n * @return {GroupFireBolt} Instance of firebolt associated with 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 createGroupState(this);\n this.composition().visualGroup.alias(this.alias()).store(this._store);\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 *\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 * Returns a promise for various {@link LifecycleEvents} of the various components of canvas. The promise gets\n * resolved once the particular event gets completed.\n *\n * To use this,\n * ```\n * canvas.once('layer.drawn').then(() => {\n * // Do any post drawing work here.\n * });\n * ```\n * @public\n *\n * @param {string} eventName Name of the lifecycle event.\n *\n * @return {Promise} A pending promise waiting for resolve to be called.\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 // removeChild(mount);\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const renderDetails = getRenderDetails(this, mount);\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), renderDetails);\n\n this._layoutManager.dimension({\n height: renderDetails.measurement.canvasHeight,\n width: renderDetails.measurement.canvasWidth\n });\n\n this._layoutManager.renderAt(mount);\n\n // Render each component\n renderLayout(this, renderDetails);\n\n setLayoutInfForUnits(this);\n\n // setLabelRotation\n setLabelRotationForAxes(this);\n }\n\n /**\n * Returns the instances of x axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the top axis and the second element represents the bottom\n * // axis.\n * [\n * [X1, X2],\n * [X3, X4]\n * ]\n * ```\n * @public\n *\n * @return {Array.} Instances of x axis.\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n * Returns the instances of y axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the left axis and the second element represents the right\n * // axis.\n * [\n * [Y1, Y2],\n * [Y3, Y4]\n * ]\n * ```\n * @public\n * @return {Array.} Instances of y axis.\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n * Returns all the retinal axis of the canvas. Color, shape and size axis are combinedly called retinal axis.\n *\n * @public\n * @return {Object} Instances of retinal axis.\n * ```\n * {\n * color: [ColorAxis], // Array of color axis.\n * shape: [ShapeAxis], // Array of shape axis.\n * size: [SizeAxis] // Array of size axis.\n * }\n * ```\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n\n mount (...params) {\n if (params.length) {\n let value = params[0];\n if (typeof params[0] === 'string') {\n value = selectElement(params[0]).node();\n }\n this._mount = value;\n return this;\n }\n return this._mount;\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 Store\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};\nmuze.Model = new Store().model.constructor;\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/(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-utils/node_modules/hyperdis/dist/hyperdis.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/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.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/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/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/Accent.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/sequential-single/Blues.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-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/Oranges.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-multi/viridis.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/cubehelix.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/src/enums/namespace.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/src/enums/constants.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/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.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/src/DataSystem/dataSelect.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.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/join.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/style.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/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/transition/end.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/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/store.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-utils/src/lifecycle-manager/helper.js","webpack://muze/./packages/muze-utils/src/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/selection-set/selection-set.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/enums/side-effects.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/props.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/generic-sideeffect.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/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-firebolt/src/enums/tooltip-strategies.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/base-layer/props.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/skip-ticks.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/space-setter.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/helper.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/polar-axis/props.js","webpack://muze/./packages/muze-axis/src/polar-axis/angle-axis.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/polar-axis/radius-axis.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/local-options.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.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/enums/layer-types.js","webpack://muze/./packages/visual-layer/src/layer-factory/layer-factory.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/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/props.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/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/visual-unit.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/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/resolver-props.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/helper.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/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/layoutComponent.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/dummy-component.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/layout/src/tree-layout/constants/defaults.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/definitionModel.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/helper/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/tree/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/layout-model/index.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/tree-layout/utils/index.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-point.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-parser.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/helper.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/html-data.js","webpack://muze/./packages/layout/src/tree-layout/renderers/renderer.js","webpack://muze/./packages/layout/src/tree-layout/renderers/html-renderer.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/layout-def.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/index.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.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/visual-matrix/row-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/column-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/view-info-getter.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/layout/src/grid-layout/border-helper.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.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/components/muze-chart-component.js","webpack://muze/./packages/muze/src/canvas/components/headerComponent.js","webpack://muze/./packages/muze/src/canvas/components/legendComponent.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/helper.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/props.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-component.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/horizontal-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/vertical-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/matrix-component.js","webpack://muze/./packages/muze/src/canvas/components/grid-component.js","webpack://muze/./packages/muze/src/enums/constants.js","webpack://muze/./packages/muze/src/canvas/components/message-component.js","webpack://muze/./packages/muze/src/canvas/component-wrapper-maker.js","webpack://muze/./packages/muze/src/canvas/scroll-manager.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/firebolt/group-firebolt.js","webpack://muze/./packages/muze/src/canvas/firebolt/index.js","webpack://muze/./packages/muze/src/canvas/app-state.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__","a","JSON","parse","u","f","rt","mt","yt","bt","un","cn","fn","ln","sn","dn","pn","hn","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","CATEGORICAL","TEMPORAL","GEO","BINNED","CONTINUOUS","MEASURE","DIMENSION","NORMAL","INVERSE","ALL","SUM","AVG","MIN","MAX","FIRST","LAST","COUNT","STD","Date","h","this","format","dtParams","nativeDate","RegExp","escape","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","isFinite","parseInt","defaultRangeParser","toLowerCase","length","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","Math","trunc","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","push","token","formatAs","String","extractTokenValue","noBreak","v","splice","checkIfOnlyYear","unshift","map","match","shift","getNativeDate","Number","Function","concat","Array","isArray","from","forEach","iterator","constructor","g","w","O","_","E","getTime","round","random","j","D","F","data","createNamespace","fields","fieldsObj","_cachedFieldsObj","getMeasure","_cachedMeasure","schema","type","getDimension","_cachedDimension","N","configurable","writable","k","TypeError","Qt","defineProperties","_value","_formattedValue","_internalValue","field","T","split","R","C","assign","_invalidAwareValsMap","invalidAwareVals","NULL","NA","NIL","invalid","nil","null","L","SELECT","PROJECT","GROUPBY","COMPOSE","CAL_VAR","BIN","SORT","U","CROSS","LEFTOUTER","RIGHTOUTER","NATURAL","FULLOUTER","G","getFieldspace","Error","_rowDiffset","partialField","rawValue","formattedValue","formattedData","At","detachedRoot","on","J","z","floor","next","done","W","X","q","Map","has","set","Z","label","reduce","$","Ht","slice","Q","ee","ne","uids","addUid","columnWise","te","filter","findIndex","pop","re","_colIdentifier","sort","ae","ie","oe","ue","ce","fe","le","se","de","pe","he","ve","me","isNaN","we","ye","min","max","sqrt","pow","ge","be","Oe","store","entries","__unregister","_e","Ee","je","internalValue","Se","yn","De","Fe","Ne","ke","rowDiffset","subtype","description","displayName","Te","Re","ReferenceError","__proto__","getPrototypeOf","setPrototypeOf","_cachedDomain","calculateDataDomain","Ce","Me","Set","add","Ie","Pe","_cachedMinDiff","POSITIVE_INFINITY","isInvalid","getInvalidType","xe","Le","bins","Ue","Ve","unit","defAggFn","numberFormat","Be","Ye","NEGATIVE_INFINITY","He","Ge","Je","ze","trim","Ke","We","_dtf","Xe","qe","parseFloat","Ze","$e","Qe","et","_sanitize","tt","nt","dataFormat","firstRowHeader","at","it","ot","ut","ct","ft","stringify","lt","st","pt","charCodeAt","dt","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","test","columns","parseRows","formatBody","formatRows","ht","vt","gt","fieldSeparator","FlatJSON","DSVStr","DSVArr","wt","Ot","_t","Et","Ft","St","_derivation","op","meta","criteria","Dt","_ancestorDerivation","Nt","diffIndex","calcDiff","kt","Tt","rejectRowDiffset","Ct","getPartialFieldspace","It","Pt","operation","filterByMeasure","Mt","clone","__calculateFieldspace","calculateFieldsConfig","getFieldsConfig","getData","domain","every","select","saveChild","some","xt","config","Lt","projField","actualProjField","Vt","Bt","Yt","as","_partialFieldspace","_cachedValueObjects","_dataFormat","Gt","getDerivations","groupByString","params","Jt","nonTraversingModel","excludeModels","handlePropagation","_children","Xt","propagationNameSpace","propagateToSource","sourceId","propagateInterpolatedValues","persistent","values","mutableActions","filterFn","applyOnSource","action","model","models","path","Wt","_parent","sourceIdentifiers","propagationSourceId","groupByModel","reverse","$t","search","en","tn","_fieldStoreName","_propagationNameSpace","immutableActions","_fieldspace","jt","setParent","_fieldConfig","def","removeChild","nn","rn","an","_onPropagation","order","withUid","getAllFields","fill","Ae","defaultReducer","resolve","fieldsArr","replaceVar","addField","isMutableAction","payload","Kt","zt","find","Zt","qt","propConfig","filterImmutableAction","buckets","binsCount","binSize","start","end","I","ceil","abs","x","binnedData","measureFieldName","binFieldName","serialize","getSchema","Rt","splitRowDiffset","dimensionMap","Ut","sum","avg","first","last","count","std","vn","compose","dispose","bin","project","groupBy","calculateVariable","crossProduct","difference","naturalJoin","leftOuterJoin","rightOuterJoin","fullOuterJoin","union","mn","version","Operators","Stats","DM_DERIVATIVES","DateTimeFormatter","DataFormat","FilteringMode","InvalidAwareTypes","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","obj","default","_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","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","_set","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","__lastTime","__id","unique","qualifiedName","seed","dependencies","outgoingEdges","accumulate","identity","dep","edges","_seed","requireResolve","retriever","history","resolver","electricEdges","retrieveDetails","listeners","nextFrame","currentFrame","qualifiedNodeMap","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flushTarget","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","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","mid","right","ascendingBisect","bisectRight","number","array","src_range","stop","step","range","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","scale","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_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","exec","Rgb","rgbn","rgba","hsla","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","Hsl","hslConvert","hsl","hsl2rgb","m1","m2","channels","displayable","formatHsl","color_formatHsl","brighter","darker","deg2rad","PI","rad2deg","Xn","Yn","Zn","t0","t1","t2","t3","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","atan2","hcl","cos","sin","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","colorRgb","rgbSpline","spline","colors","rgbBasis","src_number","reA","reB","source","src_string","am","bm","bs","bi","lastIndex","one","zero","cssNode","cssRoot","cssView","svgNode","src_value","value_typeof","string","setTime","nb","na","valueOf","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","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","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","defaultLocale","formatLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","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","minute","hour","day","setHours","setDate","getTimezoneOffset","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","month","setMonth","year","setFullYear","utcMinute","setUTCSeconds","utcHour","setUTCMinutes","utcDay","setUTCHours","setUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcMonth","setUTCMonth","utcYear","setUTCFullYear","localDate","utcDate","UTC","newYear","timeFormat","utcFormat","utcParse","pads","-","0","numberRe","percentRe","requoteRe","pad","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","V","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","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","magma","inferno","plasma","warm","cool","sequential_multi_rainbow","ts","UNIT_GLOBAL_NAMESPACE","UNIT_LOCAL_NAMESPACE","LAYER_LOCAL_NAMESPACE","LAYER_GLOBAL_NAMESPACE","GROUP_GLOBAL_NAMESPACE","GROUP_LOCAL_NAMESPACE","CANVAS_LOCAL_NAMESPACE","CANVAS_GLOBAL_NAMESPACE","ReservedFields","ROW_ID","CommonProps","ACTION_INF","ON_LAYER_DRAW","MATRIX_CREATED","COORD_TYPES","DATA_TYPE","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","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","Selection","idGetter","_classCallCheck","_dataObjects","_updateData","_enterData","_exitData","_idGetter","newData","val","entryData","exitdata","tempMap","duplicateData","updatedData","newSelection","callback","dataObjects","defaultValue","_mode","mergedObjects","mergedData","newdata","sortFn","updateData","sortSel","sortSelection","kA","kB","_toConsumableArray","objects","DimensionSubtype","STRING","FUNCTION","DataModel","isSimpleObject","HTMLElement","common_utils_typeof","getUniqueId","sanitizeIP","typeObj","nonExistentKeys","checkExistence","getMax","common_utils_toConsumableArray","getMin","getDomainFromData","fieldType","_ref","domArr","_loop","_fields","_slicedToArray","field0","field1","arr0","arr1","firstMin","secondMin","firstMax","secondMax","sanitizeDomainWhenEqual","unionDomain","domains","_ref2","dom","symbolFns","symbolCircle","cross","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolWye","symbolTriangle","easeFns","cubic","easeCubic","bounce","easeBounce","elastic","easeElastic","back","easeBack","poly","easePoly","circleInOut","getNearestValue","filterData","getWindow","getQualifiedClassName","cancelAnimationFrame","cls","param","objectIterator","Voronoi","common_utils_classCallCheck","_voronoi","_voronoiFn","getObjProp","retObj","_len","_key","intSanitizer","generateGetterSetters","props","propInfo","_propInfo$","sanitization","preset","onset","typeChecker","defVal","isEqual","oldVal","newVal","arraysEqual","arr2","is","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","createSelection","sel","appendObj","idFn","dataSelect","mergedSelection","exitSelection","getObjects","inst","numberInterpolator","interpolateNumber","piecewiseInterpolator","rgbToHsv","detectColor","col","getDataModelFromRange","dataModel","selFields","selFn","getDataModelFromIdentifiers","identifiers","filteredDataModel","fieldsConfig","dataArr","filteredSchema","include","propField","idx","isValidValue","getSymbol","stackOrders","_defineProperty","_stackOrders","stackOrderNone","stackOrderAscending","stackOffsets","_stackOffsets","yp","stackOffsetNone","s2","si","sij0","s3","sk","stack","orderNone","offsetNone","oz","kz","sz","sij","ki","d3Stack","nestCollection","nestFn","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","minDiff","timeFormats","timeDurations","formatTemporal","nearestInterval","getNearestInterval","getValueParser","retrieveNearestGroupByReducers","_len3","measureFieldNames","_key3","filteredReducers","derivations","getAncestorDerivations","nearestReducers","derv","measures","measureName","measureField","retrieveFieldDisplayName","dm","fieldName","sortOrderMap","_sortOrderMap","firstVal","secondVal","localeCompare","_accessors","fn1","fn2","xhtml","src_namespaces","xlink","xml","xmlns","src_namespace","namespaces","space","local","creator","fullname","namespace","creatorFixed","ownerDocument","creatorInherit","uri","namespaceURI","src_selector","selector","querySelector","selectorAll","querySelectorAll","matcher","matches","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","listener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","args","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","groups","parents","_groups","_parents","subgroups","subnode","subgroup","enterGroup","updateGroup","_enter","_exit","onenter","onupdate","onexit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","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","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","maxTouchPoints","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","taskHead","taskTail","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","string00","string10","interpolate0","string0","string1","value1","attrTweenNS","attrInterpolateNS","attrInterpolate","styleTween","styleNull","styleMaybeRemove","listener0","styleInterpolate","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","Promise","reject","cancel","interrupt","defaultTiming","easeCubicInOut","selectElement","element","makeElement","elemType","callbacks","keyFn","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","_len2","_key2","exitSel","applyStyle","setElementAttrs","attrs","setAttrs","setStyles","styles","createElements","getClientPoint","pos","clientPoint","getEvent","d3event","getD3Drag","d3drag","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","initProp","fetchPropValues","propNames","deps","setContexts","contexts","propObj","contextMap","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","depProps","err","registerListener","propList","callBack","instantCall","_options$","namespaceInf","callbackFn","namespaceVal","commits","_savedCommits","propListenerMap","_propListenerMap","listenersObj","_registeredListeners","_contextMap","contextsObj","commitsObj","subNamespaces","propDeps","nm","fnInf","fns","store_toConsumableArray","registerPropInMaps","registeredListeners","subNamespace","allProps","_fnCount","addListenerToNamespace","_listeners","namespaceListeners","listenerTypes","removePropValue","propInf","sns","Store","store_classCallCheck","Model","_commits","_queuedProps","_locked","store_createClass","lockModel","lock","unlockModel","unlock","lockCommits","_this","locked","queue","unlockCommits","_this2","queuedProps","_params","store_slicedToArray","propName","_params2","commit","addSubNamespace","propFns","acc","nsObj","retrieveNamespaces","disableListener","sanitizedVal","savedCommits","disabled","registerChangeListener","registerImmediateListener","_len4","_key4","computed","calculatedProp","_this$model","unsubscribeAll","unsubscribe","listenersMap","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","removeSubNamespace","listenerMap","snsMap","transactor","holder","conf","stateProps","nameSpaceProp","nsProp","_len5","_key5","_ref$takesMultiplePar","takesMultipleParams","prevVal","typeCheck","typeExpected","oldValues","events","EVENT_LIST","composition","resolveFn","notification","hasOwn","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","_preparePromises","eventName","promise","_makeNotifierPromise","createPromise","then","prm","formalName","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","_this3","lifeCycles","_this4","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","mergedEnter","SELECTION","mergedExit","complete","getSetInfo","selectionSet","propagationData","resetted","getModelFromSet","conditions","condition","Firebolt","actions","behaviourEffectMap","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sourceSideEffects","_propagationBehaviourMap","_sourceBehaviours","_actionBehaviourMap","_config","_behaviourEffectMap","_entryExitSet","_actionHistory","_queuedSideEffects","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","setSideEffectConfig","sideEffect","sideEffectConf","behEffectMap","preventDefaultActions","effectNames","effects","firebolt_toConsumableArray","behaviours","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","initializeSideEffects","sideEffectStore","actionHistory","queuedSideEffects","combinedSet","unionSets","behaviour","entryExitSet","existingModel","aggFns","effect","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","propagationInfo","propagate","getSideEffects","propagationSelectionSet","getPropagationSelectionSet","shouldApplySideEffects","sourceSelectionSet","applicableSideEffects","getApplicableSideEffects","applySideEffects","behaviourConditions","sideEffectConditions","physicalAction","actionBehaviourMap","behaviourMap","mapActionsAndBehaviour","onDataModelPropagation","propValue","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","sideEffectsMap","SideEffect","initedActions","initializePhysicalActions","physicalActions","phyAction","initedPhysicalActions","mapObj","getDefaultTargetContainer","bindActionWithBehaviour","targets","behaviourList","mount","propagationInf","entryRowIds","getUids","propagationSource","applicableSelectionSets","GenericBehaviour","firebolt","generic_classCallCheck","_enabled","selectionSets","getSelectionSets","_this$firebolt$getAdd","getAddSetFromCriteria","getPropagationInf","setSelectionSet","getEntryExitSet","_selectionSet$getSets","getSets","setConfig","getFullData","getSourceFields","VolatileBehaviour","reset","existingAddSet","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","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","MeasureSubtype","isXDimension","isYDimension","xRange","yRange","selectedDomains","rangeObj","xdom","ydom","snap","getNearestRange","attachDragEvent","targetEl","drawingInf","touchStart","d3Drag","getDrawingContext","getSourceInfo","beh","dragEnd","hover","interaction","tooltip","svgContainer","nearestPoint","getNearestPoint","getAllPoints","showInPosition","generatePayloadFromEvent","click","physical_defineProperty","_physicalActions","ACTIONNAMES","longtouch","touchEnd","touchdrag","ANCHORS","BRUSH_ANCHORS","PERSISTENT_ANCHORS","HIGHLIGHTER","CROSSLINE","PROPS","valueParser","GenericSideEffect","generic_sideeffect_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","x1Val","x2Val","bandScale","x1DomainIndex","x2DomainIndex","_sort2","helper_slicedToArray","getScaleValue","getUnitWidth","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort4","_xDim","_yDim","dimension","show","selectionBox","selectionBoxDrag","onDrag","boxClassName","INITIAL_STYLE","connectorClassName","row","margin","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","parentClassName","arrow","getArrowPos","dim","measurement","arrowPos","boxHeight","boxWidth","arrowWidth","plotBottom","boxBottom","plotRight","boxRight","placeArrow","tooltipArrow","_tooltipArrow","tooltipBackground","_tooltipBackground","arrowConf","_arrowOrientation","Content","content_classCallCheck","_model","_formatter","item","ctx","_mount","displayFormat","table","tbody","rows","elemData","el","shape","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","HIGHLIGHT_SUMMARY","GROUP_BY_FUNCTIONS","formatters","strategies_defineProperty","getKeyValue","isSelected","removeKey","keyObj","valueObj","margin-left","generateRetinalFieldsValues","valueArr","retinalFields","dimensionMeasureMap","fieldInf","dataLen","colorAxis","shapeAxis","sizeAxis","retField","retIndex","retinalFieldValue","measuresArr","icon","getColor","getShape","getSize","_fieldInf$retField","formattedRetinalValue","hasMultipleMeasures","measure","measureIndex","_fieldInf$measure","dName","formatterFn","strategies_toConsumableArray","buildTooltipData","nestedDataObj","fieldValues","_dataModel$getData","fieldspace","_context$firebolt$con","detailFields","FieldType","containsDetailField","getFieldInf","timeDiffs","defFormatter","inf","nf","getTabularData","dataObj","fieldObj","indices","allMeasures","_construct","filteredMeasures","generateTooltipContent","nestedData","_nestedData$i","_fieldInf$field","_loop2","len2","_fieldInf$name","strategies","aggregatedModel","fieldsConf","measureNames","configResolvers","tooltip_defineProperty","_configResolvers","specificConf","_default","_getPrototypeOf2","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","tooltip_getPrototypeOf","_tooltips","sanitizeConfig","strategyObj","sanitizedConf","setStrategy","totalHeight","totalWidth","isEmpty","tooltips","boundBox","dataModels","fragmented","showVertically","tooltipPos","boxes","tooltip_toConsumableArray","targetFields","sourceFields","plotDimensions","getPlotPointsFromIdentifiers","strategy","strategyConf","dataTransform","projectFields","plotDim","layoutContainer","parentContainerDimensions","layoutBoundBox","unitBoundBox","tooltipInst","TooltipRenderer","timeDiffsByField","strategyFn","positionRelativeTo","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","highlightSummary","selectionSummary","projectedFields","Crossline","bandWidth","_this$config","bandClass","lineClass","fieldIndex","axisIndex","fieldInst","xOffset","plotWidth","crossline_toConsumableArray","getPlotSpan","getPlotPadding","startPx","endPx","dataPoint","parentGroup","fade","fadeFn","focus","highlight","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","plot_highlighter_getPrototypeOf","FilterEffect","entryModel","clearCaching","resetData","enableCaching","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","anchors_getPrototypeOf","_layersMap","addAnchorLayers","addLayer","layerRegistry","layerDefs","layerDef","mark","layerCls","shouldDrawAnchors","depLayerEncoding","encoding","defaultSizeValue","commonName","groupId","calculateDomain","getTransitionConfig","owner","registry","_linkedLayer$getTrans2","anchors_slicedToArray","getLayerByName","getTransformedDataFromIdentifiers","transformedData","transformedDataModel","PersistentAnchors","BrushAnchors","behaviour_effect_map_defineProperty","BEHAVIOURS","SIZE","COLOR","SHAPE","TEXT","ENCODING","X0","Y0","RADIUS","RADIUS0","ANGLE","ANGLE0","nearestPointThreshold","strokeOpacity","connectNullData","SimpleLayer","props_defineProperty","metaInf","coord","_customConfig","newConf","defaultPolicy","BOTTOM","TOP","LEFT","RIGHT","axisOrientationMap","axis_orientation_defineProperty","_axisOrientationMap","AxisOrientation","LINEAR","BAND","TIME","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","IDENTITY","SEQUENTIAL","THRESHOLD","CONTINOUS","DISCRETE","HIDDEN","DEFAULT_ANGLE_DOMAIN","scaleLinear","scales","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleTime","scaleMap","scale_creator_defineProperty","_scaleMap","ScaleType","createScale","scaleFactory","adjustRange","axisName","axisNamePadding","fixedBaseline","labels","rotation","smartTicks","numberOfTicks","showAxisName","showInnerTicks","showOuterTicks","yOffset","rotateAxis","instance","tickText","labelManager","renderConfig","getTickSize","yShift","xShift","tickLabelDim","quadrant","rotationNormalizer","angleToRadian","angle","changeTickOrientation","selectContainer","axisInstance","_smartTicks","isSmartTicks","registerAnimationDoneHook","setFixedBaseline","setAxisNamePos","textNode","axisNameHeight","availableSpace","longestWord","quarter","halfYearly","mintues","seconds","getTickIntervalFnBasedOnNumberOfTicks","possibleTickLevelIndex","maxPossibleTicks","tickIntervalLevelInfo","tickIntervalInfo","numOfPossibleTicks","getActualTickInterval","noOfTicks","minWidthBetweenTicks","_minTickDistance","getTickIntervalBasedOnCurrentLevel","_dependencies","longestWordType","applyTickSkipping","minTickDistance","minTickSpace","_minTickSpace","minTickWidth","maxTicks","getSkippedTicks","actualNumberOfTicks","_minDiff","millisecondInterval","numOfTicksAccordingToMinDiff","adjustHorizontalRange","adjustVerticalRange","rangeAdjustmentMap","space_setter_defineProperty","_rangeAdjustmentMap","setAxisRange","rangeBounds","getAdjustedRange","getAxisOffset","timeDiff","avWidth","bars","spaceSetter","spaceConfig","heightForTicks","_context$availableSpa2","availWidth","availHeight","isOffset","_context$renderConfig2","_context$getAxisDimen","getAxisDimensions","tickDimensions","allTickDimensions","axisNameDimensions","tickDimHeight","tickDimWidth","namePadding","labelConfig","minTickHeight","getTickValues","tickShifter","maxTickSpaces","widthForTicks","totalTickWidth","getRotatedSpaces","rotatedHeight","rotatedWidth","setOffset","logicalSpace","getAxisComponentDimensions","axisTicks","largestTick","largestTickDimensions","smartTick","_context$renderConfig","labelFunc","_tickLabelStyle","originalLabel","getFormattedText","_axisNameStyle","getHorizontalAxisSpace","axisDimensions","_context$config2","axisDimHeight","minTickDiff","getMinTickDifference","cartesian_axis_helper_toConsumableArray","getVerticalAxisSpace","_context$config3","calculateBandSpace","largestDimHeight","_getHorizontalAxisSpa","_getVerticalAxisSpace","getValidDomain","userDom","setContinousAxisDomain","_domain","axisComponentDimensions","oldConfig","mockedOldConfig","shouldAxesScaleUpdate","hasAxesConfigChanged","obj1","properties","tickFormatter","sanitizeTickFormatter","_scale","_axis","createAxis","_tickFormatter","resetRenderConfig","_renderConfig","_maxTickSpaces","SimpleAxis","simple_axis_classCallCheck","_range","_domainLock","_axisDimensions","defCon","simpleConfig","bodyElem","dist","_animationDonePromises","domainValue","setAxisComponentDimensions","smartAxisName","axisClass","_objectSpread","setTickConfig","setSmartAxisName","_this$config2","dimType","widthDim","getSmartAxisName","oriSize","domainVal","computeAxisDimensions","_getAxisComponentDime","labelHeight","labelWidth","calculateContinousSpace","_context$renderConfig6","axisNameWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","renderAxis","tickLabelStyle","axisTickFormatter","labelProps","labelOffset","all","LinearInterpolator","LogInterpolator","PowInterpolator","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","ContinousAxis","continous_axis_classCallCheck","continous_axis_possibleConstructorReturn","continous_axis_getPrototypeOf","InterpolatorCls","_interpolator","_this$renderConfig","sanitizeDomain","_get2","_get","_this$renderConfig2","newTickValues","tickSpace","getNumberOfTicks","labelDim","numberOfValues","tickLength","_this$smartTicks$","BandAxis","_this$maxTickSpaces","_getRotatedSpaces","paddingNormalized","formatTickValue","TimeAxis","time_axis_classCallCheck","time_axis_possibleConstructorReturn","time_axis_getPrototypeOf","time_axis_get","rawTicks","resetTickInterval","_context$config8","_context$availableSpa","adjustedRange","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","stops","getHslString","hslArr","convertToXllString","baseString","getActualHslColor","paletteColor","hexToHsv","props_toConsumableArray","newConfig","uniqueValues","treatNullMeasures","scaledVal","minDomainScaledVal","resolveAxisConfig","propVal","defaultVal","getStops","newStops","color_strategy_toConsumableArray","rangeStops","newStopsLength","newRange","hslInterpolator","interpolateHslLong","indexedDomain","uniqueVals","scaleDomain","indexedDomainMeasure","normalDomain","steppedDomain","_getStops","continousSteppedDomain","_getStops2","uniqueRange","indexedRange","numVal","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","size_strategy_defineProperty","size_strategy_strategies","pieceWiseRange","size_strategy_toConsumableArray","intervals","newIntervals","discreteRange","SizeAxis","size_axis_classCallCheck","_sizeStrategy","domainInfo","domainFn","generator","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","createAngleValues","angleData","_angleFn","_angleValues","AngleAxis","angle_axis_classCallCheck","customDomain","customRange","_this$_range","angle_axis_slicedToArray","ROWS","COLUMNS","COL","ROW","CELL","X_AXES","Y_AXES","ENTRY_CELLS","EXIT_CELLS","PRIMARY","SECONDARY","adjustDomain","minOuterRadius","RadiusAxis","radius_axis_classCallCheck","_radiusFactor","sanitizedRange","rangeVal","DATA_TYPES","group_transform","data_type_scale_map_defineProperty","_dataTypeScaleMap","groupByIndices","groupedData","identityTransform","transformMap","transform_factory_defineProperty","_transformMap","uniqueField","valueField","normalizedData","normalizeData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","fieldNames","tuples","rowObj","_tuple","seriesKey","newArr","orderBy","orderIndex","groupByIndex","stackData","seriesData","transformFactory","POLAR","CARTESIAN","transformColor","styleType","intensity","stateColor","originalColor","colorInfo","interactionStyles","elements","getPlotElementsFromSet","_d$meta","colorTransform","helpers_slicedToArray","getAxesScales","_map2","_map4","xScale","yScale","encodingFieldInfRetriever","helpers_defineProperty","_encodingFieldInfRetr","encodingInf","getIndividualClassName","individualClassName","classNameStr","dataNormalizers","_dataNormalizers","encodingFieldInf","radiusFieldIndex","angleFieldIndex","radius0FieldIndex","angle0FieldIndex","fieldsLen","pointObj","radius0","angle0","enc","rowId","transformType","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","tuple","domainCalculator","_domainCalculator","layerInst","angleValues","radius0Field","encodingFieldsInf","xFieldSubType","yFieldSubType","x0Field","y0Field","yEnc","xEnc","attachDataToVoronoi","_ref3","helpers_toConsumableArray","updateStyle","positionPoints","positioner","encodingTransform","getPlotMeasurement","dimensionalValues","fieldInfo","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","innerPadding","getGroupSpan","isAxisBandScale","axisPadding","groupPadding","resolveInvalidTransformType","transformResolverPredicates","groupByField","dimensionField","getValidTransformForAggFn","resolvedInvalidTransformType","_context$encodingFiel","isCustomTransformTypeProvided","resolveEncodingValues","transformedValues","getColorMetaInf","colorInf","getHslArray","getCoordValue","trig","coordValueGetter","toCartesianCoordinates","rangePlot","_point$update","_coordValueGetter","sortData","axisArr","localOptions","local_options_defineProperty","STATE_NAMESPACES","listener_map_slicedToArray","_cacheEnabled","_cachedData","encodingValue","resolveTransformType","_transformedData","getTransformedData","_normalizedData","getNormalizedData","calculateDomainFromData","layerNs","groupNs","BaseLayer","base_layer_classCallCheck","base_layer_possibleConstructorReturn","base_layer_getPrototypeOf","base_layer_assertThisInitialized","alias","_points","_measurement","_graphicElems","_store","_this$metaInf2","parentNamespace","_encodingFieldsInf","_encodingTransform","_alias","transformData","encodingType","_this$metaInf3","transformedDataArr","_updateLock","_transformType","getValidTransform","_this$metaInf4","unitDom","pointMap","_pointMap","_dataProps","_this$encodingFieldsI","base_layer_slicedToArray","xMeasure","yMeasure","_identifiers$","_identifiers$2","xMeasureIndex","yMeasureIndex","getAllAttrs","filteredPoints","base_layer_toConsumableArray","sizeVal","_identifiers$getData","identifierData","identifierSchema","_this$encodingFieldsI2","tupleArr","transformedVal","graphicElems","elems","_this$metaInf5","rowIndex","unitRowIndex","colIndex","unitColIndex","renderLayer","throwback","_context$metaInf","base_layer_defineProperty","getState","base_layer_construct","userConf","drawLine","curveInterpolatorFn","linepath","LineLayer","line_classCallCheck","line_possibleConstructorReturn","line_getPrototypeOf","isXDim","isYDim","xPx","yPx","resolvedEncodings","stroke","cachePoint","seriesClassName","containerSelection","colorField","colorFieldIndex","animateGroup","groupTransition","groupAnimateStyle","stroke-opacity","getPathStyle","translatePoints","colorValFn","colorVal","getDrawFn","searchRadius","_point$data$data","getIdentifiersFromData","layerId","drawArea","easeEffect","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","AreaLayer","area_get","area_getPrototypeOf","_getAxesScales","classNameFn","minYVal","basePos","y0Px","invalidY","invalidY0","resolvedValues","stroke-width","stroke-linejoin","states","fadeout","selected","ArcLayer","arc_classCallCheck","arc_possibleConstructorReturn","arc_getPrototypeOf","_prevPieData","_this$axes","radiusAxis","pieIndex","prevData","angleV","angles","_angles","uid","getOuterRadius","getInnerRadius","startAngle0","endAngle0","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_context$axes$angle$r2","arc_helper_slicedToArray","qualClassName","_arcFn","consecutiveExits","exitCounter","tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","pieSlices","pieSliceInf","tData","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","alignment-baseline","defaultEncoding","alignmentBaseLine","defRotation","pointTranslators","polar","textEncoding","angleAxis","textFormatter","backgroundEncoding","backgroundValue","resolvedVal","cartesian","textField","textFieldIndex","textValue","text_slicedToArray","TextLayer","text-anchor","drawSymbols","createShape","groupElement","res","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","exitGroup","defColorStyle","fillOpacity","shapes","sizes","PointLayer","point_classCallCheck","point_possibleConstructorReturn","point_getPrototypeOf","_config$offset","offsetX","offsetY","point_slicedToArray","maxSize","generateDataPoints","point_toConsumableArray","drawFn","getMarkId","_maxSize","_getPlotMeasurement2","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","drawRects","barEnterFn","transitionBars","selTransition","positionRetriever","isNegativeVal","barBasePos","resolveDimByField","axesInfo","spaceType","sizeEncoding","sizeConfig","sizeValue","enterSpace","minVal","maxVal","diffPx","minDomVal","_positionRetriever$ty2","bar_helper_slicedToArray","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","BarLayer","bar_classCallCheck","bar_possibleConstructorReturn","bar_getPrototypeOf","_plotPadding","_plotSpan","bar_get","getTranslatedPoints","normalizedDataArr","clipElement","clipPathElement","bar_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","uniqueFieldType","pointFound","bar_toConsumableArray","p2","tick_renderer","ticksEnter","angle0Axis","angle0V","angles0","_angles2","_layerInst$encodingFi","_config$span","xSpan","ySpan","x0Px","TickLayer","drawTicks","AREA_LAYER","ARC_LAYER","LINE_LAYER","TEXT_LAYER","POINT_LAYER","BAR_LAYER","TICK_LAYER","SIMPLE_LAYER","BASE_LAYER","sanitizeEncoding","layerFactory","compositeLayers","factoryObj","setLayerRegistry","reg","_layerRegistry","getSerializedConf","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","layer_factory_toConsumableArray","getLayerInstance","instances","layerObj","layerConstructor","getLayerClass","composeLayers","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","LAYER_TYPES","local_options","visual_group_local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","SimpleGroup","action_behaviour_map_defineProperty","ACTIONS","sanitizeLayerDef","sanitizedDefs","sConf","unionDomainFromLayers","layerAxisIndex","getDataDomain","domainValues","layerDomain","fieldDomain","encodingDomain","fieldStr","domain1","renderLayers","_lifeCycleManager","notify","orderedLayers","layerParentGroup","layerDepOrder","getDependencyOrder","graph","dependencyOrder","visited","visit","_layerDepOrder","_timeDiffs","getLayersBy","searchBy","removeLayersBy","createRenderPromise","_renderedPromise","_renderedResolve","radiusAxes","getRadiusRange","isXandYMeasures","_context$fields","src_helper_slicedToArray","xMeasures","yMeasures","getKey","GRID_BAND","GRID_LINE","getGridLayerDefinitions","axisType","getDefaultVisibilty","getLayerDefinition","_definition","_axes","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","_context$axes","dimensionSubTypes","getValidSubtype","attachDataToGridLineLayers","_gridLines","_gridBands","gridLayerData","getGridLayerData","gridData","jsonData","_jsonData$push","grid_lines_toConsumableArray","calculateDomainListener","_layerAxisIndex","src_listener_map_slicedToArray","fieldsVal","removeExitLayers","layersMap","markSet","queuedLayerDefs","_queuedLayerDefs","layerDefArr","defFn","listener_map_toConsumableArray","hasPlotSpan","axesObj","temporalFields","filteredFields","_ref5","_ref6","minimumConsecutiveDifference","_ref7","_ref8","_timeDiffsByField","originalData","cachedData","createSelectionSet","attachPropagationListener","_ref9","createGridLineLayer","vuConf","definitions","atomicDef","_ref11","_ref12","transformDataModels","transformVal","_ref15","_ref16","layerAxisIndexVal","axesVal","attachDataToLayers","transformedDataModels","dataSource","_dimensionMeasureMap","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","sizeField","shapeField","_retinalEncodingsAndM","src_helper_toConsumableArray","attachAxisToLayers","axisInf","src_props_defineProperty","_PROPS","payloadGenerator","brush","selectionDataModel","propPayload","getRangeFromData","propCriteria","fieldMap","isDimension","payload_generator_toConsumableArray","__default","propagateValues","propagationFieldInf","propagationFields","sideEfffects","mergedModel","sourceUnit","sourceCanvas","parentAlias","propagationBehaviour","propFields","facetByFields","getModelWithFacetData","schema1","data1","derivedSchema","dataAtFirstPos","data_propagator_toConsumableArray","behaviourInstance","entry","propagationConf","sourceBehaviour","enabled","propConf","actionInf","sideEffectPolicy","sourceIdentifierFields","hasCommonCanvas","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","firebolt_getPrototypeOf","SIDE_EFFECTS","changeSideEffectStateOnPropagation","unitId","aliasName","propagationSourceCanvas","sourceUnitId","sourceSideEffects","sideEffectInstances","actionOnSource","mappedEffects","sideEffectCheckers","checker","_getSelectionRejectio","getSelectionRejectionModel","propModel","propValuesMap","rejectionModel","_propModel$getData","exitRowIds","rowIdsObj","_cachedValuesMap","enabledFn","sourceBehaviours","trackerClassName","arcLayerClassName","sideEffectClassName","src_local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$TRA","valuesMap","getValuesMap","_model$getData","fieldIndices","local_options_toConsumableArray","oldData","unitNs","VisualUnit","visual_unit_classCallCheck","lifeCycleManager","_gridLinesSelection","_gridBandsSelection","_this$_dependencies","fireboltDeps","_firebolt","_rootSvg","class","renderGridLineLayers","gridLineParentGroup","_entry","grid_lines_slicedToArray","parentGroupClass","_sideEffectGroup","createSideEffectGroup","initSideEffects","rootSvg","_this$parentContainer","parentContainerInf","layerDefinition","layerDefinitions","components","layerIndex","layersArr","_layersArr","markId","defArr","getLayerFromDef","existingLayer","instanceArr","instanceValues","visual_unit_toConsumableArray","layerdeps","depArr","resolveEncodingTransform","resolvable","resolved","getLayerAxisIndex","_layer$config","specificField","encodingField","_this$_dependencies2","parentModel","dimValue","getNearestDimensionalValue","entryVal","pointInf","getMarkInfFromLayers","markInf","parsedIdentifiers","transposeArray","getPointsFromIdentifiers","localNs","visual_unit_slicedToArray","visual_unit_defineProperty","dispatchQueuedSideEffects","firebolt_helper_toConsumableArray","clearActionHistory","visual_unit_construct","Variable","ComposedVars","composed_vars_classCallCheck","composed_vars_possibleConstructorReturn","composed_vars_getPrototypeOf","vars","_vars","_data","member","getMinDiff","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","simple_var_getPrototypeOf","oneVar","_oneVar","dtFormat","dateFormat","fieldDef","varInst","convertToVar","datamodel","transformFields","field_sanitizer_slicedToArray","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","dimensionArr","measureArr","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","VisualEncoder","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","axisFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","getHeaderAxisFrom","rowHeader","rowAxis","_getHeaderAxisFrom4","colHeader","colAxis","column","headerFrom","scaleMaps","dataTypeScaleMap","generateAxisFromMap","axesCreators","facetFields","axisKey","groupAxes","currentAxes","cacheMaps","commonAxisKey","getAxisKey","axisConfig","getAxisConfig","axisInfo","axisOrientation","columnIndex","rawUserAxisConfig","userAxisConfig","_rotationLock","createSimpleAxis","Cls","sanitizeIndividualLayerConfig","encodingConfigs","getIndex","arrIndex","CartesianEncoder","geomCellAxes","projections","rowFields","columnFields","geomCell","xAxes","yAxes","units","1","rIdx","unitsArr","cIdx","encodingDomains","axisTypeIndex","typeOfField","_resolver$axes","axesArr","adjustedDomain","typeOfAxis","alignZeroLine","getAdjustedDomain","y1ratio","y2ratio","allSameSign","currentFieldName","sortingOrder","sortCategoricalField","sortOrder","sortOrderType","facets","counter","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","facet","existIndex","axisFromIndex","cartesian_encoder_get","cartesian_encoder_getPrototypeOf","groupedModel","encodingObj","retriveDomainFromData","layerArray","serializedLayers","userLayerConfig","layerConfig","retinalConfig","colField","colFieldName","rowField","configs","rowFieldName","rowFieldType","getDefaultMark","colFieldType","defConfigs","layerConfigs","getLayerConfFromFields","colFields","encodingArr","encoder_helper_toConsumableArray","xFields","yFields","colFieldExist","rowFieldExist","layerConf","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","axesCls","polar_encoder_defineProperty","_axesCls","PolarEncoder","pieAxes","matrixLayers","resolverAxes","varInstances","encType","userConfig","domainProps","matrixInstance","unitDomains","setRadiusFactor","sizeFieldIndex","sizeMultiplier","getSizeMultiplier","sizeAxisDomain","encodingFields","_layers","sanitizedRows","sanitizedColumns","polar_encoder_get","polar_encoder_getPrototypeOf","sanitizedFields","typeIndex","fieldSet","polar_encoder_toConsumableArray","layerEncoding","sanitizedConfig","angleField","angle0Field","RetinalEncoder","newAxes","createRetinalAxis","fieldProps","getAxisType","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","headerCreator","fieldHeaders","TextCell","getHeaderText","headers","rowLength","header","getEncoder","encoder","hasPolarEncodings","userAxisFromConfig","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","group_utils_defineProperty","getBorders","matrices","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","sortFacetFields","sortInfo","sortConfig","facetSortConfig","getSchemaDef","getFieldNames","fieldVar","matrix_model_toConsumableArray","prepareHashMaps","facetNames","hashMap","rowKey","joinedRowKey","createJoinedKeys","keyArr","joinedKey","formatKeys","formatterList","formattedKeys","rKeys","createColumnDataModels","colContext","sourceDM","rowFacets","colFacets","rowKeyArr","colKeyObj","newRowIndex","splitModelsHashMap","currentColumnIndex","colKeyArr","colKey","hashMapKey","splitByColumn","optionalProjections","facetInfo","projectionInfo","geomCellCreator","uniqueFields","commonFields","_indices$i","projectionIndexObject","matrix_model_objectSpread","getMatrixModel","globalConfig","currentRowIndex","prepareProjectionInfo","colProjections","rowProjections","rowProj","rIndex","newRIndex","colProj","cIndex","newCIndex","newRowProj","newColProj","prepareFacetInfo","rowFacetNames","colFacetNames","allFacets","_getSplitModelHashMap","getSplitModelHashMap","splitModels","rowKeyHashMap","colKeyHashMap","rowKeys","colKeys","splitContext","splitByRow","generalContext","rowKeyObj","createRowDataModels","rowContext","rowIndexForCurrentKey","_createColumnDataMode","_createColumnDataMode2","_createColumnDataMode3","_createColumnDataMode4","formattedColKeys","facetField","rawFormat","columnKeys","createValueCells","suppliedLayers","GeomCell","horizontalAxis","verticalAxis","datamodelTransform","sortedFields","layerConfigArr","getLayerConfig","normalizedColumns","normalizedRows","cell_creator_toConsumableArray","geomCellKey","getCellKey","columnId","updateCells","facetKey","extractAxisIndex","createAxisCells","currObj","axisInst","_axisInst$config","AxisCell","BlankCell","extractFacetIndex","headerPlaceholderGn","selectionObj","selectionKeys","keySet","textCells","createTextCells","textCell","generatePlaceholders","facetsAndProjections","encoders","valuesMatrix","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","rowsSecondary","rowSec","columnsPrimary","colPrime","columnsSecondary","colSec","_selectionObj","section","hContext","getAxisFields","fieldHolder","ac","transformDataModel","resolvedData","allFields","extractFields","layerFields","_ref4","flattenArray","getFieldsFromSuppliedLayers","suppliedLayerConfig","aggregationFns","nearestAggFns","resolvedAggFns","sortDmTemporalFields","fieldConfig","computeMatrices","componentRegistry","autoGroupBy","otherEncodings","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","cellCreator","valueCellsCreator","valueMatrixInfo","removeExitCells","exitCells","qualifiedStateProps","getQualifiedStateProps","placeholder","_mutateAxesFromMap","mutateAxesFromMap","xAxisSet","yAxisSet","axisId","createUnits","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","leftFacets","rightFacets","rowPriority","colPriority","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","RESOLVER_PROPS","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","_fireboltDeps","maps","matrix_resolver_toConsumableArray","_horizontalAxis","_verticalAxis","matrixType","matrix_resolver_defineProperty","_this5","sideEffectRegistry","_this$dependencies","unitConfig","extractUnitConfig","_this$getAllFields","retContext","getRetinalFieldsDomain","retinalEncoder","setCommonDomain","_this6","retinalAxes","updateModel","placeholders","bottomLeft","bottomRight","_this$dependencies3","showHeaders","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","footers","topLeft","topRight","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","cellValue","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","getLogicalSpace","rowHeight","currentRowHeight","setMatrixInstances","_composition","createMatrices","matrixConfig","unsubscribeChangeListeners","sanitizeRetinalConfig","retinalConf","confValue","groupType","fieldSanitizer","setAxisAndHeaders","placeholderInfo","getMatrices","_groupedDataModel","createRetinalAxes","setDomains","cornerMatrices","createHeaders","metaData","border","unionUnitDomains","registerDomainChangeListener","visual_group_props_defineProperty","visual_group_props_PROPS","cellRegistry","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","visual_group_getPrototypeOf","componentSubRegistry","visual_group_assertThisInitialized","_selection","initializeGlobalState","globalState","createUnitState","_VisualUnit$getState2","visual_group_helper_slicedToArray","localState","createLayerState","_BaseLayer$getState2","setupChangeListeners","stores","comp","getListeners","storeInst","listenerInf","variable","findInGroup","channel","group_utils_this","facetType","projType","getRetinalAxes","getSimpleAxes","_this$resolver$getAll","visual_group_defineProperty","info","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","rawVal","check","assembleModelFromIdentifiers","temp","fieldVal","src_firebolt_helper_toConsumableArray","LegendFireBolt","_Firebolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_getPrototypeOf","legend_firebolt_inherits","legend_firebolt_createClass","behaviourName","getCriteriaFromData","firebolt_physical_defineProperty","physical_physicalActions","boundingBox","gradientDimensions","axisScale","rangeShifter","drag_defineProperty","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","gradientDimension","legendGradContainer","legendSelGroup","enterFn","getMousePos","boundingClientRect","selection_box_drag_defineProperty","fadeOut","brighten","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legend_highlighter_getPrototypeOf","legendContainer","resetLogicalSpace","title","_title","ALIGN","DEFAULT_MEASUREMENT","LEGEND_TITLE","borderStyle","borderColor","bounds","upper","ICON_MAP","getScaleInfo","scaleType","steps","scaleFn","getInterpolatedArrayData","domainForLegend","scaleParams","requiredWidth","requiredHeight","upperBound","maxTickDiff","alignment","smartLabelCalc","minimumTickSize","_smartLabelCalc$getOr","isInteger","getcomputedArray","computationhelper","requiredMeasure","availableMeasure","currentTickValue","nextTickValue","measureParam","pixelPerTick","getInterpolatedData","recomputeSteps","getTickMeasure","_scaleParams$measures","interpolatedFn","tickValue","getDomainBounds","domainBounds","domainLeg","ele","legend_helper_defineProperty","getScaleFactor","SimpleLegend","simple_legend_classCallCheck","_metaData","_fieldName","_labelManager","_cells","defaultMeasurement","_computedStyle","legendBehaviours","_canvasAlias","getItemMeasures","_labelManager$getOriS","_this$measurement","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","titleWidth","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","maxItemSpaces","textOrientation","itemSpaces","iconSpaces","maxIconWidth","labelSpace","itemSpace","iconSpace","newLabelWidth","titleSpaces","_this$measurement2","_this$config3","titleCreator","titleContainer","marginPosition","_this$config4","_this$measurement3","renderTitle","simple_legend_defineProperty","legendOrientation","position_config_defineProperty","_legendOrientation","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","createItemSkeleton","_context$config","itemSkeleton","alignClass","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderIcon","defaultIcon","DiscreteLegend","_getScaleInfo","discrete_legend_toConsumableArray","_field$schema","discrete_legend_defineProperty","discrete_legend_get","discrete_legend_getPrototypeOf","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","gradient_legend_get","gradient_legend_getPrototypeOf","renderGradient","_createLegendSkeleton","StepLegend","step_legend_toConsumableArray","step_legend_defineProperty","lowerBounds","upperBounds","step_legend_get","step_legend_getPrototypeOf","stepData","renderStepItem","_context$measurement3","_item$icon2","_positionConfig$posit","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","LEGEND_TYPE_MAP","constants_defineProperty","_LEGEND_TYPE_MAP","HORIZONTAL_CENTER","VERTICAL_CENTER","share","operators_construct","operators_toConsumableArray","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","childNodes","canvasIterator","canvases","iteratorFn","cFn","canvas","visualGroup","_throwback","listenerFn","registerActions","fnName","_registrableComponents","setFireboltDependencies","actionModel","ActionModel","action_model_classCallCheck","registerPropagationBehaviourMap","dissociateBehaviour","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","*","propagationPayload","propagationCanvas","crossInteractionPolicy","TITLE_CONFIG","SUB_TITLE_CONFIG","maxLines","MESSAGE_CONFIG","canvas_local_options_defineProperty","_localOptions","canvasOptions","_canvasOptions","local_options_slicedToArray","arg1","arg2","local_options_typeof","titleConfig","defConfig","subtitle","subtitleConfig","sub","LayoutComponent","layoutComponent_classCallCheck","_boundBox","_renderAt","_alignWith","_alignment","_componentName","_className","DummyComponent","newDimensions","renderAt","component","componentName","pagination","scrollBar","thickness","speed","legend","minHeight","minCharacters","verticalAlign","collapse","invalidValues","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_CLASS_NAME","NODE_PREFIX","DefinitionModel","definitionModel_classCallCheck","_host","host","_cut","cut","_ratioWeight","ratioWeight","_preferred","preferred","_lanes","lanes","_remainingHeight","_remainingWidth","remainingHeight","remainingWidth","getNodeId","_uid","yExtraSpace","smallestHeight","getCutType","smallestExtraHeightHorizontally","MAX_SAFE_INTEGER","containerHeight","hostHeight","xExtraSpace","smallestWidth","smallestExtraWidthVertically","containerWidth","hostWidth","createPlaceHolderComponent","placeComponent","definitionModel","leftOvercomponentRationWidth","isPreferred","isGridComponent","componentRatioWidth","leftHeight","leftWidth","_component$getLogical","componentHeight","componentWidth","firstLaneConfig","firstLane","secondLane","tree_classCallCheck","_parentCut","_this$_children","tree_toConsumableArray","parentCut","bound","nodeconfig","searchNode","childNode","nodeId","deleteSearchNode","LayoutModel","measurements","layout_model_classCallCheck","_measurements","_root","createTree","setBoundBox","addChildren","lane","allocateBoundingBox","totalWeight","carry","lastSibling","ratio","setHostSpatialConfig","setHostPosition","negotiateDimension","alteredDim","nonAlteredDim","cumultiveExtraSpaceAmt","childrenLength","extraSpaceAmt","computePosition","determineBoundBox","bb","_lastSibling$boundBox","_top","_left","_height","_width","_instance$parent$boun","setSpatialConfig","VIEW_INDEX","ROW_MATRIX_INDEX","2","COLUMN_MATRIX_INDEX","HEIGHT","ROW_ROOT","COLUMN_ROOT","VERTICAL","HORIZONTAL","Utils","utils_classCallCheck","utils_createClass","isDOMElement","getID","getElement","findContainer","coordinate","removeDiv","divId","DataPoint","data_point_classCallCheck","DataParser","data_parser_classCallCheck","data_parser_createClass","defaultDataPointLogic","nodepoints","getnodePoints","datapoint","HTMLDataAdapter","_DataParser","html_data_classCallCheck","html_data_possibleConstructorReturn","html_data_getPrototypeOf","html_data_inherits","html_data_createClass","getCoordinates","html_data_get","Renderer","renderer_classCallCheck","renderer_createClass","initRenderer","__logicalTree","HTMLRenderer","_Renderer","html_renderer_classCallCheck","html_renderer_possibleConstructorReturn","html_renderer_getPrototypeOf","_coordinates","html_renderer_inherits","html_renderer_createClass","createhtml","mainDiv","html_renderer_get","parentDiv","createAndCustomiseParent","hasHost","createAndPositionDiv","html_renderer_objectSpread","div","coordinates","findNode","nodeID","renderer","drawLayout","renderHTML","resolveAligment","componentData","alignWith","componentToAlign","componentMap","refNode","newNodeConfig","setAlignConfig","DrawingManager","drawing_manager_classCallCheck","_componentMap","_layoutClassName","layoutClassName","_renderer","drawing_manager_createClass","drawComponent","DefinitionManager","definition_manager_classCallCheck","_prioritySequence","_totalHeight","_totalWidth","_targetComponentMap","prepareTargetComponentMap","targetComponentMap","canvasComponent","tempDefModel","componentRef","getComponent","placeGridComponent","gridComponents","iscolumnPreffered","_placeComponent","rowpreffred","LayoutDef","layout_def_classCallCheck","_layoutDefinition","layout_def_createClass","addComponent","layoutDefinition","addMultipleComponent","componentArray","sanitizedDefinition","hostObj","hostID","childHost","resetComponentMap","LayoutManager","layout_manager_classCallCheck","_dimension","_skeletonType","skeletonType","_layoutDef","_drawingManager","_rootNodeID","con","resetNode","updateNode","compute","_layout","calLayOutDef","_context$dimension","layoutDef","prioritySequence","generateConfigModel","negotiate","broadcast","layoutComponents","componentArr","compo","elementName","removeElement","elemID","co","deleteElement","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","nameSpaceProps","equalityProps","equalityChecker","option","updateProps","updateChecker","dispatchProps","_cachedProps","notifyAnimationEnd","viewInfo","layout","centerMatrix","viewMatricesInfo","promises","cellArr","lifeCycle","animDonePromises","animationDone","applyInteractionPolicy","interactionPolicy","_interactionPolicy","_crossInteractionPolicy","unitFireBolt","changeBehaviourStateOnPropagation","createLayoutManager","src_options","minUnitWidth","minUnitHeight","options_slicedToArray","_ref2$","_auxConfig$reset","oldConf","fixScrollBarConfig","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_DEFAULT_CONFIGURATIO","_FieldNames$BORDER","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","rowData","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","minSecondMeasure","createMatrixEachLevel","_arr$i","extraCellsRemover","beg","distribution","extraCellLengths","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_layoutMatrix","_tree","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistributeSpaces","childDepth","createMatrixInstances","matrixInfo","breakPointer","_breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","RowVisualMatrix","row_matrix_classCallCheck","row_matrix_possibleConstructorReturn","row_matrix_getPrototypeOf","maxHeights","maxWidths","matrixInst","cellDimOptions","matrixIndex","_this2$getCellDimensi","getCellDimensions","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","remainingAvailWidth","cWidths","maxPrioritySpace","availableWidth","currentWidth","prioritySpace","logicalWidths","getPriorityDistribution","mWidth","mHeight","redistributeViewSpaces","computeViewableSpaces","rHeights","gutter","spaceTakenByColumn","spaces","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","borderWidth","colHeight","colWidth","heights","ColumnVisualMatrix","column_matrix_classCallCheck","column_matrix_possibleConstructorReturn","column_matrix_getPrototypeOf","heightDist","divider","spaceTakenByRow","getDistributedWidth","layoutConfig","distWidth","rowLen","oldLogicalSpace","heightDistribution","getMatrixMeasurement","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","paginationDetailsMap","scrollType","paginationMeasureGetter","relatedMaxMeasure","getMatrixMeasureForPagination","measureDetails","actualMeasure","scrollInfo","getMatrixHeightDetails","columnMatrixWidth","_getHeightRequiredByC","getHeightRequiredByColMatrix","maxColumnMatrixHeight","columnViewSpace","getViewableSpaces","columnPointer","columnMatrixHeight","maxHeightAvailableForRowMatrix","rowMatrixHeight","bufferCondition","isScroll","getActualBufferFromConfig","computations_slicedToArray","getBufferFromCondition","currentBufferType","horizontalBuffer","verticalBuffer","computeLayoutMeasurements","_getMatrixWidthDetail","getMatrixWidthDetails","_layout$config3","rowMatrixWidth","maxRowMatrixWidth","maxWidthAvailableForColumnMatrix","_getMatrixHeightDetai","_getActualBufferFromC","rowViewableSpaces","columnViewableSpaces","setValueMatrixMeasurements","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnHeightsPrimary","columnHeightsSecondary","measureSum","total","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","layout_getPrototypeOf","_layoutId","_scrollInfo","generateVisualMatrices","begColCells","endColCells","gutterSpace","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","RowMatrix","ColumnMatrix","layout_get","_computeLayoutMeasure","setViewInformation","pageNumber","pageType","totalPages","layout_defineProperty","renderGrid","currentPage","_viewInfo","maxRowHeight","maxColWidth","rowPointer","getViewMatrices","rowMatrices","getViewableMatrices","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$config","rowSpaces","colSpaces","rightWidth","topHeight","bottomHeight","centerHeight","centerWidth","viewWidth","viewHeight","actualCenterMeasures","totalMeasures","unitHeights","unitWidths","borderMap","border_helper_defineProperty","_borderMap","specificBorderApplier","borderTypes","showBorders","borderInfo","borderType","applySpecificBorder","applyBorders","borderApplierFn","borderApplier","borderMapVal","orderMaker","nestByStack","updateArr","optionalParams","currStack","prevStack","arrVal","stackVal","currElemIndex","newElem","arrElem","returnArr","spanCalculator","colData","colIdx","isNull","maskCreator","_nestByStack","viewMatrix","hierarchy","_nestByStack2","spanGenerator","spans","ridx","currSpan","getOrder","matrixSpanGeneratorMap","span_maker_defineProperty","_matrixSpanGeneratorM","orderGetter","viewMatrixMaker","spanMaker","matrixSpanGenerator","spanApplier","cellCounter","spaceAllocationDueToSpan","primaryUnitWidth","cumulativeWidth","spanApplierMap","_spanApplierMap","TransactionSupport","INTERFACE_IMPl","CLASSPREFIX","HEADER","DATA","AXES","FACET_BY_FIELDS","FIELDS","TRANSFORM","LAYER_DEF","CONFIG","DETAIL_FIELDS","AXIS","GEOM","BLANK","SimpleCell","simple_cell_classCallCheck","enums_defaults_defineProperty","_DEFAULT_CONFIG","_CONSTANTS$MARGIN","CONSTANTS","DEFAULT_PROPS","minSpacing","visual_cell_src_props_defineProperty","visual_cell_src_props_PROPS","caption","smartText","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","axis_cell_getPrototypeOf","_availHeight","_availWidth","axis_cell_assertThisInitialized","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","actualWidth","actualHeight","_axis$config2","wrapperDiv","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","blank_cell_getPrototypeOf","blank_cell_assertThisInitialized","setSmartText","_context$minSpacing","minHeightSpace","minWidthSpace","paddedHeight","paddedWidth","text_cell_classCallCheck","text_cell_possibleConstructorReturn","text_cell_getPrototypeOf","text_cell_assertThisInitialized","computeTextSpace","_context$minSpacing2","minText","_minTextSpace","smartSpace","textAlign","vAlign","_this$smartText","translation","middle","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","geom_cell_getPrototypeOf","_unit","_datamodel","_facetByFields","_transform","_caption","geom_cell_assertThisInitialized","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","resolveTitleSubTitleContent","rawContent","escapeHTML","htmlEscapes","&","<",">","\"","'","/","createHeading","prevCell","cellType","_minTickDiff","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendInfo","legendCreator","LegendCls","dataset","scaleProps","_scale$config","stepMapper","dataInfo","legendMeasures","titleText","getGroupByData","setLegendMeasures","MuzeComponent","_this$boundBox","HeaderComponent","headerComponent_classCallCheck","headerComponent_possibleConstructorReturn","headerComponent_getPrototypeOf","setParams","cont","renderHeader","LegendComponent","legendComponent_classCallCheck","legendComponent_possibleConstructorReturn","legendComponent_getPrototypeOf","legendSpace","sectionComponents","_this$params$config","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","legendHeight","legendWidth","renderLegend","_defaultAlignmentHelp","defaultAlignmentHelper","arrowSizeMap","getUnitPositions","totalLength","viewLength","currentLen","unitPosition","createScrollBarArrow","createScrollBarRect","mover","applyScrollMouseDownAction","moverRect","scrollMaker","_mover$node$getBoundi","_rect$node$getBoundin","rectX","rectY","changeMoverPosition","registerListenerOnArrow","arrowType","_components","isTouchDevice","registerListeners","applyMoverDrag","moverStartPos","rectStartPos","distanceMoved","actualPosition","pageXOffset","pageYOffset","applyRectClick","emptyScrollAreaClick","manager","unitPositions","ScrollMaker","scroll_maker_classCallCheck","_attachedScrollAction","_unitPositions","scroll_maker_createClass","scrollTo","scrollDeltaTo","createScroll","scrollBarContainer","scrollContainerHelper","attachScrollAction","externalScrollAction","detachScrollAction","scrollMakerMap","_ScrollMaker","HorizontalScrollMaker","horizontal_scroll_maker_classCallCheck","horizontal_scroll_maker_possibleConstructorReturn","horizontal_scroll_maker_getPrototypeOf","horizontal_scroll_maker_inherits","horizontal_scroll_maker_createClass","horizontal_scroll_maker_get","prevArrow","nextArrow","_this$logicalSpace","scrollBarWithouArrowLength","_scrollBarWithouArrowLength","_this$_components$mov","positionAdjuster","newPosition","currentPos","_this$_components$mov2","moverPos","movedViewLength","performAttachedScrollFunction","delta","_this$_components$mov3","scrollPercentage","movement","VerticalScrollMaker","vertical_scroll_maker_classCallCheck","vertical_scroll_maker_possibleConstructorReturn","vertical_scroll_maker_getPrototypeOf","vertical_scroll_maker_inherits","vertical_scroll_maker_createClass","vertical_scroll_maker_get","ScrollComponent","scroll_component_classCallCheck","scrollBarComponentConfig","scroll_component_possibleConstructorReturn","scroll_component_getPrototypeOf","unitIndex","sanitizedUnitIndex","externalAction","MatrixComponent","matrix_component_classCallCheck","matrix_component_possibleConstructorReturn","matrix_component_getPrototypeOf","_this$params$config$s","containerForMatrix","applyScroll","_cellSpanMaker","cellSpanMaker","_matrixSpanGenerator","renderTable","applySpans","applier","renderPlaceholders","renderMatrix","applyScrollAction","scollDistance","GridComponent","grid_component_classCallCheck","grid_component_possibleConstructorReturn","grid_component_getPrototypeOf","_this$component$viewI","matrixDim","matrixName","updateWrapper","matrixWrapper","allComponents","_scrollBarManager","scrollBarManager","wheelDeltaX","wheelDeltaY","preventBrowserScroll","triggerScrollBarAction","movedView","scrollActionApplier","_this$component$0$0$b","sanitizeGrid","attachScrollListener","MessageComponent","message_component_classCallCheck","message_component_possibleConstructorReturn","message_component_getPrototypeOf","_config$dimensions","message","_params$config","headerMap","headerCell","configType","headerAlignmentMap","component_wrapper_maker_defineProperty","_headerAlignmentMap","isGridPresent","renderDetails","_renderDetails$compon","checkParamsValidation","createHeaderWrapper","headerType","layoutManager","_headerMap$headerType","headerConfig","wrapperParams","component_wrapper_maker_objectSpread","existingComponent","createScrollBarWrapper","scrollBarType","grid","_scrollBarMap$scrollB","scrollBarMap","layoutBasedMeasure","viewMeasure","rowAlign","colAlign","componentWrapperMaker","_layoutManager","createMessageWrapper","_i","_headerValues","defaultDimensions","gridComponent","getBoundBox","createLegendWrapper","legendWrapper","gridLayoutWrapper","verticalScrollBar","horizontalScrollBar","ScrollManager","scroll_manager_classCallCheck","_scrollBarComponents","_attachedComponents","scroll_manager_createClass","scrollBarComponents","attachedComponents","performScrollAction","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","titleLayouts","component_resolver_defineProperty","legendLayouts","titlePosition","subtitlePosition","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","isSubtitle","headerOptions","_createHeading","createLegend","getLegendSpace","mountSpace","componentIndexes","componentNames","3","4","5","6","renderLayout","gridLayout","compWrappers","componentWrappers","createScrollManager","horizontalScrollWrapper","verticalScrollWrapper","gridWrapper","hScrollBar","vScrollBar","componentWrapper","deleteElementName","removeComponent","registerComponents","attachListeners","attachListener","defaultInteractionPolicy","isMeasure","group_firebolt_toConsumableArray","getFieldsFromChannel","colDim","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","GroupFireBolt","group_firebolt_classCallCheck","group_firebolt_possibleConstructorReturn","group_firebolt_getPrototypeOf","behaviouralAction","validFields","APP_INITIAL_STATE","app","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","canvas_getPrototypeOf","canvas_defineProperty","canvas_assertThisInitialized","initedComponents","initCanvas","createGroupState","_VisualGroup$getState2","canvas_helper_slicedToArray","register","prepareLayout","triggerReflow","setLayoutInfForUnits","getRootNodeId","setLabelRotationForAxes","rotationVal","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","Smartlabel","SideEffects","standards","Behaviours","pkg","operators","utils","lookupWhat","lookupDetails","lookupTarget"],"mappings":"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AIi/B,+BAES0W,cAAKK,aCZTA,YAAS,IAAIz1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,+BAES0W,cAAKK,aCALL,cAZK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,gCCES0W,cAZK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,gCCES0W,cAZK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,gCCES0W,gBAZK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,gCCES0W,gBAZK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,gCCES0W,kBAZK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,gCCAS0W,gBAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,eAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,iBAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,iBAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,cAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCTN,SAAS0W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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 a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.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 a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));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=JSON.parse('{\"name\":\"datamodel\",\"description\":\"Relational algebra compliant in-memory tabular data store\",\"homepage\":\"https://github.com/chartshq/datamodel\",\"version\":\"2.2.2\",\"license\":\"MIT\",\"main\":\"dist/datamodel.js\",\"keywords\":[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],\"author\":\"Muzejs.org (https://muzejs.org/)\",\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/chartshq/datamodel.git\"},\"contributors\":[{\"name\":\"Akash Goswami\",\"email\":\"akashgoswami90s@gmail.com\"},{\"name\":\"Subhash Haldar\"},{\"name\":\"Rousan Ali\",\"email\":\"rousanali786@gmail.com\",\"url\":\"https://rousan.io\"},{\"name\":\"Ujjal Kumar Dutta\",\"email\":\"duttaujjalkumar@live.com\"},{\"name\":\"Ranajit Banerjee\",\"email\":\"ranajit.113124@gmail.com\"},{\"name\":\"Adarsh Lilha\",\"email\":\"adarshlilha@gmail.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\":\"npm run build:prod\",\"build:dev\":\"webpack --mode development\",\"build:prod\":\"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 l})),n.d(r,\"GROUP_BY_FUNCTIONS\",(function(){return s}));var a={};n.r(a),n.d(a,\"DSVArr\",(function(){return rt})),n.d(a,\"DSVStr\",(function(){return mt})),n.d(a,\"FlatJSON\",(function(){return yt})),n.d(a,\"Auto\",(function(){return bt}));var i={};n.r(i),n.d(i,\"sum\",(function(){return un})),n.d(i,\"avg\",(function(){return cn})),n.d(i,\"min\",(function(){return fn})),n.d(i,\"max\",(function(){return ln})),n.d(i,\"first\",(function(){return sn})),n.d(i,\"last\",(function(){return dn})),n.d(i,\"count\",(function(){return pn})),n.d(i,\"sd\",(function(){return hn}));var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\",BINNED:\"binned\"},c={CONTINUOUS:\"continuous\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},l={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"},s={SUM:\"sum\",AVG:\"avg\",MIN:\"min\",MAX:\"max\",FIRST:\"first\",LAST:\"last\",COUNT:\"count\",STD:\"std\"};function d(e){return e instanceof Date?e:new Date(e)}function p(e){return e<10?\"0\"+e:e}function h(e){this.format=e,this.dtParams=void 0,this.nativeDate=void 0}RegExp.escape=function(e){return e.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\"\\\\$&\")},h.TOKEN_PREFIX=\"%\",h.DATETIME_PARAM_SEQUENCE={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6},h.defaultNumberParser=function(e){return function(t){var n;return isFinite(n=parseInt(t,10))?n:e}},h.defaultRangeParser=function(e,t){return function(n){var r,a=void 0;if(!n)return t;var i=n.toLowerCase();for(a=0,r=e.length;aa.getFullYear()&&(t=\"\"+(i-1)+r),d(t).getFullYear()},formatter:function(e){var t=d(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:\"Y\",index:0,extract:function(){return\"(\\\\d{4})\"},parser:h.defaultNumberParser(),formatter:function(e){return d(e).getFullYear().toString()}}}},h.getTokenFormalNames=function(){var e=h.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},h.tokenResolver=function(){var e=h.getTokenDefinitions(),t=function(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[i+1],-1!==r.indexOf(o)&&a.push({index:i,token:o});return a},h.formatAs=function(e,t){var n,r=d(e),a=h.findTokens(t),i=h.getTokenDefinitions(),o=String(t),u=h.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=a.length;l=0;d--)(f=i[d].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(d=0;d0&&e.split(\",\").forEach((function(e){var n=e.split(\"-\"),r=+n[0],a=+(n[1]||n[0]);if(a>=r)for(var i=r;i<=a;i+=1)t(i)}))}var R=function(){function e(e,t){for(var n=0;n=(i=e[a=n+Math.floor((r-n)/2)]).start&&t=i.end?n=a+1:t3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:U.CROSS,i=[],o=[],u=n||H,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,d=c.name+\".\"+f.name,p=Y(c,f);if(l===s)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach((function(e){var t=_({},e.schema());-1===p.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),i.push(t)})),f.fields.forEach((function(e){var t=_({},e.schema());-1!==p.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,i.push(t)):i.push(t)})),T(e._rowDiffset,(function(n){var d=!1,h=void 0;T(t._rowDiffset,(function(v){var m=[],y={};y[l]={},y[s]={},c.fields.forEach((function(e){m.push(e.partialField.data[n]),y[l][e.name()]={rawValue:e.partialField.data[n],formattedValue:e.formattedData()[n]}})),f.fields.forEach((function(e){-1!==p.indexOf(e.schema().name)&&r||m.push(e.partialField.data[v]),y[s][e.name()]={rawValue:e.partialField.data[v],formattedValue:e.formattedData()[v]}}));var g=At(y[l]),b=At(y[s]);if(u(g,b,(function(){return e.detachedRoot()}),(function(){return t.detachedRoot()}),{})){var w={};m.forEach((function(e,t){w[i[t].name]=e})),d&&U.CROSS!==a?o[h]=w:(o.push(w),d=!0,h=n)}else if((a===U.LEFTOUTER||a===U.RIGHTOUTER)&&!d){var O={},_=c.fields.length-1;m.forEach((function(e,t){O[i[t].name]=t<=_?e:null})),d=!0,h=n,o.push(O)}}))})),new on(o,i,{name:d})}function J(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J;return e.length>1&&function e(t,n,r,a){if(r===n)return t;var i=n+Math.floor((r-n)/2);return e(t,n,i,a),e(t,i+1,r,a),function(e,t,n,r,a){for(var i=e,o=[],u=t;u<=r;u+=1)o[u]=i[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(i[l]=o[f],f+=1):f>r?(i[l]=o[c],c+=1):a(o[c],o[f])<=0?(i[l]=o[c],c+=1):(i[l]=o[f],f+=1)}(t,n,i,r,a),t}(e,0,e.length-1,t),e}var K=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")};function W(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt?1:-1}:function(e,t){return(e=\"\"+e)===(t=\"\"+t)?0:e>t?-1:1}}return n}(e.type,n)}function q(e,t){var n=new Map,r=[];return e.forEach((function(e){var a=e[t];n.has(a)?r[n.get(a)][1].push(e):(r.push([a,[e]]),n.set(a,r.length-1))})),r}function Z(e,t,n){var r={label:e[0]};return t.reduce((function(t,r,a){return t[r]=e[1].map((function(e){return e[n[a].index]})),t}),r),r}function $(e,t,n){for(var r=void 0,a=void 0,i=void 0,o=n.length-1;o>=0;o--)r=n[o][0],a=n[o][1],(i=Ht(t,r))&&(\"function\"==typeof a?z(e,(function(e,t){return a(e[i.index],t[i.index])})):E(a)?function(){var n=q(e,i.index),r=a[a.length-1],o=a.slice(0,a.length-1),u=o.map((function(e){return Ht(t,e)}));n.forEach((function(e){e.push(Z(e,o,u))})),z(n,(function(e,t){var n=e[2],a=t[2];return r(n,a)})),e.length=0,n.forEach((function(t){e.push.apply(e,W(t[1]))}))}():function(){var t=X(i,a);z(e,(function(e,n){return t(e[i.index],n[i.index])}))}())}var Q,ee=function e(t,n,r,a){if(0===t.length)return n;var i=t[0],o=new Map;n.reduce((function(e,t){var n=t[i.index];return e.has(n)?e.get(n).push(t):e.set(n,[t]),e}),o);var u=!0,c=!1,f=void 0;try{for(var l,s=o[Symbol.iterator]();!(u=(l=s.next()).done);u=!0){var d=l.value,p=K(d,2),h=p[0],v=p[1],m=e(t.slice(1),v,r,a);o.set(h,m),Array.isArray(m)&&$(m,r,a)}}catch(e){c=!0,f=e}finally{try{!u&&s.return&&s.return()}finally{if(c)throw f}}return o};function te(e,t){var n=e.schema,r=e.data;if(0!==(t=t.filter((function(e){return!!Ht(n,e[0])}))).length){var a=t.findIndex((function(e){return null===e[1]}));a=-1!==a?a:t.length;var i=t.slice(0,a),o=t.slice(a);$(r,n,i),r=function(e,t,n,r){if(0===(n=n.filter((function(e){return null!==e[1]||(r.push(e[0]),!1)}))).length)return e;r=r.map((function(e){return Ht(t,e)}));var a=ee(r,e,t,n);return e.map((function(e){for(var t=0,n=a;!Array.isArray(n);)n=n.get(e[r[t++].index]);return n.shift()}))}(r,n,o,i.map((function(e){return e[0]}))),e.uids=r.map((function(e){return e.pop()})),e.data=r}}function ne(e,t,n,r,a){a=Object.assign({},{addUid:!1,columnWise:!1},a);var i={schema:[],data:[],uids:[]},o=a.addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach((function(t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n={},r=e.getFieldspace().getMeasure(),a=_e.defaultReducer();return Object.keys(r).forEach((function(e){\"string\"!=typeof t[e]&&(t[e]=r[e].defAggFn());var i=_e.resolve(t[e]);i?n[e]=i:(n[e]=a,t[e]=ge)})),n}(e,n),o=e.getFieldspace(),u=o.fieldsObj(),c=o.name,l=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach((function(e){var t=Ee(e,2),n=t[0],r=t[1];if(-1!==a.indexOf(n)||i[n])switch(d.push(_({},r.schema())),r.schema().type){case f.MEASURE:s.push(n);break;default:case f.DIMENSION:l.push(n)}}));var m=0;T(e._rowDiffset,(function(e){var t=\"\";l.forEach((function(n){t=t+\"-\"+u[n].partialField.data[e]})),void 0===p[t]?(p[t]=m,h.push({}),l.forEach((function(t){h[m][t]=u[t].partialField.data[e]})),s.forEach((function(t){h[m][t]=[u[t].partialField.data[e]]})),m+=1):s.forEach((function(n){h[p[t]][n].push(u[n].partialField.data[e])}))}));var y={},g=function(){return e.detachedRoot()};return h.forEach((function(e){var t=e;s.forEach((function(n){t[n]=i[n](e[n],g,y)}))})),r?(r.__calculateFieldspace(),v=r):v=new yn(h,d,{name:c}),v}function je(e,t){var n=Y(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach((function(n){r=!(e[n].internalValue!==t[n].internalValue||!r)})),r}}function Se(e,t){var n={},r=[],a=[],i=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),l=o.name+\" union \"+u.name;if(!j(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function s(e,t){T(e._rowDiffset,(function(e){var r={},o=\"\";a.forEach((function(n){var a=t[n].partialField.data[e];o+=\"-\"+a,r[n]=a})),n[o]||(i.push(r),n[o]=!0)}))}return e._colIdentifier.split(\",\").forEach((function(e){var t=c[e];r.push(_({},t.schema())),a.push(t.schema().name)})),s(e,c),s(t,f),new yn(i,r,{name:l})}function De(e,t,n){return G(e,t,n,!1,U.LEFTOUTER)}function Fe(e,t,n){return G(t,e,n,!1,U.RIGHTOUTER)}var Ne=function(){function e(e,t){for(var n=0;nn&&(n=a))})),[t,n]}}]),t}(Ve),He=function(){function e(e,t){for(var n=0;n9999?\"+\"+st(t,6):st(t,4))+\"-\"+st(e.getUTCMonth()+1,2)+\"-\"+st(e.getUTCDate(),2)+(i?\"T\"+st(n,2)+\":\"+st(r,2)+\":\"+st(a,2)+\".\"+st(i,3)+\"Z\":a?\"T\"+st(n,2)+\":\"+st(r,2)+\":\"+st(a,2)+\"Z\":r||n?\"T\"+st(n,2)+\":\"+st(r,2)+\"Z\":\"\")}var pt=function(e){var t=new RegExp('[\"'+e+\"\\n\\r]\"),n=e.charCodeAt(0);function r(e,t){var r,a=[],i=e.length,o=0,u=0,c=i<=0,f=!1;function l(){if(c)return it;if(f)return f=!1,at;var t,r,a=o;if(e.charCodeAt(a)===ot){for(;o++=i?c=!0:(r=e.charCodeAt(o++))===ut?f=!0:r===ct&&(f=!0,e.charCodeAt(o)===ut&&++o),e.slice(a+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},a=arguments[3];t===L.COMPOSE?(e._derivation.length=0,(n=e._derivation).push.apply(n,_t(a))):e._derivation.push({op:t,meta:r,criteria:a})},Dt=function(e,t){var n;(n=t._ancestorDerivation).push.apply(n,_t(e._ancestorDerivation).concat(_t(e._derivation)))},Ft=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=arguments[4];St(t,n,r,a),Dt(e,t)},Nt=(Ot(gt={},l.NORMAL,{diffIndex:[\"rowDiffset\"],calcDiff:[!0,!1]}),Ot(gt,l.INVERSE,{diffIndex:[\"rejectRowDiffset\"],calcDiff:[!1,!0]}),Ot(gt,l.ALL,{diffIndex:[\"rowDiffset\",\"rejectRowDiffset\"],calcDiff:[!0,!0]}),gt),kt=function(e,t,n){if(-1!==n&&t===n+1){var r=e.length-1;e[r]=e[r].split(\"-\")[0]+\"-\"+t}else e.push(\"\"+t)},Tt=function(e,t,n){var r=[],a=[],i=wt(Nt[n].calcDiff,2),o=i[0],u=i[1];return T(e,(function(e){var n=t(e);n&&o&&kt(r,e,-1),!n&&u&&kt(a,e,-1)})),{rowDiffset:r.join(\",\"),rejectRowDiffset:a.join(\",\")}},Rt=function(e,t,n,r,a){var i={},o={},u={};return T(e,(function(e){if(t(e)){var n=\"\",c={keys:{}};r.forEach((function(t){var r=a[t].partialField.data[e];n=n+\"-\"+r,c.keys[t]=r})),void 0===o[n]&&(o[n]=[],i[n]=-1,u[n]=c),kt(o[n],e,i[n]),i[n]=e}})),{splitRowDiffset:o,dimensionMap:u}},Ct=function(e,t,n,r,a){var i={},o=function(){return r.detachedRoot()},u=n.mode,c=e._rowDiffset,f=e.getPartialFieldspace().fields,l=f.map((function(e){return e.formattedData()})),s=f.map((function(e){return e.data()}));return a(c,(function(e){return t(Et(f,l,s,e),e,o,i)}),u)},Mt=function(e){var t=e.clone(!1),n=e.getPartialFieldspace();return t._colIdentifier=n.fields.map((function(e){return e.name()})).join(\",\"),n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,t.__calculateFieldspace().calculateFieldsConfig(),t},It=function(e,t,n){for(var r=n(e,t,0),a=1,i=e.length;a2&&void 0!==arguments[2]?arguments[2]:{},r=[],a=n.operation||V,i=n.filterByMeasure||!1,o=Mt(e),u=o.getFieldsConfig();r=t.length?t.map((function(e){return n=void 0,r=(t=e).getData(),a=t.getFieldsConfig(),o=Object.keys(t.getFieldspace().getDimension()).filter((function(e){return e in u})),c=o.length,f=o.map((function(e){return a[e].index})),l=Object.keys(t.getFieldspace().getMeasure()).filter((function(e){return e in u})),s=t.getFieldspace().fieldsObj(),d=r.data,p=l.reduce((function(e,t){return e[t]=s[t].domain(),e}),{}),h={},n=function(e,t,n){return t[e[n]]},c&&d.forEach((function(e){var t=It(f,e,n);h[t]=1})),n=function(e,t,n){return t[e[n]].internalValue},d.length?function(e){var t=!c||h[It(o,e,n)];return i?l.every((function(t){return e[t].internalValue>=p[t][0]&&e[t].internalValue<=p[t][1]}))&&t:t}:function(){return!1};var t,n,r,a,o,c,f,l,s,d,p,h})):[function(){return!1}];return a===V?o.select((function(e){return r.every((function(t){return t(e)}))}),{saveChild:!1}):o.select((function(e){return r.some((function(t){return t(e)}))}),{saveChild:!1})},xt=function(e,t,n,r,a){e._rowDiffset=t,e.__calculateFieldspace().calculateFieldsConfig(),Ft(n,e,L.SELECT,{config:r},a)},Lt=function(e,t,n,r){var a=e.clone(n.saveChild),i=t;return n.mode===l.INVERSE&&(i=r.filter((function(e){return-1===t.indexOf(e)}))),a._colIdentifier=i.join(\",\"),a.__calculateFieldspace().calculateFieldsConfig(),Ft(e,a,L.PROJECT,{projField:t,config:n,actualProjField:i},null),a},Ut=function(e,t,n,r){return t.map((function(t){return Lt(e,t,n,r)}))},Vt=function(e){if((e=_({},e)).type||(e.type=f.DIMENSION),!e.subtype)switch(e.type){case f.MEASURE:e.subtype=c.CONTINUOUS;break;default:case f.DIMENSION:e.subtype=u.CATEGORICAL}return e},Bt=function(e){return e.map((function(e){return function(e){var t=[c.CONTINUOUS],n=[u.CATEGORICAL,u.BINNED,u.TEMPORAL,u.GEO],r=e.type,a=e.subtype,i=e.name;switch(r){case f.DIMENSION:if(-1===n.indexOf(a))throw new Error(\"DataModel doesn't support dimension field subtype \"+a+\" used for \"+i+\" field\");break;case f.MEASURE:if(-1===t.indexOf(a))throw new Error(\"DataModel doesn't support measure field subtype \"+a+\" used for \"+i+\" field\");break;default:throw new Error(\"DataModel doesn't support field type \"+r+\" used for \"+i+\" field\")}}(e=Vt(e)),e}))},Yt=function(e,t,n,r){n=Bt(n),r=Object.assign(Object.assign({},nt),r);var i=a[r.dataFormat];if(!i||\"function\"!=typeof i)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var u=i(t,n,r),c=wt(u,2),f=c[0],l=c[1];!function(e,t){e.forEach((function(e){var n=e.as;if(n){var r=t.indexOf(e.name);t[r]=n,e.name=n,delete e.as}}))}(n,f);var s=tt(l,n,f),d=F.createNamespace(s,r.name);e._partialFieldspace=d,e._rowDiffset=l.length&&l[0].length?\"0-\"+(l[0].length-1):\"\";var p=[],h=d.fields,v=h.map((function(e){return e.data()})),m=h.map((function(e){return e.formattedData()}));return T(e._rowDiffset,(function(e){p[e]=Et(h,m,v,e)})),d._cachedValueObjects=p,e._colIdentifier=n.map((function(e){return e.name})).join(),e._dataFormat=r.dataFormat===o.AUTO?D(t):r.dataFormat,e},Ht=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a.nonTraversingModel,o=a.excludeModels||[];if(t!==i){var u=!o.length||-1===o.indexOf(t);u&&t.handlePropagation(n,r);var c=t._children;c.forEach((function(t){var i=Gt(n,t);e(t,i,r,a)}))}},zt=function(e){for(;e._parent&&e._derivation.find((function(e){return e.op!==L.GROUPBY}));)e=e._parent;return e},Kt=function(e){for(;e._parent;)e=e._parent;return e},Wt=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t},Xt=function(e,t,n,r){var a=void 0,i=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}],a=[];else{var s,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),(a=v.filter((function(t){return t!==e})).map((function(e){return e.config.criteria}))).length&&l.push({criteria:a,models:e.model,path:Wt(e.model)}))}))}a=(s=[]).concat.apply(s,[].concat(_t(p),[e])).filter((function(e){return null!==e})),l.push({criteria:a,excludeModels:[].concat(h,_t(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(i=Pt(g,a,{filterByMeasure:f}),Jt(g,i,y)),l.forEach((function(e){var t=Pt(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,a=t.isMutableAction,i=t.criteria,o=t.action+\"-\"+t.sourceId;r=a?e.mutableActions:e.immutableActions,null===i?delete r[o]:r[o]={model:n,config:t}},$t=function(e,t,n){var r=e.reduce((function(e,r){return\"RegExp\"===r.constructor.name?e.push.apply(e,_t(t.filter((function(e){return-1!==e.search(r)})))):r in n&&e.push(r),e}),[]);return Array.from(new Set(r)).map((function(e){return e.trim()}))},Qt=function(e,t){return e.numberFormat?e.numberFormat()(t):t},en=function(){function e(e,t){for(var n=0;n1?(a=e.clone(r.saveChild),xt(a,u[c[1]],e,n,t),[o,a]):o}(this,e,t,{saveChild:t.saveChild})}},{key:\"isEmpty\",value:function(){return!this._rowDiffset.length||!this._colIdentifier.length}},{key:\"clone\",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=new this.constructor(this);return e?t.setParent(this):t.setParent(null),t}},{key:\"project\",value:function(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),a=Object.keys(r),i=t.mode,o=$t(e,a,r),u=void 0;i===l.ALL?u=[Lt(this,o,{mode:l.NORMAL,saveChild:t.saveChild},a),Lt(this,o,{mode:l.INVERSE,saveChild:t.saveChild},a)]:u=Lt(this,o,t,a);return u}},{key:\"getFieldsConfig\",value:function(){return this._fieldConfig}},{key:\"calculateFieldsConfig\",value:function(){return this._fieldConfig=this._fieldspace.fields.reduce((function(e,t,n){return e[t.name()]={index:n,def:t.schema()},e}),{}),this}},{key:\"dispose\",value:function(){this._parent&&this._parent.removeChild(this),this._parent=null,this._children.forEach((function(e){e._parent=null})),this._children=[]}},{key:\"removeChild\",value:function(e){var t=this._children.findIndex((function(t){return t===e}));-1===t||this._children.splice(t,1)}},{key:\"setParent\",value:function(e){this._parent&&this._parent.removeChild(this),this._parent=e,e&&e._children.push(this)}},{key:\"getParent\",value:function(){return this._parent}},{key:\"getChildren\",value:function(){return this._children}},{key:\"getDerivations\",value:function(){return this._derivation}},{key:\"getAncestorDerivations\",value:function(){return this._ancestorDerivation}}]),e}(),nn=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")},rn=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(),a=[this,e,t],i=Ae.apply(void 0,a);return Ft(this,i,L.GROUPBY,{fieldsArr:e,groupByString:r,defaultReducer:_e.defaultReducer()},t),n.saveChild?i.setParent(this):i.setParent(null),i}},{key:\"sort\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{saveChild:!1},n=this.getData({order:\"row\",sort:e}),r=n.schema.map((function(e){return e.name})),a=[r].concat(n.data),i=new this.constructor(a,n.schema,{dataFormat:\"DSVArr\"});return Ft(this,i,L.SORT,t,e),t.saveChild?i.setParent(this):i.setParent(null),i}},{key:\"serialize\",value:function(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:\",\"},t);var n=this.getFieldspace().fields,r=n.map((function(e){return e.formattedData()})),a=r[0].length,i=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(i=[],u=0;u=0&&(n.fields[o]=e)}else n.fields.push(e),r.forEach((function(t,n){t[e.name()]=new k(a[n],i[n],e)}));return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t,n){var r=this;e=Vt(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var a=this.getFieldsConfig(),i=t.slice(0,t.length-1),o=t[t.length-1];if(a[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in datamodel\");var u=i.map((function(e){var t=a[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index})),c=this.clone(n.saveChild),f=c.getFieldspace().fields,l=u.map((function(e){return f[e]})),s={},d=function(){return r.detachedRoot()},p=[];T(c._rowDiffset,(function(e){var t=l.map((function(t){return t.partialField.data[e]}));p[e]=o.apply(void 0,an(t).concat([e,d,s]))}));var h=tt([p],[e],[e.name]),v=nn(h,1)[0];return c.addField(v),Ft(this,c,L.CAL_VAR,{config:e,fields:i},o),c}},{key:\"propagate\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=t.isMutableAction,i=t.sourceId,o=t.payload,u=Kt(this),c=u._propagationNameSpace,f=zt(this),l={groupByModel:f,model:u};return n&&Zt(c,t,this),Xt(e,l,{propagationNameSpace:c,sourceId:i},Object.assign({payload:o},t)),a&&qt(c,l,{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,t){var n=this.getFieldsConfig();if(!n[e])throw new Error(\"Field \"+e+\" doesn't exist\");var r=t.name||e+\"_binned\";if(n[r])throw new Error(\"Field \"+r+\" already exists\");var a=function(e,t,n){var r=n.buckets,a=n.binsCount,i=n.binSize,o=n.start,u=n.end,c=e.domain(),f=I(c,2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var d=[],p=0;p2&&void 0!==arguments[2]?arguments[2]:function(e){return e},r=arguments[3],a=r.saveChild,i=e.getFieldspace().fieldsObj(),o=Ct(e.clone(a),n,r,e,(function(){for(var e=arguments.length,n=Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments[2],r={mode:l.NORMAL,saveChild:!0},a=this.getFieldsConfig(),i=Object.keys(a),o=[[t]];return n=Object.assign({},r,n),(e=e.length?e:[[]]).forEach((function(e,n){o[n]=$t([].concat(an(e),an(t)),i,a)})),Ut(this,o,n,i)}}],[{key:\"configureInvalidAwareTypes\",value:function(e){return M.invalidAwareVals(e)}},{key:\"Reducers\",get:function(){return _e}}]),t}(tn),un=ye.sum,cn=ye.avg,fn=ye.min,ln=ye.max,sn=ye.first,dn=ye.last,pn=ye.count,hn=ye.std,vn={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0},r=e,a=void 0,i=[];return t.forEach((function(e){r=e(r),i.push.apply(i,B(r._derivation)),a||(a=r)})),a&&a!==r&&a.dispose(),r._ancestorDerivation=[],Ft(e,r,L.COMPOSE,null,i),n.saveChild?r.setParent(e):r.setParent(null),r}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n 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'];","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"hyperdis\",[],t):\"object\"==typeof exports?exports.hyperdis=t():e.hyperdis=t()}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=0)}([function(e,t,r){\"use strict\";r.r(t);var n=function(){function e(e,t){for(var r=0;r2?(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 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 copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\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]) // eslint-disable-line no-prototype-builtins\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.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\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\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 formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\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://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) return hcl2lab(o);\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.l < 100 ? 0 : NaN, 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\nfunction hcl2lab(o) {\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\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 hcl2lab(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 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","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 {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","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","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","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.js\";\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 if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\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 === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + 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.js\";\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.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\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.js\";\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.js\";\nimport formatRounded from \"./formatRounded.js\";\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.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n 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 === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\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 === undefined && (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 === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%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 === undefined ? 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 = isNaN(value) ? nan : 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 : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n\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.js\";\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.js\";\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.js\";\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(date - date.getMilliseconds());\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, durationSecond} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\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, durationSecond} from \"./duration\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\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.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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 colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\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 {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 {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 colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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","export const UNIT_GLOBAL_NAMESPACE = 'app.units';\nexport const UNIT_LOCAL_NAMESPACE = 'local.units';\nexport const LAYER_LOCAL_NAMESPACE = 'local.layers';\nexport const LAYER_GLOBAL_NAMESPACE = 'app.layers';\nexport const GROUP_GLOBAL_NAMESPACE = 'app.group';\nexport const GROUP_LOCAL_NAMESPACE = 'local.group';\nexport const CANVAS_LOCAL_NAMESPACE = 'local.canvas';\nexport const CANVAS_GLOBAL_NAMESPACE = 'app.canvas';\n\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 MATRIX_CREATED: 'matrixCreated'\n};\n\nexport default CommonProps;\n","export const COORD_TYPES = {\n POLAR: 'polar',\n CARTESIAN: 'cartesian'\n};\nexport const DATA_TYPE = {\n FUNCTION: 'function',\n STRING: 'string',\n NUMBER: 'number',\n BOOLEAN: 'Boolean'\n};\nexport const SORT_ORDER_ASCENDING = 'asc';\nexport const SORT_ORDER_DESCENDING = 'desc';\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, ccw = !!ccw;\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 = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\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 oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var 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","import { defaultValue } from '../common-utils';\n\nconst sortSelection = (dataObjects, updateData, sortFn) =>\n (a, b) => {\n const kA = a[0];\n const kB = b[0];\n return sortFn([a[0], dataObjects.get(kA), updateData.get(kA)], [kB, dataObjects.get(kB), updateData.get(kB)]);\n };\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 (idGetter) {\n this._dataObjects = new Map();\n this._updateData = new Map();\n this._enterData = new Map();\n this._exitData = new Map();\n this._idGetter = idGetter;\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) {\n const entryData = new Map();\n const exitdata = new Map();\n const tempMap = new Map();\n const duplicateData = new Map();\n const updatedData = this._updateData;\n const idGetter = this._idGetter;\n\n newData.forEach((...params) => {\n const key = idGetter ? idGetter(...params) : params[1];\n if (!tempMap.has(key)) {\n tempMap.set(key, params[0]);\n } else {\n duplicateData.push(key, params[0]);\n }\n });\n\n let val;\n // prepare enter data\n let entries = tempMap.entries();\n while (val = entries.next().value) {\n if (!updatedData.has(val[0])) {\n entryData.set(val[0], val[1]);\n } else {\n updatedData.set(val[0], val[1]);\n }\n }\n // prepare exit data\n entries = updatedData.entries();\n while (val = entries.next().value) {\n if (!tempMap.has(val[0])) {\n exitdata.set(val[0], val[1]);\n }\n }\n\n // put duplicate data to exit list\n entries = duplicateData.entries();\n while (val = entries.next().value) {\n exitdata.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = updatedData;\n newSelection._dataObjects = this._dataObjects;\n newSelection._enterData = entryData;\n newSelection._exitData = exitdata;\n\n return newSelection;\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 Selection\n */\n append (callback) {\n let val;\n const dataObjects = new Map();\n const data = new Map();\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n dataObjects.set(val[0], callback(val[1]));\n data.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = data;\n newSelection._dataObjects = dataObjects;\n\n return newSelection;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {Selection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\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 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 (target) {\n const mergedObjects = new Map();\n const mergedData = new Map();\n let val;\n let entries;\n\n // merge Object and data present in this selection\n entries = this._updateData.entries();\n while (val = entries.next().value) {\n if (!this._exitData.has(val[0])) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], this._dataObjects.get(val[0]));\n }\n }\n\n // merge object from target selection\n entries = target._updateData.entries();\n while (val = entries.next().value) {\n if (!(mergedData.has(val[0]) || target._exitData.has(val[0]))) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], target._dataObjects.get(val[0]));\n }\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = mergedData;\n newSelection._dataObjects = mergedObjects;\n\n return newSelection;\n }\n\n each (fn) {\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n fn(val[1], this._updateData.get(val[0]), val[0]);\n }\n }\n\n map (fn) {\n const newdata = new Map();\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n newdata.set(val[0], fn(val[1], this._updateData.get(val[0]), val[0]));\n }\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = this._updateData;\n newSelection._dataObjects = newdata;\n\n return newSelection;\n }\n\n remove () {\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n\n currentData.clear();\n\n return this;\n }\n\n sort (sortFn) {\n const updateData = this._updateData;\n const dataObjects = this._dataObjects;\n const sortSel = sortSelection(dataObjects, updateData, sortFn);\n\n this._updateData = new Map([...updateData.entries()].sort(sortSel));\n this._dataObjects = new Map([...dataObjects.entries()].sort(sortSel));\n return this;\n }\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 let val;\n const objects = [];\n const dataObjects = this._dataObjects;\n // select the data to create object\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n if (dataObjects.has(val[0])) {\n objects.push(dataObjects.get(val[0]));\n }\n }\n\n return objects;\n }\n}\n\nexport default Selection;\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","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype, DateTimeFormatter, DM_DERIVATIVES, default as DataModel } 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 { dataSelect } from './DataSystem';\nimport { DATA_TYPE, SORT_ORDER_ASCENDING, SORT_ORDER_DESCENDING } from './enums';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst { CATEGORICAL, TEMPORAL } = DimensionSubtype;\nconst { STRING, FUNCTION } = DATA_TYPE;\nconst { InvalidAwareTypes } = DataModel;\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.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.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 const domArr = [];\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n for (let i = 0, len = data.length; i < len; i++) {\n const arr = data[i];\n const [field0, field1] = fields;\n const arr0 = arr.filter(d => !isNaN(d[field0]));\n const arr1 = arr.filter(d => !isNaN(d[field1]));\n if (arr0.length || arr1.length) {\n const firstMin = getMin(arr0, field0);\n const secondMin = getMin(arr1, field1);\n const firstMax = getMax(arr0, field0);\n const secondMax = getMax(arr1, field1);\n domArr.push([Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)]);\n }\n }\n domain = domArr.length ? [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))] : [];\n break;\n }\n return domain;\n};\n\nconst sanitizeDomainWhenEqual = (domain) => {\n if (domain[0] === domain[1]) {\n domain[0] = domain[0] > 0 ? 0 : domain[0];\n domain[1] = domain[1] > 0 ? domain[1] : 0;\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 && dom.length);\n if (domains.length) {\n if (fieldType === CATEGORICAL) {\n domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\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\nconst getNearestValue = (data, key) => {\n const filterData = data.filter(d => typeof d === 'number');\n return filterData[getClosestIndexOf(filterData, key)];\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 *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object}\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} name\n * @return {Object}\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\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 * 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\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const { sanitization, preset, onset, typeChecker, defaultValue: defVal } = propInfo[1];\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n if (defVal) {\n context[`_${prop}`] = defVal;\n }\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0], context[`_${prop}`]);\n }\n if (preset) {\n preset(context, value);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n if (onset) {\n onset(context, value);\n }\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 *\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\n .registerImmediateListener(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\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 */\nconst createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect(idFn);\n\n selection = selection.data(data);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n const exitSelection = selection.exit();\n exitSelection.getObjects().forEach(inst => inst.remove());\n exitSelection.remove();\n return mergedSelection;\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 shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? rgbToHsv(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : '';\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\\(([\\d.]+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*(\\d*(?:\\.\\d+)?)\\)$/;\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\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 *\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].internalValue;\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 *\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].internalValue;\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 } else {\n filteredDataModel = dataModel.select(() => false, {\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, ...params) => {\n const propListenerMap = listenerMap(context, ...params);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const { namespace } = params[1];\n let ns = null;\n if (namespace) {\n ns = namespace;\n }\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, false, {\n namespace: ns\n });\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} str\n *\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 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};\n\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\n\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\n\nconst formatTemporal = (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n};\n\nconst temporalFields = (dataModel) => {\n const filteredFields = {};\n Object.entries(dataModel.getFieldspace().getDimension()).forEach(([fieldName, fieldObj]) => {\n if (fieldObj.subtype() === TEMPORAL) {\n filteredFields[fieldName] = fieldObj;\n }\n });\n return filteredFields;\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\nconst getValueParser = config => (val) => {\n if (val instanceof InvalidAwareTypes) {\n return val in config ? config[val] : `${val}`;\n }\n return val;\n};\n\nconst retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => {\n const filteredReducers = {};\n if (dataModel instanceof DataModel) {\n const derivations = [...dataModel.getDerivations().reverse(), ...dataModel.getAncestorDerivations().reverse()];\n const nearestReducers = defaultValue(\n getObjProp(derivations.find(derv => derv.op === DM_DERIVATIVES.GROUPBY), 'criteria'), {});\n\n const measures = dataModel.getFieldspace().getMeasure();\n measureFieldNames = measureFieldNames.length ? measureFieldNames : Object.keys(measures);\n measureFieldNames.forEach((measureName) => {\n if (nearestReducers[measureName]) {\n filteredReducers[measureName] = nearestReducers[measureName];\n } else {\n const measureField = measures[measureName];\n if (measureField) {\n filteredReducers[measureName] = measureField.defAggFn();\n }\n }\n });\n }\n return filteredReducers;\n};\n\nconst retrieveFieldDisplayName = (dm, fieldName) => dm.getFieldspace().fieldsObj()[fieldName].displayName();\n/**\n * Fetches the nearest sort operation details by traversing the chain of parent DataModels\n * @param {Object} dataModel Instance of DataModel\n *\n * @return {Array|null} sort criteria, null if no sort operation found\n */\nconst nearestSortingDetails = (dataModel) => {\n const allDerivations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n const nearestSortDerivation = allDerivations.reverse().find(derivation => derivation.op === DM_DERIVATIVES.SORT);\n\n return nearestSortDerivation ? nearestSortDerivation.criteria : null;\n};\n\n/**\n * Map containing key, value sortingOrder pairs\n */\nconst sortOrderMap = {\n [SORT_ORDER_ASCENDING]: (firstVal, secondVal) => firstVal.localeCompare(secondVal),\n [SORT_ORDER_DESCENDING]: (firstVal, secondVal) => secondVal.localeCompare(firstVal)\n};\n\n/**\n * Sort categorical field based on it's sorting order\n * @param {string} sortOrder Order by which field is to be sorted (asc or desc or func)\n * @param {string} firstVal First sort parameter\n * @param {string} secondVal Second sort parameter\n * @return {number} position|null if sort order is invalid\n*/\nconst sortCategoricalField = (sortOrder, firstVal, secondVal) => {\n const sortOrderType = typeof sortOrder;\n\n if (sortOrderType === FUNCTION) {\n return sortOrder(firstVal, secondVal);\n } else if (sortOrderType === STRING) {\n if (!sortOrderMap[sortOrder]) return null;\n return sortOrderMap[sortOrder](firstVal, secondVal);\n }\n return null;\n};\n\nconst intersect = (arr1, arr2, accessors = [v => v, v => v]) => {\n const [fn1, fn2] = accessors;\n const set = new Set(arr2.map(v => fn2(v)));\n return arr1.filter(value => set.has(fn1(value)));\n};\n\nexport {\n getValueParser,\n require,\n intersect,\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 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 getDependencyOrder,\n objectIterator,\n intSanitizer,\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 getNearestValue,\n retrieveNearestGroupByReducers,\n nearestSortingDetails,\n createSelection,\n formatTemporal,\n temporalFields,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField\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 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 (idFn) {\n return new Selection(idFn);\n}\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","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) > 0)) 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","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\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_join from \"./join\";\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 join: selection_join,\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","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\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 && node.compareDocumentPosition(next) ^ 4) 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.js\";\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.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.ctrlKey && !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 navigator.maxTouchPoints || (\"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\", \"cancel\", \"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 > STARTED) throw new Error(\"too late; already running\");\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 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.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\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(node, 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 {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\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 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\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\";\nimport transition_end from \"./end\";\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 end: transition_end\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 string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, 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 attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i(t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\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","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i(t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\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 {set} from \"./schedule\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(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) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\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 schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\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 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","import Model from 'hyperdis';\nimport { defaultValue, getObjProp, toArray } from './common-utils';\n\nconst initProp = (obj, props, val = () => ({})) => {\n props.forEach((prop) => {\n if (!obj[prop]) {\n obj[prop] = val();\n }\n obj = obj[prop];\n });\n return obj;\n};\n\nconst fetchPropValues = (propNames, params, deps) => params.map((param, i) => {\n const prop = propNames[i];\n\n return param.map(val => (val === undefined || val === null ? val : val[deps[prop]]));\n});\n\nconst addListenerToNamespace = (namespaceInf, fn, context) => {\n let key = namespaceInf.key;\n const namespace = namespaceInf.id;\n const listeners = context._listeners;\n\n if (namespace) {\n !listeners.get(namespace) && (listeners.set(namespace, new Map()));\n const namespaceListeners = listeners.get(namespace);\n\n if (!key) {\n key = namespaceListeners.size;\n }\n namespaceListeners.set(key, fn);\n } else {\n key = key || listeners.size;\n listeners.set(key, fn);\n }\n};\n\nconst setContexts = (contexts, propObj, contextMap) => {\n for (const key of propObj.keys()) {\n contexts[key] = {\n context: contextMap[key],\n deps: propObj.get(key).depProps\n };\n }\n return contexts;\n};\n\nconst registerPropInMaps = (store, props, namespaceInf, type) => {\n const {\n _registeredListeners: registeredListeners,\n _propListenerMap: propListenerMap\n } = store;\n const {\n subNamespace,\n namespace: ns\n } = namespaceInf;\n\n initProp(registeredListeners, [ns]);\n props.forEach((prop) => {\n const subNamespaces = defaultValue(getObjProp(registeredListeners, ns, prop, 'subNamespace'), []);\n let fns = defaultValue(getObjProp(propListenerMap, prop, type, 'fns'), 0);\n\n fns++;\n subNamespace && subNamespaces.push(subNamespace);\n registeredListeners[ns][prop] = {\n subNamespace: subNamespaces,\n allProps: props,\n subNamespaces: {}\n };\n initProp(propListenerMap, [prop, type]);\n propListenerMap[prop][type] = {\n fns,\n _fnCount: fns\n };\n });\n};\n\nconst registerListener = (context, type, ...options) => {\n const [propList, callBack, instantCall, namespaceInf = {}] = options;\n let props = propList;\n\n if (!Array.isArray(propList)) {\n props = [propList];\n }\n\n const { namespace: ns } = namespaceInf;\n const callbackFn = ((propNames, namespaceVal) => (...params) => {\n const { _savedCommits: commits, _propListenerMap: propListenerMap } = context;\n\n if (!propNames.some(prop => getObjProp(propListenerMap, prop, 'disabled'))) {\n if (namespaceVal) {\n const listenersObj = context._registeredListeners[namespaceVal];\n const contextMap = context._contextMap[namespaceVal];\n const contextsObj = {};\n\n propNames.forEach((prop) => {\n const commitsObj = defaultValue(getObjProp(commits, prop, type), {});\n const listeners = listenersObj[prop].subNamespaces;\n const propDeps = propListenerMap[prop][type];\n\n for (const nm in commitsObj) {\n const fnInf = defaultValue(propDeps[nm], { fns: 0 });\n let { fns } = fnInf;\n\n if (fns > 0) {\n setContexts(contextsObj, listeners[nm], contextMap);\n fns--;\n }\n\n if (fns <= 0) {\n delete commitsObj[nm];\n }\n fnInf.fns = fns;\n }\n });\n for (const key in contextsObj) {\n const obj = contextsObj[key];\n\n callBack(obj.context, ...fetchPropValues(propNames, params, obj.deps));\n }\n } else {\n callBack(...params);\n }\n }\n })(props, ns, type);\n\n const fn = context.model[type](props, callbackFn, instantCall);\n\n if (ns) {\n registerPropInMaps(context, props, namespaceInf, type);\n }\n addListenerToNamespace(namespaceInf, fn, context);\n};\n\nconst retrieveNamespaces = (names, key) => {\n if (names instanceof Object) {\n return [names[key]];\n } else if (names instanceof Array) {\n return names;\n }\n return [names];\n};\n\nconst createMap = () => new Map();\n\nconst listenerTypes = ['next', 'on'];\n\nconst removePropValue = (context, map, propInf) => {\n const { subNamespace: sns, prop, propListenerMap } = propInf;\n const propObj = propListenerMap[prop];\n\n listenerTypes.forEach((type) => {\n if (type in propObj) {\n delete propObj[type][sns];\n }\n });\n if (map.has(sns)) {\n const value = context.get(prop);\n\n if (value instanceof Object && sns in value) {\n delete value[sns];\n }\n map.delete(sns);\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 */\nexport class 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 = new Map();\n this._registeredListeners = {};\n this._contextMap = {};\n this._commits = {};\n this._savedCommits = {};\n this._queuedProps = {};\n this._propListenerMap = {};\n this._locked = false;\n }\n\n lockModel () {\n this.model.lock();\n this._locked = true;\n return this;\n }\n\n unlockModel () {\n this._locked = false;\n this.model.unlock();\n return this;\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 lockCommits (props) {\n props.forEach((prop) => {\n this._commits[prop] = {\n locked: true,\n queue: []\n };\n });\n return this;\n }\n\n unlockCommits (props) {\n const commitsObj = this._commits;\n\n this.lockModel();\n props.forEach((prop) => {\n commitsObj[prop].locked = false;\n const queuedProps = {};\n const { queue } = commitsObj[prop];\n\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n if (namespace) {\n const propObj = initProp(queuedProps, [propName, namespace]);\n\n Object.assign(propObj, value);\n }\n });\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n this.commit(propName, propName in queuedProps ? queuedProps[propName][namespace] : value,\n namespace);\n });\n delete commitsObj[prop];\n });\n this.unlockModel();\n return this;\n }\n\n addSubNamespace (sns, namespace, context) {\n // Get all the listeners registered by the component\n const listeners = this._registeredListeners[namespace];\n const propListenerMap = this._propListenerMap;\n\n initProp(this._contextMap, [namespace]);\n this._contextMap[namespace][sns] = context;\n for (const key in listeners) {\n const obj = listeners[key];\n const propObj = propListenerMap[key];\n const propFns = listenerTypes.reduce((acc, type) => {\n const val = defaultValue(getObjProp(propObj, type, 'fns'), 0);\n val && (acc[type] = val);\n return acc;\n }, {});\n const { allProps, subNamespaces, subNamespace } = obj;\n const snsArr = subNamespace.length ? subNamespace : [sns];\n\n snsArr.forEach((ns) => {\n const nsObj = ns instanceof Function ? ns(context) : ns;\n const names = retrieveNamespaces(nsObj, key);\n const depProps = allProps.reduce((acc, prop) => {\n acc[prop] = ns instanceof Function ? nsObj[prop] : ns;\n return acc;\n }, {});\n\n names.forEach((nm) => {\n initProp(subNamespaces, [nm], createMap).set(sns, {\n depProps\n });\n\n for (const type in propFns) {\n initProp(propObj, [type, nm]);\n const fns = propFns[type];\n\n propObj[type][nm] = {\n fns,\n _fnCount: fns\n };\n }\n });\n });\n }\n return this;\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, namespace, disableListener = false) {\n let sanitizedVal = value;\n const commits = this._commits;\n const savedCommits = this._savedCommits;\n const locked = getObjProp(commits, propName, 'locked');\n const propListenerMap = this._propListenerMap[propName] || {};\n\n propListenerMap.disabled = disableListener;\n\n if (locked) {\n commits[propName].queue.push([propName, value, namespace]);\n return this;\n }\n\n if (namespace) {\n if (this._locked) {\n const queuedProps = initProp(this._queuedProps, [propName]);\n queuedProps[namespace] = value;\n sanitizedVal = queuedProps;\n } else {\n sanitizedVal = defaultValue(this.get(propName), {});\n sanitizedVal[namespace] = value;\n }\n\n listenerTypes.forEach((type) => {\n initProp(savedCommits, [propName, type]);\n savedCommits[propName][type][namespace] = true;\n if (getObjProp(propListenerMap, type, namespace)) {\n propListenerMap[type][namespace].fns = propListenerMap[type][namespace]._fnCount;\n }\n });\n }\n\n this.model.prop(propName, sanitizedVal);\n return this;\n }\n\n /**\n * This method is used to register a callback 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 (...params) {\n registerListener(this, 'next', ...params);\n return this;\n }\n\n /**\n * This method is used to register a callback 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 (...params) {\n registerListener(this, 'on', ...params);\n }\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, subNamespace) {\n const value = this.model.prop(propName);\n return subNamespace ? value && value[subNamespace] : value;\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 append (...params) {\n this.model.append(...params);\n return this;\n }\n\n unsubscribeAll () {\n Object.values(this._listeners).forEach(fn => fn());\n return this;\n }\n\n unsubscribe (namespaceInf = {}) {\n const { id, key } = namespaceInf;\n const listenersMap = this._listeners;\n const listeners = listenersMap.get(id);\n\n if (key) {\n const fn = listenersMap.get(key);\n\n fn && fn();\n } else {\n for (const fn of listeners.values()) {\n fn();\n }\n listenersMap.set(id, []);\n }\n return this;\n }\n\n removeSubNamespace (subNamespace, namespace) {\n const {\n _registeredListeners: listenerMap,\n _contextMap: contextMap,\n _propListenerMap: propListenerMap\n } = this;\n const listenersObj = listenerMap[namespace];\n\n for (const prop in listenersObj) {\n const { subNamespaces } = listenersObj[prop];\n const propInf = {\n subNamespace,\n prop,\n propListenerMap\n };\n\n if (subNamespaces[subNamespace]) {\n removePropValue(this, subNamespaces[subNamespace], propInf);\n delete subNamespaces[subNamespace];\n } else {\n for (const ns in subNamespaces) {\n const snsMap = subNamespaces[ns];\n\n removePropValue(this, snsMap, propInf);\n if (!snsMap.size) {\n delete subNamespaces[ns];\n }\n }\n }\n }\n delete contextMap[namespace][subNamespace];\n return this;\n }\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 * sanitization: // 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}\n */\nexport const transactor = (holder, options, model, namespaceInf = {}) => {\n let conf;\n const store = model instanceof Store ? model : new Store({});\n const stateProps = {};\n const { namespace, subNamespace } = namespaceInf;\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n const nameSpaceProp = namespace ? `${namespace}.${prop}` : prop;\n\n if (subNamespace) {\n const value = defaultValue(store.get(nameSpaceProp), {});\n value[subNamespace] = conf.value;\n stateProps[nameSpaceProp] = value;\n } else {\n stateProps[prop] = conf.value;\n }\n\n holder[prop] = ((context, meta, nsProp) => (...params) => {\n const paramsLen = params.length;\n if (paramsLen) {\n const { takesMultipleParams = false } = meta || {};\n // If parameters are passed then it's a setter\n let val = takesMultipleParams ? params : params[0];\n\n if (meta) {\n let values;\n const prevVal = context.get(nsProp, subNamespace);\n const { sanitization, typeCheck, typeExpected } = meta;\n if (typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n const typeCheckResult = typeCheck(val);\n\n if (typeCheckResult) {\n values = val;\n }\n } else if (typeof typeCheck === 'string' && typeCheck === 'constructor') {\n if (val && val.constructor.name === typeExpected) {\n values = val;\n }\n } else {\n values = val;\n }\n\n const preset = meta.preset;\n const oldValues = toArray(context.get(nsProp, subNamespace));\n preset && preset(values, holder);\n if (takesMultipleParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values && context.commit(nsProp, values, subNamespace);\n } else {\n context.commit(nsProp, val, subNamespace);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.get(nsProp, subNamespace);\n })(store, conf.meta, nameSpaceProp, Array.isArray(conf.value));\n }\n }\n\n if (subNamespace) {\n for (const key in stateProps) {\n store.commit(key, stateProps[key][subNamespace], subNamespace);\n }\n } else if (namespace === undefined) {\n store.append(stateProps);\n } else {\n store.append(namespace, stateProps);\n }\n\n return [holder, store];\n};\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed',\n 'animationend'\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';\nimport { createPromise } from './helper';\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] = resolver(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 const promise = this._makeNotifierPromise(eventName);\n this._promises.set(eventName, promise);\n createPromise(promise, eventName, this);\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","/**\n * Creates a new promise when the given promise is resolved. This needs to be done so that after the lifecycle event\n * is completed, then again when the event gets completed, then a new promise gets resolved.\n *\n * @param {Promise} promise Instance of promise\n * @param {string} eventName name of event\n * @param {LifeCycleManager} context Instance of lifecyclemanager\n */\nexport const createPromise = (promise, eventName, context) => {\n promise.then(() => {\n const prm = context._makeNotifierPromise(eventName);\n context._promises.set(eventName, prm);\n createPromise(prm, eventName, context);\n });\n};\n","import { default as DataModel } from 'datamodel';\nimport * as scales from './scales';\nimport * as colorSchemes from './color-schemes';\nimport * as STATE_NAMESPACES from './enums/namespace';\n\nconst InvalidAwareTypes = DataModel.InvalidAwareTypes;\n\nexport {\n InvalidAwareTypes,\n DataModel\n};\n\nexport {\n ReservedFields,\n CommonProps,\n COORD_TYPES\n} from './enums';\n\nexport { STATE_NAMESPACES };\n\nexport {\n scales,\n colorSchemes\n};\n\nexport {\n getNearestValue,\n getValueParser,\n transformColors,\n detectColor,\n hslToRgb,\n rgbToHsv,\n hexToHsv,\n hsvToRgb,\n escapeHTML,\n angleToRadian,\n generateGetterSetters,\n getArraySum,\n ERROR_MSG,\n interpolator,\n colorInterpolator,\n numberInterpolator,\n piecewiseInterpolator,\n reqAnimFrame,\n cancelAnimFrame,\n nextAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n replaceCSSPrefix,\n symbolFns,\n defaultValue,\n easeFns,\n clone,\n interpolateArray,\n getMinPoint,\n getMaxPoint,\n getClosestIndexOf,\n registerListeners,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n enableChainedTransaction,\n isHTMLElem,\n isEqual,\n isSimpleObject,\n nextFrame,\n getObjProp,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n transposeArray,\n toArray,\n extendsClass,\n concatModels,\n assembleModelFromIdentifiers,\n isValidValue,\n nestCollection,\n stack,\n getSymbol,\n Scales,\n Symbols,\n pathInterpolators,\n hslInterpolator,\n getSmallestDiff,\n require,\n formatTemporal,\n nearestSortingDetails,\n createSelection,\n temporalFields,\n retrieveNearestGroupByReducers,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField,\n intersect\n} from './common-utils';\n\nexport {\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 hasTouch\n} from './renderer-utils';\n\nexport {\n Store,\n transactor\n} from './store';\n\nexport {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'd3-time';\n\nexport { default as Smartlabel } from 'fusioncharts-smartlabel';\nexport { dataSelect } from './DataSystem';\n\nexport { default as LifeCycleManager } from './lifecycle-manager';\n\nexport {\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n DateTimeFormatter,\n DM_DERIVATIVES,\n GROUP_BY_FUNCTIONS\n} from 'datamodel';\n\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 SelectionSet from './selection-set';\n\nexport default SelectionSet;\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. This keeps\n * information of which rows are in previous and new entry set and previous and new exit set. This is initialized by\n * {@link Firebolt}.\n *\n * @public\n *\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n *\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. This also moves the other rows to exit set.\n *\n * @public\n * @param {Array.} ids Array of unique ids.\n *\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 an array of ids to the old entry set.\n *\n * @param {Array.} ids Array of unique ids\n *\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 * Moves all ids which in new entry set to old entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\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 * Moves an array of ids which are in new exit set to old exit set.\n *\n * @public\n *\n * @param {Array.} ids Array of unique ids.\n *\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 an array of ids from the selection set. It also moves the remaining row ids to entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\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 an array of ids in the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set which means they are neither in entry set nor in exit set. If no ids are passed,\n * then it resets all the ids to null.\n *\n * @public\n *\n * @param {Array} ids Array of unique ids.\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 *\n * @public\n *\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 *\n * @public\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 /**\n * Returns a set of unique ids which are already present in exit set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old exit set or new exit set\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 array of ids which are in the exit set.\n *\n * @public\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 /**\n * Gets all the ids which are either in exit or entry set.\n *\n * @public\n * @return {Array} Array of unique ids\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, retrieveNearestGroupByReducers } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const formalName = SideEffect.formalName();\n const sideEffectInstance = sideEffectsMap[formalName];\n sideEffectsMap[formalName] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const setSideEffectConfig = (sideEffects, config) => {\n for (const key in sideEffects) {\n const sideEffect = sideEffects[key];\n const formalName = sideEffect.constructor.formalName();\n const sideEffectConf = config[formalName];\n\n sideEffectConf && sideEffect.config(sideEffectConf);\n }\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 mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n const conditions = conditionsMap[type];\n if (model && conditions) {\n return model.select((fields, i) =>\n (conditions.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 if (type === 'mergedEnter') {\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 let aggFns = retrieveNearestGroupByReducers(model);\n if (!existingModel) {\n existingModel = models[type] = model;\n } else if (`${model.getSchema().map(d => d.name).sort()}` ===\n `${existingModel.getSchema().map(d => d.name).sort()}`) {\n aggFns = Object.assign({}, retrieveNearestGroupByReducers(existingModel));\n existingModel = models[type] = model.union(existingModel);\n } else {\n existingModel = model;\n }\n combinedSet[type].model = existingModel;\n combinedSet[type].aggFns = aggFns;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\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 setSideEffectConfig\n} from './helper';\n\n/**\n * This class is responsible for dispatching behavioural actions and side effects. It also keeps the information of\n * registered physical actions, behavioural actions and side effects. Also, it keeps the map of physical and behavioural\n * actions and behavioural actions and side effects. Whenever any behavioural action is dispatched, it also propagates\n * the rows which got affected to the other datamodels. This class is initialized by {@link VisualUnit} and legend to\n * manage it's interaction.\n *\n * @public\n * @class Firebolt\n * @module Firebolt\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 this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\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 this._config = mergeRecursive(this._config, config[0]);\n setSideEffectConfig(this.sideEffects(), this._config);\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 this.initializeSideEffects();\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, key = 'default') {\n const behaviourConditions = this._sourceBehaviours[behaviour] || (this._sourceBehaviours[behaviour] = {});\n if (value instanceof Function) {\n behaviourConditions[key] = value;\n } else {\n behaviourConditions[key] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value, key = 'default') {\n const sideEffectConditions = this._sourceSideEffects[sideEffect] || (this._sourceSideEffects[sideEffect] = {});\n if (value instanceof Function) {\n sideEffectConditions[key] = value;\n } else {\n sideEffectConditions[key] = () => value;\n }\n }\n\n removeSideEffectPolicy (sideEffect, key) {\n delete this._sourceSideEffects[sideEffect][key];\n return this;\n }\n\n removeBehaviourPolicy (behaviour, key) {\n delete this._sourceBehaviours[behaviour][key];\n return this;\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 this.mapActionsAndBehaviour(key);\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 this._entryExitSet[key] = null;\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 /**\n * Allows to propagate the datamodel with only the supplied fields. When propagation is done, then the fields\n * which are supplied for the specified behavioural action is propagated.\n *\n * @public\n *\n * @param {string} action Name of behavioural action. If '*' is specified, then for all behavioural actions it is\n * applied.\n * @param {Array} fields Array of field names which will be propagated.\n * @param {boolean} append If true, then it is appended to the existing propagation data model fields else only\n * those fields are projected from propagation data model and propagated.\n *\n * @return {Firebolt} Instance of firebolt\n */\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\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\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour (phyAction) {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map) && action === (phyAction || action)) {\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 bind && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n this._actionBehaviourMap = mergeRecursive(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 (!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 return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? propagationInf.entryRowIds :\n filteredDataModel[0].getUids())\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 /**\n * Returns the entry and exit set information of the specified behavioural action.\n *\n * @public\n *\n * @param {string} behaviour Name of behavioural action.\n *\n * @return {Object} Entry exit set information.\n */\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\n/**\n * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural\n * action needs to extend this class.\n *\n * @public\n * @class GenericBehaviour\n * @module GenericBehaviour\n */\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n /**\n * Returns entry and exit set information. This method is called by firebolt when ```dispatchBehaviour``` is called\n * dynamically or when any physical action is triggered on the chart.\n *\n * @param {Object} payload Payload information.\n * @param {Object|Array} payload.criteria Identifiers of data interacted with.\n *\n * @return {Array} Entry and exit set information.\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 /**\n * Updates the selection set by adding uids to the instance of {@link SelectionSet} or removing them.\n * {@link SelectionSet} keeps the information of which rows are in the entry set and exit set.\n *\n * @public\n * @param {Array} addSet Array of row ids which got affected during interaction.\n * @param {SelectionSet} selectionSet Instance of selection set.\n *\n * @return {GenericBehaviour} Instance of behaviour.\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 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 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, MeasureSubtype } 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;\n const yFieldType = fieldsConfig[yField].def.subtype;\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 === MeasureSubtype.CONTINUOUS ? (yFieldType === MeasureSubtype.CONTINUOUS ?\n ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.invertExtent(stPos.x, endPos.x);\n const yRange = yAxis.invertExtent(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","const ANCHORS = 'anchors';\nconst TOOLTIP = 'tooltip';\nconst BRUSH_ANCHORS = 'brush-anchors';\nconst PERSISTENT_ANCHORS = 'persistent-anchors';\nconst FILTER = 'filter';\nconst HIGHLIGHTER = 'highlighter';\nconst CROSSLINE = 'crossline';\n\nexport {\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS,\n FILTER,\n HIGHLIGHTER,\n CROSSLINE,\n TOOLTIP\n};\n","export const PROPS = {\n valueParser: {\n defaultValue: val => val\n }\n};\n","import GenericSideEffect from './generic-sideeffect';\n\nexport default GenericSideEffect;\n","import { mergeRecursive, getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { PROPS } from './props';\n\n/**\n * This is the base class of all side effects. It contains all common methods like setting configuration, disabling,\n * enabling side effect, etc. Every new side effect has to inherit this class or {@link SpawnableSideEffect} or\n * {@link SurrogateSideEffect} class. All side effects are initialized by firebolt. The instance of firebolt is\n * passed on initialization. The firebolt instance contains ```context``` which is the instance of visual unit with\n * which the firebolt is attached.\n *\n * @public\n * @class\n * @module GenericSideEffect\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 generateGetterSetters(this, PROPS);\n this.config(this.constructor.defaultConfig());\n }\n\n /**\n * Returns the default configuration of the side effect.\n *\n * @public\n * @return {Object} Default configuration of side effect.\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the formal name of a side effect. This method must be implemented by all side effects which changes\n * or adds any element in the visualization.\n *\n * @return {string} Formal name of side effect.\n */\n static formalName () {\n return 'generic';\n }\n\n static target () {\n return 'all';\n }\n\n /**\n * Returns true if the side effects mutates the data of chart.\n *\n * @public\n *\n * @return {boolean} If the side effect mutates the data of chart.\n */\n static mutates () {\n return false;\n }\n\n /**\n * Sets or gets the configuration of side effect.\n *\n * When setter,\n * @param {Object} config Configuration of side effect.\n * @return {GenericSideEffect} Side effect instance.\n *\n * When getter,\n * @return {Object} Side effect configuration.\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 /**\n * Applies the interaction effect on the chart. This is where the implemntation of the side effect is defined.\n *\n * @param {Object} selectionSet Contains the entry and exit set of data which got affected during interaction.\n * @param {Object} selectionSet.mergedEnter Combined previous entry and new entry set.\n * @param {DataModel} selectionSet.mergedEnter.model Instance of data model containing all rows which got\n * affected during interaction.\n * @param {Array} selectionSet.mergedEnter.uids Ids of all rows which were affected during interaction.\n * @param {Object} selectionSet.mergedExit Combined previous exit and new exit set.\n * @param {DataModel} selectionSet.mergedExit.model Instance of data model containing rows which were not affected\n * during interaction.\n * @param {Array} selectionSet.mergedExit.uids Ids of all rows which were not affected during interaction.\n * @param {Object} selectionSet.entrySet Entry set information.\n * @param {Array} selectionSet.entrySet[0].uids All row ids which got affected during previous interaction.\n * @param {Array} selectionSet.entrySet[1].uids All row ids which got affected during current interaction.\n * @param {Array} selectionSet.exitSet[0].uids All row ids which were not affected during previous interaction.\n * @param {Array} selectionSet.exitSet[1].uids All row ids which were not affected during current interaction.\n * @param {Object} payload Payload information of the behavioural action on trigger of which this side effect\n * is applied.\n * @param {Object} options Optional information for side effect like strategy, etc.\n */\n apply () {\n return this;\n }\n\n /**\n * Adds a new strategy method for this side effect. The strategy method is implemented by side effect class.\n *\n * @param {string} name Name of the strategy.\n * @param {Function} fn Strategy method.\n *\n * @return {GenericSideEffect} Instance of side effect.\n */\n setStrategy (name, fn) {\n if (fn) {\n this._strategies[name] = fn;\n }\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\n/**\n * This class is inherited by all side effects which changes the look of any existing elements in the visualization.\n * For example, if a side effect wants to change the color of bar plots, then it is a surrogate side effect.\n *\n * To use this,\n * ```\n * const SurrogateSideEffect = muze.SideEffects.standards.SurrogateSideEffect;\n *\n * class BarColorChanger extends SurrogateSideEffect {\n * static formalName () {\n * return 'colorChanger';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n *\n * @module SurrogateSideEffect\n * @class\n * @extends GenericSideEffect\n */\nexport default class SurrogateSideEffect extends GenericSideEffect {\n /**\n * Applies or removes interaction styles from plot elements. An array of row ids needs to be passed\n * which identifies the plot elements and applies styles to them.\n *\n * To apply the interaction style,\n * ```\n * const entryRowIds = entrySet[0].uids;\n * const interactionStyle = [{\n * type: 'fill',\n * intensity: [0, 0, 15, 0] // hsla configuration\n * }];\n *\n * this.applyInteractionStyle(entryRowIds, interactionStyle, 'brighten', true);\n * ```\n * @public\n * @param {Array} set Array of row ids.\n * @param {Array} config Style configuration.\n * @param {Object} config[0] fill or stroke configuration.\n * @param {string} config[0].type Type of style - fill or stroke.\n * @param {Array} config[0].intensity hsla configuration.\n * @param {string} interactionType Type of interaction. This is needed for storing the styles for\n * each type of interaction in the plot elements.\n * @param {boolean} apply Whether to apply or remove the interaction style.\n *\n * @return {SurrogateSideEffect} Instance of surrogate side effect.\n */\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 return this;\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\n/**\n * Any side effect which will add any new element to the chart like drawing a rectangular box or any annotation over\n * the chart needs to inherit this class. This class has methods which returns the container where the dom elements\n * needs to be created.\n *\n * To use this,\n * ```\n * const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect;\n *\n * class SelectionBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'selectionBox';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n * @class\n * @extends GenericSideEffect\n * @module SpawnableSideEffect\n */\nexport default class SpawnableSideEffect extends GenericSideEffect {\n /**\n * Creates a html or svg element in the container.\n *\n * @public\n * @param {SVGElement|HTMLElement} container Container where the dom element will be rendered.\n * @param {string} elemType Type of dom element.\n * @param {Array} data Array of objects with which the dom elements will be binded.\n * @param {string} className class name of the element.\n *\n * @return {Selection} D3 Selection of the element.\n */\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n /**\n * Returns the drawing information for side effect like svg container, dimensions of the visual unit.\n *\n * @public\n * @return {Object} Drawing information for side effect.\n * ```\n * sideEffectGroup: // svg container where the side effect needs to be appended.\n * svgContainer: // svg container of the {@link VisualUnit}.\n * htmlContainer: // html div container of the {@link VisualUnit}.\n * width: // Width of the {@link VisualUnit}\n * height: // Height of the {@link VisualUnit}\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};\nexport const TABLE_FORMAT = 'table';\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: '4px 0 4px 0',\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 selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { TABLE_FORMAT } from './constants';\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._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._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 const { classPrefix } = config;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter(this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n const mountHtmlTooltip = makeElement(mount, 'div', [1], `${classPrefix}-tooltip-html-container`);\n mountHtmlTooltip.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], `${classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === TABLE_FORMAT) {\n const table = makeElement(body, 'table', [1], `${classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, '', {\n update: (elem, elemData) => elem.attr('class', elemData.className)\n });\n const cells = makeElement(rows, 'span', d => d.data, `${classPrefix}-tooltip-content`);\n cells.attr('class', `${classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block' // '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","export const SELECTION_SUMMARY = 'selectionSummary';\nexport const HIGHLIGHT_SUMMARY = 'highlightSummary';\n","import {\n FieldType,\n GROUP_BY_FUNCTIONS,\n formatTemporal,\n DimensionSubtype,\n MeasureSubtype,\n DataModel,\n defaultValue,\n retrieveFieldDisplayName,\n nestCollection,\n getObjProp,\n intersect\n} from 'muze-utils';\nimport { TABLE_FORMAT } from '@chartshq/muze-tooltip';\nimport { SELECTION_SUMMARY, HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\n\nconst { SUM, COUNT } = GROUP_BY_FUNCTIONS;\nconst { InvalidAwareTypes } = DataModel;\nconst FIRST_VALUE_MARGIN = '10px';\nconst SINGLE_DATA_MARGIN = 10;\n\nconst formatters = (formatter, interval, valueParser) => ({\n [DimensionSubtype.TEMPORAL]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatTemporal(Number(value), interval)),\n [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatter(value.toFixed(2))),\n [DimensionSubtype.CATEGORICAL]: value => valueParser(value)\n});\n\nconst getTabularData = (dataObj, fieldInf) => {\n const rows = [];\n const { data, schema } = dataObj;\n rows.push(schema.map(d => fieldInf[d.name].displayName));\n\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const value = fieldInf[fieldObj.name].fn(d[i]);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nconst getKeyValue = (params) => {\n const { field, value, classPrefix, margin, isSelected, removeKey } = params;\n\n if (!removeKey) {\n const keyObj = {\n value: field,\n className: `${classPrefix}-tooltip-key`\n };\n const valueObj = {\n value,\n className: `${classPrefix}-tooltip-value`\n };\n if (margin !== undefined) {\n keyObj.style = {\n 'margin-left': `${margin}px`\n };\n valueObj.style = {\n 'margin-left': `${margin}px`\n };\n }\n\n return ({\n className: isSelected ? `${classPrefix}-tooltip-row ${classPrefix}-tooltip-selected-row`\n : `${classPrefix}-tooltip-row`,\n data: [keyObj, valueObj]\n }\n );\n }\n return ({\n data: [{\n className: '',\n value,\n style: {\n 'margin-left': FIRST_VALUE_MARGIN\n }\n }],\n className: `${classPrefix}-tooltip-first`\n });\n};\n\nconst generateRetinalFieldsValues = (valueArr, retinalFields, content, context) => {\n const { fieldsConfig, dimensionMeasureMap, axes, config, fieldInf, dataLen, target } = context;\n const { classPrefix, margin, separator } = config;\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const REF_VALUES_INDEX = 1;\n const REF_KEYS_INDEX = 0;\n\n for (const retField in retinalFields) {\n const retIndex = fieldsConfig[retField].index;\n const retinalFieldValue = valueArr[retIndex];\n const measuresArr = dimensionMeasureMap[retField];\n const icon = {\n type: 'icon',\n color: colorAxis.getColor(retinalFieldValue),\n shape: shapeAxis.getShape(retinalFieldValue),\n size: sizeAxis.getSize(retinalFieldValue) * config.iconScale\n };\n const { displayName, fn } = fieldInf[retField];\n const formattedRetinalValue = fn(retinalFieldValue);\n\n if (dataLen === 1) {\n content.push(getKeyValue({\n field: displayName,\n value: formattedRetinalValue,\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n } else {\n const hasMultipleMeasures = measuresArr.length > 1;\n hasMultipleMeasures && (content.push({ data: [icon, formattedRetinalValue] }));\n const selectedContext = target[REF_VALUES_INDEX][target[REF_KEYS_INDEX].indexOf(retField)];\n const isSelected = selectedContext === retinalFieldValue;\n measuresArr.forEach((measure) => {\n const measureIndex = fieldsConfig[measure].index;\n const { displayName: dName, fn: formatterFn } = fieldInf[measure];\n const value = formatterFn(valueArr[measureIndex]);\n const keyValue = getKeyValue({\n field: hasMultipleMeasures ? `${dName}${separator}` : formattedRetinalValue,\n value,\n classPrefix,\n margin: hasMultipleMeasures ? margin : undefined,\n isSelected\n });\n if (!hasMultipleMeasures) {\n keyValue.data = [icon, ...keyValue.data];\n }\n content.push(keyValue);\n });\n }\n }\n};\n\nconst getFieldInf = (schema, dataModel, context) => {\n const { valueParser, timeDiffs } = context;\n const fieldsObj = dataModel.getFieldspace().fieldsObj();\n const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL];\n\n return schema.reduce((inf, field) => {\n const { subtype, name, type } = field;\n const interval = subtype === DimensionSubtype.TEMPORAL ? timeDiffs[name] : 0;\n const nf = type === FieldType.MEASURE ? fieldsObj[name].numberFormat() : val => val;\n inf[name] = {\n fn: defaultValue(formatters(nf, interval, valueParser)[subtype], defFormatter),\n displayName: `${retrieveFieldDisplayName(dataModel, name)}`\n };\n return inf;\n }, {});\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let nestedDataObj;\n let fieldValues = [];\n const { data, schema } = dataModel.getData();\n const fieldspace = dataModel.getFieldspace();\n const fieldsConfig = dataModel.getFieldsConfig();\n const { color, shape, size } = context.firebolt.context.retinalFields();\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 containsDetailField = !!intersect(schema, detailFields).length;\n const dataLen = data.length;\n const {\n dimensionMeasureMap,\n axes\n } = context;\n const fieldInf = getFieldInf(schema, dataModel, context);\n\n let displayFormat;\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData({\n data,\n schema,\n fieldspace\n }, fieldInf);\n displayFormat = TABLE_FORMAT;\n } else {\n const retinalFields = [color.field, shape.field, size.field].reduce((acc, field) => {\n field && fieldsConfig[field].def.type === FieldType.DIMENSION && (acc[field] = 1);\n return acc;\n }, {});\n const filteredDimensions = dimensions.filter(field => !retinalFields[field.name]);\n const indices = filteredDimensions.map(dim => fieldsConfig[dim.name].index);\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1) : measures;\n\n nestedDataObj = nestCollection({\n data,\n keys: indices\n });\n nestedDataObj = !getObjProp(nestedDataObj[0], 'key') ? [{\n values: nestedDataObj\n }] : nestedDataObj;\n\n const generateTooltipContent = (nestedData, index = 0, content = []) => {\n const { classPrefix, separator } = config;\n for (let i = 0, len = nestedData.length; i < len; i++) {\n const { values, key } = nestedData[i];\n const field = getObjProp(schema, indices[index], 'name');\n const margin = dataLen === 1 || Object.keys(retinalFields).length === 0\n ? SINGLE_DATA_MARGIN : undefined;\n if (field) {\n const { displayName, fn } = fieldInf[field];\n const formattedValue = fn(key);\n const removeKey = values.length > 1;\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n value: formattedValue,\n classPrefix,\n margin,\n isSelected: undefined,\n removeKey\n }));\n }\n\n if (values[0] && values[0].key) {\n generateTooltipContent(values, index + 1, content);\n } else {\n for (let j = 0, len2 = values.length; j < len2; j++) {\n const valueArr = values[j];\n generateRetinalFieldsValues(valueArr, retinalFields, content, {\n fieldInf,\n axes,\n config,\n fieldsConfig,\n dimensionMeasureMap,\n dataLen,\n target: context.payload.target\n });\n\n filteredMeasures.forEach((measure) => {\n const { name } = measure;\n const { displayName, fn } = fieldInf[name];\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n value: fn(valueArr[fieldsConfig[name].index]),\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n });\n }\n }\n }\n };\n generateTooltipContent(nestedDataObj, 0, fieldValues);\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\nexport const strategies = {\n [SELECTION_SUMMARY]: (dm, config, context) => {\n const { selectionSet } = context;\n const aggFns = selectionSet.mergedEnter.aggFns;\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] = aggFns[v.name] === COUNT ? SUM : aggFns[v.name];\n return acc;\n }, {\n saveChild: false\n }));\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 const data = aggregatedModel.getData().data;\n measureNames.forEach((measure) => {\n const value = data[0][fieldsConf[measure].index];\n value instanceof InvalidAwareTypes ? values.push([]) : values.push([`(${aggFns[measure].toUpperCase()})`,\n `${retrieveFieldDisplayName(dm, measure)}`,\n {\n value: `${value.toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]);\n });\n if (measureNames.length === 1) {\n values = [[...values[0], ...values[1]]];\n }\n return ([{\n data: values[0]\n }]);\n },\n [HIGHLIGHT_SUMMARY]: (data, config, context) => buildTooltipData(data, config, context)\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType, mergeRecursive, defaultValue } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport { TOOLTIP } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\nimport { HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\n\nconst configResolvers = {\n [HIGHLIGHT_SUMMARY]: (specificConf, config) => defaultValue(specificConf, config),\n default: specificConf => defaultValue(specificConf, {})\n};\n\nconst sanitizeConfig = (config, context) => {\n const strategyObj = context._strategies;\n const sanitizedConf = Object.assign({}, config);\n for (const key in strategyObj) {\n sanitizedConf[key] = defaultValue(configResolvers[key], configResolvers.default)(config[key], config);\n }\n return sanitizedConf;\n};\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = mergeRecursive({}, strategies);\n this._strategy = HIGHLIGHT_SUMMARY;\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n },\n highlightSummary: {\n dataTransform: (dt, fields) => (fields ? dt.project(fields, { saveChild: false }) : dt\n )\n },\n selectionSummary: {\n dataTransform: (dt, fields) => {\n const fieldspace = dt.getFieldspace();\n const dimensions = Object.keys(fieldspace.getDimension());\n const measures = Object.keys(fieldspace.getMeasure());\n const projectedFields = defaultValue(fields, measures.length ? [measures[0]] : []);\n return dt.project([...dimensions, ...projectedFields], {\n saveChild: false\n });\n }\n }\n };\n }\n\n static formalName () {\n return TOOLTIP;\n }\n\n config (...params) {\n if (params.length) {\n const config = this._config = mergeRecursive(this._config, sanitizeConfig(params[0], this));\n const strategyObj = this._strategies;\n for (const key in strategyObj) {\n const formatter = config[key].formatter;\n this.setStrategy(key, formatter);\n }\n return this;\n }\n return this._config;\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)) {\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 const strategy = defaultValue(options.strategy, this._strategy);\n const strategyConf = config[strategy];\n const { dataTransform, fields: projectFields } = strategyConf;\n const strategyObj = this._strategies;\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 const dt = dataTransform(dataModels[i], projectFields, this);\n\n enter[i] = true;\n const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf;\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 sourceInf.valueParser = context.valueParser();\n sourceInf.selectionSet = selectionSet;\n tooltipInst.context(sourceInf);\n const strategyFn = strategyObj[strategy];\n tooltipInst.content(strategy, dt, {\n formatter: strategyFn,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: parentContainerDimensions.width,\n height: parentContainerDimensions.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 { CROSSLINE } from '../../enums/side-effects';\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 layers = this.firebolt.context.layers();\n const plotWidth = Math.max(...layers.map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...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 !isNaN(px) && 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';\nimport { HIGHLIGHTER } from '../../enums/side-effects';\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 strategy(selectionSet, this, options.strategy || this._strategy);\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, getObjProp } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport { ANCHORS } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nconst addLayer = (layerRegistry, context, sideEffect) => {\n context.addLayer((layerDefs) => {\n const layers = [];\n\n if (layerDefs) {\n layerDefs.forEach((layerDef) => {\n const mark = layerDef.mark;\n const layerCls = layerRegistry[mark];\n\n if (layerCls && layerCls.shouldDrawAnchors()) {\n const depLayerEncoding = layerDef.def.encoding;\n const encoding = {\n x: getObjProp(depLayerEncoding, 'x', 'field'),\n y: getObjProp(depLayerEncoding, 'y', 'field'),\n color: getObjProp(depLayerEncoding, 'color', 'field'),\n size: {\n field: getObjProp(depLayerEncoding, 'size', 'field'),\n value: sideEffect.defaultSizeValue()\n }\n };\n const commonName = sideEffect.constructor.formalName();\n const name = `${layerDef.def.name}-${commonName}`;\n\n layers.push({\n name,\n mark: 'point',\n groupId: commonName,\n className: sideEffect.constructor.defaultConfig().className,\n encoding,\n transform: {\n type: 'identity'\n },\n calculateDomain: false,\n transition: sideEffect.getTransitionConfig(),\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n owner: layerDef.def.name\n });\n }\n });\n }\n return layers;\n });\n};\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._layersMap = {};\n this.addAnchorLayers();\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 () {\n const context = this.firebolt.context;\n const layerRegistry = context.registry().layerRegistry;\n\n addLayer(layerRegistry, context, this);\n return this;\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 dataModel = selectionSet.mergedEnter.model;\n const formalName = this.constructor.formalName();\n\n const context = this.firebolt.context;\n const layers = context.layers().filter(layer => layer.config().groupId === formalName);\n\n layers.forEach((layer) => {\n const linkedLayer = context.getLayerByName(layer.config().owner);\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n\n layer.data(transformedDataModel);\n });\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\nimport { PERSISTENT_ANCHORS } from '../enums/side-effects';\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';\nimport { BRUSH_ANCHORS } from '../enums/side-effects';\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: 'selectionSummary',\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 TEXT = 'text';\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 RADIUS: 'radius',\n RADIUS0: 'radius0',\n ANGLE: 'angle',\n ANGLE0: 'angle0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AGG_FN_SUM = 'sum';\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","import { COORD_TYPES, mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nconst { CARTESIAN } = COORD_TYPES;\nexport const props = {\n axes: {},\n mount: {},\n measurement: {},\n metaInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {\n defaultValue: CARTESIAN\n },\n [PROPS.CONFIG]: {\n value: null,\n sanitization: (context, config) => {\n context._customConfig = config;\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n\n return constructor.defaultPolicy(newConf, config);\n }\n }\n};\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\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 BAND = 'band';\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 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\nexport const DEFAULT_ANGLE_DOMAIN = [1];\nexport const MIN_NO_OF_TICKS = 2;\nexport const DEFAULT_NO_OF_TICKS = 10;\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 *\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 *\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 adjustRange: false,\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: null,\n smartTicks: null\n },\n orientation: 'left',\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: null,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: true,\n showOuterTicks: true,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: 0,\n yOffset: 0\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) => {\n let rotation;\n const axis = instance.axis();\n const config = instance.config();\n const renderConfig = instance.renderConfig();\n const smartTicks = instance.smartTicks();\n const scale = axis.scale();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n const ticks = labelFunc();\n const {\n orientation,\n fixedBaseline,\n type\n } = config;\n const {\n labels\n } = renderConfig;\n\n rotation = labels.rotation;\n\n const tickSize = instance.getTickSize();\n tickText.each(function (d, index) {\n let yShift;\n let xShift;\n let datum = smartTicks[index] ? smartTicks[index].text : d;\n\n datum = datum.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n\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 = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize}\n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift - xShift / 2 : xShift;\n\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize}\n ${yShift + tickSize}) rotate(${rotation})`);\n }\n selectElement(this).transition()\n .duration(1000).text(datum);\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 renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n orientation,\n classPrefix\n } = config;\n const {\n labels\n } = renderConfig;\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 && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager);\n } else if (!rotation && !isSmartTicks) {\n tickText.attr('transform', '');\n } else {\n tickText.text('');\n if (orientation === TOP || orientation === BOTTOM) {\n tickText.attr('y', 0)\n .attr('x', 0)\n .attr('transform', '')\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => {\n if (_smartTicks[i]) {\n return _smartTicks[i].lines;\n } return [];\n }, `${classPrefix}-smart-text`);\n\n tspan.attr('dy', '0')\n .style('opacity', '0')\n\n .transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[0].oriTextHeight;\n }\n return -_smartTicks[0].oriTextHeight * (_smartTicks[0].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .text(e => e)\n .attr('x', 0);\n } else {\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, `${classPrefix}-smart-text`);\n tspan.text(e => e);\n }\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n const {\n showInnerTicks\n } = axisInstance.renderConfig();\n const domain = axisInstance.domain();\n if (fixedBaseline && domain.length && showInnerTicks) {\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 availableSpace\n } = measures;\n\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})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 renderConfig = axisInstance.renderConfig();\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 _tickLabelStyle: tickLabelStyle,\n _tickFormatter: axisTickFormatter\n } = axisInstance;\n const {\n orientation,\n axisNamePadding,\n className,\n id,\n classPrefix\n } = config;\n const {\n show,\n xOffset,\n yOffset,\n showAxisName,\n labels,\n smartAxisName\n } = renderConfig;\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 const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n const ticks = axis.tickValues() || labelFunc();\n\n axis.tickFormat(axisTickFormatter(ticks));\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.axisComponentDimensions().largestTickDimensions;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false || tickSize === 0) {\n selectContainer.transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .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\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [smartAxisName], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d.text);\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 const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: smartAxisName.height,\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 {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'muze-utils';\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\n// Longest Word for each level based on which tick skipping is decided\nconst longestWord = {\n month: 'September',\n quarter: 'October',\n halfYearly: 'July',\n year: 9999,\n day: 'September',\n hour: '24 AM',\n mintues: '60:60',\n seconds: ':60',\n week: 'Wed 31'\n};\n\n// These are the various levels of ticks that can be shown by Muze.\n// Each level is described as how frequently the ticks appear\n// The format is as follows:\n// [Frequency, Milliseconds, Name of Seconds, Tick Generator, Level Type]\nconst tickIntervals = [\n [1, 1, 'milliseconds', timeMillisecond.every(1), 'seconds'],\n [1, durationSecond, 'seconds', timeSecond.every(1), 'seconds'],\n [5, 5 * durationSecond, 'five seconds', timeSecond.every(5), 'seconds'],\n [10, 10 * durationSecond, 'ten seconds', timeSecond.every(10), 'seconds'],\n [15, 15 * durationSecond, 'fifteen seconds', timeSecond.every(15), 'seconds'],\n [30, 30 * durationSecond, 'thirty seconds', timeSecond.every(30), 'seconds'],\n [1, durationMinute, 'minute', timeMinute.every(1), 'minutes'],\n [5, 5 * durationMinute, 'five minutes', timeMinute.every(5), 'minutes'],\n [10, 10 * durationMinute, 'ten minutes', timeMinute.every(10), 'minutes'],\n [15, 15 * durationMinute, 'fifteen minutes', timeMinute.every(15), 'minutes'],\n [30, 30 * durationMinute, 'thirty minutes', timeMinute.every(30), 'minutes'],\n [1, durationHour, 'hour', timeHour.every(1), 'hour'],\n [3, 3 * durationHour, 'three hours', timeHour.every(3), 'hour'],\n [6, 6 * durationHour, 'six hours', timeHour.every(6), 'hour'],\n [12, 12 * durationHour, 'twelve hours', timeHour.every(12), 'hour'],\n [1, durationDay, 'daily', timeDay.every(1), 'day'],\n [1, durationWeek, 'weekly', timeWeek.every(1), 'week'],\n [1, durationMonth, 'monthly', timeMonth.every(1), 'week'],\n [3, 3 * durationMonth, 'quaterly', timeMonth.every(3), 'quarter'],\n [6, 6 * durationMonth, 'half yearly', timeMonth.every(6), 'halfYearly'],\n [1, durationYear, 'yearly', timeYear.every(1), 'year'],\n [2, 2 * durationYear, '2 year', timeYear.every(2), 'year'],\n [3, 3 * durationYear, '3 year', timeYear.every(3), 'year'],\n [5, 5 * durationYear, '5 year', timeYear.every(5), 'year'],\n [10, 10 * durationYear, 'decade', timeYear.every(10), 'year'],\n [100, 100 * durationYear, 'century', timeYear.every(100), 'year'],\n [1000, 1000 * durationYear, 'millenium', timeYear.every(1000), 'year']\n];\n/**\n * Get the actual tick interval based on the available width, number of ticks\n * and the distance between two ticks\n *\n * @param {Object} context Axis Context\n * @param {number} noOfTicks Number of Ticks based on which interval is calculated\n * @return {number} The width for the tick interval\n */\nconst getActualTickInterval = (context, noOfTicks) => {\n const minTickDistance = context._minTickDistance;\n const minWidthBetweenTicks = minTickDistance.width;\n\n const { width } = context.availableSpace();\n const actualTickInterval = Math.floor(((width - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks));\n\n return actualTickInterval;\n};\n\n/**\n * Get the tick interval based on the current level of ticks. Levels are decided on\n * the number of ticks that are possible to show\n *\n * @param {Object} context Axis Context\n * @param {string} type Type of level (yearly, monthly, etc)\n * @return {number} The width for the tick interval\n */\nconst getTickIntervalBasedOnCurrentLevel = (context, type) => {\n const labelManager = context._dependencies.labelManager;\n const longestWordType = longestWord[type];\n const measure = labelManager.getOriSize(longestWordType);\n\n return measure.width;\n};\n\nconst getTickIntervalFnBasedOnNumberOfTicks = (interval, count, context) => {\n let possibleTickLevelIndex = tickIntervals.length - 1;\n let maxPossibleTicks = 1;\n let tickIntervalLevelInfo = null;\n\n // Decide possible tick level based on min tick width (with ellipses)\n for (let i = tickIntervals.length - 1; i >= 0; i--) {\n const tickIntervalInfo = tickIntervals[i];\n const numOfPossibleTicks = Math.floor(interval / tickIntervalInfo[1]);\n if (numOfPossibleTicks <= count) {\n possibleTickLevelIndex = i;\n maxPossibleTicks = numOfPossibleTicks;\n }\n }\n\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex];\n\n // Get actual tick interval based on the level of ticks generated\n const actualTickInterval = getActualTickInterval(context, maxPossibleTicks);\n\n // Maximum Possible tick Interval for a particular level based on a pre decided set of values\n const maxTickInterval = getTickIntervalBasedOnCurrentLevel(context, tickIntervalLevelInfo[4]);\n\n // Display the next level involving tick skipping if current level does not meet the requirement\n // for displaying max tick\n if (actualTickInterval < maxTickInterval && possibleTickLevelIndex < tickIntervals.length - 1) {\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex + 1];\n }\n return tickIntervalLevelInfo[3];\n};\n\nexport const getSkippedTicks = (context, maxPossibleTicks) => {\n let actualNumberOfTicks = maxPossibleTicks;\n const domain = context.domain();\n const minDiff = context._minDiff;\n // Get the interval in ms from the domain\n const millisecondInterval = domain[1] - domain[0];\n // Get number of ticks based on the minimum difference in the data\n const numOfTicksAccordingToMinDiff = Math.floor(millisecondInterval / minDiff);\n\n // Show ticks according to min diff if possible\n if (maxPossibleTicks >= numOfTicksAccordingToMinDiff) {\n actualNumberOfTicks = numOfTicksAccordingToMinDiff;\n }\n\n return getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval, actualNumberOfTicks, context);\n};\n","import { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { getSkippedTicks } from './skip-ticks';\nimport { TIME, LINEAR, BAND } from '../enums/scale-type';\n\nexport const applyTickSkipping = (context) => {\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n\n const { width } = context.availableSpace();\n\n const maxTicks = Math.floor((width + minWidthBetweenTicks) / (minTickWidth + minWidthBetweenTicks));\n\n const ticks = context.scale().ticks(getSkippedTicks(context, maxTicks));\n\n context.renderConfig({\n tickValues: ticks\n });\n};\n\nconst adjustHorizontalRange = (range, diff) => {\n range[0] += diff;\n range[1] -= diff;\n return range;\n};\n\nconst adjustVerticalRange = (range, diff) => {\n range[0] -= diff;\n range[1] += diff;\n return range;\n};\n\nconst rangeAdjustmentMap = {\n [TOP]: adjustHorizontalRange,\n [BOTTOM]: adjustHorizontalRange,\n [LEFT]: adjustVerticalRange,\n [RIGHT]: adjustVerticalRange\n};\n\nexport const setAxisRange = (context, type, rangeBounds, offset) => {\n context.range(rangeBounds);\n offset && context.renderConfig({ [`${type}Offset`]: offset });\n};\n\nconst getAxisOffset = (timeDiff, range, domain) => {\n const avWidth = Math.abs(range[1] - range[0]);\n const pvr = avWidth / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\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 getAdjustedRange = (minDiff, range, domain, config) => {\n const {\n orientation,\n adjustRange\n } = config;\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (adjustRange) {\n return rangeAdjustmentMap[orientation](range, diff);\n }\n return range;\n};\n\nexport const spaceSetter = (context, spaceConfig) => {\n let tickInterval;\n let heightForTicks;\n const config = context.config();\n const {\n width: availWidth,\n height: availHeight,\n padding\n } = context.availableSpace();\n const {\n top,\n left,\n bottom,\n right\n } = padding;\n const {\n isOffset\n } = spaceConfig;\n const {\n showAxisName,\n labels\n } = context.renderConfig();\n const {\n rotation\n } = labels;\n const {\n fixedBaseline,\n axisNamePadding,\n tickValues\n } = config;\n const {\n tickDimensions,\n allTickDimensions,\n axisNameDimensions,\n tickSize\n } = context.getAxisDimensions();\n const {\n height: tickDimHeight,\n width: tickDimWidth\n } = tickDimensions;\n\n const namePadding = showAxisName ? axisNamePadding : 0;\n const labelConfig = { smartTicks: true, rotation: labels.rotation };\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minDiff = context._minDiff;\n const domain = context.domain();\n const axisNameHeight = axisNameDimensions.height;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = Math.min(minTickSpace.width, tickDimWidth);\n const minTickHeight = Math.min(minTickSpace.height, tickDimHeight);\n\n return {\n [TIME]: {\n x: () => {\n !tickValues && context.applyTickSkipping();\n const noOfTicks = context.getTickValues().length;\n\n // Get the Tick Interval\n tickInterval = ((availWidth - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks);\n\n // Get height for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation;\n // Remove ticks if not enough height\n if (tickInterval < minTickHeight) {\n heightForTicks = availHeight;\n tickInterval = minTickHeight;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n const tickShifter = Math.min(tickInterval, tickDimWidth);\n // set range for axis\n setAxisRange(context, 'y', getAdjustedRange(minDiff, [tickShifter / 2,\n availWidth - left - right - tickShifter / 2], domain, config),\n isOffset ? availHeight : null);\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n\n return labelConfig;\n },\n y: () => {\n let widthForTicks = availWidth;\n const tickShifter = tickDimHeight / 2;\n\n setAxisRange(context, 'x', getAdjustedRange(minDiff,\n [availHeight - top - bottom - tickShifter, tickShifter], domain, config),\n isOffset ? availWidth : null);\n\n if ((availWidth - axisNameHeight - namePadding) <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [BAND]: {\n x: () => {\n setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null);\n const range = context.range();\n\n // Get Tick Interval\n tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minWidthBetweenTicks;\n\n // Get height available for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation === null ? -90 : rotation;\n labelConfig.smartTicks = false;\n\n tickInterval = Math.max(heightForTicks, minTickWidth);\n\n if (heightForTicks < minTickWidth) {\n context.renderConfig({ showAxisName: false });\n }\n } else if (tickValues) {\n const interval = (availWidth / domain.length) - minWidthBetweenTicks;\n if (interval < minTickWidth) {\n context.range([minTickHeight / 2, availWidth - minTickHeight / 2]);\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null);\n\n let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding;\n if (widthForTicks <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [LINEAR]: {\n x: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimWidth / 2;\n\n const baseline = fixedBaseline ? 0 : tickShifter;\n\n setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter],\n isOffset ? availHeight : null);\n\n const range = context.range();\n\n // Get Tick widths and available space\n const totalTickWidth = allTickDimensions.length * (tickDimWidth + minWidthBetweenTicks);\n const availableWidth = range[1] - range[0];\n\n // Rotate labels if not enough width\n if (availableWidth < totalTickWidth && labels.rotation !== null) {\n if (availHeight - tickDimWidth - namePadding - tickSize > axisNameHeight) {\n labelConfig.rotation = null;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: true\n });\n } else {\n labelConfig.rotation = -90;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: false\n\n });\n }\n }\n\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n },\n y: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimensions.height / 2;\n const baseline = fixedBaseline ? 1 : tickShifter;\n\n setAxisRange(context, 'x', [availHeight - bottom - baseline, tickShifter + top],\n isOffset ? availWidth : null);\n\n // Remove display of ticks if no space is left\n if (availWidth < tickDimWidth + axisNameHeight + namePadding) {\n context.renderConfig({ showInnerTicks: false });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n }\n }\n };\n};\n","import { defaultValue } from 'muze-utils';\nimport { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { MIN_NO_OF_TICKS, DEFAULT_NO_OF_TICKS } from '../enums/constants';\nimport { setAxisRange, getAdjustedRange } from './space-setter';\n\nexport const getRotatedSpaces = (rotation = 0, width, height) => {\n let rotatedHeight = height;\n let rotatedWidth = width;\n if (rotation) {\n const angle = ((rotation || 0) * Math.PI) / 180;\n rotatedWidth = Math.abs(height * Math.sin(angle)) + Math.abs(width * Math.cos(angle));\n rotatedHeight = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n }\n return { width: rotatedWidth, height: rotatedHeight };\n};\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.renderConfig({ xOffset: x, yOffset: y });\n};\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n let numberOfValues = 0;\n let tickValues = [];\n let { numberOfTicks } = axisInstance.config();\n const ticks = axis.scale().ticks();\n const tickLength = ticks.length;\n const minTickDistance = axisInstance._minTickDistance.width;\n\n numberOfValues = tickLength;\n\n if (tickLength * (labelDim + minTickDistance) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim + minTickDistance));\n }\n\n numberOfTicks = numberOfTicks || numberOfValues;\n numberOfValues = Math.min(numberOfTicks, Math.max(MIN_NO_OF_TICKS, numberOfValues));\n\n tickValues = axis.scale().ticks(numberOfValues);\n\n if (tickValues.length > numberOfValues) {\n tickValues = tickValues.filter((e, i) => i % 2 === 0);\n }\n\n if (numberOfValues === MIN_NO_OF_TICKS) {\n tickValues = axis.scale().ticks(DEFAULT_NO_OF_TICKS);\n tickValues = [tickValues[0], tickValues[tickValues.length - 1]];\n }\n return tickValues;\n};\n\nexport const getAxisComponentDimensions = (context) => {\n let largestTick = '';\n let largestTickDimensions = { width: 0, height: 0 };\n let smartTick = {};\n let axisTicks;\n const allTickDimensions = [];\n const scale = context.scale();\n const { tickValues, showAxisName } = context.renderConfig();\n const { name } = context.config();\n const { labelManager } = context.dependencies();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(context._tickLabelStyle);\n\n // get the values along the domain\n axisTicks = tickValues || labelFunc();\n\n // Get the tick labels\n axisTicks = axisTicks.map((originalLabel, i) => {\n const label = context.getFormattedText(originalLabel, i, axisTicks);\n\n // convert to string for quant values\n const tickDimensions = labelManager.getOriSize(label);\n\n // Get spaces for all labels\n allTickDimensions.push(tickDimensions);\n\n // Getting largest label\n if (tickDimensions.width > largestTickDimensions.width) {\n largestTick = label;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n\n largestTickDimensions = tickDimensions;\n smartTick = smartTick || tickDimensions;\n }\n return label;\n });\n\n labelManager.setStyle(context._axisNameStyle);\n const axisNameDimensions = showAxisName ? labelManager.getOriSize(name) : { width: 0, height: 0 };\n\n return {\n axisNameDimensions,\n largestTick,\n largestTickDimensions,\n allTickDimensions,\n axisTicks,\n smartTick,\n tickSize: context.getTickSize()\n };\n};\n\nexport const computeAxisDimensions = (context) => {\n let tickDimensions = {};\n const { labels } = context.renderConfig();\n const { smartTicks, rotation } = labels;\n const {\n largestTickDimensions,\n axisTicks,\n smartTick,\n axisNameDimensions,\n allTickDimensions,\n tickSize\n } = getAxisComponentDimensions(context);\n const { height: labelHeight, width: labelWidth } = largestTickDimensions;\n\n // get the domain of axis\n const domain = context.domain();\n // const angle = ((rotation || 0) * Math.PI) / 180;\n\n if (domain.length === 0) {\n return null;\n }\n\n if (smartTicks) {\n tickDimensions = smartTick;\n } else {\n tickDimensions = { width: labelWidth, height: labelHeight };\n }\n tickDimensions = getRotatedSpaces(rotation, tickDimensions.width, tickDimensions.height);\n\n if (tickSize === 0) {\n tickDimensions = { width: 0, height: 0 };\n }\n return {\n allTickDimensions,\n tickSize,\n tickDimensions,\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, range) => {\n let width;\n let height;\n const domain = context.domain();\n const minTickDistance = context._minTickDistance.width;\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n width = range && range.length ? range[1] - range[0] : ((tickDimWidth + minTickDistance) * 3);\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!range || !range.length) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n\n height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize;\n\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getVerticalAxisSpace = (context, axisDimensions) => {\n let height;\n let width;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\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 axisDimensions = context.getAxisDimensions();\n\n const { orientation } = context.config();\n const { show } = context.renderConfig();\n const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions;\n const { height: largestDimHeight } = largestTickDimensions;\n const minTickWidth = context._minTickDistance.width;\n if (orientation === TOP || orientation === BOTTOM) {\n let {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n\n if (!range || !range.length) {\n width = allTickDimensions.reduce((t, n) =>\n t + Math.min(n.width, n.height) + minTickWidth, 0);\n }\n\n if (show === false) {\n height = 0;\n width = 0;\n }\n return {\n width,\n height\n };\n }\n\n let {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n if (!height || height === 0) {\n height = axisTicks.length * (largestDimHeight + context._minTickDistance.height);\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 axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show, showAxisName } = context.renderConfig();\n const { axisNameDimensions } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisNameWidth } = axisNameDimensions;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n const axisWidth = Math.max(width, axisNameWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n const {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n const effHeight = Math.max(height, showAxisName ? axisNameWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n/**\n * Overwrites domain with user defined domain (if present)\n * @param {Object} context reference to current axes\n * @param {Array} domain default domain\n *\n * @return {Array} domain\n */\nexport const getValidDomain = (context, domain) => {\n const { domain: userDom } = context.config();\n\n if (userDom) {\n domain = userDom;\n }\n\n return defaultValue(domain, []);\n};\n\nexport const setContinousAxisDomain = (context, domain) => {\n const { nice } = context.config();\n const scale = context.scale.bind(context);\n\n scale().domain(domain);\n nice && scale().nice();\n context._domain = scale().domain();\n};\n\n/**\n * Checks if any of the properties have changed between two objects\n * @param {Object} obj first object\n * @param {Object} obj1 second object\n * @param {Array} properties properties to be compared between two objects\n *\n * @return {Boolean} boolean value\n */\nexport const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => {\n if (!Object.keys(obj).length || !Object.keys(obj1).length) {\n return false;\n }\n return properties.some(key => obj[key] !== obj1[key]);\n};\n\nexport const resetTickInterval = (context, domain) => {\n const {\n orientation,\n isOffset\n } = context.config();\n\n const minDiff = context._minDiff;\n // Set available space on interaction\n if (context.range().length && (orientation === TOP || orientation === BOTTOM)) {\n context.applyTickSkipping();\n const {\n largestTickDimensions\n } = context.getAxisDimensions();\n\n const noOfTicks = context.getTickValues().length;\n\n const { width, height, padding } = context.availableSpace();\n const {\n left,\n right\n } = padding;\n // Get the Tick Interval\n const tickInterval = Math.min(largestTickDimensions.width,\n ((width - (noOfTicks - 1) * (context._minTickDistance.width)) / noOfTicks));\n\n context.maxTickSpaces({\n width: tickInterval\n });\n\n const adjustedRange = getAdjustedRange(minDiff, [tickInterval / 2,\n width - left - right - tickInterval / 2], domain, context.config());\n\n // set range for axis\n setAxisRange(context, 'y', adjustedRange, isOffset ? height : null);\n\n context.setTickConfig();\n }\n};\n\nexport const getSmartAxisName = (name, width, labelManager) => {\n const oriSize = labelManager.getOriSize(name);\n\n labelManager.useEllipsesOnOverflow(true);\n\n return labelManager.getSmartText(name, width, oriSize.height, true);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { hasAxesConfigChanged } from './helper';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n axisComponentDimensions: {},\n config: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._config || {});\n const mockedOldConfig = mergeRecursive({}, oldConfig);\n value = mergeRecursive(mockedOldConfig, value);\n\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n const shouldAxesScaleUpdate = hasAxesConfigChanged(\n value, oldConfig, ['interpolator', 'exponent', 'base', 'orientation']\n );\n const tickFormatter = context.sanitizeTickFormatter(value);\n\n if (shouldAxesScaleUpdate) {\n context._scale = context.createScale(value);\n context._axis = context.createAxis(value);\n }\n\n context._tickFormatter = ticks => tickFormatter(ticks);\n\n context.resetRenderConfig(value);\n return value;\n }\n },\n renderConfig: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._renderConfig || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n return value;\n }\n },\n\n smartTicks: {},\n tickSize: {},\n maxTickSpaces: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._maxTickSpaces || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n valueParser: {\n defaultValue: val => val\n }\n};\n","import {\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 { spaceSetter } from './space-setter';\nimport {\n getAxisComponentDimensions,\n computeAxisDimensions,\n calculateContinousSpace,\n setOffset,\n getValidDomain,\n getSmartAxisName\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._axisDimensions = {};\n this._smartTicks = [];\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\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n const dist = dependencies.labelManager.getOriSize('w');\n\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n this._minTickSpace = dependencies.labelManager.getOriSize('www...');\n\n generateGetterSetters(this, PROPS);\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n this._animationDonePromises = [];\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 resetDomain () {\n this._domain = [];\n return this;\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 *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n this.scale().domain(domainValue);\n this._domain = this.scale().domain();\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n setAxisComponentDimensions () {\n this.axisComponentDimensions(getAxisComponentDimensions(this));\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n *\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 sanitizeTickFormatter (value) {\n const { tickFormat, numberFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), val, i, ticks);\n }\n\n return () => val => numberFormat(val);\n }\n\n resetRenderConfig (config) {\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n } = config;\n this.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n });\n return this;\n }\n\n resetLogicalSpace () {\n this.logicalSpace(null);\n this.range([]);\n\n this.resetRenderConfig(this.config());\n }\n\n getFormattedText (text, index, axisTicks) {\n const formatter = this._tickFormatter;\n\n return formatter(axisTicks)(text, index);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n setTickValues (tickValues) {\n const renderConfig = this.renderConfig();\n this.config({ ...renderConfig, tickValues });\n this.tickValues = tickValues;\n this.axis().tickValues(tickValues);\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 let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n const type = this.constructor.type();\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset })[type].x();\n } else {\n labelConfig = spaceSetter(this, { isOffset })[type].y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.setSmartAxisName();\n return this;\n }\n\n setSmartAxisName () {\n const { orientation, name } = this.config();\n const dimType = (orientation === TOP || orientation === BOTTOM) ? 'width' : 'height';\n const widthDim = this.availableSpace()[dimType];\n const labelManager = this.dependencies().labelManager;\n labelManager.setStyle(this._axisNameStyle);\n this.renderConfig({\n smartAxisName: getSmartAxisName(name, widthDim, labelManager)\n });\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\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 *\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 (...params) {\n this.axisDimensions(computeAxisDimensions(this, ...params));\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 }\n setOffset(this);\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 return this.scale().invert(value);\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 *\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n return [v1, v2];\n }\n\n invertExtent (v1, v2) {\n return [this.invert(v1), this.invert(v2)];\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\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 /**\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 this.setTickConfig();\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n remove () {\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n *\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 * Notifies when all animations/transitions of the axis are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n}\n\n","import { sanitizeDomainWhenEqual } from 'muze-utils';\nimport { 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 if (domain.length) {\n domain = sanitizeDomainWhenEqual(domain);\n }\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 const scale = this._scale;\n if (domainVal <= 0) {\n return scale(scale.domain()[0]);\n }\n\n return scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n domain[0] = Math.max(1, domain[0]);\n }\n if (domain[1] <= 0) {\n domain[1] = Math.max(1, domain[1]);\n }\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 {\n getNumberOfTicks,\n getValidDomain,\n setContinousAxisDomain\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 *\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 *\n *\n * @static\n *\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 *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainVal = this._interpolator.sanitizeDomain(getValidDomain(this, domain[0]));\n setContinousAxisDomain(this, domainVal);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\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 (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n const {\n tickValues,\n showInnerTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n if (!showInnerTicks) {\n axis.tickValues([]);\n return this;\n }\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n }\n const newTickValues = this.getTickValues();\n\n axis.tickValues(newTickValues);\n const smartLabel = this.dependencies().labelManager;\n smartLabel.setStyle(this._tickLabelStyle);\n const formatter = this._tickFormatter(newTickValues);\n const smartTicks = newTickValues.map((val, i) => {\n const text = formatter(val, i);\n const tickSpace = smartLabel.getOriSize(text);\n\n tickSpace.text = text;\n return tickSpace;\n });\n\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation\n\n } = this.config();\n const {\n tickValues\n } = this.renderConfig();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = this.axisComponentDimensions().largestTickDimensions;\n\n if (tickValues) {\n return 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.renderConfig().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 } = this.config();\n const {\n labels\n } = this.renderConfig();\n\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const ticks = axis.tickValues();\n const smartTicks = this.smartTicks();\n\n if (smartTicks && smartTicks.length) {\n const { width, height } = this.smartTicks()[0];\n\n axis.tickTransform((d) => {\n if (d === ticks[0]) {\n if ((orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n\n if ((orientation === TOP || orientation === BOTTOM) && !rotation) {\n return `translate(${width / 2}px, ${0}px)`;\n }\n } return '';\n });\n }\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { calculateBandSpace, setOffset, getRotatedSpaces } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n /**\n *\n *\n * @static\n *\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const domain = this.domain();\n const { labelManager } = this._dependencies;\n const { padding } = this.config();\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n tickValues && this.axis().tickValues(tickValues);\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n // Update padding between plots\n if (typeof padding === 'number') {\n const paddingNormalized = Math.min(1, Math.max(0, padding));\n this.scale().padding(paddingNormalized);\n }\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\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 }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n *\n *\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n formatTickValue (val) {\n return this.valueParser()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(this.formatTickValue(val), val, i, ticks);\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\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 invertExtent (v1, v2) {\n return this.scale().invertExtent(v1, v2);\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 const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n const extent = this.invertExtent(v1, v2);\n const p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n const p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { TIME } from '../enums/scale-type';\nimport { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset,\n resetTickInterval } from './helper';\nimport { applyTickSkipping } from './space-setter';\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 *\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 *\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n formatTickValue (val) {\n return this.scale().tickFormat()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return (ticks) => {\n const rawTicks = ticks.map(t => t.getTime());\n return (val, i) => tickFormat(this.formatTickValue(val), val.getTime(), i, rawTicks);\n };\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\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 *\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.renderConfig().tickValues || this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n *\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n applyTickSkipping () {\n applyTickSkipping(this);\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n setContinousAxisDomain(this, domainValue);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n\n resetTickInterval(this, domainValue);\n return this;\n }\n return this._domain;\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 }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\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 (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n\n tickValues && this.axis().tickValues(tickValues);\n\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n\n this.smartTicks(smartTicks);\n return this;\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, defaultValue } 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, defaultValue(Number(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 { InvalidAwareTypes, getObjProp } from 'muze-utils';\n\nexport const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => {\n if (domainVal instanceof InvalidAwareTypes) {\n return minDomainScaledVal;\n }\n return scaledVal;\n};\n\nexport const resolveAxisConfig = (propVal, defaultVal, context) => {\n const constructor = getObjProp(propVal, 'constructor');\n switch (constructor) {\n case Function:\n return propVal(defaultVal, context);\n case Array:\n return propVal;\n default:\n return defaultVal;\n }\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\nimport { treatNullMeasures } from '../helper';\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*\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 *\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 *\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 *\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(sanitizeDomainWhenEqual(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 *\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 *\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return treatNullMeasures(domainValue, scale(numVal), scale(0));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) => treatNullMeasures(domainValue, scale(domainValue),\n scale(domain[0]));\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) =>\n strategies()[`${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, defaultValue } 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, getActualHslColor } 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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n *\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 *\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n return strategyGetter(domainType, rangeType, schemeType);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n *\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 if (color) {\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 }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n *\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 = Math.min(defaultValue(color[3], 0), 1);\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = Math.min(a + transformationArr[3] || 0, 1);\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 getHslArray (color) {\n return getActualHslColor(color);\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';\nimport { treatNullMeasures } from '../helper';\n\n/**\n *\n *\n * @param {*} domain\n *\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 *\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n *\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 *\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 treatNullMeasures(domainValue, interpolator(numVal), interpolator(domain[0]));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\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, domain) =>\n treatNullMeasures(domainValue, scale(domainValue), scale(domain[0]));\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 *\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n *\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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\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, InvalidAwareTypes } 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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n *\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value || value instanceof InvalidAwareTypes) {\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 *\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 { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => mergeRecursive(context.config(), config),\n preset: (context, config) => {\n const { range, domain } = config;\n range && context.range(range);\n domain && context.domain(domain);\n }\n },\n domain: {},\n range: {}\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, Symbols, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_ANGLE_DOMAIN } from '../enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst { pie } = Symbols;\n\nconst createAngleValues = (context) => {\n const angleData = context._angleFn(context._domain);\n angleData.forEach((v) => {\n v.startAngle -= Math.PI / 2;\n v.endAngle -= Math.PI / 2;\n });\n context._angleValues = angleData.reduce((values, d) => {\n const key = d.data;\n !values[key] && (values[key] = []);\n values[key].push(d);\n return values;\n }, {});\n};\n\n/**\n* This class is used to instantiate a AngleAxis.\n* @class AngleAxis\n*/\nexport default class AngleAxis {\n\n /**\n * Creates an instance of AngleAxis.\n * @param {Object} config input parameters.\n * @memberof AngleAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._range = [0, 360];\n this._angleFn = pie()\n .value(d => (typeof d === 'string' ? 1 : d))\n .sortValues(null);\n this._angleValues = {};\n }\n\n static defaultConfig () {\n return {};\n }\n\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n getScaleValue (domainVal) {\n return this._angleValues[domainVal];\n }\n\n padAngle (angle) {\n this._angleFn = this._angleFn.padAngle(angle);\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n const domain = domainVal[0].length ? domainVal[0] : DEFAULT_ANGLE_DOMAIN;\n this._domain = resolveAxisConfig(customDomain, domain, this);\n createAngleValues(this);\n return this;\n }\n return this._domain;\n }\n\n range (...range) {\n if (range.length) {\n const { range: customRange } = this.config();\n this._range = resolveAxisConfig(customRange, range[0], this);\n const domain = this.domain();\n const [startAngle, endAngle] = this._range;\n this._angleFn\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180);\n if (domain && domain.length) {\n createAngleValues(this);\n }\n return this;\n }\n return this._range;\n }\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\nexport const ANGLE0 = 'angle0';\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 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 * Ordering type\n */\nexport const ASCENDING = 'asc';\n/**\n * Ordering type\n */\nexport const DESCENDING = 'desc';\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, mergeRecursive, generateGetterSetters, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { LINEAR } from '../../../visual-group/src/enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst adjustDomain = (context) => {\n const minOuterRadius = context.config().minOuterRadius;\n const domain = context._domain;\n if (context._range.length) {\n const scale = context._scale;\n const value = scale.invert(minOuterRadius) - scale.invert(0);\n context._domain = [domain[0] - value, domain[1]];\n scale.domain(context._domain);\n }\n};\n\n/**\n* This class is used to instantiate a RadiusAxis.\n* @class RadiusAxis\n*/\nexport default class RadiusAxis {\n\n /**\n * Creates an instance of RadiusAxis.\n * @param {Object} config input parameters.\n * @memberof RadiusAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._range = [];\n this._radiusFactor = 1;\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._scale = this.createScale({\n scale: LINEAR\n });\n }\n\n static defaultConfig () {\n return {\n padding: [0, 1],\n minOuterRadius: 10\n };\n }\n\n config (...params) {\n if (params.length) {\n const config = mergeRecursive(this.config(), params[0]);\n this._config = config;\n return this;\n }\n return this._config;\n }\n\n createScale (strategy) {\n return createScale({\n type: strategy.scale,\n range: this.range()\n });\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n let domain = resolveAxisConfig(customDomain, domainVal[0], this);\n domain = sanitizeDomainWhenEqual(domain);\n this._scale.domain(domain);\n this._domain = domain;\n adjustDomain(this);\n }\n return this._domain;\n }\n\n getInnerRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[0];\n }\n return this._scale(domainVal);\n }\n\n getOuterRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[1];\n }\n const radius = this._scale(domainVal) * this._radiusFactor;\n return radius;\n }\n\n range (...range) {\n if (range.length) {\n const { padding, range: customRange } = this.config();\n const sanitizedRange = range[0].map((v, i) => v + (i ? -padding[i] : padding[i]));\n const rangeVal = resolveAxisConfig(customRange, sanitizedRange, this);\n this._range = rangeVal;\n this._scale.range(rangeVal);\n adjustDomain(this);\n }\n return this._range;\n }\n\n setRadiusFactor (val) {\n this._radiusFactor = val;\n return this;\n }\n}\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n TEMPORAL: '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.TEMPORAL]: ScaleType.TIME\n};\n\n","import { nestCollection, InvalidAwareTypes } 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 const groupedData = nestCollection({\n keys: groupByIndices,\n data\n });\n\n groupedData.forEach((d) => {\n const key = d.key;\n if (InvalidAwareTypes.isInvalid(key)) {\n d.key = InvalidAwareTypes.getInvalidType(key);\n }\n });\n return groupedData;\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 retrieveNearestGroupByReducers,\n getObjProp,\n COORD_TYPES,\n CommonProps,\n defaultValue\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM, ASCENDING, TEXT } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\nconst { POLAR, CARTESIAN } = COORD_TYPES;\n\nconst transformColor = (colorAxis, datum, styleType, intensity) => {\n const meta = datum.meta;\n const stateColor = defaultValue(meta.stateColor[styleType], meta.originalColor[styleType]);\n const colorInfo = colorAxis.transformColor(stateColor, intensity);\n\n meta.stateColor[styleType] = colorInfo.hsla;\n return colorInfo;\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.forEach((elem) => {\n elem.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 = transformColor(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 transformColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor[styleType];\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a})`;\n }));\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 *\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\nexport const encodingFieldInfRetriever = {\n [POLAR]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.RADIUS, ENCODING.RADIUS0, ENCODING.ANGLE, ENCODING.ANGLE0, COLOR, SHAPE, SIZE, TEXT]\n .forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n });\n return encodingInf;\n },\n [CARTESIAN]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE, TEXT].forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n encodingInf[`${e}FieldType`] = getObjProp(fieldsConfig, field, 'def', 'type');\n encodingInf[`${e}FieldSubType`] = getObjProp(fieldsConfig, field, 'def', 'subtype');\n });\n\n return encodingInf;\n }\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n *\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\nconst dataNormalizers = {\n [POLAR]: (transformedData, encodingFieldInf, fieldsConfig) => {\n const {\n radiusFieldIndex,\n angleFieldIndex,\n radius0FieldIndex,\n angle0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map(data => data.map((d) => {\n const pointObj = {\n radius: d[radiusFieldIndex],\n angle: angleFieldIndex !== undefined ? d[angleFieldIndex] : 1,\n radius0: d[radius0FieldIndex],\n angle0: d[angle0FieldIndex]\n };\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n return pointObj;\n })).filter(d => d.length);\n },\n [CARTESIAN]: (transformedData, encodingFieldInf, fieldsConfig, transformType) => {\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 transformedData.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.source = tuple;\n pointObj.rowId = tuple[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = tuple[encodingFieldInf[`${enc}FieldIndex`]];\n });\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n }\n return pointObj;\n });\n }).filter(d => d.length);\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, context) => {\n const transformType = context.transformType();\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const encodingFieldInf = context.encodingFieldsInf();\n const fieldsConfig = context.data().getFieldsConfig();\n return dataNormalizers[context.coord()](transformedDataArr, encodingFieldInf, fieldsConfig, transformType);\n};\n\nexport const domainCalculator = {\n [POLAR]: (data, layerInst) => {\n const config = layerInst.config();\n const { sort } = config;\n let angleValues = data[0];\n const radius0Field = getObjProp(config.encoding.radius0, 'field');\n if (sort) {\n angleValues = angleValues.sort((a, b) => (sort === ASCENDING ? a.radius - b.radius : b.radius - a.radius));\n }\n const radiusDomain = getDomainFromData(data, [ENCODING.RADIUS, radius0Field ?\n ENCODING.RADIUS0 : ENCODING.RADIUS]);\n return {\n radius: radiusDomain,\n angle: angleValues.map(d => d.angle),\n angle0: angleValues.map(d => d.angle0)\n };\n },\n [CARTESIAN]: (data, layerInst) => {\n const transformType = layerInst.transformType();\n const encodingFieldInf = layerInst.encodingFieldsInf();\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};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d.rowId !== 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\nexport const renderLayer = (context) => {\n const mount = context.mount();\n if (mount) {\n context.render(mount);\n context.dependencies().throwback.commit(CommonProps.ON_LAYER_DRAW, true, context.metaInf().parentNamespace);\n }\n};\n\nconst transformResolverPredicates = (encodingFieldInf, context, groupByField) => {\n const fieldsConfig = context.data().getFieldsConfig();\n const { xField, yField, xFieldType, yFieldType } = encodingFieldInf;\n const dimensionField = ['xField', 'yField'].find(type =>\n encodingFieldInf[`${type}Type`] === FieldType.DIMENSION);\n\n return [\n !xField,\n !yField,\n !groupByField,\n getObjProp(fieldsConfig[groupByField], 'def', 'type') === FieldType.MEASURE,\n xFieldType === FieldType.DIMENSION && yFieldType === FieldType.DIMENSION,\n dimensionField && encodingFieldInf[dimensionField] === groupByField\n ];\n};\n\nexport const resolveInvalidTransformType = (context) => {\n const encodingFieldInf = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n\n if (transformResolverPredicates(encodingFieldInf, context, groupByField).some(value => value)) {\n return IDENTITY;\n }\n return null;\n};\n\nexport const getValidTransform = context => resolveInvalidTransformType(context) || context.config().transform.type;\n\nexport const getValidTransformForAggFn = (context) => {\n const resolvedInvalidTransformType = resolveInvalidTransformType(context);\n if (resolvedInvalidTransformType) {\n return resolvedInvalidTransformType;\n }\n\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const isCustomTransformTypeProvided = !!getObjProp(context._customConfig, 'transform', 'type');\n let transformType = context.config().transform.type;\n\n if (!isCustomTransformTypeProvided && groupByField && xFieldType !== yFieldType) {\n const measureField = xFieldType === FieldType.MEASURE ? xField : yField;\n const { [measureField]: aggFn } = retrieveNearestGroupByReducers(context.data(), measureField);\n transformType = aggFn === AGG_FN_SUM ? STACK : GROUP;\n }\n\n return transformType;\n};\n\nexport const getMarkId = (source, schema) => source.filter((val, i) => schema[i] &&\n schema[i].type === FieldType.DIMENSION).join();\n\nexport const resolveEncodingValues = (data, i, dataArr, layerInst) => {\n const transformedValues = {};\n const values = data.values;\n const encoding = layerInst.config().encoding;\n for (const key in values) {\n const value = getObjProp(encoding[key], 'value');\n if (value instanceof Function) {\n transformedValues[key] = value(values, i, dataArr, layerInst);\n } else {\n transformedValues[key] = values[key];\n }\n }\n return transformedValues;\n};\n\nexport const getColorMetaInf = (colorInf, colorAxis) => ({\n originalColor: Object.keys(colorInf).reduce((acc, key) => {\n if (colorInf[key]) {\n acc[key] = colorAxis.getHslArray(colorInf[key]);\n }\n return acc;\n }, {}),\n stateColor: {},\n colorTransform: {}\n});\n\nconst getCoordValue = (radius, trig, angle, offset) => radius * Math[trig](angle) + offset;\n\nconst coordValueGetter = (radius, angle, xOffset, yOffset) => ({\n x: getCoordValue(radius, 'cos', angle, xOffset),\n y: getCoordValue(radius, 'sin', angle, yOffset)\n});\n\nexport const toCartesianCoordinates = (points, measurement, rangePlot = false) => {\n const xOffset = measurement.width / 2;\n const yOffset = measurement.height / 2;\n for (let i = 0, len = points.length; i < len; i++) {\n const point = points[i];\n const { angle, radius, radius0, angle0 } = point.update;\n point.update = coordValueGetter(radius, angle, xOffset, yOffset);\n if (rangePlot) {\n const update = point.update = coordValueGetter(radius0, angle0, xOffset, yOffset);\n const { x: x0, y: y0 } = coordValueGetter(radius, angle, xOffset, yOffset);\n update.x0 = x0;\n update.y0 = y0;\n }\n }\n return points;\n};\n\nexport const sortData = (data, axes) => {\n const { x: xAxis, y: yAxis } = axes;\n const axisArr = [xAxis, yAxis];\n for (let i = 0, len = axisArr.length; i < len; i++) {\n const axis = axisArr[i];\n if (axis.constructor.type() === BAND) {\n const key = i ? 'y' : 'x';\n const dom = axis.domain();\n const indices = dom.reduce((acc, v, idx) => {\n acc[v] = idx;\n return acc;\n }, {});\n data.sort((a, b) => indices[a[key]] - indices[b[key]]);\n break;\n }\n }\n return data;\n};\n","import * as PROPS from '../enums/props';\n\nexport const localOptions = {\n [PROPS.DATA]: {\n value: null\n }\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\nimport * as PROPS from '../enums/props';\nimport { encodingFieldInfRetriever } from '../helpers';\n\nexport const listenerMap = [\n {\n props: [`${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${PROPS.DATA}`],\n type: 'registerImmediateListener',\n listener: (context, [, data]) => {\n const config = context.config();\n if (data && config) {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n const encodingValue = config.encoding;\n if (encodingValue) {\n const fieldsConfig = data.getFieldsConfig();\n const encodingFieldsInf = encodingFieldInfRetriever[context.coord()](encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.resolveTransformType();\n context._transformedData = context.getTransformedData(data, config,\n context.transformType(), encodingFieldsInf);\n context._normalizedData = context.getNormalizedData(context._transformedData, fieldsConfig);\n if (config.calculateDomain !== false) {\n const domain = context.calculateDomainFromData(context._normalizedData,\n context.encodingFieldsInf(), context.data().getFieldsConfig());\n context.domain(domain);\n }\n }\n }\n },\n namespace: context => context.metaInf().namespace\n }\n];\n","import {\n getUniqueId,\n mergeRecursive,\n FieldType,\n selectElement,\n ReservedFields,\n DataModel,\n clone,\n generateGetterSetters,\n STATE_NAMESPACES,\n COORD_TYPES,\n transactor,\n defaultValue,\n getObjProp\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport { props } from './props';\nimport {\n transformData,\n getNormalizedData,\n applyInteractionStyle,\n getValidTransform,\n domainCalculator,\n renderLayer\n} from '../helpers';\nimport { localOptions } from './local-options';\nimport { listenerMap } from './listener-map';\n\nconst layerNs = [STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * An abstract class which gives definition of common layer functionality like\n * - transforming data for various modes. Supported modes: identity, group and stack.\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 * @module BaseLayer\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n * @constructor\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.size 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} dependencies.smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies = {}) {\n super();\n\n generateGetterSetters(this, props);\n this.axes(axes);\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 this._animationDonePromises = [];\n this._graphicElems = {};\n this._customConfig = null;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys(localOptions).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getListeners () {\n return {\n store: [...listenerMap, {\n type: 'registerChangeListener',\n props: [`${layerNs[1]}.${PROPS.DATA}`,\n ...['x', 'y', 'radius'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context) => {\n renderLayer(context);\n },\n subNamespace: (context) => {\n const { unitRowIndex, unitColIndex, namespace } = context.metaInf();\n return {\n [`${layerNs[1]}.${PROPS.DATA}`]: namespace,\n [`${groupNs}.domain.x`]: `${unitColIndex}0`,\n [`${groupNs}.domain.y`]: `${unitRowIndex}0`,\n [`${groupNs}.domain.radius`]: `${unitRowIndex}-${unitColIndex}`\n };\n }\n }],\n throwback: []\n };\n }\n\n static getQualifiedStateProps () {\n const layerState = BaseLayer.getState();\n return layerState.map((state, i) => Object.keys(state).map(prop => `${layerNs[i]}.${prop}`));\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { namespace } = this.metaInf();\n store.addSubNamespace(namespace, BaseLayer.formalName(), this);\n\n transactor(this, localOptions, store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}`\n });\n return this;\n }\n return this._store;\n }\n\n domain (...dom) {\n const prop = `${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`;\n const store = this.store();\n if (dom.length) {\n const { parentNamespace, namespace } = this.metaInf();\n const domain = defaultValue(store.get(prop, parentNamespace), {});\n domain[namespace] = dom[0];\n this.store().commit(prop, domain, parentNamespace);\n return this;\n }\n return this.store().get(prop, this.metaInf().namespace);\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 * .layers([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @return {string} name of layer\n */\n static formalName () {\n return 'base';\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 *\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 * @public\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 * @public\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Returns the transformed data based on given transform type.\n * It first 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 */\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 categorical 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 = domainCalculator[this.coord()](data, this);\n }\n return domains;\n }\n\n static 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 { parentNamespace, namespace } = this.metaInf();\n const domains = getObjProp(this.store()\n .get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, parentNamespace), namespace);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Normalizes the transformed data and returns it.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData) {\n return getNormalizedData(transformedData, this);\n }\n\n /**\n * Gets the nearest point closest to the given x and y coordinate. If no nearest point is found, then it returns\n * null.\n *\n * @public\n *\n * @param {number} x X Coordinate.\n * @param {number} y Y Coordinate.\n *\n * @return {Object} Information of the nearest point.\n * ```\n * {\n * // id property contains the field names and their corresponding values in a 2d array. This is the data\n * // associated with the nearest point.\n * id: // Example data: [['Origin'], ['USA']],\n * dimensions: // Physical dimensions of the point.\n * layerId: // Id of the layer instance.\n * }\n * ```\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply, styles) {\n const interactionConfig = this.config().interaction || {};\n\n let interactionStyles = interactionConfig[interactionType];\n interactionStyles = styles || interactionStyles;\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n disableUpdate () {\n this._updateLock = true;\n return this;\n }\n\n enableUpdate () {\n this._updateLock = false;\n return this;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransform(this);\n }\n\n transformType () {\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 *\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer.\n *\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n const { namespace, parentNamespace } = this.metaInf();\n const store = this.store();\n store.removeSubNamespace(namespace, BaseLayer.formalName());\n const layersDomain = store.get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`);\n const unitDom = layersDomain[parentNamespace];\n unitDom && (delete unitDom[namespace]);\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 *\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 *\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getSchema();\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 hasPlotSpan () {\n return false;\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 * Returns the information of the marks corresponding to the supplied identifiers. Identifiers are a set of field\n * names and their corresponding values in an array. It can also be an instance of datamodel.\n *\n * For example,\n * ```\n * const identifiers = [\n * ['Origin', 'Cylinders'],\n * ['USA', '8']\n * ];\n * const points = barLayer.getPointsFromIdentifiers(identifiers);\n * ```\n * @public\n * @param {Array|DataModel} identifiers Identifiers of the marks.\n * @param {Object} config Optional configuration which describes how to get the information.\n * @param {boolean} config.getAllAttrs If true, then returns all the information of the points, else returns only\n * the positions of the points.\n * @param {boolean} config.getBBox If true, then returns the bounding box of all the marks.\n *\n * @return {Array} Array of points contains\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 { source, rowId } = 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] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -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._normalizedData;\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.source;\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.source;\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().getSchema()];\n }\n\n /**\n * Returns the dom elements associated with the supplied set of row ids.\n * Each element in the layer is mapped with a row of the datamodel. When given an array of row ids, it returns all\n * the elements which is mapped with those row ids.\n *\n * @public\n * @param {Array} set Array of row ids\n *\n * @return {Selection} D3 Selection of dom elements.\n */\n getPlotElementsFromSet (set) {\n const graphicElems = this._graphicElems;\n const elems = [];\n for (let i = 0, len = set.length; i < len; i++) {\n const elem = graphicElems[set[i]];\n if (elem) {\n elems.push(elem);\n }\n }\n return elems;\n }\n\n /**\n * Notifies when all animations/transitions of the layer are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n getRenderProps () {\n if (this.coord() === COORD_TYPES.POLAR) {\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`];\n }\n const { unitRowIndex: rowIndex, unitColIndex: colIndex } = this.metaInf();\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${rowIndex}0`,\n `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${colIndex}0`];\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\nconst filterFn = (d) => {\n const { update } = d;\n return update.y !== null && update.x !== null;\n};\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 { layer, 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(filterFn);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(filterFn);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', points.length ? [points[0].className] : []);\n element.attr('class', d => d);\n if (!transition.disabled) {\n element = element.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\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 InvalidAwareTypes,\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 {\n attachDataToVoronoi,\n animateGroup,\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\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 static formalName () {\n return 'line';\n }\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 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 static 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) {\n let points = [];\n const axes = this.axes();\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const { xFieldType, yFieldType } = 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 sortData(data, axes);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2;\n const color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color\n },\n data: d\n }, i, data, this);\n\n const point = {\n enter: {},\n update: {\n x: d.x instanceof InvalidAwareTypes ? null : resolvedEncodings.x,\n y: d.y instanceof InvalidAwareTypes ? null : resolvedEncodings.y\n },\n style: {\n stroke: resolvedEncodings.color,\n 'fill-opacity': 0\n },\n rowId: d.rowId,\n source: d.source,\n meta: getColorMetaInf({\n stroke: resolvedEncodings.color\n }, colorAxis)\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\n points = points.filter((point) => {\n const { update } = point;\n return !isNaN(update.x) && !isNaN(update.y);\n });\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 normalizedData = this._normalizedData;\n const transformedData = this._transformedData;\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);\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.source[colorFieldIndex] !== null &&\n d.source[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal.source[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n layer: this,\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].source[colorFieldIndex] || d[0].rowId);\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 { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\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 { layer, 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(points.length ? [points[0].className] : []);\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 .on('end', layer.registerAnimationDoneHook())\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n element.attr('class', d);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType, InvalidAwareTypes, getObjProp } 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 {\n getAxesScales,\n positionPoints,\n getIndividualClassName,\n getValidTransformForAggFn,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\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 *\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 && getObjProp(domains[type], 'length')) {\n domains[type][0] = Math.min(domains[type][0], 0);\n domains[type][1] = Math.max(0, domains[type][1]);\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) {\n let points = [];\n const transformType = this.transformType();\n const axes = this.axes();\n const colorAxis = axes.color;\n const config = this.config();\n const fieldsConfig = this.data().getFieldsConfig();\n const { xField, yField, y0Field } = this.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 const minYVal = yAxis.domain()[0];\n const basePos = minYVal < 0 ? yAxis.getScaleValue(0) : yAxis.getScaleValue(minYVal);\n sortData(data, axes);\n points = data.map((d, i) => {\n let color;\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) : basePos;\n color = colorAxis.getColor(d.color);\n const invalidY = d.y instanceof InvalidAwareTypes;\n const invalidY0 = d.y0 instanceof InvalidAwareTypes;\n const resolvedValues = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, this);\n color = resolvedValues.color;\n const style = {\n fill: color\n };\n\n const point = {\n enter: {\n x: xPx,\n y: invalidY ? null : basePos,\n y0: invalidY0 ? null : basePos\n },\n update: {\n x: xPx,\n y: invalidY ? null : resolvedValues.y,\n y0: invalidY0 ? null : resolvedValues.y0\n },\n source: d.source,\n rowId: d.rowId,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta: getColorMetaInf(style, colorAxis)\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 points = points.filter((point) => {\n const update = point.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(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 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 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 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 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 Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport { getIndividualClassName, resolveEncodingValues, getColorMetaInf } from '../../helpers';\nimport { tweenPie, tweenExitPie, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates.\n *\n * @public\n *\n * @class\n * @module ArcLayer\n * @extends BaseLayer\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 static formalName () {\n return 'arc';\n }\n\n elemType () {\n return 'path';\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 { source, rowId } = dataPoint;\n return {\n id: this.getIdentifiersFromData(source, rowId),\n layerId: this.id()\n };\n }\n return null;\n }\n\n translatePoints (data) {\n const { angle, color: colorAxis, radius: radiusAxis } = this.axes();\n const pieIndex = {};\n const prevData = this._points[0] || [];\n const points = [];\n const angleV = {};\n\n this._prevPieData = {};\n prevData.forEach((e, index) => {\n this._prevPieData[e.rowId] = [e, index];\n pieIndex[e.index] = e;\n });\n data.forEach((d, i) => {\n const angles = angle.getScaleValue(d.angle);\n if (angles) {\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const uid = d.rowId;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n radius: radiusAxis.getOuterRadius(d.radius),\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color: colorAxis.getColor(d.color),\n angle0: startAngle,\n angle: endAngle,\n startAngle,\n endAngle,\n startAngle0: startAngle,\n endAngle0: endAngle\n },\n data: d\n }, i, data, this);\n const color = resolvedEncodings.color;\n points.push({\n source: d.source,\n index: i,\n enter: {},\n update: {\n angle0: resolvedEncodings.angle0,\n angle: resolvedEncodings.angle,\n radius0: resolvedEncodings.radius0,\n radius: resolvedEncodings.radius\n },\n color,\n meta: getColorMetaInf({\n fill: color\n }, colorAxis),\n rowId: uid,\n _previousInfo: this._prevPieData[uid] ? this._prevPieData[uid][0] :\n getPreviousPoint(pieIndex, i, this)\n });\n }\n });\n return points;\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const measurement = this.measurement();\n const {\n classPrefix,\n defClassName,\n cornerRadius,\n padAngle,\n padRadius,\n transition\n } = this.config();\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // This returns a function that generates the arc path based on the datum provided\n const path = this._arcFn = arc()\n .cornerRadius(cornerRadius)\n .startAngle(d => d.update.angle0 + Math.PI / 2)\n .endAngle(d => d.update.angle + Math.PI / 2)\n .padAngle(padAngle)\n .padRadius(padRadius)\n .outerRadius(d => d.update.radius)\n .innerRadius(d => d.update.radius0);\n\n this._points = this._normalizedData.map(arr => this.translatePoints(arr));\n const graphicElems = this._graphicElems = {};\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', this._points, `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${measurement.width / 2},\n ${measurement.height / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', d => [d], `${qualClassName[0]}-path`)\n .style('fill', d => d.color)\n .each(function (d) {\n graphicElems[d.rowId] = selectElement(this);\n })\n .transition()\n .duration(transition.duration)\n .on('end', this.registerAnimationDoneHook())\n .attrTween('d', (...params) => tweenPie(path, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, this._points, 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', d => d, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, path);\n return this;\n }\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 { source, rowId } = tData;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const measurement = this.measurement();\n const centroid = this._arcFn.centroid(pieSliceInf);\n return [{\n x: centroid[0] + measurement.width / 2,\n y: centroid[1] + measurement.height / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\nexport const getPreviousPoint = (prevData, currIndex, context) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n const [startAngle, endAngle] = context.axes().angle.range();\n if (prevArc && nextArc) {\n return {\n update: {\n angle0: getObjProp(prevArc, 'update', 'angle'),\n angle: getObjProp(nextArc, 'update', 'angle0')\n }\n };\n } else if (!nextArc) {\n return {\n update: {\n angle0: (endAngle - 90) * Math.PI * 2 / 360,\n angle: (endAngle - 90) * Math.PI * 2 / 360\n }\n };\n }\n return {\n update: {\n angle0: (startAngle - 90) * Math.PI * 2 / 360,\n angle: (startAngle - 90) * Math.PI * 2 / 360\n }\n };\n};\n\nexport const tweenPie = (path, b) => {\n const datum = b[0];\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\nexport const tweenExitPie = (consecutiveExits, transition, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.update.angle0;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.update.angle;\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 return path(interpolator()(datum, {\n update: {\n angle0: mid,\n angle: mid,\n radius: datum.radius,\n radius0: datum.radius0\n }\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, layerInst) => {\n const selection = selectElement(container).selectAll('g').data(data);\n const { smartLabel } = layerInst._dependencies;\n const graphicElems = layerInst._graphicElems;\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 graphicElems[dataObj.rowId] = element;\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 textEl.attr('alignment-baseline', dataObj['alignment-baseline']);\n textEl.attr('transform', `rotate(${dataObj.rotation} ${update.x} ${update.y})`);\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 size: {},\n radius: {},\n angle: {},\n text: {\n value: '',\n formatter: (val, i, data, context) => {\n const valueParser = context.valueParser();\n return valueParser(val);\n },\n background: {\n padding: 10\n }\n },\n rotation: {\n value: 0\n },\n 'alignment-baseline': {\n value: 'middle'\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 { positionPoints, getIndividualClassName, resolveEncodingValues, getColorMetaInf, toCartesianCoordinates }\n from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\n\nimport './styles.scss';\n\nconst defaultEncoding = defaultConfig.encoding;\nconst alignmentBaseLine = defaultEncoding['alignment-baseline'].value;\nconst defRotation = defaultEncoding.rotation.value;\n\nconst pointTranslators = {\n polar: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { radius: radiusAxis, color: colorAxis, angle: angleAxis } = axes;\n const { formatter: textFormatter } = textEncoding;\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const angleV = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const source = d.source;\n const text = d.text;\n\n const color = colorAxis.getColor(d.color);\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n\n const angle = (startAngle + endAngle) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n angle,\n radius,\n color,\n text,\n startAngle,\n endAngle,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n angle: resolvedVal.angle,\n radius: resolvedVal.radius\n },\n text: textFormatter ? textFormatter(text, i, data, layerInst) : resolvedVal.text,\n color: resolvedVal.color,\n rotation: resolvedVal.rotation,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedVal['alignment-baseline'],\n meta: getColorMetaInf({\n fill: resolvedVal.color\n }, colorAxis),\n style: {},\n source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = toCartesianCoordinates(positionPoints(layerInst, points), layerInst.measurement());\n\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n },\n cartesian: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const colorAxis = axes.color;\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\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.source;\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 = colorAxis.getColor(d.color, colorAxis);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n text: textValue,\n color,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n },\n text: textFormatter(resolvedEncodings.text, i, data, layerInst),\n color: resolvedEncodings.color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedEncodings['alignment-baseline'],\n rotation: resolvedEncodings.rotation,\n meta: getColorMetaInf({\n fill: resolvedEncodings.color\n }, colorAxis),\n style: {},\n source: d.source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = positionPoints(layerInst, points);\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n};\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\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 getPointTranslator (val) {\n return pointTranslators[val];\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, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\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 const config = this.config();\n const normalizedData = this._normalizedData;\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n this._graphicElems = {};\n\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group) => {\n const node = group.node();\n const points = this.translatePoints(dataArr, {}, this);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this);\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 *\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, groupElement) {\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, groupElement);\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 makeElement(groupElement, () => newShape, [1]);\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, groupElement);\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 const { layer, container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n const graphicElems = layer._graphicElems;\n mount.attr('class', className);\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const { enter } = d;\n group.attr('transform', `translate(${enter.x},${enter.y})`);\n },\n update: (group, d) => {\n createShape(d, group);\n graphicElems[d.rowId] = group;\n const { update, style } = d;\n objectIterator(style, key => group.style(key, style[key]));\n group.attr('class', className);\n group.classed(d.className, true);\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n group.attr('transform', `translate(${update.x},${update.y})`);\n },\n exit: (exitGroup) => {\n if (!disabled) {\n exitGroup.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', () => exitGroup.remove())\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroup.remove();\n }\n }\n }, params.keyFn);\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: 'stroke',\n intensity: [0, 0, 0, +1]\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 stroke: {\n value: 'hsla(0,0%,0%,0)'\n },\n fill: {},\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 {\n attachDataToVoronoi,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName,\n getMarkId,\n getColorMetaInf,\n resolveEncodingValues\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to create various symbols for each data point. This is commonly used in\n * scatterplot visualizations. The mark type of this layer is ```point```.\n *\n * @public\n *\n * @class\n * @module PointLayer\n * @extends BaseLayer\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 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 static formalName () {\n return 'point';\n }\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, config = {}) {\n let points = [];\n const encoding = this.config().encoding;\n const axes = this.axes();\n const {\n x,\n y\n } = encoding;\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 measurement = this.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const stroke = encoding.stroke.value;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const size = sizeAxis.getSize(d.size);\n const shape = shapeAxis.getShape(d.shape);\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 let color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color,\n shape,\n size,\n data: d\n },\n data: d\n }, i, data, this);\n color = resolvedEncodings.color;\n\n const style = {\n fill: color,\n stroke\n };\n const pos = {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: pos,\n update: pos,\n shape: resolvedEncodings.shape,\n size: Math.abs(resolvedEncodings.size),\n meta: getColorMetaInf(style, colorAxis),\n style,\n source: d.source,\n rowId: d.rowId\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._transformedData.map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._normalizedData;\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 this._graphicElems = {};\n\n const schema = this.data().getSchema();\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 layer: this,\n container: group.node(),\n points,\n interpolate: config.interpolate,\n className: seriesClassName,\n transition,\n keyFn: v => getMarkId(v.source, schema)\n });\n }\n }, data => data[0].rowId);\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 [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, 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 { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\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 = (layer, elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n\n const selTransition = disabled ? selection :\n selection.transition()\n .duration(duration)\n .ease(easeFns[effect])\n .on('end', layer.registerAnimationDoneHook());\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 { layer, points, container, keyFn } = params;\n const graphicElems = layer._graphicElems;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) {\n graphicElems[d.rowId] = elem;\n transitionBars(layer, elem, d, i, params);\n }\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 { MeasureSubtype, DimensionSubtype } from 'muze-utils';\nimport { STACK } from '../../enums/constants';\nimport { positionPoints, getIndividualClassName, getColorMetaInf, resolveEncodingValues } from '../../helpers';\n\nconst positionRetriever = {\n x: (xPx, isNegativeVal, barBasePos) => (isNegativeVal ? [xPx, barBasePos] : [barBasePos, xPx]),\n y: (yPx, isNegativeVal, barBasePos) => (isNegativeVal ? [barBasePos, yPx] : [yPx, barBasePos])\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n *\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 === MeasureSubtype.CONTINUOUS || 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 minDomVal = axis.domain()[0];\n const barBasePos = minDomVal < 0 ? axis.getScaleValue(0) : axis.getScaleValue(minDomVal);\n pos = axis.getScaleValue(data[type]);\n let endPos = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n const isNegativeVal = data[type] < 0;\n if (transformType !== STACK) {\n [pos, endPos] = positionRetriever[type](pos, isNegativeVal, barBasePos);\n }\n space = Math.abs(pos - endPos);\n enter = barBasePos;\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 *\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 sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context.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\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\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 let color = colorAxis.getColor(d.color);\n\n const update = dimensions.update;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: update.x,\n y: update.y,\n width: update.width,\n height: update.height,\n color\n },\n data: d\n }, i, data, context);\n color = resolvedEncodings.color;\n const { x, y, width, height } = resolvedEncodings;\n const style = {\n fill: color\n };\n\n if (!isNaN(x) && !isNaN(y) && d.rowId !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update: {\n x,\n y,\n width,\n height\n },\n source: d.source,\n rowId: d.rowId,\n style,\n meta: getColorMetaInf(style, colorAxis)\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 getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n Scales,\n getNearestValue,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getPlotMeasurement, getValidTransformForAggFn } 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 rectangle marks. The mark type of this layer is ```bar```. This layer can be used\n * to create stacked or grouped bars, range bars, heatmap plots and also reference bands by using\n * the encoding properties.\n *\n * @public\n *\n * @class\n * @module BarLayer\n * @extends BaseLayer\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 *\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n *\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 *\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 *\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 && getObjProp(domain[d], 'length')) {\n if (encodingFieldInf[`${d}0Field`]) {\n domain[d] = domain[d].sort((a, b) => a - b);\n } else {\n domain[d][0] = Math.min(domain[d][0], 0);\n domain[d][1] = Math.max(0, domain[d][1]);\n }\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 normalizedDataArr = this._normalizedData;\n const transformedData = this._transformedData;\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 this._graphicElems = {};\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 layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d.source[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n *\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 resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\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 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 === MeasureSubtype.CONTINUOUS) {\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 value = getNearestValue(filterData, value);\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.source;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound.rowId);\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 hasPlotSpan () {\n return true;\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 interpolate: 'linear',\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n radius: {},\n radius0: {},\n angle: {},\n angle0: {},\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\n","import { selectElement, Symbols, pathInterpolators } from 'muze-utils';\n\nconst line = Symbols.line;\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, interpolate, layer } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n const graphicElems = layer._graphicElems;\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 graphicElems[d.rowId] = selection;\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 curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(e => e[0])\n .y(e => e[1]);\n d.className && selection.classed(d.className, true);\n selection.attr('d', linepath([[update.x, update.y], [x0, y0]]));\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 { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, positionPoints, getIndividualClassName,\n getColorMetaInf, resolveEncodingValues, toCartesianCoordinates } from '../../helpers';\n\nconst pointTranslators = {\n polar: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { radius: radiusAxis, angle: angleAxis, angle0: angle0Axis } = axes;\n const measurement = layerInst.measurement();\n\n const colorAxis = axes.color;\n const angleV = {};\n const angle0V = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const color = colorAxis.getColor(d.color);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const angles0 = angle0Axis.getScaleValue(d.angle0);\n !angle0V[d.angle0] && (angle0V[d.angle0] = 0);\n const { startAngle: startAngle0, endAngle: endAngle0 } = angles0[angle0V[d.angle0]++];\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angle = (startAngle + endAngle) / 2;\n const angle0 = (startAngle0 + endAngle0) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n radius,\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color,\n angle,\n angle0,\n startAngle,\n endAngle,\n startAngle0,\n endAngle0\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedVal.color\n };\n\n const point = {\n enter: {},\n update: {\n radius: resolvedVal.radius,\n radius0: resolvedVal.radius0,\n angle: resolvedVal.angle,\n angle0: resolvedVal.angle0\n },\n style,\n source: d.source,\n rowId: d.rowId,\n meta: getColorMetaInf(style, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n points = toCartesianCoordinates(positionPoints(layerInst, points), measurement, true);\n return points;\n },\n cartesian: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = layerInst.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 measurement = layerInst.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.source;\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 color = colorAxis.getColor(d.color);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedEncodings.color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y,\n x0: resolvedEncodings.x0,\n y0: resolvedEncodings.y0\n },\n style,\n source: row,\n rowId: d.rowId,\n meta: getColorMetaInf(style, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @staticg\n *\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n *\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, config) {\n return pointTranslators[this.coord()](data, config, this);\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","export 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 { 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. It also registers the definition of composite layers.\n *\n * @public\n *\n * @module LayerFactory\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, ...params) => {\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(...params);\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n getLayerClass: mark => factoryObj._layerRegistry[mark],\n /**\n * Registers a new composite layer definition in the layer factory.\n *\n * @public\n *\n * @param {string} layerType Mark type of the new composite layer.\n * @param {Array} layerDefs Layer definitions of the composite layer.\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 layerFactory from './layer-factory';\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 LAYER_TYPES from './enums/layer-types';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [LAYER_TYPES.AREA_LAYER]: AreaLayer,\n [LAYER_TYPES.ARC_LAYER]: ArcLayer,\n [LAYER_TYPES.LINE_LAYER]: LineLayer,\n [LAYER_TYPES.TEXT_LAYER]: TextLayer,\n [LAYER_TYPES.POINT_LAYER]: PointLayer,\n [LAYER_TYPES.TICK_LAYER]: TickLayer,\n [LAYER_TYPES.BAR_LAYER]: BarLayer,\n [LAYER_TYPES.BASE_LAYER]: BaseLayer\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\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 * @module\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 { 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","import {\n FieldType,\n getDependencyOrder,\n getObjProp,\n defaultValue,\n objectIterator,\n unionDomain,\n makeElement,\n DimensionSubtype,\n toArray,\n MeasureSubtype,\n getNearestValue\n} from 'muze-utils';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\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 (getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION && measures.length) {\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, namespaces) => {\n let instances = existingLayer;\n const dependencies = context._dependencies;\n const metaInf = context.metaInf();\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n toArray(instances).forEach((inst, i) => {\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: namespaces[i],\n parentNamespace: metaInf.namespace\n })\n .dependencies(dependencies)\n .store(context.store());\n });\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.coord(context.coord());\n instance.config(def);\n instance.valueParser(context.valueParser());\n instance.dataProps({\n timeDiffs: context._timeDiffs\n });\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 sanitizeLayerDef = (layerDefs) => {\n const sanitizedDefs = [];\n layerDefs.forEach((layerDef, i) => {\n const def = layerDef.def;\n const mark = layerDef.mark;\n if (!def) {\n const sConf = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n if (!sConf.name) {\n sConf.name = `${mark}-${i}`;\n }\n sanitizedDefs.push({\n mark: layerDef.mark,\n def: sConf\n });\n } else {\n if (!def.name) {\n def.name = `${mark}-${i}`;\n }\n sanitizedDefs.push(layerDef);\n }\n });\n return sanitizedDefs;\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) :\n (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 const axisArr = axes[key] || [];\n const axisIndex = axisInf[key] >= 0 ? axisInf[key] : axisArr.length - 1;\n axes[key] && (axesObj[key] = defaultValue(axes[key][axisIndex]));\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nconst { X, Y, RADIUS, ANGLE, ANGLE0, RADIUS0 } = ENCODING;\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, ANGLE, ANGLE0, RADIUS].forEach((type) => {\n let index;\n const specificField = getObjProp(encoding, type, 'field');\n const encodingField = type === RADIUS ? defaultValue(specificField, getObjProp(encoding, RADIUS0, 'field'))\n : getObjProp(encoding, type, 'field');\n const field = defaultValue(getObjProp(axis, type), encodingField);\n if (fields[type] && fields[type].length) {\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\nconst getValidDomain = (domain, domain1, encodingType, fieldType) => {\n if (encodingType === ANGLE || encodingType === ANGLE0) {\n return domain.concat(domain1.filter(d => domain.indexOf(d) === -1));\n }\n return unionDomain([domain, domain1], fieldType);\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 domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const field = getObjProp(axisFields, encodingType, axisIndex);\n !fieldDomain[encodingType] && (fieldDomain[encodingType] = {});\n const encodingDomain = fieldDomain[encodingType];\n if (field) {\n const fieldStr = `${field}`;\n encodingDomain[fieldStr] = encodingDomain[fieldStr] || [];\n encodingDomain[fieldStr] = getValidDomain(encodingDomain[fieldStr],\n domain[1], encodingType, fieldsConfig[field.getMembers()[0]].def.subtype);\n }\n return fieldDomain;\n }, domains);\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 const layerDepOrder = getDependencyOrder(context._layerDepOrder);\n const groups = {};\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n groups[layer.alias()] = {\n group,\n layer\n };\n }\n });\n\n const layerSeq = layerDepOrder.map(name => groups[name]);\n layerSeq.forEach((o) => {\n const layer = o.layer;\n const group = o.group;\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context._timeDiffs\n });\n layer.config().render !== false && layer.mount(group.node());\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].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\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 !== MeasureSubtype.CONTINUOUS && yFieldType !== MeasureSubtype.CONTINUOUS)) {\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 = getNearestValue(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 createRenderPromise = (unit) => {\n const renderedPromise = unit._renderedPromise;\n renderedPromise.then(() => {\n unit._renderedPromise = new Promise((resolve) => {\n unit._renderedResolve = resolve;\n });\n createRenderPromise(unit);\n });\n};\n\nexport const getRadiusRange = (width, height, config = {}) => {\n const {\n innerRadius,\n outerRadius\n } = config;\n\n return [innerRadius || 0, outerRadius || Math.min(height,\n width) / 2];\n};\n\nexport const setAxisRange = (context) => {\n const axes = context.axes();\n const { radius: radiusAxes } = axes;\n if (radiusAxes) {\n radiusAxes.forEach((axis) => {\n axis.range(getRadiusRange(context.width(), context.height()));\n });\n }\n};\n\nexport const isXandYMeasures = (context) => {\n const { x: xFields, y: yFields } = context.fields();\n const [xMeasures, yMeasures] = [xFields, yFields].map(fields => fields\n .every(field => field.type() === FieldType.MEASURE));\n return xMeasures && yMeasures;\n};\n\nconst getKey = (arr, row) => {\n let key = row[arr[0]];\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${row[arr[i]]}`;\n }\n return key;\n};\n\nexport const getValuesMap = (model, context) => {\n const valuesMap = {};\n const { data: dataArr, schema, uids } = model.getData();\n const fieldsConfig = model.getFieldsConfig();\n const fieldIndices = isXandYMeasures(context) ? schema.map((d, i) => i) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldsConfig[d].index);\n dataArr.forEach((row, i) => {\n const key = getKey(fieldIndices, row);\n valuesMap[key] = uids[i];\n });\n return valuesMap;\n};\n\nexport const getSelectionRejectionModel = (model, propModel, measures, propValuesMap) => {\n let rejectionModel;\n const { data, schema } = propModel.getData();\n const entryRowIds = [];\n const exitRowIds = [];\n\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n const rowIdsObj = {};\n const filteredSchema = measures ? schema.map((d, idx) => idx) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldMap[d].index);\n data.forEach((row) => {\n const key = getKey(filteredSchema, row);\n const id = propValuesMap[key];\n if (key in propValuesMap) {\n entryRowIds.push(id);\n rowIdsObj[id] = 1;\n }\n });\n rejectionModel = model.select((fields, i) => {\n if (!rowIdsObj[i]) {\n exitRowIds.push(i);\n return true;\n }\n return false;\n }, {\n saveChild: false\n });\n } else {\n rejectionModel = propModel;\n }\n\n return {\n model: [propModel, rejectionModel],\n entryRowIds,\n exitRowIds\n };\n};\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRID_LINE_PARENT_GROUP_CLASS = 'grid-lines';\nexport const GRID_BAND_PARENT_GROUP_CLASS = 'grid-bands';\nexport const GRID_PARENT_GROUP = 'grid-parent-group';\nexport const BAND = 'band';\nexport const TICK = 'tick';\nexport const GRID_BAND = 'gridBands';\nexport const GRID_LINE = 'gridLines';\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","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel, createSelection } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer';\nimport {\n GRID_BAND,\n GRID_LINE,\n GRID_BAND_PARENT_GROUP_CLASS,\n GRID_LINE_PARENT_GROUP_CLASS,\n GRID_PARENT_GROUP\n} from '../enums/constants';\n\nconst { BAR_LAYER, TICK_LAYER } = LAYER_TYPES;\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 === GRID_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 === GRID_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 === GRID_BAND) {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n const { color, shape, size } = context.axes();\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n name: orientation,\n calculateDomain: false,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== GRID_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 === GRID_BAND ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis,\n color: color[0],\n shape: shape[0],\n size: size[0]\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 axes = context.axes();\n if (!axes[axisType]) {\n return null;\n }\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, axes[axisType][0]));\n\n return show ? getLayerDefinition(context, axes, type, axisType) : null;\n}).filter(d => d !== null);\n\nconst dimensionSubTypes = Object.values(DimensionSubtype).reduce((acc, v) => {\n acc[v] = 1;\n return acc;\n}, {});\nconst getValidSubtype = subtype => (!dimensionSubTypes[subtype] ? DimensionSubtype.CATEGORICAL : subtype);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n\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: getValidSubtype(subtype)\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype: getValidSubtype(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) => {\n const vuConf = context.config();\n const metaInf = context.metaInf();\n const store = context.store();\n const timeDiffs = context._timeDiffs;\n [GRID_BAND, GRID_LINE].forEach((type) => {\n let mark;\n let config;\n if (type === GRID_BAND) {\n mark = BAR_LAYER;\n config = vuConf.gridBands;\n } else {\n mark = TICK_LAYER;\n config = vuConf.gridLines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n const sel = `_${type}Selection`;\n context[sel] = createSelection(context[sel], (atomicDef) => {\n const inst = layerFactory.getLayerInstance({ mark });\n inst.dependencies(context._dependencies);\n const name = atomicDef.definition.name;\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: `${metaInf.namespace}${type}${name}`,\n parentNamespace: metaInf.namespace\n })\n .store(store);\n return inst;\n }, definitions, atomicDef => atomicDef.definition.name);\n context[sel].each((layer, atomicDef) => {\n const definition = atomicDef.definition;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n const axesObj = atomicDef.axes;\n layer.config(sConf)\n .dataProps({\n timeDiffs\n })\n .axes(axesObj);\n });\n context[`_${type}`] = context[sel].getObjects();\n });\n};\n\nexport const attachDataToGridLineLayers = (context) => {\n const axes = context.axes();\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n if (gridLines.length || gridBands.length) {\n const gridLayerData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n [].concat(...gridBands, ...gridLines).forEach((inst) => {\n inst.data(inst.axes().x ? gridLayerData.x : gridLayerData.y);\n });\n }\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const config = context.config();\n const classPrefix = config.classPrefix;\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n const gridLineParentGroup = makeElement(container, 'g', [1], `${classPrefix}-${GRID_PARENT_GROUP}`);\n\n [[gridLines, `${classPrefix}-${GRID_LINE_PARENT_GROUP_CLASS}`],\n [gridBands, `${classPrefix}-${GRID_BAND_PARENT_GROUP_CLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(gridLineParentGroup, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.dataProps({ timeDiffs: context._timeDiffs })\n .measurement(measurement)\n .mount(group.node());\n }\n });\n });\n};\n","import { STATE_NAMESPACES, temporalFields, getObjProp, defaultValue } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers\n} from './helper';\n\nimport { createGridLineLayer } from './helper/grid-lines';\n\nconst removeExitLayers = (layerDefs, context) => {\n const layersMap = context._layersMap;\n const markSet = {};\n layerDefs.forEach((layerDef, i) => {\n const id = defaultValue(layerDef.name, `${layerDef.mark}-${i}`);\n markSet[id] = true;\n });\n\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};\n\nexport const calculateDomainListener = (context) => {\n const { namespace } = context.metaInf();\n const domain = unionDomainFromLayers(context.layers(), context.fields(), context._layerAxisIndex,\n context.data().getFieldsConfig());\n context.store().commit(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, domain, namespace);\n};\n\nexport const listenerMap = [\n {\n type: 'registerImmediateListener',\n props: [PROPS.LAYERDEFS],\n listener: (context, [, layerDefs]) => {\n const fieldsVal = context.fields();\n if (layerDefs && fieldsVal) {\n removeExitLayers(layerDefs, context);\n const queuedLayerDefs = context._queuedLayerDefs;\n let layerDefArr = layerDefs;\n queuedLayerDefs.forEach((defFn) => {\n layerDefArr = [...layerDefArr, ...defFn(layerDefs)];\n });\n context.addLayer(layerDefArr);\n const adjustRange = context.layers().some(inst => inst.hasPlotSpan());\n ['x', 'y'].forEach((type) => {\n const axisArr = defaultValue(getObjProp(context.axes(), type), []);\n axisArr.forEach((axis) => {\n axis.config({\n adjustRange\n });\n });\n });\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'initialized',\n formalName: 'layer'\n });\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA],\n listener: (context, [, dataModel]) => {\n if (dataModel) {\n const axesObj = context.axes();\n const timeDiffs = {};\n const timeDiffsByField = {};\n\n Object.entries(temporalFields(dataModel)).forEach(([fieldName, fieldObj]) => {\n timeDiffsByField[fieldName] = fieldObj.minimumConsecutiveDifference();\n });\n\n Object.entries(context.fields()).forEach(([type, [field]]) => {\n if (field) {\n const timeDiff = timeDiffsByField[`${field}`];\n if (timeDiff) {\n timeDiffs[type] = timeDiff;\n axesObj[type].forEach(axis => axis.minDiff(timeDiff));\n }\n }\n });\n\n context._timeDiffsByField = timeDiffsByField;\n context._timeDiffs = timeDiffs;\n const firebolt = context.firebolt();\n const originalData = context.cachedData()[0];\n firebolt.createSelectionSet(context.data().getUids());\n firebolt.attachPropagationListener(originalData);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: (context, [, config]) => {\n if (config) {\n context.firebolt().config(config.interaction);\n createGridLineLayer(context);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA, PROPS.TRANSFORM],\n listener: (context, [, dataModel], [, transform]) => {\n if (dataModel) {\n const dataModels = transformDataModels(transform, dataModel);\n const metaInf = context.metaInf();\n context.store().commit(`${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${PROPS.TRANSFORMEDDATA}`,\n dataModels, metaInf.namespace);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.TRANSFORMEDDATA, PROPS.LAYERS],\n listener: (context, [, transformedData], [, layers]) => {\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = context.axes();\n const dataModel = context.data();\n if (transformedData && layers && axesVal && layerAxisIndexVal) {\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModel, transformedData);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModel.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n }\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 TRANSFORM = 'transform';\nexport const TRANSFORMEDDATA = 'transformedData';\nexport const DATADOMAIN = 'dataDomain';\nexport const FIELDS = 'fields';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\nexport const LAYERS = 'layers';\nexport const DOMAIN = 'domain';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [CACHED_DATA]: {},\n detailFields: {},\n axes: {\n defaultValue: {\n x: [],\n y: []\n }\n },\n fields: {\n defaultValue: {\n x: [],\n y: []\n },\n sanitization: (context, value) => mergeRecursive({\n x: [],\n y: []\n }, value)\n },\n metaInf: {},\n registry: {},\n parentContainerInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {}\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 derivedSchema = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION,\n subtype: d.subtype()\n }));\n const dataAtFirstPos = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n derivedSchema.forEach((obj, i) => {\n tuple[obj.name] = dataAtFirstPos[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...derivedSchema]);\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, intersect } from 'muze-utils';\nimport { Firebolt, SIDE_EFFECTS } from '@chartshq/muze-firebolt';\nimport { isXandYMeasures, getSelectionRejectionModel } from '../helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\nconst sideEffectPolicy = (propPayload, context, propagationInf) => {\n const { sourceIdentifiers, propagationData } = propagationInf;\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig).filter(field =>\n fieldsConfig[field].def.type !== FieldType.MEASURE);\n const propFields = Object.keys(propagationData[0].getFieldsConfig());\n const hasCommonCanvas = propPayload.sourceCanvas === context.parentAlias();\n return intersect(sourceIdentifierFields, propFields).length || hasCommonCanvas;\n};\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 const {\n TOOLTIP,\n HIGHLIGHTER,\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS\n } = SIDE_EFFECTS;\n\n const disabledSideEffects = [TOOLTIP, HIGHLIGHTER, ANCHORS, BRUSH_ANCHORS, PERSISTENT_ANCHORS];\n disabledSideEffects.forEach((sideEffect) => {\n this.changeSideEffectStateOnPropagation(sideEffect, sideEffectPolicy, 'sourceTargetPolicy');\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 sideEffectCheckers = Object.values(sourceSideEffects[se.name || se] || {});\n const { sourceIdentifiers, data: propagationData } = propagationInf;\n return sideEffectCheckers.length ? sideEffectCheckers.every(checker =>\n checker(propagationInf.propPayload, context, {\n sourceIdentifiers,\n propagationData\n })) : 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 isMutableAction = false;\n const context = this.context;\n if (!context.mount()) {\n return;\n }\n const {\n model: propagationData,\n entryRowIds,\n exitRowIds\n } = getSelectionRejectionModel(context.data(), data, isXandYMeasures(context), context._cachedValuesMap());\n const {\n enabled: enabledFn,\n sourceIdentifiers,\n action,\n payload: propPayload\n } = config;\n\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n const payload = payloadFn(context, propagationData, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFns = Object.values(sourceBehaviours[action] || sourceBehaviours['*'] || {});\n let enabled = filterFns.every(fn => fn(propPayload || {}, context, {\n sourceIdentifiers,\n propagationData\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: propagationData,\n entryRowIds,\n exitRowIds,\n propPayload,\n sourceIdentifiers,\n persistent: false,\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 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 { SpawnableSideEffect } from '@chartshq/muze-firebolt';\n\nexport const initSideEffects = (sideEffects, firebolt) => {\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = firebolt.context;\n return context.getDrawingContext();\n });\n sideEffects[key].valueParser(firebolt.context.valueParser());\n }\n }\n};\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","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 minOuterRadius: 10,\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","import { mergeRecursive, DataModel } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props';\nimport { sanitizeLayerDef, getValuesMap } from './helper';\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 meta: {\n preset: layerDef => sanitizeLayerDef(layerDef)\n }\n },\n [TRANSFORM]: {\n value: null\n },\n [LAYERS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n preset: (data, context) => {\n context._cachedValuesMap = ((model) => {\n let valuesMap = null;\n return () => {\n if (valuesMap) {\n return valuesMap;\n }\n valuesMap = getValuesMap(model, context);\n return valuesMap;\n };\n })(data);\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.cachedData()[0];\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n },\n [TRANSFORMEDDATA]: {\n value: null\n },\n width: {\n value: null\n },\n height: {\n value: null\n }\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n makeElement,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n CommonProps,\n toArray,\n STATE_NAMESPACES\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 getLayerAxisIndex,\n sanitizeLayerDef,\n createSideEffectGroup,\n resolveEncodingTransform,\n createRenderPromise,\n setAxisRange\n} from './helper';\nimport { renderGridLineLayers, attachDataToGridLineLayers } from './helper/grid-lines';\nimport { calculateDomainListener, listenerMap } from './listener-map';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport { initSideEffects, dispatchQueuedSideEffects, clearActionHistory } from './firebolt/helper';\nimport './styles.scss';\nimport localOptions from './local-options';\nimport { WIDTH, HEIGHT } from './enums/reactive-props';\n\nconst FORMAL_NAME = 'unit';\nconst unitNs = [STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * Visual Unit is hierarchical component created by {@link VisualGroup}. This component accepts layer definitions\n * and creates concrete layer instances from them, binds data and attaches axis to them. It also retreives the domain\n * from the layers and unions them and sets them on corresponding axis instances. This also creates the parent svg\n * groups for all the layers and delegates the rendering to all the layers.\n *\n * @public\n * @module VisualUnit\n * @class\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit.\n *\n * @param {Object} registry Component registry\n * @param {Object} dependencies Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n createRenderPromise(this);\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridLinesSelection = null;\n this._gridBandsSelection = null;\n this._gridLines = [];\n this._gridBands = [];\n this._layerAxisIndex = {};\n this._queuedLayerDefs = [];\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.registry(registry);\n this.cachedData([]);\n }\n\n static formalName () {\n return FORMAL_NAME;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys((localOptions)).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getQualifiedStateProps () {\n const unitState = VisualUnit.getState();\n return unitState.map((state, i) => Object.keys(state).map(prop => `${unitNs[i]}.${prop}`));\n }\n\n static getListeners () {\n return {\n store: [...listenerMap.map((d) => {\n const o = Object.assign({}, d);\n const localNs = unitNs[1];\n o.props = o.props.map(prop => `${localNs}.${prop}`);\n return o;\n }), {\n type: 'registerImmediateListener',\n props: [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`],\n listener: calculateDomainListener\n }, {\n type: 'registerImmediateListener',\n props: [`${unitNs[1]}.${WIDTH}`,\n `${unitNs[1]}.${HEIGHT}`,\n ...['x', 'y'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context, [, width], [, height]) => {\n if (width && height) {\n attachDataToGridLineLayers(context);\n }\n },\n subNamespace: (context) => {\n const { rowIndex, colIndex, namespace } = context.metaInf();\n return {\n [`${unitNs[1]}.${WIDTH}`]: namespace,\n [`${unitNs[1]}.${HEIGHT}`]: namespace,\n [`${groupNs}.domain.x`]: `${colIndex}0`,\n [`${groupNs}.domain.y`]: `${rowIndex}0`\n };\n }\n }],\n throwback: [\n {\n type: 'registerChangeListener',\n props: [CommonProps.ON_LAYER_DRAW],\n listener: (context, [, drawn]) => {\n if (drawn) {\n const firebolt = context.firebolt();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n context._renderedResolve();\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'drawn',\n formalName: 'layer'\n });\n }\n }\n ]\n };\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { throwback, fireboltDeps } = this._dependencies;\n const { namespace } = this.metaInf();\n\n store.addSubNamespace(namespace, FORMAL_NAME, this);\n throwback.addSubNamespace(namespace, FORMAL_NAME, this);\n transactor(this, localOptions, store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}`\n });\n\n this.firebolt(new UnitFireBolt(this, {\n physical: Object.assign({}, physicalActions, fireboltDeps.physicalActions),\n behavioural: Object.assign({}, behaviouralActions, fireboltDeps.behaviouralActions),\n physicalBehaviouralMap: actionBehaviourMap\n }, Object.assign({}, sideEffects, fireboltDeps.sideEffects), behaviourEffectMap));\n return this;\n }\n return this._store;\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 * Returns the instance of firebolt associated with this visual unit. Firebolt dispatches the behavioural actions\n * when any physical action happens on the elements of visual unit.\n *\n * @public\n *\n * @return {Firebolt} Instance of firebolt.\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 * Returns the unique id of this visual unit.\n *\n * @public\n * @return {string} Unique identifier.\n */\n id () {\n return this._id;\n }\n\n lockModel () {\n this.store().lockModel();\n return this;\n }\n\n unlockModel () {\n this.store().unlockModel();\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 *\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\n setAxisRange(this);\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n const firebolt = this.firebolt();\n initSideEffects(firebolt.sideEffects(), firebolt);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Caches all the datamodels in an array from the next `data()` call on visual unit until `clearCaching()` or\n * `resetData()` is called on it.\n *\n * @public\n * @return {VisualUnit} Instance of visual unit.\n */\n\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n * Clears all the previous cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n * Returns the drawing information from visual unit.Drawing context contains the dimensions of unit and the svg\n * container of the visual unit.\n *\n * @public\n *\n * @return {Object} Drawing information.\n * ```\n * {\n * htmlContainer: // Html container of svg container of the visual unit\n * svgContainer: // Root svg container\n * width: // Width of the visual unit\n * height: // Height of the visual unit\n * sideEffectGroup: // Svg group for drawing side effect elements.\n * parentContainer: // Parent html container of the visual unit.\n * xOffset: // x offset space from the starting x position of the container,\n * yOffset: // y offset space from the starting y position of the container\n * }\n * ```\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n const { el, dimensions } = this.parentContainerInf();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: el,\n parentContainerDimensions: dimensions,\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n *\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.axes().map(axis => axis.serialize())\n };\n }\n\n mount (...mount) {\n if (mount.length) {\n this._mount = mount[0];\n this.render(mount[0]);\n this.firebolt().mapActionsAndBehaviour();\n return this;\n }\n return this._mount;\n }\n\n /**\n * Adds a new layer to the visual unit. It takes a layer definition and creates layer instances from them. It does\n * not render the layers. It returns the layer instances in an array. If the layer definition is a composite layer,\n * then multiple layer instances will be returned in the array.\n *\n * To add a layer in the unit,\n * ```\n * unit.addLayer({\n * name: 'bullet',\n * mark: 'bar',\n * encoding: {\n * x: 'Year',\n * y: 'Acceleration',\n * color: 'Origin'\n * }\n * });\n * ```\n * @public\n * @param {Object} layerDef Definition of new layer.\n *\n * @return {Array} Array of layer instances.\n */\n addLayer (layerDefinition) {\n if (layerDefinition instanceof Function) {\n this._queuedLayerDefs.push(layerDefinition);\n return this;\n }\n const layerDefinitions = sanitizeLayerDef(toArray(layerDefinition));\n\n const layersMap = this._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: this\n }\n };\n let layerIndex = 0;\n const metaInf = this.metaInf();\n const layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef) => {\n const definition = layerDef.def;\n const markId = definition.name;\n const defArr = toArray(definition);\n const namespaces = [];\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n const namespace = `${metaInf.namespace}-${def.mark}-${getUniqueId()}`;\n namespaces.push(namespace);\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(this, definition, layersMap[markId], namespaces);\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\n store.unit = this;\n const layerdeps = {};\n const layersArr = [].concat(...Object.values(this._layersMap));\n layersArr.forEach((layer) => {\n const alias = layer.alias();\n store.layers[alias] = layer;\n layerdeps[alias] = [];\n });\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n this._layerDepOrder = layerdeps;\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, getLayerAxisIndex(layers, this.fields()));\n this.layers(layersArr);\n return layers;\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n remove () {\n const formalName = this.constructor.formalName();\n const { lifeCycleManager, throwback } = this._dependencies;\n const { namespace } = this.metaInf();\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n const layers = this.layers();\n this.store().removeSubNamespace(namespace, formalName);\n throwback.removeSubNamespace(namespace, FORMAL_NAME);\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: layers, action: 'beforeremove', formalName: 'layer' });\n [...layers, ...this._gridLines, ...this._gridBands].forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: 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 *\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 * Resets the data of visual unit to original data model. It also clears the cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n *\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 getDataDomain () {\n return this.store().get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`, this.metaInf().namespace);\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n * Returns an array of layer instances which matches the supplied mark type.\n *\n * @public\n *\n * @param {string} type Mark type of layer.\n *\n * @return {Array} Array of layer instances.\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n * Returns the layer instance which matches the supplied layer name. If no layer is found, then it returns\n * undefined.\n *\n * @public\n * @param {string} name Name of layer.\n *\n * @return {VisualUnit} Layer instance.\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n * Returns the point located nearest to the supplied x and y position. It returns the unique identifiers of the\n * point. This function also accepts an additional configuration `getAllPoints` inside `config` object in the third\n * argument which if set to true, then it returns the identifiers of all the points which falls on the nearest\n * x value or y value if any one of the field is a dimension. Additionally, a target property is also returned\n * which contains the identifier of the nearest point. If no nearest point is found, then it returns identifier\n * as null.\n *\n * @public\n *\n * @param {number} x X Position of the point from where nearest point is to be found.\n * @param {number} y Y Position of the point from where nearest point is to be found.\n * @param {Object} config Additional configuration options.\n * @param {boolean} config.getAllPoints If true, then returns all the points nearest to the x value or y value if\n * it is dimension.\n * @param {Object} config.data Data associated with the nearest point.\n * @return {Object} Nearest point information\n * ```\n * {\n * id: [['Origin'], ['USA'], ['Japan']], // Identifiers of all the points closest to the x value.\n * target: [['Origin'], ['Japan']] // Identifier of the nearest point.\n * }\n * ```\n */\n getNearestPoint (x, y, config) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && config.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, config);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, config) || { 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 * Get the information of all the marks such as x, y position and size from supplied identifiers. It\n * returns an array of points whose data matches the given identifiers.\n *\n * @public\n *\n * @param {Array|Object} identifiers Field names and their corresponding values.\n * ```\n * identifiers can be given in an array of array,\n * ['Origin', 'Name'], // Names of the fields supplied in first array\n * ['USA', 'ford'], // Data values of each field supplied in rest of the arrays.\n * ['Japan', 'ford']\n * or in an object,\n * {\n * Origin: ['USA']\n * }\n * ```\n * @param {Object} config Optional configurations which decides which information of the mark will\n * be retrieved.\n * @param {boolean} [config.getAllAttrs = false] If true, then returns all the information of each mark.\n * @param {boolean} [config.getBBox = false] If true, then returns the bounding box of each mark.\n *\n * @return {Array} Array of objects containing the information of each point.\n * ```\n * By default, the method returns the array of points in this structure,\n * [\n * {\n * x: 20,\n * y: 100,\n * width: 200,\n * height: 100\n * }\n * ]\n * If 'config.getAllAttrs' is true, then it returns all the information of each mark,\n * [\n * // Positions of mark on initial state of transition.\n * enter: {\n * x: 0,\n * y: 0\n * },\n * // Final positions of the mark\n * update: {\n * x: 20,\n * y: 10\n * },\n * style: // css styles of each mark\n * source: [200, 'USA'] // Row information of each mark\n * id: 20 // Row id of each mark\n * ]\n * ```\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 * Removes the layer instance which matches the supplied layer name.\n *\n * @public\n * @param {string} name Name of layer\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n * Removes all the layer instances which matches the supplied mark type.\n *\n * @public\n * @param {string} type Mark type of layer.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n}\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 * This is a wrapper on top of multiple variables which are of same type but they are shown in the same axis.This is\n * required in case of range plots or ohlc plots where one plot is mapped to multiple measure fields. At that time,\n * we need to create a composed variable from multiple variables. This class just wraps them into one variable instance\n * and provides methods to get the type and other common functionalities which can be performed on a simple variable\n * instance.\n *\n * @public\n * @class ComposeVars\n */\nclass ComposedVars extends Variable {\n\n /**\n * Creates an instance of ComposeVars.\n *\n * @param {Array} vars Array of SimpleVars.\n */\n constructor (...vars) {\n super();\n this.vars(vars);\n }\n\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n * Get all the field names from composed variable instance.\n *\n * @public\n * @return {Array} Array of field names.\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n * Type of field associated with this composed variable.\n *\n * @return {string} Type of variable (Measure/Dimension).\n */\n type () {\n return this.vars()[0].type();\n }\n\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n * Returns the number formatter function of the variable.\n *\n * @return {Function} Number formatter function of the variable.\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n format (values) {\n return this.vars()[0].format(values);\n }\n\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.vars()[0]].def;\n }\n\n /**\n * Returns the subtype of the fields associated with this variable instance.\n *\n * @public\n * @return {string} Subtype of the variable.\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n * Returns the consecutive minimum difference of the field values.\n *\n * @public\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n\n /**\n * Returns the display name of the fields.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return this.vars().map(d => d.displayName()).join(',');\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter, retrieveFieldDisplayName, DimensionSubtype } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n * This is a wrapper on top of fields passed in rows or columns in canvas. This is used to get the type of field or\n * get min difference from the field values.\n *\n * @public\n * @class SimpleVariable\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n * Creates an instance of simple variable instance.\n *\n * @param {string} name Field name.\n */\n constructor (name) {\n super();\n this.oneVar(name);\n }\n\n /**\n * Gets the field name associated with this variable instance.\n *\n * @public\n * @return {string} Name of the field.\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n toString () {\n return this.oneVar();\n }\n\n /**\n * Gets the number formatter function of this variable.\n *\n * @public\n * @return {Function} Number formatter function.\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()];\n return formatter.numberFormat();\n } return val => val;\n }\n\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n * Returns a formatter function which transforms the input value to its original form.\n *\n * @public\n * @return {Function} Returns raw formatter function.\n */\n rawFormat () {\n if (this.subtype() === DimensionSubtype.TEMPORAL) {\n const dateFormat = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n return val => DateTimeFormatter.formatAs(val, dateFormat);\n }\n return val => val;\n }\n\n /**\n * Return the field names associated with this variable instance.\n *\n * @public\n * @return {Array} Array of fields.\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n * Returns the type of the variable. Whether it is measure or dimension.\n *\n * @public\n * @return {string} Type of variable.\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n * Returns the subtype of the variable. Subtype can be categorical or temporal. If no subtype is found, then it\n * returns the type of the variable.\n *\n * @public\n * @return {string} Subtype of variable.\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n * Returns the minimum consecutive difference between the data values of this variable.\n *\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].minimumConsecutiveDifference();\n }\n\n /**\n * Returns true if two variable instances are same.If both variable has the same field names, they are equal.\n *\n * @return {Boolean} Whether two variable instances are same.\n */\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n\n /**\n * Returns the display name of the field.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return retrieveFieldDisplayName(this.data(), this.oneVar());\n }\n\n /**\n * Returns the schema defination of the field.\n *\n * @return {Object} schema def\n */\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.oneVar()].def;\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 *\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 *\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 *\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 *\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 *\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 *\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 temporal: ScaleType.TIME,\n measure: ScaleType.LINEAR,\n continuous: ScaleType.LINEAR\n};\n","import { mergeRecursive, getObjProp } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { ENCODING } from '@chartshq/visual-layer';\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, COLOR, SHAPE, SIZE, ANGLE0 } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst getAxisConfig = (axisInfo, field, axesCreators, indices, facetFields) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const { rowIndex, columnIndex } = indices;\n const rawUserAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n\n // Change config object to a function if not already one\n const userAxisConfigFn = typeof rawUserAxisConfig !== 'function' ?\n () => rawUserAxisConfig : rawUserAxisConfig;\n const userAxisConfig = userAxisConfigFn(rowIndex, columnIndex, {\n axisFields: field.getMembers(),\n facetFields\n });\n\n // If current config does not specifes config for an axis, retain old config\n if (!userAxisConfig) {\n return {};\n }\n\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.displayName(),\n field: field.toString(),\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n showAxisName: true,\n show: true,\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 *\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\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 [min[0], max[0]],\n [min[1], max[1]]\n ];\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n *\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo, indices, facetFields) => {\n let axisKey;\n const { groupAxes, valueParser } = axesInfo;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n const commonAxisKey = getAxisKey(axisType, index);\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators, indices, facetFields);\n\n let axis;\n if (!map.has(axisKey)) {\n axis = createSimpleAxis(axisConfig, field, axesCreators);\n } else {\n axis = map.get(axisKey);\n axis._rotationLock = false;\n axis.config(axisConfig);\n }\n axis.valueParser(valueParser);\n currentAxes.push(axis);\n map.set(axisKey, axis);\n });\n\n if (currentAxes.length) {\n map.set(commonAxisKey, currentAxes);\n groupAxes.add(commonAxisKey);\n }\n\n return currentAxes;\n};\n\nexport const sanitizeIndividualLayerConfig = (encodingConfigs, def) => {\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\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 }\n });\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 *\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 *\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 *\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\nexport const resolveAxisConfig = (context, fieldInf, axisInfo) => {\n const { rowIndex, columnIndex, axesObj } = axisInfo;\n const { config, facetFields, resolver } = context;\n const resolverAxes = resolver.axes();\n const { RADIUS, ANGLE } = ENCODING;\n [RADIUS, ANGLE, ANGLE0].forEach((enc) => {\n const axesArr = resolverAxes[enc];\n if (!axesArr[rowIndex]) {\n axesArr[rowIndex] = [];\n }\n axesArr[rowIndex][columnIndex] = axesObj[enc];\n const axisConfig = getObjProp(config.axes, enc) || {};\n\n axesObj[enc].forEach((axis, i) => {\n let userConfig = axisConfig;\n if (axisConfig instanceof Function) {\n userConfig = axisConfig(rowIndex, columnIndex, {\n axisFields: [fieldInf[enc][i]],\n facetFields\n });\n }\n axis.config(userConfig);\n });\n });\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n unionDomain,\n COORD_TYPES,\n toArray,\n sortCategoricalField\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport {\n generateAxisFromMap,\n getDefaultMark,\n getIndex,\n getLayerConfFromFields,\n getAdjustedDomain,\n sanitizeIndividualLayerConfig\n} from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\nconst CARTESIAN = COORD_TYPES.CARTESIAN;\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n *\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\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 { resolver, facetFields, geomCell } = context;\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, {\n groupAxes: axis === X ? xAxes : yAxes,\n valueParser: resolver.valueParser()\n }, indices, facetFields);\n });\n geomCell.axes(geomCellAxes);\n return geomCellAxes;\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const resolver = context.resolver();\n const units = resolver.units();\n const domains = {\n 0: {},\n 1: {}\n };\n const config = context.config();\n const fieldsObj = {\n 0: {},\n 1: {}\n };\n\n for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) {\n const unitsArr = units[rIdx];\n for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) {\n const unit = unitsArr[cIdx];\n const axisFields = unit.fields();\n const encodingDomains = unit.getDataDomain();\n ['x', 'y'].forEach((axisType, axisTypeIndex) => {\n const fieldArr = axisFields[axisType];\n fieldArr.forEach((field, axisIndex) => {\n const key = !axisTypeIndex ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`;\n const dom = encodingDomains[axisType];\n const typeOfField = field.subtype();\n fieldsObj[axisTypeIndex][key] = field;\n\n if (dom && Object.keys(dom).length !== 0) {\n domains[axisTypeIndex][key] = unionDomain([(domains[axisTypeIndex] &&\n domains[axisTypeIndex][key]) || [], dom[`${field}`]], typeOfField);\n }\n });\n });\n }\n }\n\n const { x: xAxes, y: yAxes } = resolver.axes();\n store.lockModel();\n [xAxes, yAxes].forEach((axesArr, axisType) => {\n axesArr.forEach((axes, idx) => {\n let key;\n let domain = [];\n let adjustedDomain = [];\n const min = [];\n const max = [];\n const typeOfAxis = axes[0].constructor.type();\n\n if (axes.length > 1 && typeOfAxis === ScaleType.LINEAR && axes[0].config().alignZeroLine) {\n axes.forEach((axis, i) => {\n key = !axisType ? `0${idx}${i}` : `${idx}0${i}`;\n domain = domains[axisType][key];\n min[i] = domain[0];\n max[i] = domain[1];\n });\n adjustedDomain = getAdjustedDomain(max, min);\n } else if (typeOfAxis === ScaleType.BAND) {\n /* Sort categorical fields to ensure consistency across all rows\n only if sorted by user */\n key = !axisType ? `0${idx}0` : `${idx}00`;\n const currentFieldName = fieldsObj[axisType][key].oneVar();\n const sortingOrder = config.sort && config.sort[currentFieldName];\n\n if (sortingOrder) {\n domains[axisType][key].sort((a, b) => sortCategoricalField(sortingOrder, a, b));\n }\n }\n\n axes.forEach((axis, index) => {\n key = !axisType ? `0${idx}${index}` : `${idx}0${index}`;\n domain = adjustedDomain[index] || domains[axisType][key];\n\n domain && axis.domain(domain);\n const type = !axisType ? 'x' : 'y';\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}`, domain, `${idx}${index}`);\n });\n });\n });\n store.unlockModel();\n }\n\n /**\n *\n *\n * @param {*} fields\n *\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 *\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n *\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 sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\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 this.sanitizeLayerConfig(retinalConfig, layerConfig);\n }\n}\n","import { AngleAxis, RadiusAxis } from '@chartshq/muze-axis';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n GROUP_BY_FUNCTIONS,\n COORD_TYPES,\n toArray,\n getObjProp,\n defaultValue\n} from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { SIZE, MEASURE, ARC, COLOR } from '../enums/constants';\nimport { sanitizeIndividualLayerConfig, resolveAxisConfig } from './encoder-helper';\nimport { SimpleVariable } from '../variable';\n\nconst POLAR = COORD_TYPES.POLAR;\nconst { RADIUS, ANGLE, ANGLE0 } = ENCODING;\n\nconst axesCls = {\n [RADIUS]: RadiusAxis,\n [ANGLE]: AngleAxis,\n [ANGLE0]: AngleAxis\n};\n\nconst getSizeMultiplier = (sizeVal, sizeAxis) => {\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n return sizeMultiplier;\n};\n\nconst setRadiusFactor = (context) => {\n const data = context.data();\n const sizeField = context.retinalFields().size.field;\n const { radius, size } = context.axes();\n\n if (sizeField && radius && radius.length) {\n const sizeFieldIndex = data.getFieldsConfig()[sizeField].index;\n const sizeVal = data.getData().data.reduce((acc, val) => acc + val[sizeFieldIndex], 1);\n const sizeMultiplier = getSizeMultiplier(sizeVal, size[0]);\n radius.forEach(axis => axis.setRadiusFactor(sizeMultiplier));\n }\n};\n\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 *\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\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 const axesObj = {};\n const { geomCell, resolver } = context;\n const layers = resolver.matrixLayers();\n const resolverAxes = resolver.axes();\n const cellLayers = layers[rowIndex][columnIndex];\n const fields = {\n radius: {},\n angle: {},\n angle0: {}\n };\n\n cellLayers.forEach((layerConf) => {\n const def = layerConf.def;\n [ANGLE, ANGLE0, RADIUS].forEach((enc) => {\n const field = getObjProp(def.encoding, enc, 'field');\n field && (fields[enc][field] = 0);\n });\n });\n const fieldInf = {};\n const varInstances = {};\n\n for (const encType in fields) {\n fieldInf[encType] = Object.keys(fields[encType]);\n axesObj[encType] = [];\n varInstances[encType] = [];\n fieldInf[encType].forEach((field, i) => {\n varInstances[encType][i] = new SimpleVariable(field);\n axesObj[encType][i] = new axesCls[encType]();\n });\n axesObj[encType][axesObj[encType].length] = new axesCls[encType]();\n }\n resolveAxisConfig(context, fieldInf, {\n axesObj,\n rowIndex,\n columnIndex\n });\n geomCell.axes(axesObj)\n .fields(Object.assign({}, varInstances, geomCell.fields()));\n resolverAxes.pie = pieAxes;\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n *\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 unionUnitDomains (context) {\n const store = context.store();\n store.lockModel();\n const domainProps = {\n radius: [],\n angle: [],\n angle0: []\n };\n const axes = context.resolver().axes();\n context.matrixInstance().value.each((cell, rIdx, cIdx) => {\n const unit = cell.valueOf();\n const unitDomains = unit.getDataDomain();\n const fields = unit.fields();\n setRadiusFactor(unit);\n [RADIUS, ANGLE, ANGLE0].forEach((encType) => {\n const encodingFields = fields[encType];\n const domains = unitDomains[encType] || {};\n encodingFields.forEach((field, i) => {\n !domainProps[encType][rIdx] && (domainProps[encType][rIdx] = []);\n !domainProps[encType][rIdx][cIdx] && (domainProps[encType][rIdx][cIdx] = []);\n domainProps[encType][rIdx][cIdx][i] = domains[`${field}`] || [];\n });\n });\n });\n\n for (const key in domainProps) {\n const specificAxes = axes[key];\n specificAxes.forEach((axesArr, rIdx) => {\n axesArr.forEach((axisArr, cIdx) => {\n axisArr.forEach((axis, i) => {\n axis.domain(defaultValue(getObjProp(domainProps[key], rIdx, cIdx, i), []));\n\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${key}`, domainProps[key],\n `${rIdx}-${cIdx}`);\n });\n });\n });\n }\n store.unlockModel();\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n *\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.groupedModel;\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]: GROUP_BY_FUNCTIONS.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 *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\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 const sanitizedConfig = this.sanitizeLayerConfig(retinalConfig, layerConfig);\n this.layers(sanitizedConfig);\n return sanitizedConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n *\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 sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n def.forEach((conf) => {\n const encoding = conf.encoding || (conf.encoding = {});\n !encoding.angle && (encoding.angle = {});\n const angleField = getObjProp(encoding.angle, 'field');\n const angle0Field = getObjProp(encoding.angle0, 'field');\n if (!angleField) {\n Object.assign(encoding.angle, {\n field: encodingConfigs.color && encodingConfigs.color.field\n });\n }\n if (!angle0Field) {\n !encoding.angle0 && (encoding.angle0 = {});\n Object.assign(encoding.angle0, {\n field: encoding.angle.field\n });\n }\n });\n\n layerConfig.push(config);\n });\n return layerConfig;\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 *\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 *\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} context\n *\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, FieldType, COORD_TYPES, getObjProp, DataModel } from 'muze-utils';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\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 ARC,\n RADIUS,\n ANGLE\n} from '../enums/constants';\n\nconst POLAR = COORD_TYPES.POLAR;\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, ...params) => `${axisName}-axis-${params.join('-')}`;\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 *\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 *\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 *\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager }) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({\n type: HEADER,\n className: `${classPrefix}-grid-headers`\n }, {\n 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 *\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 *\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d.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\nconst hasPolarEncodings = layerConf => layerConf.mark === ARC || [RADIUS, ANGLE].some(field =>\n getObjProp(layerConf.encoding, field));\n\n/**\n *\n *\n * @param {*} layers\n *\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers.length) {\n // Figuring out the kind of layers the group will have\n encoder = layers.some(layerConf => hasPolarEncodings(layerConf)) ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n *\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 *\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\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/**\n * This method sorts the facets fields inplace if field is of categorical type\n * @param {Object} facets Array of facets\n * @param {Array} keys Array of the facet field values\n * @param {Object} config configuration object\n * @return {Array} Returns sorted facets\n */\nexport const sortFacetFields = (facets, keys, config) => {\n /**\n * Check if the facet sorted by the user is plotted\n * If an incorrect field is sorted, return the keys as is\n */\n const schema = [];\n const facetNames = [];\n const sortInfo = [];\n const sortConfig = config.sort;\n\n facets.forEach((facet) => {\n const name = `${facet}`;\n const facetSortConfig = sortConfig[name];\n\n if (facetSortConfig) {\n sortInfo.push([name, facetSortConfig]);\n } else {\n sortInfo.push([name, null]);\n }\n schema.push(facet.getSchemaDef());\n });\n\n return new DataModel([facetNames, ...keys], schema).getData({ sort: sortInfo }).data;\n};\n\nexport const removeExitCells = (resolver) => {\n const exitCells = resolver.cacheMaps().exitCellMap;\n const store = resolver.store();\n const qualifiedStateProps = [].concat(...VisualUnit.getQualifiedStateProps(),\n ...BaseLayer.getQualifiedStateProps());\n store.lockCommits(qualifiedStateProps);\n exitCells.forEach((placeholder) => {\n placeholder.remove();\n });\n store.unlockCommits(qualifiedStateProps);\n};\n","import { DataModel } from 'muze-utils';\nimport { sortFacetFields } from './group-utils';\n\n/**\n* Gets name of fields form the variables\n*\n* @param {*} fields1\n* @param {*} [fields2=[]]\n*\n*/\nconst getFieldNames = fieldVar => fieldVar.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []);\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareProjectionInfo = (fieldInfo) => {\n const {\n colProjections,\n rowProjections\n } = fieldInfo;\n const uniqueFields = [];\n let indices = [];\n let projections = [];\n\n rowProjections.forEach((rowProj, rIndex) => {\n const newRIndex = rIndex;\n colProjections.forEach((colProj, cIndex) => {\n const newCIndex = cIndex;\n const newRowProj = getFieldNames(rowProj);\n const newColProj = getFieldNames(colProj);\n\n uniqueFields.push([...newRowProj, ...newColProj]);\n indices.push({ rowIndex: newRIndex, colIndex: newCIndex });\n projections.push({ rowFields: rowProj, columnFields: colProj });\n });\n });\n indices = indices.length ? indices : [{ rowIndex: 0, colIndex: 0 }];\n projections = projections.length ? projections : [{ rowFields: [], columnFields: [] }];\n return { uniqueFields, indices, projections };\n};\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareFacetInfo = (fieldInfo) => {\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const rowFacetNames = getFieldNames(rowFacets);\n const colFacetNames = getFieldNames(colFacets);\n const allFacets = [...rowFacetNames, ...colFacetNames];\n\n return { rowFacetNames, colFacetNames, allFacets, rowFacets, colFacets };\n};\n\n/**\n*\n*\n* @param {*} context\n* @param {*} facetNames\n* @param {*} hashMap\n* @param {*} keys\n* @param {*} index\n* @returns\n*/\nconst prepareHashMaps = (context, facetNames, hashMap, keys, index) => {\n const rowKey = [];\n facetNames.forEach((name) => {\n const key = context._derivation[context._derivation.length - 1].meta.keys[name];\n\n rowKey.push(key);\n });\n\n const joinedRowKey = rowKey.join(',');\n\n if (hashMap[joinedRowKey] === undefined) {\n hashMap[joinedRowKey] = index++;\n keys.push(rowKey);\n }\n return rowKey;\n};\n\nconst createJoinedKeys = keys => keys.map(e => ({\n keyArr: e,\n joinedKey: e.join(',')\n}));\n\n/**\n*\n*\n* @param {*} splitModels\n* @param {*} facetInfo\n* @returns\n*/\nconst getSplitModelHashMap = (splitModels, facetInfo, config) => {\n const {\n rowFacetNames,\n colFacetNames,\n rowFacets,\n colFacets\n } = facetInfo;\n\n const rowKeyHashMap = {};\n const colKeyHashMap = {};\n\n const rowKeys = [];\n const colKeys = [];\n const rowIndex = 0;\n\n const splitModelsHashMap = {};\n\n splitModels.forEach((splitContext) => {\n const rowKey = prepareHashMaps(splitContext, rowFacetNames, rowKeyHashMap, rowKeys, rowIndex);\n const colKey = prepareHashMaps(splitContext, colFacetNames, colKeyHashMap, colKeys, 1);\n\n splitModelsHashMap[`${rowKey}-${colKey}`] = splitContext;\n });\n\n return {\n splitModelsHashMap,\n rowKeys: createJoinedKeys(sortFacetFields(rowFacets, rowKeys, config)),\n colKeys: createJoinedKeys(sortFacetFields(colFacets, colKeys, config))\n };\n};\n\n/**\n * Formats row or columns keys with the provided formatter.\n *\n * @param {Array} keys - The collection of row or column keys.\n * @param {Array} formatterList - The list of corresponding formatter.\n */\nconst formatKeys = (keys, formatterList) => {\n const formattedKeys = [];\n keys.forEach((rKeys, rIdx) => {\n formattedKeys[rIdx] = [];\n rKeys.forEach((key, idx) => {\n formattedKeys[rIdx][idx] = formatterList[idx](key);\n });\n });\n return formattedKeys;\n};\n\n/**\n*\n*\n* @param {Object} context\n* @param {Object} fieldInfo\n* @returns\n*/\nconst splitByColumn = (context, optionalProjections) => {\n const {\n matrix,\n dataModel,\n rowIndex,\n colIndex,\n facetInfo,\n projectionInfo,\n geomCellCreator\n } = context;\n const {\n indices,\n uniqueFields,\n projections\n } = projectionInfo;\n\n const commonFields = optionalProjections;\n\n dataModel.splitByColumn(uniqueFields, commonFields).forEach((model, i) => {\n let { rowIndex: row, colIndex: col } = indices[i];\n row += rowIndex;\n col += colIndex;\n\n matrix[row] = matrix[row] || [];\n\n const projectionIndexObject = {\n indices: {\n rowIndex: row,\n columnIndex: col\n },\n projections: projections[i]\n };\n\n matrix[row][col] = geomCellCreator(model, projectionIndexObject, facetInfo);\n });\n const lastIndex = indices[indices.length - 1];\n\n return {\n rowIndex: lastIndex.rowIndex + rowIndex,\n colIndex: lastIndex.colIndex + colIndex\n };\n};\n\nconst createColumnDataModels = (colContext, fieldInfo, sourceDM) => {\n let context = {};\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n const {\n rowKeyArr,\n rowKey,\n colKeyObj,\n newRowIndex,\n splitModelsHashMap,\n currentColumnIndex\n } = colContext;\n\n const { keyArr: colKeyArr, joinedKey: colKey } = colKeyObj;\n const hashMapKey = splitModelsHashMap[`${rowKey}-${colKey}`];\n\n if (hashMapKey) {\n context = { dataModel: hashMapKey };\n } else {\n const emptyDm = new DataModel([], sourceDM.getData().schema);\n context = { dataModel: emptyDm };\n }\n\n context = {\n ...context,\n ...colContext,\n facetInfo: {\n rowFacets: [rowFacets, rowKeyArr],\n colFacets: [colFacets, colKeyArr]\n },\n rowIndex: newRowIndex,\n colIndex: currentColumnIndex\n };\n const dataModels = splitByColumn(context, fieldInfo.optionalProjections);\n\n return {\n columnIndex: dataModels.colIndex + 1,\n rowIndex: dataModels.rowIndex\n };\n};\n\nconst createRowDataModels = (rowContext, fieldInfo, sourceDM) => {\n let currentColumnIndex = 0;\n let rowIndexForCurrentKey = 0;\n const {\n colKeys,\n rowKeyObj,\n currentRowIndex\n } = rowContext;\n const newRowIndex = currentRowIndex;\n const { keyArr: rowKeyArr, joinedKey: rowKey } = rowKeyObj;\n const colContext = {\n ...rowContext,\n rowKeyArr,\n rowKey,\n newRowIndex\n };\n rowIndexForCurrentKey = currentRowIndex;\n if (colKeys.length) {\n colKeys.forEach((colKeyObj) => {\n colContext.colKeyObj = colKeyObj;\n colContext.currentColumnIndex = currentColumnIndex;\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n });\n } else {\n colContext.colKeyObj = { keyArr: [], joinedKey: '' };\n colContext.currentColumnIndex = currentColumnIndex;\n\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n }\n return {\n rowIndex: ++rowIndexForCurrentKey\n };\n};\n\n/**\n* Gets Matrixes for corresponding datamodel, facets and projections\n*\n* @param {Object} dataModel input datamodel\n* @param {Object} fieldInfo Information about the fields\n* @param {Function} geomCellCreator 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, geomCellCreator, globalConfig) => {\n let currentRowIndex = 0;\n const matrix = [];\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const projectionInfo = prepareProjectionInfo(fieldInfo);\n const facetInfo = prepareFacetInfo(fieldInfo);\n const allSplitModels = dataModel.splitByRow(facetInfo.allFacets);\n\n const {\n splitModelsHashMap,\n rowKeys,\n colKeys\n } = getSplitModelHashMap(allSplitModels, facetInfo, globalConfig);\n\n const generalContext = {\n matrix,\n geomCellCreator,\n projectionInfo,\n splitModelsHashMap,\n colKeys\n };\n if (rowKeys.length) {\n rowKeys.forEach((rowKeyObj) => {\n const rowContext = {\n ...generalContext,\n rowKeyObj,\n currentRowIndex\n };\n const { rowIndex } = createRowDataModels(rowContext, fieldInfo, dataModel);\n\n currentRowIndex = rowIndex;\n });\n } else if (colKeys.length) {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n\n colKeys.forEach((colKeyObj) => {\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj,\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n });\n } else {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj: { keyArr: [], joinedKey: '' },\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n }\n\n const formattedColKeys = formatKeys(colKeys.map(e => e.keyArr),\n colFacets.map(facetField => facetField.rawFormat()));\n const formattedRowKeys = formatKeys(rowKeys.map(e => e.keyArr),\n rowFacets.map(facetField => facetField.rawFormat()));\n\n // Getting column keys\n const transposedColKeys = formattedColKeys.length > 0 ? formattedColKeys[0].map((col, i) =>\n formattedColKeys.map(row => row[i])) : formattedColKeys;\n\n return { matrix, rowKeys: formattedRowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport {\n getObjProp,\n FieldType,\n retrieveNearestGroupByReducers,\n mergeRecursive,\n createSelection,\n DataModel\n} from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n getFieldsFromSuppliedLayers,\n extractFields,\n removeExitCells\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP,\n BOTTOM, PRIMARY, SECONDARY, X, Y, TEMPORAL } from '../enums/constants';\nimport { SimpleVariable } from '../variable';\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 *\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 sortedFields = config.sort;\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || [],\n context.retinalConfig);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const facetFields = allFacets.slice();\n facetFields[0] = facetFields[0].map(facetField => facetField.oneVar());\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\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n // Sort datamodel if user has sorted a field\n const sortConfig = Object.keys(sortedFields).map(field => [field, sortedFields[field]]);\n if (sortConfig.length) {\n datamodel = datamodel.sort(sortConfig, { saveChild: true });\n }\n\n geomCell.data(datamodel)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n\n encoder.createAxis(axesCreators, fieldInfo, Object.assign({}, context, { geomCell, facetFields }));\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\nconst extractAxisIndex = id => getObjProp(id.match(/^[0-9]*?(?=-)/g), 0);\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 */\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((currObj, 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 }).sort((a, b) => extractAxisIndex(a[0]) - extractAxisIndex(b[0]));\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.rowsSecondary = createAxisCells(selObj.rowSec, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n selObj.columnsSecondary = createAxisCells(selObj.colSec, 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) => {\n const textCell = new cells.TextCell({}, { labelManager });\n textCell.source(label);\n return textCell;\n }, headers, (key, i) => key + i);\n\nconst extractFacetIndex = id => id.split('-').pop();\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n *\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facet\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n\n const selObjUpdater = createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys,\n (keySet, i) => `${keySet.join(',')}-${i}`)\n .sort((a, b) => extractFacetIndex(a[0]) - extractFacetIndex(b[0]));\n\n return selObjUpdater.map((keySet, data) => {\n let textCells = createTextCells(null, data, cells, labelManager);\n textCells = textCells.map((cell, k) => cell.source(k).config(facet));\n return textCells;\n });\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 facet,\n encoders,\n resolver\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 keys = keys.map(arr => arr.map(val => resolver.valueParser()(val)));\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.facet = facet.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facet = facet.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n\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 facet,\n encoders,\n resolver\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\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]\n .map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n let rowPriority = rowSec.length ? 1 : -1;\n rowPrime.length && rowPriority++;\n let colPriority = colSec.length ? 1 : -1;\n colPrime.length && colPriority++;\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 colPriority,\n rowPriority\n };\n};\n\nconst getAxisFields = (projections, fieldHolder = []) =>\n projections.reduce((acc, item) =>\n [...acc, ...item.reduce((ac, field) =>\n (field instanceof SimpleVariable ? [...ac, field.oneVar()] : ac), [])], fieldHolder);\n\nconst sortDmTemporalFields = (resolver, datamodel) => {\n let axisFields = [];\n const projections = resolver.projections();\n axisFields = getAxisFields(projections.rowProjections, getAxisFields(projections.colProjections));\n\n const fieldConfig = datamodel.getFieldsConfig();\n const temporalFields = axisFields.reduce((acc, field) =>\n ((fieldConfig[field].def.subtype === TEMPORAL) ? [...acc, [field]] : acc), []);\n return temporalFields.length ? datamodel.sort(temporalFields, { saveChild: true }) : datamodel;\n};\n\nconst transformDataModel = (dataModel, config, resolver) => {\n let groupedModel;\n\n const fieldsConfig = dataModel.getFieldsConfig();\n const resolvedData = resolver.data();\n const { groupBy, suppliedLayers, facetsAndProjections } = config;\n\n if (resolvedData instanceof DataModel) {\n resolvedData.dispose();\n }\n groupedModel = dataModel.project(dataModel.getSchema().map(d => d.name));\n resolver.data(groupedModel);\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(suppliedLayers, groupedModel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n const dimensions = allFields.filter(field =>\n getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n const measureNames = Object.keys(groupedModel.getFieldspace().getMeasure());\n const nearestAggFns = retrieveNearestGroupByReducers(groupedModel, ...measureNames);\n const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns);\n\n groupedModel = groupedModel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns)\n .project(allFields);\n }\n // sort temporal fields if any in the given rows and columns\n groupedModel = sortDmTemporalFields(resolver, groupedModel);\n return groupedModel;\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 facet: globalConfig.facet || {},\n axisFrom: globalConfig.axisFrom || {},\n selection,\n resolver\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 retinalConfig: {\n color: config.color,\n size: config.size,\n shape: config.shape\n }\n };\n\n const groupedModel = transformDataModel(datamodel, {\n facetsAndProjections,\n suppliedLayers: valueCellContext.suppliedLayers,\n groupBy\n }, resolver);\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, globalConfig);\n\n removeExitCells(resolver);\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n resolver.createUnits(componentRegistry, config);\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const {\n rows,\n columns,\n selectionObj,\n rowPriority,\n colPriority\n } = 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 priority: {\n row: rowPriority,\n col: colPriority\n },\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","export const RESOLVER_PROPS = {\n dependencies: {},\n units: {},\n datamodelTransform: {},\n layerConfig: {},\n matrixLayers: {},\n colCells: {},\n rowCells: {},\n rowMatrix: {},\n columnMatrix: {},\n valueMatrix: {},\n encoder: {},\n valueParser: {},\n data: {}\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { generateGetterSetters, STATE_NAMESPACES, getUniqueId } from 'muze-utils';\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';\nimport { RESOLVER_PROPS } from './resolver-props';\n\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 = { rowFacets: [], colFacets: [] };\n this._projections = { rowProjections: [], colProjections: [] };\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._fireboltDeps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: [],\n radius: [],\n angle: [],\n angle0: []\n };\n generateGetterSetters(this, RESOLVER_PROPS);\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 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 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 *\n *\n * @param {*} facets\n *\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 *\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 *\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 *\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 radius: [],\n angle: [],\n angle0: [],\n pie: []\n });\n }\n\n setFireboltDependencies (prop, deps) {\n Object.assign(this._fireboltDeps, {\n [prop]: deps\n });\n return this;\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 coord\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager,\n throwback\n } = this.dependencies();\n const fireboltDeps = this._fireboltDeps;\n\n // Provide the source for the matrix\n const units = [[]];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n const store = this.store();\n store.lockModel();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n const namespace = `unit${i}-${j}-${getUniqueId()}`;\n\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager,\n throwback,\n fireboltDeps\n });\n unit.metaInf({\n rowIndex: i,\n colIndex: j,\n namespace\n });\n unit.store(store);\n unit.coord(coord);\n el.source(unit);\n }\n !units[i] && (units[i] = []);\n units[i][j] = unit;\n unit.parentAlias(alias)\n .valueParser(this.valueParser())\n .coord(coord);\n el.config(unitConfig);\n });\n store.unlockModel();\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 resetFacetsAndProjections () {\n this._facets = {};\n this._projections = {};\n return this;\n }\n\n /**\n *\n *\n *\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 *\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 const props = [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`,\n `${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`];\n const store = this.store();\n store.lockCommits(props);\n store.lockModel();\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(Object.assign(el.axes(), retinalAxes));\n el.source() && el.source().retinalFields(config);\n el.layerDef(matrixLayers[i][j]);\n el.updateModel();\n\n units.push(el.source());\n });\n store.unlockModel()\n .unlockCommits([props[0]])\n .unlockCommits([props[1]]);\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n *\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 {\n showHeaders,\n classPrefix\n } = config;\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], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager }),\n right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell,\n { classPrefix, 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 *\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 store (...params) {\n if (params.length) {\n this._store = params[0];\n return this;\n }\n return this._store;\n }\n\n clear () {\n const cacheMaps = this._cacheMaps;\n for (const key in cacheMaps) {\n cacheMaps[key].clear();\n }\n }\n\n}\n","/**\n * This is a wrapper class over the matrix of cells which gets created in visual group. Visual Group creates left,\n * right, bottom and top and center matrices and wraps them using this class.\n *\n * @public\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n * Creates an instance of ValueMatrix.\n *\n * @param {Array} matrixArr Matrix array.\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 instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n * Returns the array of matrices contained in this instance.\n *\n * @public\n * @return {Array} Array of matrices.\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 * Sets a filter criteria. This filter criteria gets applied when each function is called.\n *\n * @public\n * @param {Function} fn Filter function.\n *\n * @return {ValueMatrix} Instance of value matrix.\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 * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\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 * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\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 * Iterates through the two dimensional matrix array and calls the given callback function with the cell instance,\n * row index, column index and the matrix array.\n *\n * @param {Function} fn Callback function which will get called for every cell.\n * @return {ValueMatrix} Instance of the value matrix.\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 findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n clear () {\n this.each(cell => cell.remove());\n this.matrix([]);\n }\n}\n\nexport default ValueMatrix;\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { getEncoder, getBorders } from '../group-helper';\nimport { RetinalEncoder } from '../encoder';\nimport { registerDomainChangeListener, unsubscribeChangeListeners } from './change-listener';\nimport ValueMatrix from './value-matrix';\n\nexport const createUnitState = (context) => {\n const [globalState, localState] = VisualUnit.getState();\n const store = context.store();\n store.append(STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE, localState);\n};\n\nexport const initializeGlobalState = (context) => {\n const globalState = context.constructor.getState()[0];\n const store = context.store();\n store.append(STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const createLayerState = (context) => {\n const [globalState, localState] = BaseLayer.getState();\n context.store().append(STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE, localState);\n};\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\nexport const setMatrixInstances = (context, placeholder) => {\n let {\n values,\n rows,\n columns\n } = placeholder;\n values = values || [];\n rows = rows || [];\n columns = columns || [];\n context._composition.matrices = {\n value: new ValueMatrix(values),\n left: new ValueMatrix(rows[0]),\n right: new ValueMatrix(rows[1]),\n top: new ValueMatrix(columns[0]),\n bottom: new ValueMatrix(columns[1])\n };\n\n context._dependencies.throwback.commit(CommonProps.MATRIX_CREATED, true);\n return context;\n};\n\nexport const createMatrices = (context) => {\n const rows = context.rows();\n const columns = context.columns();\n const color = context.color();\n const datamodel = context.data();\n const size = context.size();\n const detail = context.detail();\n const layers = context.layers();\n const transform = context.transform();\n const config = context.config();\n const shape = context.shape();\n\n // Get the resolver for the matrices\n const resolver = context.resolver();\n resolver.store(context.store());\n resolver.valueParser(context.valueParser());\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config || {},\n rows,\n columns,\n detail,\n layers,\n transform\n };\n\n unsubscribeChangeListeners(context);\n\n const retinalConfig = sanitizeRetinalConfig({\n color,\n shape,\n size\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);\n matrixConfig.coord = encoders.simpleEncoder.constructor.type();\n resolver.encoder(encoders.simpleEncoder);\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 ? config.axisFrom : {}, fields);\n // Setting layers for the code\n layers && resolver.layerConfig(layers);\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));\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 resolver.encoder().unionUnitDomains(context);\n\n registerDomainChangeListener(context);\n return context;\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\n\nimport { STATE_NAMESPACES } from 'muze-utils';\n\nexport const setupChangeListeners = (context) => {\n const store = context.store();\n const stores = {\n throwback: context._dependencies.throwback,\n store\n };\n\n ['x', 'y'].forEach((axisType) => {\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${axisType}`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes[axisType].forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n });\n\n [VisualUnit, BaseLayer].forEach((comp) => {\n const formalName = comp.formalName();\n ['store', 'throwback'].forEach((type) => {\n const listeners = comp.getListeners()[type];\n const storeInst = stores[type];\n listeners.forEach((listenerInf) => {\n storeInst[listenerInf.type](listenerInf.props, listenerInf.listener, false, {\n namespace: formalName,\n subNamespace: listenerInf.subNamespace\n });\n });\n });\n });\n};\n\nexport const registerDomainChangeListener = (context) => {\n const store = context.store();\n store.registerChangeListener([`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`], () => {\n context.resolver().encoder().unionUnitDomains(context);\n }, false, {\n key: 'unionDomain'\n });\n};\n\nexport const unsubscribeChangeListeners = (context) => {\n context.store().unsubscribe({\n key: 'unionDomain'\n });\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\nexport const PROPS = {\n alias: {},\n data: {},\n cornerMatrices: {\n defaultValue: {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: []\n }\n },\n groupType: {},\n\n metaData: {\n defaultValue: {\n border: {}\n }\n },\n placeholderInfo: {\n defaultValue: {}\n },\n resolver: {},\n valueParser: {\n defaultValue: val => val\n },\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 [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n findInGroup\n} from '../group-helper';\nimport { createUnitState, initializeGlobalState, setMatrixInstances, createMatrices, createLayerState } from './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 * VisualGroup is instantiated by canvas for creating {@link VisualUnit} and axes instances.It creates the\n * the matrix of visual units and axes. It also creates the layout instance which manages the allocation\n * of space of matrices.\n *\n * To get instance of visual group,\n * ```\n * const visualGroup = canvas.composition().visualGroup;\n * ```\n * @public\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 *\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 generateGetterSetters(this, localOptions);\n // Populate the store with default values\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n // matrix instance store each of the matrices\n setMatrixInstances(this, {});\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n }\n\n static getState () {\n return [{\n domain: {\n x: null,\n y: null,\n radius: null,\n angle: null,\n angle0: null\n }\n }, {}];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n initializeGlobalState(this);\n createUnitState(this);\n createLayerState(this);\n // Register listeners\n setupChangeListeners(this);\n return this;\n }\n return this._store;\n }\n\n /**\n * Return the instances of matrices created by the visual group.\n *\n * @return {Object} Instance of matrices.\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 visual group.\n *\n * @public\n *\n * @return {Object} Composition of visual group. It contains instance of matrices {@link ValueMatrix}\n * and instances of axis.\n * ```\n * {\n * matrices: {\n * value: // Instance of center value matrix.\n * left: // Instance of left value matrix\n * right: // Instance of right value matrix\n * bottom: // Instance of bottom value matrix\n * top: // Instance of top value matrix.\n * },\n * axes: {\n * x: // Array of x axis.\n * y: // Array of y axis\n * color: // Array of color axis\n * shape: // Array of shape axis\n * size: // Array of size axis.\n * }\n * }\n * ```\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 */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n * Returns the channel name of the variable. Channels are rows, columns, color, shape and size.\n *\n * @public\n * @param {string} variable Name of the variable.\n *\n * @return {string} Name of the channel.\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n * Gets the axis instances of the visual group based on the given axis type.\n *\n * @public\n * @param {string} type Type of axis. X,Y or retinal axes.\n *\n * @return {Array} Array of axis instances.\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n * Returns the instances of cells based on the given type. Type can be given as `row' or `col`.\n *\n * @public\n * @return {Array} Two dimensional array of cells.\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n return channel === Y ? rowProjections : colProjections;\n }\n\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\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 /**\n * Returns the grouped datamodel prepared by visual group. If there is no group by performed, then it returns the\n * original data model passed to visual group.\n *\n * @return {DataModel} Grouped data model.\n */\n getGroupByData () {\n return this._groupedDataModel;\n }\n\n createMatrices () {\n createMatrices(this);\n }\n\n remove () {\n this.matrixInstance().value.clear();\n this.resolver().clear();\n const info = this.placeholderInfo();\n info.rows = null;\n info.columns = null;\n info.values = null;\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 MAXWIDTH = 'max-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 context = firebolt.context;\n const type = context.constructor.type();\n const payload = config.payload;\n const data = context.data();\n const metaData = context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = 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.rawVal);\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].internalValue >= values[i][0] && fields[field].internalValue <= 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 === 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.rawVal) !== -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","import { getEvent } from 'muze-utils';\n\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 event = getEvent();\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 const event = getEvent();\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 labelManager: {},\n minTickDistance: {},\n valueParser: {\n defaultValue: val => val\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, i, data, context) => context.valueParser()(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 MAXWIDTH\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n *\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 * Function to recompute the stops in array in case to left and right alignment of legend.\n *\n * @param {string} param - parameter to measure\n * @param {Object} requiredMeasure - required measure parameters\n * @param {Object} availableMeasure - available meassure parameters\n * @param {Array} domainForLegend - array\n * @param {Object} smartLabelCalc - smartLabel Manager\n * @return {Array} - Array\n */\nconst getcomputedArray = (computationhelper, requiredMeasure, availableMeasure, domainForLegend) => {\n // declaring Current and Next Tick Value variable\n let currentTickValue;\n let nextTickValue;\n const upperBound = domainForLegend[domainForLegend.length - 1];\n const param = computationhelper.measureParam;\n const smartLabelCalc = computationhelper.smartLabelCalc;\n\n // calculating pixel required per Tick Values\n const pixelPerTick = (availableMeasure[param] / upperBound);\n\n // checking if available max width is smaller than required width for legend.\n if (availableMeasure[param] >= requiredMeasure[param]) {\n return domainForLegend;\n }\n\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[0]))[param]);\n for (let i = 1; i < domainForLegend.length - 1; i++) {\n nextTickValue = Math.floor((currentTickValue / pixelPerTick) + domainForLegend[i - 1]);\n if (domainForLegend[i] < nextTickValue) {\n domainForLegend.splice(i, 1);\n i -= 1;\n }\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[i]))[param]);\n }\n return domainForLegend;\n};\n\n/**\n * function to recompute the Stops Array provided to prevent the Overlapping of values\n * @param {Array} domainForLegend - Stops Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - modified Stops Array\n */\nexport const getInterpolatedArrayData = (domainForLegend, scaleParams) => {\n // defining param for height/width selector\n let measureParam;\n\n // declaring variable for required Width\n let requiredWidth;\n\n // declaring variable for required height\n let requiredHeight;\n\n // declaring the variable for upperbound\n let upperBound = domainForLegend[domainForLegend.length - 1];\n\n // Initializing Minimum Tick Difference Variable and checking if it's less than 1 or not\n let minTickDiff = Math.ceil(domainForLegend[1] - domainForLegend[0]);\n\n // calculating max tick difference\n const maxTickDiff = Math.ceil(upperBound - domainForLegend[0]);\n\n // gradient Alignment\n const { alignment } = scaleParams;\n\n // getting SmartLabel Manager to calculate tick Params\n const smartLabelCalc = scaleParams.smartLabel;\n\n // scale Measurements (i.e MaxWidth and MaxHeight available)\n const availableSpace = scaleParams.measures;\n\n // getting minimum Tick size (i.e height and width)\n const minimumTickSize = scaleParams.minTickDistance;\n\n // getting domain upperbound dimensions\n const { height: tickDimHeight, width: tickDimWidth } = smartLabelCalc.getOriSize((upperBound));\n\n /* Checking if UpperBound of Domain is Floating or Not.\n In case of floating constricting it to 2 decimals after point. */\n if (!Number.isInteger(upperBound)) {\n upperBound = ((upperBound).toFixed(2));\n }\n\n // Calculating minimum tick difference\n minTickDiff = minTickDiff < 1 ? 1 : minTickDiff;\n\n // required width to render legend\n requiredWidth = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * (tickDimWidth + (minimumTickSize.width));\n\n requiredWidth -= Math.abs(maxTickDiff);\n\n // require height to render legend\n requiredHeight = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * tickDimHeight;\n\n requiredHeight -= Math.abs(maxTickDiff);\n\n // checking the alignment of legend\n if (alignment === TOP || alignment === BOTTOM) {\n measureParam = WIDTH;\n } else {\n measureParam = HEIGHT;\n }\n\n // calculating computed array\n domainForLegend = getcomputedArray({\n smartLabelCalc,\n measureParam\n }, {\n height: requiredHeight,\n width: requiredWidth\n }, {\n height: availableSpace.maxHeight,\n width: availableSpace.maxWidth\n }, domainForLegend);\n\n return domainForLegend;\n};\n\n/**\n * function to recalculate steps on providing more number of stops than canvas can accomodate.\n * @param {Array} domain - Array\n * @param {Array} steps - Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - recalculated Step Array\n */\nexport const getInterpolatedData = (domain, steps, scaleParams) => {\n // declaring recomputeSteps Variable\n let recomputeSteps = 0;\n\n const getTickMeasure = scaleParams.smartLabel;\n const { maxWidth, maxHeight } = scaleParams.measures;\n const { alignment } = scaleParams;\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n // getting tick measure(i.e height and width)\n const tickValue = getTickMeasure.getOriSize(domain[1].toFixed(2));\n\n // To round the floating values to Integer and checking if value is 1.\n steps = Math.round(steps);\n steps = steps < 1 ? (steps + 1) : steps;\n\n // checking alignment of the Axis\n if (alignment === TOP || alignment === BOTTOM) {\n recomputeSteps = Math.floor(maxWidth / (tickValue.width));\n } else {\n recomputeSteps = Math.floor(maxHeight / (tickValue.height));\n }\n steps = Math.min(steps, recomputeSteps);\n\n // scaling the axis based on steps provided\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 titleWidth = Math.min(measurement.maxWidth, measurement.width);\n\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${titleWidth}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, `${titleWidth}px`)\n .style(MAXWIDTH, `${titleWidth}px`)\n .style(HEIGHT, '100%')\n .style('line-height', 1)\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .style('overflow-x', 'scroll')\n .node();\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\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 *\n */\nexport const getItemMeasures = (context, prop, formatter) => {\n const space = [];\n const data = context.data();\n const labelManager = context._labelManager;\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value, index, data, context));\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 *\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);\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 const labelWidth = labelSpaces[i].width;\n const newLabelWidth = (maxItemSpaces.width - maxIconWidth);\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = Math.max(labelWidth, newLabelWidth);\n totalWidth = Math.max(totalWidth, itemSpace.width);\n }\n }\n });\n totalWidth = Math.ceil(Math.max(totalWidth, titleWidth)) + effPadding;\n totalHeight += titleHeight + effPadding;\n totalHeight = Math.ceil(totalHeight);\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n *\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, RIGHT, LEFT, TOP, BOTTOM } 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 const dist = dependencies.labelManager.getOriSize('w');\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\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 *\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\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 *\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 *\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 *\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, VALUE, 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());\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 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, maxWidth } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n maxWidth,\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 position\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 let marginPosition;\n switch (position) {\n case TOP:\n marginPosition = `margin-${BOTTOM}`;\n break;\n case LEFT:\n marginPosition = `margin-${RIGHT}`;\n break;\n case BOTTOM:\n marginPosition = `margin-${TOP}`;\n break;\n default:\n marginPosition = `margin-${LEFT}`;\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(`${marginPosition}`, `${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 *\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.rawVal]];\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\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 *\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 *\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 *\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 const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context))\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 const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import {\n FieldType,\n DimensionSubtype,\n formatTemporal\n} from 'muze-utils';\nimport 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 *\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof DiscreteLegend\n */\n dataFromScale () {\n const scale = this.scale();\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const field = this.metaData().getFieldspace().fields[0];\n const { type, subtype } = field.schema();\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n const rawVal = domainForLegend[i];\n if (type === FieldType.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 let domainVal = rawVal;\n if (subtype === DimensionSubtype.TEMPORAL) {\n domainVal = formatTemporal(domainForLegend[i], field.minimumConsecutiveDifference());\n }\n value = domainVal;\n range = [domainVal];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range,\n rawVal\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 *\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 *\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\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0]) || 1}%`)\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 labels: {\n rotation: null\n }\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 *\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 axis.source().render();\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().tickDimensions;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxItemSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(Math.min(height, maxHeight) - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(Math.min(width, maxWidth) - (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\n applyStyle(legendContainer, {\n height: `${maxItemSpaces.height + border + padding}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\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${maxWidth}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, getInterpolatedArrayData } 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 *\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n *\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 *\n * @memberof GradientLegend\n */\n dataFromScale () {\n let domainForLegend = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\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 // Sorting the domain Array\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n domainForLegend = getInterpolatedArrayData(domainForLegend, scaleParams);\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1, scaleParams);\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 *\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 *\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 *\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 *\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof StepLegend\n */\n dataFromScale () {\n let domainLeg = [];\n const scale = this.scale();\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 // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\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, scaleParams);\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 } else if (domainLeg.length === 1) {\n value = ele.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\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\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 *\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 *\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';\nexport const MUZE_PREFIX = 'muze';\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';\nexport const HORIZONTAL_CENTER = 'h-center';\nexport const VERTICAL_CENTER = 'v-center';\nexport const HIDDEN = 'hidden';\nexport const OVERFLOW = 'overflow';\nexport const OVERFLOW_X = 'overflow-x';\nexport const OVERFLOW_Y = 'overflow-y';\nexport const AUTO = 'auto';\nexport const VISIBLE = 'visible';\nexport const VERTICAL_SCROLL_BAR = 'verticalScrollBar';\nexport const HORIZONTAL_SCROLL_BAR = 'horizontalScrollBar';\nexport const GRID = 'grid';\nexport const MESSAGE = 'message';\nexport const NO_DATA_MESSAGE = 'No data to display';\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. This is required when we have multiple\n * variables on a single axis and the union of domain of all the variables needs to be set on the axis.\n *\n * To create a new composed variable from multiple fields,\n * ```\n * const sharedVar = share('open', 'high', 'low', 'close');\n * canvas.rows([sharedVar])\n * .columns(['date']);\n * ```\n *\n * @module Operators\n * @public\n * @function share\n * @param {Array} vars Variable names.\n *\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 *\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 string according to the allowed html tags.\n * This is used to render html in canvas components like title and tooltip.\n *\n * To render html in canvas components,\n * ```\n * canvas.title(html`TITLE`);\n * ```\n *\n * @public\n * @module Operators\n * @function html\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n *\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, CommonProps } 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\nconst listenerFn = (canvas, fn) => () => {\n const valueMatrix = canvas.composition().visualGroup.matrixInstance().value;\n valueMatrix.each(cell => fn(cell.valueOf().firebolt()));\n};\n\nconst canvasIterator = (canvases, iteratorFn, cFn) => {\n canvases.forEach((canvas) => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => iteratorFn(cell.valueOf().firebolt()));\n cFn && cFn(canvas);\n // Also register actions on canvas update\n const throwback = canvas._throwback;\n\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED],\n listenerFn(canvas, iteratorFn));\n });\n};\n\nconst registerActions = (context, type, fnName, deps) => {\n const canvases = context._registrableComponents;\n\n canvases.forEach((canvas) => {\n const vGroup = canvas.composition().visualGroup;\n\n vGroup.resolver().setFireboltDependencies(type, deps);\n canvas.firebolt()[fnName](deps);\n });\n};\n\n/**\n * This class is initiated only once in lifecycle and is reponsible for regisration of physical and behavioural\n * actions and side effects and the mapping between them.\n *\n * To get the instance of action model\n * ```\n * const ActionModel = muze.ActionModel;\n * ```\n *\n * @public\n * @module ActionModel\n */\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n /**\n * Takes an array of canvases on which the physical and behavioural actions will get registered.\n *\n * @public\n * @param {Canvas} components Array of canvases\n *\n * @return {ActionModel} Instance of action model.\n */\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n /**\n * Registers physical actions on the canvases. It takes an object with key as the name of action and value having\n * the definition of the action.\n *\n * To register a {@link PhysicalAction},\n * ```\n * const ActionModel = muze.ActionModel;\n * ActionModel\n * // Physical actions will be registered on these canvases.\n * .for(canvas)\n * .registerPhysicalActions({\n * // Key is the name of physical action.\n * ctrlClick: (firebolt) => (targetEl, behaviours) => {\n * targetEl.on('click', function (data) {\n * const event = utils.getEvent();\n * const pos = utils.getClientPoint(event, this);\n * // Get the data point nearest to the mouse position.\n * const nearestPoint = firebolt.context.getNearestPoint(pos, {\n * data\n * });\n * // Prepare the payload\n * const payload = {\n * criteria: nearestPoint.id\n * };\n * behaviours.forEach((behaviour) => firebolt.dispatchBehaviour(behaviour, payload));\n * });\n * }\n * });\n * ```\n * @public\n *\n * @param {Object} action Names of physical actions and their definitions.\n *\n * @return {ActionModel} Instance of the action model.\n */\n registerPhysicalActions (action) {\n registerActions(this, 'physicalActions', 'registerPhysicalActions', action);\n return this;\n }\n\n /**\n * Registers behavioural actions on the canvases. It takes definitions of the behavioural actions and registers\n * them on the canvases. Every behavioural action must inherit the {@link GenericBehaviour} class.\n *\n * To register a behavioural action\n * ```\n * // Define a new behavioural action\n * class SingleSelectBehaviour extends GenericBehaviour {\n * static formalName () {\n * return 'singleSelect';\n * }\n *\n * setSelectionSet (addSet, selectionSet) {\n * if (addSet === null) {\n * selectionSet.reset();\n * } else if (addSet.length) {\n * const existingAddSet = selectionSet.getExistingEntrySet(addSet);\n * if (existingAddSet.length){\n * selectionSet.reset();\n * } else {\n * selectionSet.add(addSet);\n * }\n * } else {\n * selectionSet.reset();\n * }\n * }\n * }\n * muze.ActionModel.registerBehaviouralActions(SingleSelectBehaviour);\n * ```\n *\n * @public\n *\n * @param {GenericBehaviour} actions Definition of behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerBehaviouralActions (...actions) {\n registerActions(this, 'behaviouralActions', 'registerBehaviouralActions', actions);\n return this;\n }\n\n /**\n * Registers the mapping of physical and behavioural actions. This mapping is used to establish which behavioural\n * actions should be dispatched on any triggering of physical actions.\n *\n * To map physical actions with behavioural actions,\n * ```\n * muze.ActionModel.registerPhysicalBehaviouralMap({\n * ctrlClick: {\n * behaviours: ['select'] // This array must be the formal names of the behavioural actions.\n * }\n * });\n * ```\n *\n * @public\n * @param {Object} map Contains the physical and behavioural action map.\n * ```\n * {\n * // Name of the physical action\n * click: {\n * // Target element selector. This is an optional field. If not passed, then by default takes the\n * // container element of visual unit.\n * target: '.muze-layers-area path',\n * // Behaviours which should be dispatched on triggering of the mapped physical action.\n * behaviours: ['select']\n * }\n * }\n * ```\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPhysicalBehaviouralMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalBehaviouralMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalBehaviouralMap(map);\n });\n return this;\n }\n\n /**\n * Registers what behaviour to propagate on dispatch of a certain behavioural action. By default, when any\n * behavioural action is dispatched, then the same behavioural action gets propagated to all the other canvases.\n * This can be changed using this api.\n *\n * To register what behaviour should be propagated on dispatch of any behavioural action,\n * ```\n * ActionModel.for(canvas1, canvas2).registerPropagationBehaviourMap({\n * select: 'filter',\n * brush: 'filter'\n * });\n * ```\n *\n * @public\n * @param {Object} map Propagation behaviour map.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPropagationBehaviourMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPropagationBehaviourMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPropagationBehaviourMap(map);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of side effects and behavioural actions. It takes an object which contains key as the\n * name of behavioural action and the side effects which will be linked to it.\n *\n * To map side effects to select behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: ['infoBox'] // This array must be the formal names of the side effects\n * });\n * ```\n *\n * To map side effects to select behaviour, but disable all the default side effects attached with this behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: {\n * effects: ['infoBox'],\n * preventDefaultActions: true\n * }\n * });\n * @public\n * @param {Object} map Mapping of behavioural actions and side effects.\n * ```\n * {\n * select: ['infoBox']\n * }\n * ```\n * @return {ActionModel} Instance of action model.\n */\n mapSideEffects (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.mapSideEffects(map);\n }, (canvas) => {\n canvas.firebolt().mapSideEffects(map);\n });\n return this;\n }\n\n /**\n * Registers the side effects on the registered canvases. It takes definitions of side effects and registers them\n * on the canvases. Every side effect must inherit the base class {@link GenericSideEffect} or\n * {@link SpawnableSideEffect} or {@link SurrogateSideEffect} class.\n *\n * ```\n * // Define a custom side effect\n * class InfoBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'infoBox';\n * }\n *\n * apply (selectionSet) {\n * }\n * }\n * muze.ActionModel.registerSideEffects(InfoBox);\n * ```\n * @public\n * @param {GenericSideEffect} sideEffects Definition of side effects.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerSideEffects (...sideEffects) {\n registerActions(this, 'sideEffects', 'registerSideEffects', sideEffects);\n return this;\n }\n\n /**\n * Breaks the link between behavioural actions and physical actions. It takes an array of behavioural action\n * and it's physical action.\n *\n * To dissociate behavioural actions from physical actions\n * ```\n * muze.ActionModel.dissociateBehaviour(['select', 'click'], ['highlight', 'hover']);\n * ```\n * @public\n * @param {Array} maps Array of behavioural action and physical action.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateBehaviour (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateBehaviour(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateBehaviour(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * Breaks the link between side effects and behavioural actions. It takes an array of formal names of the side\n * effects and it's linked behavioural action.\n *\n * To dissociate side effects from behavioural actions\n * ```\n * muze.ActionModel.dissociateSideEffect(['crossline', 'highlight'], ['selectionBox', 'brush']);\n * ```\n * @public\n * @param {Array} maps Array of side effects and behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateSideEffect (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateSideEffect(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateSideEffect(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * By default cross interactivity is disabled between canvases. This enables cross interaction between the canvases\n * so that any action happening in one canvas gets dispatched on other canvases as well. An optional policy can also\n * be passed in this method. The policy can be used to control on which canvases the behavioural actions and\n * side effects gets dispatched.\n *\n * To just enable cross interactivity between two canvases,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity();\n * ```\n *\n * To enable cross interactivity but enable any behavioural action only when it is triggered from canvas1.\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * behaviours: {\n * // Here * stands for any behavioural action name. We can also give any name of behavioural action\n * // in place of this.\n * '*': (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n *\n * To enable cross interactivity but enable tooltip effect if the action is propagated from canvas1,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * sideEffects: {\n * tooltip: (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n * @public\n * @param {Object} policy Policy definition.\n *\n * @return {ActionModel} Instance of action model.\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","import { MUZE_PREFIX } from '../constants';\n\nexport const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 4,\n className: `${MUZE_PREFIX}-title-container`\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16,\n maxLines: 2,\n className: `${MUZE_PREFIX}-subtitle-container`\n};\n\nexport const MESSAGE_CONFIG = {\n className: `${MUZE_PREFIX}-message-container`\n};\n\nexport const CANVAS = 'canvas';\n","import { mergeRecursive } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\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 * @module LocalOptions\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' || !config) {\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' || !config) {\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' || !config) {\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: [],\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};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([title, titleConfig]) => {\n let t = title;\n if (typeof title === 'string' || !title) {\n t = () => title;\n }\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return [t, mergeRecursive(defConfig, titleConfig)];\n }\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([subtitle, subtitleConfig]) => {\n let sub = subtitle;\n if (typeof subtitle === 'string' || !subtitle) {\n sub = () => subtitle;\n }\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return [sub, mergeRecursive(defConfig, subtitleConfig)];\n }\n }\n }\n};\n","export default class LayoutComponent {\n constructor (name, dimensions, seed) {\n this._seed = seed;\n this._boundBox = {\n height: dimensions.height,\n width: dimensions.width,\n top: null,\n left: null\n };\n this._renderAt = null;\n this._alignWith = null;\n this._alignment = null;\n this._target = null;\n this._position = null;\n this._componentName = name;\n this._className = null;\n }\n\n getLogicalSpace () {\n throw new Error('getLogicalSpace is not defined');\n }\n\n setSpatialConfig () {\n throw new Error('setSpatialSpace is not defined');\n }\n\n name (param) {\n if (param) {\n this._componentName = param;\n }\n return this._componentName;\n }\n\n target (param) {\n if (param) {\n this._target = param;\n }\n return this._target;\n }\n\n position (param) {\n if (param) {\n this._position = param;\n }\n return this._position;\n }\n\n alignment (param) {\n if (param) {\n this._alignment = param;\n }\n return this._alignment;\n }\n\n alignWith (param) {\n if (param) {\n this._alignWith = param;\n }\n return this._alignWith;\n }\n\n renderAt (param) {\n if (param) {\n this._renderAt = param;\n }\n return this._renderAt;\n }\n\n boundBox (param) {\n if (param) {\n Object.assign(this._boundBox, param);\n }\n return this._boundBox;\n }\n\n className (param) {\n if (param) {\n this._className = param;\n }\n return this._className;\n }\n\n draw () {\n throw new Error('draw is not defined');\n }\n\n attachListener () {\n return this;\n }\n }\n\n","import LayoutComponent from './layoutComponent';\n\nclass DummyComponent extends LayoutComponent {\n getLogicalSpace () {\n return {\n width: this.boundBox().width,\n height: this.boundBox().height\n };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n return this;\n }\n\n draw () {\n if (!this.component) {\n throw new Error(`Component not set for ${this.componentName}`);\n }\n this.component.mount(document.getElementById(this.renderAt)); // Change the draw method to component draw\n return this;\n }\n}\n\nexport default DummyComponent;\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n pagination: 'scroll',\n scrollBar: {\n thickness: 10,\n speed: 2,\n vertical: {\n align: 'right'\n },\n horizontal: {\n align: 'bottom'\n }\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 facet: {\n rows: {\n minCharacters: 3\n },\n columns: {\n maxLines: 2,\n verticalAlign: 'middle',\n minCharacters: 1\n }\n },\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 invalidValues: {},\n sort: {}\n};\n","import { DEFAULT_CONFIG } from '../../../../muze/src/defaults';\n\nconst DEFAULT_WIDTH = 600;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_CLASS_NAME = `${DEFAULT_CONFIG.classPrefix}-layout-container-component`;\nconst NODE_PREFIX = `${DEFAULT_CONFIG.classPrefix}-layout-container`;\n\nexport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n DEFAULT_CLASS_NAME,\n NODE_PREFIX\n};\n","export default class DefinitionModel {\n constructor (config) {\n this._host = config.host || null;\n this._cut = config.cut || null;\n this._ratioWeight = config.ratioWeight === 0 ? 0 : config.ratioWeight || 1;\n this._preferred = config.preferred || false;\n this._lanes = config.lanes || [];\n this._remainingHeight = 0;\n this._remainingWidth = 0;\n }\n\n host (host) {\n if (host) {\n this._host = host;\n }\n return this._host;\n }\n\n preferred (preferred) {\n if (preferred) {\n this._preferred = preferred;\n }\n return this._preferred;\n }\n\n cut (cut) {\n if (cut) {\n this._cut = cut;\n }\n return this._cut;\n }\n\n ratioWeight (ratioWeight) {\n if (ratioWeight) {\n this._ratioWeight = ratioWeight;\n }\n return this._ratioWeight;\n }\n\n lanes (lanes) {\n if (lanes) {\n this._lanes = lanes;\n }\n return this._lanes;\n }\n\n remainingHeight (remainingHeight) {\n if (remainingHeight) {\n this._remainingHeight = remainingHeight;\n }\n return this._remainingHeight;\n }\n\n remainingWidth (remainingWidth) {\n if (remainingWidth) {\n this._remainingWidth = remainingWidth;\n }\n return this._remainingWidth;\n }\n}\n","import { NODE_PREFIX } from '../../constants/defaults';\nimport DefinitionModel from '../definition-manager/definitionModel';\nimport DummyComponent from '../../layout-component/dummy-component';\n/**\n * Compares two strings in lowercase\n *\n * @export\n * @param {string} value the value to be compared\n * @param {string} compareTo whom the value would be compared\n * @return {boolean} true if values are equal\n */\nexport function isEqual (value, compareTo) {\n if (typeof value !== 'string' || typeof compareTo !== 'string') {\n throw new TypeError('value and compareTo must be string');\n }\n return value.toLowerCase() === compareTo.toLowerCase();\n}\n\nexport const getNodeId = (() => {\n let _uid = 0;\n return () => `${NODE_PREFIX}-${++_uid}`;\n})();\n\nexport function yExtraSpace (node) {\n let smallestHeight = 0;\n if (node.getCutType() === 'v') {\n smallestHeight = smallestExtraHeightHorizontally(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'h') {\n node.children().forEach((child) => {\n smallestHeight += yExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerHeight = node.boundBox().height;\n const hostHeight = node.model().host().getLogicalSpace().height;\n\n smallestHeight = containerHeight - hostHeight;\n if (smallestHeight < 0) {\n smallestHeight = 0;\n }\n } else {\n smallestHeight = 0;\n }\n return smallestHeight;\n}\n\nexport function smallestExtraHeightHorizontally (node) {\n let smallestHeight = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const h = yExtraSpace(child);\n if (h < smallestHeight) {\n smallestHeight = h;\n }\n });\n return smallestHeight;\n}\n\nexport function xExtraSpace (node) {\n let smallestWidth = 0;\n if (node.getCutType() === 'h') {\n smallestWidth = smallestExtraWidthVertically(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'v') {\n node.children().forEach((child) => {\n smallestWidth += xExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerWidth = node.boundBox().width;\n const hostWidth = node.model().host().getLogicalSpace().width;\n smallestWidth = containerWidth - hostWidth;\n if (smallestWidth < 0) {\n smallestWidth = 0;\n }\n } else {\n smallestWidth = 0;\n }\n return smallestWidth;\n}\n\nexport function smallestExtraWidthVertically (node) {\n let smallestWidth = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const w = xExtraSpace(child);\n if (w < smallestWidth) {\n smallestWidth = w;\n }\n });\n return smallestWidth;\n}\n\nexport function determineBoundBox (bb, i, arr, instance) {\n if (i) {\n // if not first sibling, take boundbox from previous sibling\n const lastSibling = arr[i - 1];\n const { top: _top, left: _left, height: _height, width: _width } = lastSibling.boundBox();\n return {\n width: bb.width,\n height: bb.height,\n\n top: instance.parentCut() === 'h'\n ? _top + _height : _top,\n\n left: instance.parentCut() === 'h'\n ? _left : _left + _width\n };\n }\n // if first sibling, take boundbox from parent\n const { top: _top, left: _left } = instance.parent().boundBox();\n return {\n width: bb.width,\n height: bb.height,\n top: _top,\n left: _left\n };\n}\n\n// prepares the targetComponent Map for target Mapping ie. where a component should lie\nexport function prepareTargetComponentMap (context) {\n context.targetComponentMap(new Map());\n context.componentMap().forEach((value) => {\n if (context.targetComponentMap().has(value.target())) {\n context.targetComponentMap().get(value.target()).push(value);\n } else {\n const temp = [];\n temp.push(value);\n context.targetComponentMap().set(value.target(), temp);\n }\n });\n}\n\nexport function getComponent (canvasComponent, componentName) {\n const comp = canvasComponent.find(component => component.name() === componentName);\n return (comp && comp !== -1) ? comp : null;\n}\nexport function createPlaceHolderComponent (height, width, position) {\n const comp = new DummyComponent(0, { height, width });\n comp.name('placeHolder');\n comp.position(position);\n return comp;\n}\n\nexport function placeComponent (definitionModel, component, isPreferred = false, isGridComponent = false) {\n let cut = '';\n let componentRatioWidth = 1;\n let leftOvercomponentRationWidth = 1;\n let leftHeight = 0;\n let leftWidth = 0;\n\n if (!component) {\n return { first: definitionModel, second: definitionModel };\n }\n\n const { height: componentHeight, width: componentWidth } = component.getLogicalSpace();\n const position = component.position();\n if (position === 'top' || position === 'bottom') {\n cut = 'h';\n componentRatioWidth = componentHeight / definitionModel.remainingHeight();\n leftHeight = definitionModel.remainingHeight() - componentHeight;\n leftWidth = definitionModel.remainingWidth();\n } else {\n cut = 'v';\n componentRatioWidth = componentWidth / definitionModel.remainingWidth();\n leftWidth = definitionModel.remainingWidth() - componentWidth;\n leftHeight = definitionModel.remainingHeight();\n }\n leftOvercomponentRationWidth = 1 - componentRatioWidth;\n\n// update parentModel\n definitionModel.cut(cut);\n const firstLaneConfig = {\n host: component.name(),\n cut: null,\n ratioWeight: componentRatioWidth,\n preferred: isGridComponent ? false : isPreferred,\n lanes: []\n };\n const firstLane = new DefinitionModel(firstLaneConfig);\n firstLane.remainingHeight(componentHeight);\n firstLane.remainingWidth(componentWidth);\n\n const secondLaneConfig = {\n host: null,\n cut: null,\n ratioWeight: leftOvercomponentRationWidth,\n preferred: isGridComponent ? false : !isPreferred,\n lanes: []\n };\n const secondLane = new DefinitionModel(secondLaneConfig);\n secondLane.remainingHeight(leftHeight);\n secondLane.remainingWidth(leftWidth);\n if (isPreferred) {\n definitionModel.lanes([firstLane]);\n } else if (position === 'top' || position === 'left') {\n definitionModel.lanes([firstLane, secondLane]);\n } else {\n definitionModel.lanes([secondLane, firstLane]);\n }\n return { first: firstLane, second: secondLane };\n}\n\nexport function placeGridComponent (definitionModel, gridComponents) {\n let tempDefModel = definitionModel;\n const rows = gridComponents.length;\n const column = rows ? gridComponents[0].length : 0;\n const height = gridComponents.reduce((acc, val) => (acc + val[0].getLogicalSpace().height), 0);\n\n for (let i = 0; i < column; i++) {\n const iscolumnPreffered = i === column - 1;\n const columnPlaceHolderComponent = createPlaceHolderComponent(height,\n gridComponents[0][i].getLogicalSpace().width, 'left');\n const { first, second } = placeComponent(tempDefModel, columnPlaceHolderComponent, iscolumnPreffered);\n tempDefModel = first;\n for (let j = 0; j < rows; j++) {\n const rowpreffred = j === (rows - 1);\n tempDefModel = placeComponent(tempDefModel, gridComponents[j][i], rowpreffred, true).second;\n }\n tempDefModel = second;\n }\n return tempDefModel;\n}\n\nexport function negotiateDimension (node) {\n let preferred;\n let cumultiveExtraSpaceAmt = 0;\n let alteredDim;\n let nonAlteredDim;\n\n const childrenLength = node.children().length;\n\n for (let index = 0; index < childrenLength; index++) {\n let fn;\n let extraSpaceAmt;\n const child = node.children()[index];\n\n if (child.parentCut() === 'h') {\n fn = yExtraSpace;\n alteredDim = 'height';\n nonAlteredDim = 'width';\n } else {\n fn = xExtraSpace;\n alteredDim = 'width';\n nonAlteredDim = 'height';\n }\n // if vertical then get extra height from other node and push it to the preferred node.\n // for horizontal cut the same thing is to be done with width\n if (child.isPreferred()) {\n // push extra space in sink. Execute it when all non preferred space are computed.\n preferred = child;\n\n continue; // eslint-disable-line no-continue\n }\n // reduce own height and save it in a var\n cumultiveExtraSpaceAmt += (extraSpaceAmt = fn(child));\n child.boundBox()[alteredDim] -= extraSpaceAmt;\n // update nonaltered dim from parent for any change which happened during negotiation\n child.boundBox()[nonAlteredDim] = child.parent().boundBox()[nonAlteredDim];\n\n negotiateDimension(child);\n }\n\n if (preferred) {\n preferred.boundBox()[alteredDim] += cumultiveExtraSpaceAmt;\n preferred.boundBox()[nonAlteredDim] = preferred.parent().boundBox()[nonAlteredDim];\n negotiateDimension(preferred);\n }\n}\n\nexport function computePosition (node) {\n node.children().forEach((child, i, children) => {\n const boundBox = determineBoundBox(child.boundBox(), i, children, child);\n child.boundBox(boundBox);\n computePosition(child);\n });\n}\n\nexport function allocateBoundingBox (node) {\n const totalWeight = node.children()\n .map(child => child.model().ratioWeight())\n .reduce((carry, val) => carry + val, 0);\n\n node.children().forEach((child, i, children) => {\n const lastSibling = children[i - 1];\n const ratio = child.model().ratioWeight() / totalWeight;\n\n if (child.parentCut() === 'h') {\n child.boundBox({\n top: i ? lastSibling.boundBox().top + lastSibling.boundBox().height : 0,\n left: child.parent().boundBox().left,\n height: child.parent().boundBox().height * ratio,\n width: child.parent().boundBox().width\n });\n } else {\n child.boundBox({\n top: child.parent().boundBox().top,\n left: i ? lastSibling.boundBox().left + lastSibling.boundBox().width : 0,\n height: child.parent().boundBox().height,\n width: child.parent().boundBox().width * ratio\n });\n }\n allocateBoundingBox(child);\n });\n}\n\n","import { getNodeId } from '../helper';\nimport { LayoutComponent } from '../../layout-component';\n\nclass Node {\n constructor (data) {\n this._model = data;\n this._parent = null;\n this._children = [];\n this._parentCut = null;\n this._boundBox = {\n top: null,\n left: null,\n height: null,\n width: null\n };\n\n this._id = this._model.host() instanceof LayoutComponent && this._model.host().renderAt() ?\n this._model.host().renderAt() :\n getNodeId();\n }\n\n addChildren (entries) {\n this._children.push(...entries);\n entries.forEach((e) => { e.parent(this); });\n }\n\n isRoot () {\n return this._parent === null;\n }\n\n isLeaf () {\n return !this._children.length;\n }\n\n getCutType () {\n return this._model.cut();\n }\n\n isPreferred () {\n return !!this._model.preferred();\n }\n\n children (children) {\n if (children) {\n this._children = children;\n }\n return this._children;\n }\n\n parent (parent) {\n if (parent) {\n this._parent = parent;\n }\n return this._parent;\n }\n\n parentCut (parentCut) {\n if (parentCut) {\n this._parentCut = parentCut;\n }\n return this._parentCut;\n }\n\n id (id) {\n if (id) {\n this._id = id;\n }\n return this._id;\n }\n\n model (model) {\n if (model) {\n this._model = model;\n }\n return this._model;\n }\n\n boundBox (bound) {\n if (bound) {\n this._boundBox = {\n top: bound.top,\n left: bound.left,\n height: bound.height,\n width: bound.width\n };\n }\n return this._boundBox;\n }\n /**\n * function to search a node and update it with the config provided.\n * @param {Object} nodeconfig\n */\n updateNode (nodeconfig) {\n if (this._id === nodeconfig._id) {\n this._model.cut(nodeconfig.cut);\n this._model.ratioWeight(nodeconfig.ratioWeight);\n } else {\n this._children.forEach((node) => {\n if (node._id === nodeconfig._id) {\n node.model.cut(nodeconfig.cut);\n node.model.ratioWeight(nodeconfig.ratioWeight);\n return;\n }\n this.searchNode(node, nodeconfig);\n });\n }\n }\n\n // Recursive function to search a node\n searchNode (node, nodeconfig) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeconfig._id) {\n childNode.model().cut(nodeconfig.cut);\n childNode.model().ratioWeight(nodeconfig.ratioWeight);\n } else {\n this.searchNode(childNode, nodeconfig);\n }\n });\n }\n\n /**\n * function to delete a node from tree Structure.\n * @param {String} nodeId - node Id of the Node\n */\n delete (nodeId) {\n this._children.forEach((node) => {\n if (node.id() === nodeId) {\n const index = this._children.indexOf(node);\n this._model.lanes().splice(index, 1);\n }\n this.deleteSearchNode(node, nodeId);\n });\n }\n\n // Recursive function to search a node\n deleteSearchNode (node, nodeId) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeId) {\n const index = node.children().indexOf(childNode);\n node.model().lanes().splice(index, 1);\n } else {\n this.deleteSearchNode(childNode, nodeId);\n }\n });\n }\n}\n\nexport default Node;\n","import Node from '../tree';\nimport {\n allocateBoundingBox,\n negotiateDimension,\n computePosition\n} from '../helper';\n\nexport default class LayoutModel {\n constructor (measurements, config) {\n this._measurements = measurements;\n this._config = config;\n this._root = this.createTree(this._config, null);\n this.setBoundBox();\n }\n\n createTree (config, parent) {\n const node = new Node(config);\n if (parent) {\n node.parentCut(parent.getCutType());\n parent.addChildren([node]);\n } else {\n this._root = node;\n }\n for (const lane of config.lanes()) {\n this.createTree(lane, node);\n }\n\n return this._root;\n }\n\n setBoundBox () {\n this._root.boundBox({\n top: 0,\n left: 0,\n width: this._measurements.width,\n height: this._measurements.height\n });\n allocateBoundingBox(this._root);\n }\n\n setHostPosition (node) {\n node.children().forEach((child) => {\n LayoutModel.setHostSpatialConfig(child);\n this.setHostPosition(child);\n });\n }\n\n static setHostSpatialConfig (node) {\n const bb = node.boundBox();\n const host = node.model().host();\n if (host && host.setSpatialConfig) {\n const conf = {\n x: bb.left,\n y: bb.top,\n width: bb.width,\n height: bb.height,\n renderAt: node.id()\n };\n host.setSpatialConfig(conf);\n }\n }\n\n negotiate () {\n negotiateDimension(this._root);\n computePosition(this._root);\n return this;\n }\n\n broadcast () {\n this.setHostPosition(this._root);\n return this;\n }\n\n tree () {\n return this._root;\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\nexport const ROW_MATRIX_INDEX = {\n 0: 'top',\n 1: 'center',\n 2: 'bottom'\n};\n\nexport const COLUMN_MATRIX_INDEX = {\n 0: 'left',\n 1: 'middle',\n 2: 'right'\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';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const GRID = 'grid';\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n\nexport const PAGINATION = 'pagination';\nexport const BUFFER = 'buffer';\nexport const HOLISTIC = 'holistic';\nexport const SCROLL = 'scroll';\nexport const MIDDLE = 'middle';\nexport const NO_BORDERS = null;\n\nexport const MAX_WIDTH_AVAIL_FOR_COL_MATRIX = 'maxWidthAvailableForColumnMatrix';\nexport const COLUMN_MATRIX = 'columnMatrix';\nexport const MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX = 'maxHeightAvailableForRowMatrix';\nexport const ROW_MATRIX = 'rowMatrix';\n","/* eslint no-undef: \"off\" */\n/* eslint default-case: \"off\" */\nexport class Utils {\n static isDOMElement (element) {\n return element instanceof Element;\n }\n\n static getID (element) {\n return element.id;\n }\n\n static getElement (id) {\n return document.getElementById(id);\n }\n\n static findContainer (data) {\n return data.filter(coordinate => coordinate.parent == null)[0];\n }\n /**\n * static method to remove the div\n * @param {} divId - div ID to be removed.\n */\n static removeDiv (divId) {\n if (document.getElementById(divId) !== null) { document.getElementById(divId).remove(); }\n }\n}\n","import { DEFAULT_CLASS_NAME } from '../constants/defaults';\nimport { LayoutComponent } from '../layout-component';\n\nexport default class DataPoint {\n constructor (node) {\n this._node = node;\n this._className = node.model().host() instanceof LayoutComponent ?\n node.model().host().className() : DEFAULT_CLASS_NAME;\n }\n\n node () {\n return this._node;\n }\n\n hasHost () {\n return this._node.model().host() instanceof LayoutComponent;\n }\n\n className () {\n return this._className || DEFAULT_CLASS_NAME;\n }\n}\n","import { getnodePoints } from './helper';\n\nexport class DataParser {\n constructor (data) {\n this._data = data;\n }\n\n defaultDataPointLogic () {\n const nodepoints = [];\n getnodePoints(this._data, nodepoints);\n return nodepoints;\n }\n\n}\n","import DataPoint from './data-point';\n\nexport const getnodePoints = (node, nodepoints) => {\n const datapoint = new DataPoint(node);\n nodepoints.push(datapoint);\n node.children().forEach((child) => {\n getnodePoints(child, nodepoints);\n });\n};\n","import { DataParser } from './data-parser';\n\nexport class HTMLDataAdapter extends DataParser {\n getCoordinates () {\n return super.defaultDataPointLogic();\n }\n}\n","export class Renderer {\n\n initRenderer (node, tree) {\n node.__logicalTree = tree;\n }\n}\n","import { HTMLDataAdapter } from '../data-adapters/html-data';\nimport { Utils } from '../utils';\nimport { Renderer } from './renderer';\n\nexport class HTMLRenderer extends Renderer {\n constructor (data) {\n super();\n this._data = data;\n this._coordinates = new HTMLDataAdapter(this._data).getCoordinates();\n }\n\n createhtml (mount, className) {\n const mainDiv = mount;\n super.initRenderer(mainDiv, this._data); // Initialise node with layout id\n this.parentDiv = this.createAndCustomiseParent(className);\n this._coordinates.forEach((node) => {\n if (node.hasHost()) {\n const host = node.node();\n this.parentDiv.appendChild(this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: node.className() }));\n }\n });\n mainDiv.appendChild(this.parentDiv);\n }\n\n createAndPositionDiv (config) {\n const { top, left, height, width, className, id } = config;\n const existingDiv = document.getElementById(id);\n const div = existingDiv || document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = `${left}px`;\n div.style.top = `${top}px`;\n div.style.height = `${height}px`;\n div.style.width = `${width}px`;\n div.id = id;\n div.className = className;\n return div;\n }\n\n createAndCustomiseParent (className) {\n const container = Utils.findContainer(this._coordinates);\n const host = container.node();\n const parentDiv = this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: container.className() });\n parentDiv.className = className;\n parentDiv.style.position = 'relative';\n return parentDiv;\n }\n\n coordinates () {\n return this._coordinates;\n }\n}\n","import { selectElement } from 'muze-utils';\nimport { HTMLRenderer } from '../renderers/html-renderer';\nimport { LayoutComponent } from '../layout-component';\n\nexport const getChildNode = (context, config) =>\n context.renderer().createAndPositionDiv(config);\n\nexport const findNode = (context, nodeID) =>\n context.renderer().coordinates().find(point => point.node().id() === nodeID);\n\nexport const renderHTML = (context) => {\n context.renderer(new HTMLRenderer(context.data()));\n context.renderer().createhtml(context.mount(), context.className());\n};\n\nexport const drawLayout = context => renderHTML(context);\n\nexport const drawComponent = (componentData) => {\n componentData.children().forEach((node) => {\n const host = node.model().host();\n if (host instanceof LayoutComponent) {\n host.draw();\n }\n drawComponent(node);\n });\n};\n\nexport const removeElement = (elemID) => {\n if (elemID) {\n selectElement(`#${elemID}`).remove();\n }\n};\n\nconst setAlignConfig = (alignment, params) => {\n let newNodeConfig = {};\n const { node, refNode } = params;\n switch (alignment) {\n case 'left':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(refNode.left - node.left))\n };\n break;\n\n case 'right':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(node.left + node.width - (refNode.left + refNode.width)))\n };\n break;\n\n case 'top':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: Math.abs(node.height - Math.abs(refNode.top - node.top)),\n width: node.width\n };\n break;\n\n case 'bottom':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: Math.abs(node.top - refNode.top + refNode.height),\n width: node.width\n };\n break;\n\n case 'h-center':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: refNode.width\n };\n break;\n\n case 'v-center':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: refNode.top,\n width: node.width\n };\n break;\n default:\n break;\n }\n return newNodeConfig;\n};\n\nexport const resolveAligment = (context, componentData) => {\n componentData.children().forEach((component) => {\n const host = component.model().host();\n\n if (host instanceof LayoutComponent && host.alignWith()) {\n const componentToAlign = context.componentMap().get(host.alignWith());\n\n if (componentToAlign) {\n const point = findNode(context, component.id()).node();\n const node = point.boundBox();\n const refNode = findNode(context, componentToAlign.renderAt())\n .node()\n .boundBox();\n const newNodeConfig = setAlignConfig(host.alignment(), { node, refNode });\n\n // check if model in parent component\n Object.assign(newNodeConfig, { id: point.id(), className: host.className() });\n context.renderer().createAndPositionDiv(newNodeConfig);\n context.componentMap().get(host.name()).setSpatialConfig({\n x: newNodeConfig.left,\n y: newNodeConfig.top,\n height: newNodeConfig.height,\n width: newNodeConfig.width\n\n });\n }\n }\n\n resolveAligment(context, component);\n });\n};\n","import { Utils } from '../utils';\nimport { drawLayout, resolveAligment, drawComponent } from './helper';\n\nexport class DrawingManager {\n constructor (data, renderer, container) {\n this._data = data.tree;\n this._componentMap = data.componentMap;\n this._layoutClassName = data.layoutClassName;\n this._renderer = renderer;\n this._mount = Utils.isDOMElement(container) ? container : Utils.getElement(container);\n }\n\n draw () {\n drawLayout(this);\n resolveAligment(this, this._data);\n drawComponent(this._data);\n return this;\n }\n\n data (data) {\n if (data) {\n this._data = data;\n }\n return this._data;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n className (param) {\n if (param) {\n this._layoutClassName = param;\n }\n return this._layoutClassName;\n }\n\n renderer (param) {\n if (param) {\n this._renderer = param;\n }\n return this._renderer;\n }\n\n mount (param) {\n if (param) {\n this._mount = param;\n }\n return this._mount;\n }\n}\n","import DefinitionModel from './definitionModel';\nimport { prepareTargetComponentMap, getComponent, placeComponent, placeGridComponent } from '../helper';\n\nexport default class DefinitionManager {\n constructor (componentMap, sequence, totalHeight, totalWidth) {\n this._componentMap = componentMap;\n this._prioritySequence = sequence;\n this._totalHeight = totalHeight;\n this._totalWidth = totalWidth;\n this._targetComponentMap = null;\n }\n\n // create the config model\n generateConfigModel () {\n prepareTargetComponentMap(this);\n const canvasComponent = this._targetComponentMap.get('canvas');\n const definitionModel = new DefinitionModel({});\n let tempDefModel = definitionModel;\n definitionModel.remainingHeight(this._totalHeight);\n definitionModel.remainingWidth(this._totalWidth);\n\n let componentRef = null;\n\n this._prioritySequence.forEach((name) => {\n componentRef = getComponent(canvasComponent, name);\n if (name !== 'grid') {\n tempDefModel = placeComponent(tempDefModel, componentRef).second;\n } else {\n tempDefModel = placeGridComponent(tempDefModel, componentRef.component);\n }\n });\n return definitionModel;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n targetComponentMap (param) {\n if (param) {\n this._targetComponentMap = param;\n }\n return this._targetComponentMap;\n }\n}\n","import { sanitizeConfig } from './helper';\n\nexport class LayoutDef {\n constructor () {\n this._componentMap = new Map();\n this._layoutDefinition = null;\n }\n\n addComponent (component) {\n this._componentMap.set(component.name(), component);\n }\n\n layoutDefinition (def) {\n if (def) {\n this._layoutDefinition = def;\n }\n return this._layoutDefinition;\n }\n\n addMultipleComponent (componentArray) {\n componentArray.forEach((comp) => {\n this.addComponent(comp);\n });\n }\n\n sanitizedDefinition () {\n sanitizeConfig(this, this._layoutDefinition);\n return this.layoutDefinition();\n }\n\n componentMap () {\n return this._componentMap;\n }\n resetComponentMap () {\n this._componentMap.clear();\n }\n}\n","import DefinitionManager from '../layout-definition/definition-manager';\n\nexport function sanitizeConfig (context, hostObj) {\n const hostID = hostObj.host();\n if (hostObj.lanes() && hostObj.lanes().length) {\n hostObj.lanes().forEach(childHost => sanitizeConfig(context, childHost));\n }\n if (hostID != null && typeof (hostID) === 'string') {\n if (context.componentMap().get(hostID) !== undefined) {\n hostObj.host(context.componentMap().get(hostID));\n }\n }\n}\n\nexport function calLayOutDef (context) {\n const { height, width } = context.dimension();\n const defManager = new DefinitionManager(context.layoutDef().componentMap(),\n context.prioritySequence(),\n height,\n width);\n const genLayoutdef = defManager.generateConfigModel();\n return genLayoutdef;\n}\n","import {\n LayoutModel\n} from '../layout-definition';\n\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT\n} from '../constants/defaults';\n\nimport {\n GRID\n} from '../../enums/constants';\n\nimport { DrawingManager } from '../drawing-manager';\nimport { removeElement } from '../drawing-manager/helper';\nimport { Utils } from '../utils';\nimport { LayoutDef } from './layout-def';\nimport { calLayOutDef } from './helper';\n\nexport default class LayoutManager {\n constructor (conf) {\n this._renderAt = conf.renderAt;\n this._layoutClassName = conf.className;\n this._dimension = {\n width: conf.width || DEFAULT_WIDTH,\n height: conf.height || DEFAULT_HEIGHT\n };\n\n this._skeletonType = conf.skeletonType || 'html';\n this._layoutDefinition = null;\n this._layoutDef = new LayoutDef();\n this._drawingManager = null;\n this._prioritySequence = [];\n this.tree = null;\n this._rootNodeID = null;\n }\n\n layoutDef (param) {\n if (param) {\n this._layoutDef = param;\n }\n return this._layoutDef;\n }\n\n prioritySequence (param) {\n if (param) {\n this._prioritySequence = param;\n }\n return this._prioritySequence;\n }\n\n dimension (param) {\n if (param) {\n Object.assign(this._dimension, param);\n }\n return this._dimension;\n }\n\n addComponent (component) {\n this._layoutDef.addComponent(component);\n }\n\n addMultipleComponent (componentArray) {\n this._layoutDef.addMultipleComponent(componentArray);\n }\n\n resetNode (node) {\n if (this.con) {\n this.con.resetNode(node);\n }\n }\n\n /**\n * function to update the node and rerender the layout.\n * @param {} config - node configuration to change.\n */\n updateNode (config) {\n this.tree.updateNode(config);\n this._layoutDefinition = this.tree.model;\n this.compute();\n }\n\n compute () {\n //----\n if (Utils.isDOMElement(this._renderAt)) {\n this._renderAt._layout = this;\n } else {\n document.getElementById(this._renderAt)._layout = this;\n }\n //-----\n this._layoutDefinition = calLayOutDef(this);\n this._layoutDef.layoutDefinition(this._layoutDefinition);\n this._layoutDefinition = this._layoutDef.sanitizedDefinition();\n this._layout = new LayoutModel({\n width: this._dimension.width,\n height: this._dimension.height\n },\n this._layoutDefinition);\n this.tree = this._layout.negotiate().tree();\n this._layout.broadcast();\n this._drawingManager = new DrawingManager({\n tree: this.tree,\n componentMap: this._layoutDef.componentMap(),\n layoutClassName: this._layoutClassName\n }, this._skeletonType, this._renderAt);\n\n if (this._rootNodeID) {\n this.tree.id(this._rootNodeID);\n } else {\n this._rootNodeID = this.tree.id();\n }\n // this will draw all the components by calling their draw method\n this._drawingManager.draw();\n }\n\n getRootNodeId () {\n return this._rootNodeID;\n }\n\n /**\n * This function takes the LayoutComponents and Register them in component store\n * @param {Array} layoutComponents\n */\n registerComponents (layoutComponents) {\n this._prioritySequence.length = 0;\n this._layoutDef.resetComponentMap();\n layoutComponents.forEach((container) => {\n if (container) {\n this._prioritySequence.push(container.name());\n this.addComponent(container);\n if (container.name() === 'grid') {\n container.component.forEach((componentArr) => {\n componentArr.forEach((compo) => {\n this.addComponent(compo);\n });\n });\n }\n }\n });\n return this;\n }\n\n getComponent (componentName) {\n return this._layoutDef.componentMap().get(componentName);\n }\n\n deleteElement (component, elementName) {\n this._layoutDef.componentMap().delete(elementName);\n const deleteElementId = component.renderAt();\n return removeElement(deleteElementId);\n }\n\n removeComponent (name) {\n const component = this.getComponent(name);\n if (component) {\n if (name === GRID) {\n return component.component.map(comp => comp.map(\n co => this.deleteElement(co, co.name())\n ));\n }\n return this.deleteElement(component, name);\n }\n return this;\n }\n\n renderAt (mount) {\n if (mount) {\n this._renderAt = mount;\n }\n return this._renderAt;\n }\n}\n","import { isEqual, STATE_NAMESPACES, selectElement, getValueParser } from 'muze-utils';\nimport { VisualGroup } from '@chartshq/visual-group';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, DATA, CONFIG, GRID }\n from '../constants';\nimport { canvasOptions } from './local-options';\nimport { LayoutManager } from '../../../layout/src/tree-layout';\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.} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, Object.assign({\n throwback: context._throwback\n }, context.dependencies()))];\n};\n\nexport const fixScrollBarConfig = (config) => {\n config.scrollBar.thickness = Math.min(50, Math.max(10, config.scrollBar.thickness));\n return config;\n};\n\nexport const setLayoutInfForUnits = (context) => {\n const layoutManager = context._layoutManager;\n const gridLayout = layoutManager.getComponent(GRID);\n const boundBox = gridLayout && gridLayout.getBoundBox();\n const valueMatrix = context.composition().visualGroup.matrixInstance().value;\n const parentContainer = selectElement(`#${layoutManager.getRootNodeId()}`).node();\n valueMatrix.each((cell) => {\n cell.valueOf().parentContainerInf({\n el: parentContainer,\n dimensions: boundBox\n });\n });\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 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 const { invalidValues } = context.config();\n\n visualGroup.valueParser(getValueParser(invalidValues));\n visualGroup.createMatrices();\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\nconst equalityChecker = (props, params) => {\n let checker = () => false;\n return !props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n checker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n checker = isEqual('Object');\n break;\n default:\n checker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return checker(oldVal, newVal);\n });\n};\n\nconst updateChecker = (props, params) => props.every((option, i) => {\n const val = params[i][1];\n switch (option) {\n case ROWS:\n case COLUMNS:\n return val !== null;\n\n case DATA:\n return val && !val.isEmpty();\n\n default:\n return true;\n\n }\n});\n\nexport const notifyAnimationEnd = (context) => {\n const viewInfo = context.layout().viewInfo();\n const centerMatrix = viewInfo && viewInfo.viewMatricesInfo.matrices.center[1] || [];\n const promises = [];\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n promises.push(cell.valueOf().done());\n });\n });\n const lifeCycleManager = context.lifeCycle();\n if (promises.length) {\n Promise.all(promises).then(() => {\n // Update life cycle\n lifeCycleManager.notify({ client: context, action: 'drawn' });\n const animDonePromises = [];\n\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n cell.valueOf().layers().forEach((layer) => {\n animDonePromises.push(layer.animationDone());\n });\n });\n });\n\n [context.xAxes(), context.yAxes()].forEach((axisArr) => {\n axisArr = axisArr || [];\n axisArr.forEach((axes) => {\n axes.forEach((axisInst) => {\n animDonePromises.push(axisInst.animationDone());\n });\n });\n });\n\n Promise.all(animDonePromises).then(() => {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n });\n });\n } else {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n }\n};\n\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n const nameSpaceProps = [...allOptions, ...Object.keys(canvasOptions)].map(prop =>\n `${STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE}.${prop}`);\n store.registerChangeListener(nameSpaceProps, (...params) => {\n const equalityProps = equalityChecker(props, params);\n const updateProps = updateChecker(props, params);\n // inform attached board to rerender\n if (equalityProps && context.mount()) {\n if (updateProps) {\n dispatchProps(context);\n } else {\n context.composition().visualGroup.remove();\n }\n context.render();\n }\n notifyAnimationEnd(context);\n }, true);\n};\n\nexport const applyInteractionPolicy = (firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n if (visualGroup) {\n const valueMatrix = visualGroup.matrixInstance().value;\n const interactionPolicy = firebolt._interactionPolicy;\n interactionPolicy(valueMatrix, firebolt);\n const crossInteractionPolicy = firebolt._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\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/**\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 */\nexport const 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 const rotationVal = xAxes[i][j].renderConfig().labels.rotation;\n if (rotationVal && rotationVal !== 0) {\n rotation = rotationVal;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.renderConfig({ labels: { rotation } });\n axis.smartTicks(axis.setTickConfig());\n });\n });\n }\n};\n\nexport const createGroupState = (context) => {\n const [globalState, localState] = VisualGroup.getState();\n const store = context._store;\n store.append('app.group', globalState);\n store.append('local.group', localState);\n};\n\nexport const removeChild = (mount) => {\n while (mount.firstChild) {\n mount.removeChild(mount.firstChild);\n }\n};\n\nexport const createLayoutManager = () => {\n const layoutManager = new LayoutManager({\n className: 'muze-group-container'\n });\n return layoutManager;\n};\n","/**\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 * @module GlobalOptions\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { fixScrollBarConfig } from './canvas/helper';\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, null],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n takesMultipleParams: true,\n sanitization: ([config, auxConfig = {}], oldConfig) => {\n // Stores additional config, if passed\n const { reset = false } = auxConfig;\n let oldConf = {};\n\n if (!reset) {\n oldConf = mergeRecursive({}, config === null ? {} : oldConfig);\n }\n\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return fixScrollBarConfig(newConf);\n }\n\n }\n }\n};\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 *\n * @memberof GenericLayout\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 this._config.border.width = Math.max(0, this._config.border.width);\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.PAGINATION]: 'scroll',\n [FieldNames.BUFFER]: 20,\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","/**\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 *\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 *\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.setAvailableSpace();\n const space = placeholder.getLogicalSpace();\n const minSecondMeasure = placeholder.getMinMeasures(minMeasures[secondMeasure]);\n\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minSecondMeasure);\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\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\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\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, ERROR_MSG } from 'muze-utils';\nimport {\n createTree,\n combineMatrices,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { 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._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\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 computeLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n computeViewableSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getPriorityDistribution () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 redistributeSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n static defaultConfig () {\n return defaultConfig;\n }\n\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\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.redistributeSpaces(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 * 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 getViewableMatrices () {\n return this.viewableMatrix;\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","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n computeLogicalSpace,\n createMatrixEachLevel\n } from '../utils';\nimport { ROW_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class RowVisualMatrix extends 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 super(matrix, config);\n\n this._breakPointer = (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: ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\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 computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, false);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height\n } = measures;\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = [height, height];\n const columnMeasures = widths;\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\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 tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n let remainingAvailWidth;\n let remainingWidth;\n let cWidths = [];\n let conditions = [];\n let maxPrioritySpace = 0;\n const {\n matrix,\n width: availableWidth,\n maxMeasures: maxWidths,\n maxWidth: currentWidth,\n height\n } = measures;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length ? this.primaryMatrix()[0].length : 0;\n\n const dist = [];\n\n remainingAvailWidth = availableWidth;\n remainingWidth = currentWidth;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n // divider = Math.min(2, matrixLen);\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n // divider = Math.min(1, matrixLen);\n }\n conditions.forEach((i) => {\n dist[i] = maxWidths[i];\n maxPrioritySpace += maxWidths[i];\n remainingAvailWidth -= dist[i];\n remainingWidth -= dist[i];\n });\n matrix[0].forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n dist[i] = remainingAvailWidth * (maxWidths[i] / remainingWidth);\n }\n });\n matrix.forEach(row => row.forEach((col, cIdx) => {\n if (conditions.indexOf(cIdx) === -1) {\n col.setAvailableSpace(dist[cIdx], height);\n\n cWidths[cIdx] = Math.max(cWidths[cIdx] || 0, Math.floor(col.getLogicalSpace().width));\n } else {\n cWidths[cIdx] = 0;\n }\n }));\n\n const prioritySpace = availableWidth - cWidths.reduce((t, n) => t + n);\n if (prioritySpace < 0) {\n cWidths = cWidths.map(() => 0);\n } else {\n conditions.forEach((i) => {\n cWidths[i] = Math.floor(prioritySpace * (dist[i] / maxPrioritySpace || 1));\n });\n }\n return cWidths;\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 const { height } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n\n return Math.min(widthMeasures.length - 1, i);\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 redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const maxMeasures = this.maxMeasures();\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n const logicalWidths = this.getPriorityDistribution({\n matrix: this._layoutMatrix,\n maxWidth,\n maxMeasures,\n width,\n height\n });\n\n this.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, logicalWidths };\n const measures = this.redistributeViewSpaces(options);\n maxWidths = measures.maxWidths;\n maxHeights = measures.maxHeights;\n });\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, height, maxHeights, maxWidths, logicalWidths } = measures;\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n measures.maxMeasures = maxMeasures;\n measures.maxWidth = maxWidth;\n if (maxWidth > 0) {\n cWidths = logicalWidths;\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 if (maxWidths.length > 0) {\n cWidths = cWidths.map((e, i) => Math.max(e, maxWidths[0][i] || 0));\n }\n maxWidths.push(cWidths);\n for (let x = 0; x < maxWidths.length; x++) {\n maxWidths[x] = cWidths;\n }\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = measures;\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 cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n\n if (rIdx === 0 && cIdx < breakPointer) {\n columnWidths[0][cIdx] = colWidth;\n widths[0] = (widths[0] || 0) + colWidth;\n } else if (rIdx === 0 && cIdx >= breakPointer) {\n columnWidths[1][cIdx - breakPointer] = colWidth;\n widths[1] = (widths[1] || 0) + colWidth;\n }\n if (cIdx === this._lastLevelKey) {\n rowHeights[0][rIdx] = colHeight;\n rowHeights[1][rIdx] = colHeight;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n getDistributedWidth,\n spaceTakenByRow,\n createMatrixEachLevel,\n computeLogicalSpace\n } from '../utils';\nimport { COLUMN_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class ColumnVisualMatrix extends 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 super(matrix, config);\n\n this._breakPointer = matrix[0].length;\n\n // Create Tree\n this._tree = {\n key: COLUMN_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\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 computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, true);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height,\n width\n } = measures;\n\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i, height };\n const {\n heights,\n rowHeights,\n columnWidths\n } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = heights;\n const 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\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\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n const {\n height,\n maxHeights\n } = measures;\n let remainingHeight = height;\n let heightDist = [];\n let conditions = [];\n let divider = 2;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n divider = 2;\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n divider = 1;\n }\n maxHeights.forEach((heights, index) => {\n if (conditions.indexOf(index) === -1) {\n heightDist[index] = heights;\n remainingHeight -= heights;\n }\n });\n if (remainingHeight < 0) {\n heightDist = heightDist.map(() => 0);\n } else {\n conditions.forEach((condition) => {\n heightDist[condition] = Math.min(maxHeights[condition], (remainingHeight) / divider);\n });\n }\n return heightDist;\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) {\n let j;\n const { width } = this.availableSpace();\n\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, 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 redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n\n this.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 = this.redistributeViewSpaces(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let rHeights = [];\n const {\n matrix,\n width,\n maxHeights,\n maxWidths\n } = measures;\n const borderWidth = this.config().unitMeasures.border;\n\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();\n\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace.height);\n\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, Math.floor(col.getLogicalSpace().height));\n }));\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n maxHeights.push(rHeights);\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} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, height, maxWidths, maxHeights, matrixIndex } = measures;\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 const heightDistribution = this.getPriorityDistribution({ height, maxHeights: maxHeights[0] || [] });\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = heightDistribution[rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n\n if (cIdx === 0 && rIdx < breakPointer) {\n rowHeights[0][rIdx] = colHeight;\n heights[0] = (heights[0] || 0) + colHeight;\n } else if (cIdx === 0 && rIdx >= breakPointer) {\n rowHeights[1][rIdx - breakPointer] = colHeight;\n heights[1] = (heights[1] || 0) + colHeight;\n }\n if (rIdx === this._lastLevelKey) {\n columnWidths[0][cIdx] = colWidth;\n columnWidths[1][cIdx] = colWidth;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import {\n HEIGHT, WIDTH, COLUMN, ROW, HORIZONTAL, VERTICAL, HOLISTIC,\n MAX_WIDTH_AVAIL_FOR_COL_MATRIX, COLUMN_MATRIX, MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX, ROW_MATRIX, SCROLL\n} 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\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\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\nconst paginationDetailsMap = {\n column: {\n maxMeasure: MAX_WIDTH_AVAIL_FOR_COL_MATRIX,\n matrix: COLUMN_MATRIX,\n measureType: WIDTH,\n scrollType: HORIZONTAL\n },\n row: {\n maxMeasure: MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX,\n matrix: ROW_MATRIX,\n measureType: HEIGHT,\n scrollType: VERTICAL\n }\n};\n\n/**\n * This method provides the required width/height in the different pagination stages.\n * If the pagination is holistic, then only the max width/height will be provided for layouting\n * If scroll is enabled, then the entire width/height shall be provided for layouting\n * Note: width is required for scrolling the columns while height is required for scrolling rows\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {Object} measureDetails different measure details for row/column\n * @param {number} maxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst getMatrixMeasureForPagination = (layout, measureDetails, maxMeasure, buffer) => {\n const {\n pagination\n } = layout.config();\n const {\n matrix,\n measureType,\n scrollType\n } = measureDetails;\n\n switch (pagination) {\n case HOLISTIC:\n return maxMeasure;\n default: {\n const actualMeasure = getMatrixMeasurement(layout[matrix](), measureType) + buffer;\n\n if (actualMeasure > maxMeasure) {\n layout.scrollInfo({ [scrollType]: true });\n }\n return Math.max(maxMeasure, actualMeasure);\n }\n }\n};\n\n/**\n * This method uses the getMatrixMeasureForPagination function to calculate maximum measure\n * depending on the layouting algorithm used\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {string} matrixType row/column\n * @param {number} relatedMaxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst paginationMeasureGetter = (layout, matrixType, relatedMaxMeasure, buffer) =>\n getMatrixMeasureForPagination(layout, paginationDetailsMap[matrixType], relatedMaxMeasure, buffer);\n\nconst getMatrixWidthDetails = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const {\n width\n } = layout.measurement();\n const {\n border,\n buffer\n } = layout.config();\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Get maximum width allowed for the row matrix\n const maxRowMatrixWidth = Math.min(rowMatrixWidth + buffer, width / 2);\n\n // Get maximum width available for the column matrix\n const maxWidthAvailableForColumnMatrix = width - maxRowMatrixWidth - borderWidth;\n\n // Set width for column matrix\n const columnMatrixWidth = paginationMeasureGetter(layout, COLUMN, maxWidthAvailableForColumnMatrix, 0);\n\n return {\n rowMatrixWidth,\n maxRowMatrixWidth,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n\nconst getHeightRequiredByColMatrix = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const columnMatrix = layout.columnMatrix();\n\n // Get maximum allowed height for colum matrix\n const maxColumnMatrixHeight = Math.min(columnMatrix.getLogicalSpace().height, height / 2);\n\n // Set the computed width and max height to column matrix to determine the actual height\n // that will be taken by the column matrix\n columnMatrix.setAvailableSpace(columnMatrixWidth, maxColumnMatrixHeight);\n\n // Get the set of pages column view\n const columnViewPages = columnMatrix.getViewableSpaces();\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 return {\n columnMatrixHeight,\n maxColumnMatrixHeight\n };\n};\n\nconst getMatrixHeightDetails = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const {\n buffer\n } = layout.config();\n\n // Get actual height required by column matrix\n const { columnMatrixHeight, maxColumnMatrixHeight } = getHeightRequiredByColMatrix(layout, columnMatrixWidth);\n\n // Based on column height, compute max height available for row matrix\n const maxHeightAvailableForRowMatrix = height - Math.min(maxColumnMatrixHeight, columnMatrixHeight);\n\n // Get height for row matrix\n const rowMatrixHeight = paginationMeasureGetter(layout, ROW, maxHeightAvailableForRowMatrix, buffer);\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n };\n};\n\nconst setValueMatrixMeasurements = (layout, rowViewableSpaces, columnViewableSpaces) => {\n const centerMatrix = layout.centerMatrix();\n\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get the heights for each cell in the row matrix\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n\n // Get the widths for each of the row matrix cells(primary and secondary)\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n\n // Get the widths for each cell in the column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n\n // Get the widths for each of the column matrix cells(primary and secondary)\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix computed throught the row and\n // column matrices\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n\n // Set the heights and widths for the corner matrices namely:\n // TOP_LEFT\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n // TOP_RIGHT\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n // BOTTOM_LEFT\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n // BOTTOM_RIGHT\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n};\n\nconst bufferCondition = {\n isScroll: true,\n pagination: SCROLL\n};\n\nconst getBufferFromCondition = (layout, type) => {\n const scrollInfo = layout.scrollInfo();\n const {\n pagination\n } = layout.config();\n\n const currentBufferType = {\n pagination,\n isScroll: scrollInfo[type]\n };\n\n return Object.keys(bufferCondition).every(e => bufferCondition[e] === currentBufferType[e]);\n};\n\nconst getActualBufferFromConfig = (layout) => {\n const {\n buffer\n } = layout.config();\n const [horizontalBuffer, verticalBuffer] = [HORIZONTAL, VERTICAL].map((type) => {\n if (getBufferFromCondition(layout, type)) {\n return buffer;\n }\n return 0;\n });\n\n return {\n horizontalBuffer,\n verticalBuffer\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\n // Compute the widths of the row and column matrices\n const {\n rowMatrixWidth,\n maxRowMatrixWidth,\n maxWidthAvailableForColumnMatrix,\n columnMatrixWidth\n } = getMatrixWidthDetails(layout);\n\n // Compute the heights of the row and column matrices\n const {\n columnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n } = getMatrixHeightDetails(layout, columnMatrixWidth);\n\n const {\n horizontalBuffer,\n verticalBuffer\n } = getActualBufferFromConfig(layout);\n rowMatrix.setAvailableSpace(maxRowMatrixWidth - verticalBuffer, rowMatrixHeight - horizontalBuffer);\n\n // Get row and columns viewable spaces\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n\n // Set view spaces for row and columns\n setViewSpaces(layout, ROW, rowViewableSpaces);\n setViewSpaces(layout, COLUMN, columnViewableSpaces);\n\n // Set measures for each cell of the value matrix\n setValueMatrixMeasurements(layout, rowViewableSpaces, columnViewableSpaces);\n\n return {\n rowMatrixHeight: rowMatrixHeight - horizontalBuffer,\n rowMatrixWidth: rowMatrixWidth - verticalBuffer,\n maxHeightAvailableForRowMatrix: maxHeightAvailableForRowMatrix - horizontalBuffer,\n\n columnMatrixHeight,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\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.getViewableMatrices();\n const columnMatrices = columnMatrix.getViewableMatrices();\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\nconst measureSum = measureArr => measureArr.reduce((total, measure) => total + measure, 0);\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, maxRowHeight, maxColWidth) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowSpaces = rowMatrix.getViewableSpaces()[rowPointer];\n const colSpaces = columnMatrix.getViewableSpaces()[columnPointer];\n\n const {\n rowHeights,\n width: rowMatrixWidth\n } = rowSpaces;\n const {\n columnWidths,\n height: columnMatrixHeight\n } = colSpaces;\n\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = measureSum(rowHeights.primary);\n const centerWidth = measureSum(columnWidths.primary);\n const viewWidth = [leftWidth, Math.min(centerWidth, maxColWidth), rightWidth];\n const viewHeight = [topHeight, Math.min(centerHeight, maxRowHeight), bottomHeight];\n\n return {\n viewWidth,\n viewHeight,\n actualCenterMeasures: {\n height: centerHeight,\n width: centerWidth\n },\n totalMeasures: {\n width: measureSum(viewWidth),\n height: measureSum(viewHeight)\n },\n unitHeights: rowHeights,\n unitWidths: columnWidths\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, mergeRecursive } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements } from './computations';\nimport { getViewMeasurements, getViewMatrices } from './view-info-getter';\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 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 this._scrollInfo = { horizontal: false, vertical: false };\n }\n\n static defaultViewInfo () {\n return Object.assign({}, {\n layoutDimensions: {\n border: this.defaultConfig().border,\n viewHeight: [0, 0, 0],\n viewWidth: [0, 0, 0]\n },\n viewMatricesInfo: {\n columnPages: 0,\n rowPages: 0,\n matrices: { top: [], center: [], bottom: [] }\n }\n });\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 this.scrollInfo({ horizontal: false, vertical: false });\n const {\n maxHeightAvailableForRowMatrix,\n maxWidthAvailableForColumnMatrix\n } = computeLayoutMeasurements(this);\n\n this.setViewInformation(maxHeightAvailableForRowMatrix, maxWidthAvailableForColumnMatrix);\n return this;\n }\n\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.viewInfo();\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 pages (type) {\n const { viewMatricesInfo } = this.viewInfo();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n viewInfo (...viewInfo) {\n if (viewInfo.length) {\n this._viewInfo = viewInfo[0];\n return this;\n }\n return this._viewInfo;\n }\n\n scrollInfo (...scrollInfo) {\n if (scrollInfo.length) {\n this._scrollInfo = mergeRecursive(this._scrollInfo, scrollInfo[0]);\n return this;\n }\n return this._scrollInfo;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation (maxRowHeight, maxColWidth) {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this, maxRowHeight, maxColWidth);\n layoutDimensions.border = border;\n this.viewInfo({\n viewMatricesInfo,\n layoutDimensions\n });\n return this;\n }\n}\n","import RowMatrix from '../visual-matrix/row-matrix';\nimport ColumnMatrix from '../visual-matrix/column-matrix';\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 priority\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\n context.rowMatrix(new RowMatrix([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 priority: priority.row,\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 ColumnMatrix([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 priority: priority.col,\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import {\n TOP, BOTTOM, LEFT, RIGHT, CENTER, BLANK_BORDERS, COLUMN, ROW,\n VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS\n} from '../enums/constants';\n\nconst borderMap = {\n [`${TOP}-${LEFT}`]: NO_BORDERS,\n [`${TOP}-${MIDDLE}`]: COLUMN,\n [`${TOP}-${RIGHT}`]: NO_BORDERS,\n [`${CENTER}-${LEFT}`]: ROW,\n [`${CENTER}-${MIDDLE}`]: CENTER,\n [`${CENTER}-${RIGHT}`]: ROW,\n [`${BOTTOM}-${LEFT}`]: NO_BORDERS,\n [`${BOTTOM}-${MIDDLE}`]: COLUMN,\n [`${BOTTOM}-${RIGHT}`]: NO_BORDERS\n};\n\nconst applySpecificBorder = (cells, color, type, style) => {\n cells.style(`border-${type}`, `${style} ${color}`);\n};\n\nconst specificBorderApplier = (borderTypes, showBorders, cells, borderInfo) => {\n const {\n color,\n width,\n style\n } = borderInfo;\n const borderStyle = `${width}px ${style}`;\n\n borderTypes.forEach((borderType) => {\n applySpecificBorder(cells, showBorders[borderType] ? color : BLANK_BORDERS, borderType, borderStyle);\n });\n};\n\nconst borderApplier = (cells, borderInfo) => {\n const {\n showRowBorders,\n showColBorders,\n showValueBorders\n } = borderInfo;\n return {\n row: () => specificBorderApplier([TOP, BOTTOM], showRowBorders, cells, borderInfo),\n column: () => specificBorderApplier([LEFT, RIGHT], showColBorders, cells, borderInfo),\n center: () => specificBorderApplier([LEFT, RIGHT, TOP, BOTTOM], showValueBorders, cells, borderInfo)\n };\n};\n\nexport const applyBorders = (cells, border, row, column) => {\n const borderApplierFn = borderApplier(cells, border);\n const borderMapVal = borderMap[`${ROW_MATRIX_INDEX[VIEW_INDEX[row]]}-${COLUMN_MATRIX_INDEX[column]}`];\n if (borderMapVal) {\n borderApplierFn[borderMapVal]();\n }\n};\n","import { selectElement } from 'muze-utils';\nimport {\n TOP, BOTTOM, ROW_SPAN, COL_SPAN, CENTER, ROW, COLUMN\n} from '../enums/constants';\n\nconst orderMaker = arr => Array.from(Array(arr.length).keys());\n\nconst nestByStack = (stack, updateArr, optionalParams = {}) => {\n let {\n order,\n keyFn\n } = optionalParams;\n const arr = updateArr.slice();\n const currStack = stack.slice();\n const prevStack = currStack.slice();\n // Order in which element are to be checked for nesting, default normal looping\n // Order is always in the order of nest, i.e., left to right\n order = order || Array.from(Array(arr.length).keys());\n\n // Key function, if array of objects\n keyFn = keyFn || (v => v);\n\n // Return same array if stack is empty\n if (currStack.length === 0) {\n const newArr = [];\n order.forEach((e) => {\n newArr.push(arr[e]);\n });\n return { prevStack, currStack: arr, arr: newArr };\n }\n\n let arrVal = '';\n let stackVal = '';\n const newArr = [];\n\n // Loop in order\n for (let i = order.length - 1; i >= 0; i--) {\n // Get current element index from the order given\n const currElemIndex = order[i];\n\n // Crete a hashmap for the hierarchy by joining strings of the array for both stack and input array\n arrVal += keyFn(arr[currElemIndex]);\n stackVal += keyFn(currStack[currElemIndex]);\n\n // If the current value and value in stack is same, convert it to null\n if (arrVal === stackVal) {\n newArr[currElemIndex] = null;\n } else {\n stackVal = '';\n // Loop from the current index in order to the last element in order to change the\n // whole hierarchy\n for (let j = i; j < order.length; j++) {\n const newElem = order[j];\n const arrElem = arr[newElem];\n\n newArr[newElem] = arrElem;\n\n // Reset stack to new stack\n currStack[newElem] = arrElem;\n stackVal = arrVal;\n }\n }\n }\n const returnArr = [];\n order.forEach((e) => {\n returnArr.push(newArr[e]);\n });\n return { prevStack, currStack, arr: returnArr };\n};\n\nconst spanCalculator = (colData, colIdx, matrix, rIdx) => {\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData) {\n return () => null;\n }\n\n const conditions = {\n row: count => matrix[rIdx + count] && matrix[rIdx + count][colIdx],\n column: count => matrix[rIdx][colIdx + count]\n };\n\n return (type) => {\n let count = 1;\n let isNull = false;\n\n while (!isNull) {\n if (conditions[type](count) === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n };\n};\n\nconst maskCreator = (matrix, order) => ({\n row: () => {\n let stack = [];\n return matrix.map((e) => {\n const {\n currStack,\n arr\n } = nestByStack(stack, e, { keyFn: val => val.valueOf(), order });\n\n stack = currStack;\n return arr;\n });\n },\n column: () => {\n let stack = [];\n const viewMatrix = [];\n matrix.length && matrix[0].forEach((cell, colIndex) => {\n const hierarchy = [];\n matrix.forEach((row) => {\n hierarchy.push(row[colIndex]);\n });\n const {\n currStack,\n arr\n } = nestByStack(stack, hierarchy, { keyFn: val => val.valueOf(), order });\n stack = currStack;\n\n matrix.forEach((row, rowIndex) => {\n viewMatrix[rowIndex] = viewMatrix[rowIndex] || [];\n viewMatrix[rowIndex][colIndex] = arr[rowIndex];\n });\n });\n return viewMatrix;\n }\n});\n\nconst spanGenerator = viewMatrix => ({\n row: () => {\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 = spanCalculator(col, i, viewMatrix, ridx)('row');\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return spans;\n },\n column: () => viewMatrix.map((row, ridx) => row.map((col, i) => spanCalculator(col, i, viewMatrix, ridx)('column'))\n .filter(col => col !== null))\n});\n\nconst getOrder = () => ({\n row: matrix => orderMaker(matrix[0]),\n column: matrix => orderMaker(matrix)\n});\n\nconst matrixSpanGeneratorMap = {\n [`${TOP}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${BOTTOM}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${CENTER}-0`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n },\n [`${CENTER}-2`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n }\n};\n\nconst matrixSpanGenerator = (type) => {\n const generator = matrixSpanGeneratorMap[type];\n if (generator) {\n return generator;\n }\n return {\n orderGetter: () => null,\n viewMatrixMaker: matrix => () => matrix,\n spanMaker: () => () => null\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 spans = null;\n let viewMatrix = matrix;\n const {\n orderGetter,\n viewMatrixMaker,\n spanMaker\n } = matrixSpanGenerator(`${type}-${index}`);\n\n if (matrix.length) {\n const order = orderGetter(matrix);\n viewMatrix = viewMatrixMaker(matrix, order)();\n spans = spanMaker(viewMatrix)();\n }\n return { viewMatrix, spans };\n}\n\nconst spaceAllocationDueToSpan = (span = 1, placeholder, config, index) => {\n const height = placeholder.availHeight();\n const width = placeholder.availWidth();\n const borderWidth = config.border.width;\n const { unitWidths } = config.dimensions;\n const { col } = index;\n\n return {\n [ROW_SPAN] () {\n placeholder.setAvailableSpace(width, height * span);\n if (span === 1) {\n selectElement(this).style('height', `${height * span + borderWidth}px`);\n }\n },\n [COL_SPAN] () {\n const primaryUnitWidth = unitWidths.primary[col];\n if (span > 1) {\n let cumulativeWidth = 0;\n for (let i = col; i < col + span; i++) {\n cumulativeWidth += unitWidths.primary[i] - borderWidth;\n }\n placeholder.setAvailableSpace(cumulativeWidth + borderWidth, height);\n } else if (primaryUnitWidth) {\n placeholder.setAvailableSpace(primaryUnitWidth - borderWidth, height);\n }\n selectElement(this).style('height', `${height}px`);\n }\n };\n};\n\nconst spanApplier = (cells, spans, config, type) => {\n let cellCounter = 0;\n cells.attr(type, function (cell, colIndex) {\n if (colIndex === 0) {\n cellCounter = 0;\n }\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n const index = {\n row: cell.rowIndex,\n col: cellCounter\n };\n\n spaceAllocationDueToSpan(span, placeholder, config, index)[type].bind(this)();\n cellCounter += span;\n return span;\n });\n};\n\nconst spanApplierMap = {\n [`${TOP}-0`]: null,\n [`${TOP}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${TOP}-2`]: null,\n [`${CENTER}-0`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${CENTER}-1`]: null,\n [`${CENTER}-2`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${BOTTOM}-0`]: null,\n [`${BOTTOM}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${BOTTOM}-2`]: null\n};\n\nexport const applySpans = (cells, spans, config, type) => {\n const applier = spanApplierMap[type];\n if (applier) {\n applier(cells, spans, config);\n }\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 *\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';\nexport const MAX_LINES = 'maxLines';\nexport const MIN_CHARS = 'minCharacters';\nexport const ROTATION = 'rotation';\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 getMinMeasures (providedMinMeasure = 0) {\n return providedMinMeasure;\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]: null,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true,\n [CONSTANTS.MAX_LINES]: 0,\n [CONSTANTS.MIN_CHARS]: 0,\n [CONSTANTS.ROTATION]: null\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 minSpacing: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {},\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nconst textProps = {\n smartText: {}\n};\nexport const PROPS = {\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [TEXT]: mergeRecursive(textProps, 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, BOTTOM, TOP } 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\n if (width || height) {\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.source().logicalSpace(null);\n } else {\n this.source().resetLogicalSpace();\n }\n this.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 let actualWidth = 0;\n let actualHeight = 0;\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 orientation\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 selection.classed(`${CLASSPREFIX}-axis-container-${orientation}`, true);\n\n this.mount(mount);\n if (!availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (!availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n actualWidth = availWidth;\n actualHeight = availHeight;\n if (!show) {\n actualWidth = (orientation === TOP || orientation === BOTTOM) ? availWidth : 0;\n actualHeight = (orientation === TOP || orientation === BOTTOM) ? 0 : availHeight;\n }\n wrapperDiv.style(WIDTH, `${actualWidth}px`)\n .style(HEIGHT, `${actualHeight}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\n getMinMeasures () {\n return 0;\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\nconst setSmartText = (context) => {\n const source = context.source();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n rotation\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const labelManager = context.dependencies().labelManager;\n\n labelManager.setStyle(context._computedStyle);\n\n !rotation && context.smartText(labelManager.getSmartText(source, availWidth, availHeight, false));\n rotation && context.smartText(labelManager.getSmartText(source, availHeight, availWidth, true));\n\n return context;\n};\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 {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n show,\n maxLines,\n minCharacters\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const source = context.source();\n const space = context.smartText();\n const minText = new Array(minCharacters).fill('W').join('');\n const _minTextSpace = labelManager.getOriSize(minText);\n\n context.config({ rotation: false });\n if (space.width > (availWidth || 0) && maxLines) {\n space.height = space.oriTextHeight * maxLines;\n }\n if (availWidth && availWidth < space.width) {\n space.width = _minTextSpace.width;\n }\n if (availWidth && availWidth < Math.min(_minTextSpace.width, space.oriTextWidth)) {\n const smartSpace = labelManager.getSmartText(source, availHeight, _minTextSpace.height, true);\n space.width = smartSpace.height;\n space.height = smartSpace.width;\n context.config({ rotation: true });\n context.smartText(smartSpace);\n }\n\n if (show) {\n return {\n width: Math.ceil(space.width) + paddedWidth,\n height: Math.ceil(space.height) + paddedHeight\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 generateGetterSetters(this, PROPS[TEXT]);\n const space = this._dependencies.labelManager.getOriSize('w');\n this.minSpacing({ width: Math.floor(space.width * 3 / 4), height: Math.floor(space.height / 2) });\n setSmartText(this);\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 setSmartText(this);\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 availHeight = this.availHeight();\n const {\n margin,\n show,\n verticalAlign,\n textAlign,\n rotation\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 const vAlign = verticalAlign || rotation ? 'middle' : 'top';\n const {\n width,\n height\n } = this.smartText();\n const {\n height: minHeightSpace\n } = this.minSpacing();\n const translation = {\n top: width + minHeightSpace / 2,\n middle: width / 2 + minHeightSpace,\n bottom: minHeightSpace\n };\n\n container.style('vertical-align', vAlign);\n\n // Set class name\n elem.classed(this._className, true);\n\n // Apply styles\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n elem.style('transform', rotation ? `translate(${height / 2}px,\n ${translation[vAlign]}px) rotate(-90deg)` : '');\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n container.style(`margin-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n this._dependencies.labelManager.setStyle(this._computedStyle);\n elem.html(this._dependencies.labelManager.getSmartText(this.source(), availWidth, availHeight, true).text);\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.clearCaching();\n [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\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 .width(width).height(height - this.getCaptionSpace().height)\n .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';\nimport { TOP } from '../constants';\n\n/**\n *\n *\n * @param {*} rawContent\n *\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 *\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n let margin = {};\n const {\n content,\n classPrefix,\n maxLines\n } = config;\n const cell = prevCell || new TextCell(\n {\n type: cellType === 'title' ? 'header' : 'text',\n className: `${classPrefix}-${cellType}-cell`\n }, {\n labelManager\n })\n .config({ maxLines }).minSpacing({ width: 0, height: 0 });\n\n cell.source(content);\n cell._minTickDiff = { height: 0, width: 0 };\n\n if (config.position === TOP) {\n margin = { top: 0, bottom: config.padding };\n } else {\n margin = { top: config.padding, bottom: 0 };\n }\n cell.config({ margin });\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 *\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type,\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 const subtitle = context.subtitle();\n const isSubtitle = resolveTitleSubTitleContent(subtitle[0]);\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.height = context.height();\n config.classPrefix = context.config().classPrefix;\n config.content = content;\n config.padding = (type === 'title' && !isSubtitle.length) ? subtitle[1].padding : config.padding;\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;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport { getValueParser, retrieveFieldDisplayName, DataModel, getObjProp } from 'muze-utils';\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 *\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 && scale) {\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({\n scale,\n canvas,\n fieldName: scaleProps.field,\n title: retrieveFieldDisplayName(canvas.data(), scaleProps.field),\n LegendCls,\n scaleType\n });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n *\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 const { invalidValues } = canvas.config();\n\n const parser = getValueParser(invalidValues);\n legendInfo.forEach((dataInfo, index) => {\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n title: titleText,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || titleText;\n if (config.show) {\n config.position = position;\n config.align = align;\n let legend = getObjProp(prevLegends[scaleType], index);\n if (!legend) {\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 const metaData = legend.metaData();\n if (metaData instanceof DataModel) {\n metaData.dispose();\n }\n legend.scale(scale)\n .valueParser(parser)\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 *\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 *\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.composition().legend || {});\n};\n","import { LayoutComponent } from '../../../../layout/src/tree-layout';\n\nexport default class MuzeComponent extends LayoutComponent {\n getLogicalSpace () {\n const { width, height } = this.boundBox();\n return { width, height };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n }\n\n getBoundBox () {\n return this.boundBox();\n }\n\n updateWrapper () {\n throw Error('Update is not implemented');\n }\n\n setParams () {\n throw Error('set params is not implemented');\n }\n}\n","import { selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { LEFT } from '../../constants';\n\nexport default class HeaderComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n renderHeader (container) {\n const layoutConfig = this.params.config;\n container = selectElement(container);\n const { align } = layoutConfig;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([this.name]);\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 const { height, width } = this.boundBox();\n this.component.setAvailableSpace(width, height);\n\n this.component && this.component.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (layoutConfig && this.component) {\n cont.style('float', LEFT)\n .style('text-align', align);\n // .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n }\n\n draw (container) {\n this.renderHeader(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.setParams(params);\n this.name(params.name);\n this.boundBox(params.component.getLogicalSpace());\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y,\n left: conf.x,\n width: conf.width,\n height: conf.height });\n this.renderAt(conf.renderAt);\n }\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport {\n LEFT, RIGHT, VERTICAL, HORIZONTAL, TOP, BOTTOM, HORIZONTAL_CENTER, VERTICAL_CENTER\n} from '../../constants';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\nfunction defaultAlignmentHelper (position) {\n let alignment = null;\n const alignWith = `${ROW_MATRIX_INDEX[1]}-${COLUMN_MATRIX_INDEX[1]}`;\n switch (position) {\n case TOP:\n case BOTTOM:\n alignment = HORIZONTAL_CENTER;\n break;\n case LEFT:\n case RIGHT:\n alignment = VERTICAL_CENTER;\n break;\n default:\n alignment = VERTICAL_CENTER;\n }\n return { alignment, alignWith };\n}\nexport default class LegendComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.measurement.legendSpace, 0);\n this.setParams(params);\n }\n\n renderLegend (container) {\n container = selectElement(container);\n const sectionComponents = [];\n const { position, classPrefix } = this.params.config;\n const legendMount = makeElement(container, 'div', [this.components],\n `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = this.newDimensions.width;\n const legHeight = this.newDimensions.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 this.components.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 // mount.each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true));\n mount.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 mount.classed(`${classPrefix}-legend-horizontal-section`, true);\n mount.classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', this.components, `${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 draw (container) {\n this.renderLegend(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.measurement.legendSpace);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.components = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n const { alignWith, alignment } = defaultAlignmentHelper(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith || alignWith);\n this.alignment(params.config.alignment || alignment);\n }\n\n}\n","import {\n selectElement,\n makeElement,\n getD3Drag,\n getEvent,\n getWindow,\n hasTouch\n} from 'muze-utils';\nimport './scroll-bar.scss';\nimport { WIDTH, HEIGHT } from '../../../constants';\n\nconst d3Drag = getD3Drag();\n\nconst arrowSizeMap = {\n left: WIDTH,\n right: WIDTH,\n top: HEIGHT,\n bottom: HEIGHT\n};\n\nexport const getUnitPositions = (unitMeasures, totalLength, viewLength) => {\n let currentLen = 0;\n const measures = unitMeasures.primary && unitMeasures.primary.length ?\n unitMeasures.primary : unitMeasures.secondary;\n\n return measures.map((e) => {\n const unitPosition = currentLen * 100 / (totalLength - viewLength);\n currentLen += e;\n return unitPosition;\n });\n};\n\nexport const createScrollBarArrow = (mount, type, config) => {\n const {\n classPrefix,\n thickness\n } = config;\n const arrow = makeElement(mount, 'div', [type], `${classPrefix}-scroll-arrow-${type}`);\n\n arrow.classed(`${classPrefix}-scroll-arrow`, true);\n arrow.style(arrowSizeMap[type], `${thickness}px`);\n\n const chevron = makeElement(arrow, 'div', [1], `${classPrefix}-scroll-arrow-chevron`);\n\n chevron.attr('id', `${classPrefix}-scroll-arrow-chevron-${type}`);\n\n return arrow;\n};\n\nexport const createScrollBarRect = (mount, config) => {\n const {\n classPrefix\n } = config;\n const rect = makeElement(mount, 'div', [1], `${classPrefix}-scroll-rect`);\n const mover = makeElement(rect, 'div', [1], `${classPrefix}-scroll-mover`);\n\n return { rect, mover };\n};\n\nexport const applyRectClick = (scrollMaker, moverRect) => {\n const {\n rect\n } = moverRect;\n\n rect.on('click', () => {\n const event = getEvent();\n scrollMaker.emptyScrollAreaClick(event);\n });\n};\n\nconst applyMoverDrag = (scrollMaker, moverRect) => {\n let startPos = {};\n let moverStartPos = 0;\n let rectStartPos = 0;\n let endPos = {};\n const {\n mover,\n rect\n } = moverRect;\n\n mover.call(d3Drag()\n .on('start', () => {\n const event = getEvent();\n\n moverStartPos = mover.node().getBoundingClientRect();\n rectStartPos = rect.node().getBoundingClientRect();\n startPos = {\n x: event.x,\n y: event.y\n };\n })\n .on('drag', () => {\n const event = getEvent();\n const window = getWindow();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n const distanceMoved = {\n x: endPos.x - startPos.x,\n y: endPos.y - startPos.y\n };\n const actualPosition = {\n x: moverStartPos.x + distanceMoved.x - rectStartPos.x + window.pageXOffset,\n y: moverStartPos.y + distanceMoved.y - rectStartPos.y + window.pageYOffset\n };\n\n scrollMaker.changeMoverPosition(actualPosition);\n }));\n};\n\nconst applyScrollMouseDownAction = (moverRect, scrollMaker, speed) => {\n const {\n mover,\n rect\n } = moverRect;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n scrollMaker.changeMoverPosition({ x: x - rectX + speed, y: y - rectY + speed });\n};\n\nconst registerListenerOnArrow = (scrollMaker, moverRect, arrowType, speed) => {\n let timer = '';\n const arrow = scrollMaker._components[arrowType];\n const isTouchDevice = hasTouch();\n\n arrow.on(isTouchDevice ? 'touchstart' : 'mousedown', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n timer = setInterval(() => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n }, 100);\n }).on(isTouchDevice ? 'touchend' : 'mouseup', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n clearInterval(timer);\n }).on('click', () => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n });\n};\n\nexport const registerListeners = (scrollMaker) => {\n const {\n moverRect\n } = scrollMaker._components;\n\n const speed = scrollMaker.config().speed;\n\n registerListenerOnArrow(scrollMaker, moverRect, 'prevArrow', -speed);\n applyMoverDrag(scrollMaker, moverRect);\n applyRectClick(scrollMaker, moverRect);\n registerListenerOnArrow(scrollMaker, moverRect, 'nextArrow', speed);\n};\n\nexport const scrollContainerHelper = (mountPoint, config, dimensions, type) => {\n const {\n classPrefix\n } = config;\n const scrollBarContainer = makeElement(selectElement(mountPoint), 'div', [1], `#${classPrefix}-scroll-bar-${type}`);\n\n scrollBarContainer.classed(`${classPrefix}-scroll-bar`, true);\n scrollBarContainer.style(WIDTH, `${dimensions.width}px`);\n scrollBarContainer.style(HEIGHT, `${dimensions.height}px`);\n return scrollBarContainer;\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n\n config: {\n sanitization: (context, value) => {\n value = mergeRecursive(context._config, value);\n return value;\n }\n },\n manager: {},\n unitPositions: {},\n logicalSpace: {}\n};\n\n","import { ERROR_MSG, generateGetterSetters } from 'muze-utils';\nimport {\n scrollContainerHelper,\n registerListeners\n} from './helper';\nimport { PROPS } from './props';\n\nexport class ScrollMaker {\n\n constructor () {\n this._components = {};\n this._logicalSpace = {};\n this._attachedScrollAction = () => {};\n this._config = {\n thickness: 10,\n speed: 2\n };\n this._unitPositions = null;\n\n generateGetterSetters(this, PROPS);\n }\n\n static type () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n emptyScrollAreaClick () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n changeMoverPosition () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollDeltaTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n createScroll (mountPoint) {\n const config = this.config();\n\n return {\n scrollBarContainer: scrollContainerHelper(mountPoint, config, this.logicalSpace(), this.constructor.type())\n };\n }\n\n attachScrollAction (externalScrollAction) {\n this._attachedScrollAction = externalScrollAction;\n return this;\n }\n\n detachScrollAction () {\n this._attachedScrollAction = () => {};\n return this;\n }\n\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n registerListeners () {\n registerListeners(this);\n return this;\n }\n\n remove () {\n this._components.scrollBarContainer.remove();\n return this;\n }\n}\n\n","import MuzeComponent from './muze-chart-component';\nimport { HorizontalScrollMaker } from './scroll-bar-maker/horizontal-scroll-maker';\nimport { VerticalScrollMaker } from './scroll-bar-maker/vertical-scroll-maker';\n\nconst scrollMakerMap = {\n horizontal: HorizontalScrollMaker,\n vertical: VerticalScrollMaker\n};\n\n/**\n * Scroll Component acts as a wrapper over the scoll bars created using the respective Scroll Makers\n * This provides a consistent API for layouting using the tree layout system.\n *\n *\n * @class\n * @public\n * @module ScrollComponent\n */\nexport default class ScrollComponent extends MuzeComponent {\n\n constructor (params) {\n const ScrollMaker = scrollMakerMap[params.config.type];\n\n params.component = new ScrollMaker();\n params.component.config(params.config.scrollBarComponentConfig);\n params.component.logicalSpace(params.dimensions);\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n manager (...manager) {\n if (manager.length) {\n this.component.manager(manager[0]);\n return this;\n }\n return this.component.manager();\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollDeltaTo (delta) {\n this.component.scrollDeltaTo(delta);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollTo (scrollPercentage) {\n this.component.scrollTo(scrollPercentage);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page based on the unit index.\n * The input is provided as a number represting the index for the unit.\n * For vertical scroll, it's the row index that will be required.\n * For horizontal scroll, it's the column index that will be required\n *\n * @public\n *\n * @param {number} unitIndex Index of the unit appearing in the grid\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollToUnitIndex (unitIndex) {\n const unitPositions = this.component.unitPositions();\n const sanitizedUnitIndex = Math.min(Math.max(0, unitIndex), unitPositions.length - 1);\n this.component.scrollTo(unitPositions[sanitizedUnitIndex]);\n return this;\n }\n\n /**\n * Provides the positions of the units(either horizontal or vertical based on the type\n * of scroll bar it wraps) relative to it's container. The position of the first unit starts at 0\n *\n *\n * @public\n *\n * @return {Array} Positions of units either horizontal or vertical\n */\n getScrollPositionsForUnits () {\n return this.component.unitPositions();\n }\n\n draw (container) {\n this.component.createScroll(container || document.getElementById(this.renderAt()));\n return this;\n }\n\n /**\n * Can be used to attach a scroll action whenever scrolling occurs in the canvas\n *\n * @public\n * @param {number} externalAction Action to be attached during scroll\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n attachScrollAction (externalAction) {\n this.component.attachScrollAction(externalAction);\n return this;\n }\n\n /**\n * Can be used to detach the scroll action already bound to the scroll bar\n *\n * @public\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n detachScrollAction () {\n this.component.detachScrollAction();\n return this;\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.component.config(params.config.scrollBarComponentConfig);\n this.component.logicalSpace(params.dimensions);\n this.boundBox(this.component.getLogicalSpace());\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component || this.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n remove () {\n this.component.remove();\n }\n}\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { HORIZONTAL, HEIGHT, WIDTH, LEFT } from '../../../constants';\n\nexport class HorizontalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: horizontal\n */\n static type () {\n return HORIZONTAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, config, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'left', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'right', config);\n const {\n mover,\n rect\n } = moverRect;\n\n const { height, width, totalLength, viewLength, unitWidths } = this.logicalSpace();\n const scrollBarWithouArrowLength = width - height * 2;\n\n rect.style(WIDTH, `${dimensions.width - height * 2}px`);\n rect.style(HEIGHT, `${100}%`);\n mover.style(WIDTH, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(HEIGHT, `${100}%`);\n mover.style(LEFT, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n this.unitPositions(getUnitPositions(unitWidths, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n let positionAdjuster = speed * 10;\n if (event.x < x) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n const {\n totalLength\n } = this.logicalSpace();\n\n if (newPosition.x < 0) {\n currentPos = 0;\n } else if (newPosition.x + moverPos.width > rectStartPos.width) {\n currentPos = rectStartPos.width - moverPos.width;\n } else {\n currentPos = newPosition.x;\n }\n\n mover.style(LEFT, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: 0, x: moverPos.x - rectStartPos.x - delta });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {HorizontalScrollMaker} Instance of the HorizontalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.width)) / 100;\n\n this.changeMoverPosition({ y: 0, x: movement });\n return this;\n }\n\n}\n\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { VERTICAL, TOP, HEIGHT, WIDTH } from '../../../constants';\n\nexport class VerticalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: vertical\n */\n static type () {\n return VERTICAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'top', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'bottom', config);\n const {\n mover,\n rect\n } = moverRect;\n const { height, width, totalLength, viewLength, unitHeights } = this.logicalSpace();\n const scrollBarWithouArrowLength = height - width * 2;\n\n rect.style(HEIGHT, `${scrollBarWithouArrowLength}px`);\n rect.style(WIDTH, `${100}%`);\n mover.style(WIDTH, `${100}%`);\n mover.style(HEIGHT, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(TOP, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n\n this.unitPositions(getUnitPositions(unitHeights, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n let positionAdjuster = speed * 10;\n if (event.y < y) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const {\n totalLength\n } = this.logicalSpace();\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n\n if (newPosition.y < 0) {\n currentPos = 0;\n } else if (newPosition.y + moverPos.height > rectStartPos.height) {\n currentPos = rectStartPos.height - moverPos.height;\n } else {\n currentPos = newPosition.y;\n }\n mover.style(TOP, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: moverPos.y - rectStartPos.y - delta, x: 0 });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.height)) / 100;\n\n this.changeMoverPosition({ x: 0, y: movement });\n return this;\n }\n\n}\n","import { makeElement } from 'muze-utils';\nimport { cellSpanMaker, applySpans } from '../../../../layout/src/grid-layout/span-maker';\nimport { applyBorders } from '../../../../layout/src/grid-layout/border-helper';\n\nimport {\n TOP, CENTER\n} from '../../../../layout/src/enums/constants';\nimport MuzeComponent from './muze-chart-component';\nimport { WIDTH, HEIGHT, HIDDEN, OVERFLOW, AUTO, VISIBLE } from '../../constants';\n\nconst renderPlaceholders = (cells) => {\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder.render(this);\n });\n};\n\nexport default class MatrixComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n this.className(params.config.className);\n }\n\n applyScroll (container) {\n const row = this.params.config.row;\n const column = this.params.config.column;\n const { horizontal, vertical } = this.params.config.scrollInfo;\n container.style(OVERFLOW, VISIBLE);\n container.style(WIDTH, AUTO);\n container.style(HEIGHT, AUTO);\n\n if (horizontal && column === 1) {\n container.style(OVERFLOW, HIDDEN);\n container.style(WIDTH, '100%');\n }\n\n if (vertical && row === CENTER) {\n container.style(OVERFLOW, HIDDEN);\n container.style(HEIGHT, '100%');\n }\n }\n\n renderMatrix (mountPoint) {\n // Creating containers for each matrix individually\n const classPrefix = this.params.config.classPrefix;\n const row = this.params.config.row;\n const column = this.params.config.column;\n const dimensions = this.params.config.dimensions;\n const border = this.params.config.border;\n\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${row}-${column + 1}`)\n .classed(`${classPrefix}-grid-${row}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n this.applyScroll(containerForMatrix);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(this.component, row, column);\n\n // Rendering the table components\n const { cells } = this.renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n applySpans(cells, spans, { dimensions, border }, `${row}-${column}`);\n renderPlaceholders(cells);\n\n cells.exit().each((cell) => {\n cell.placeholder.remove();\n });\n\n applyBorders(cells, border, row, column);\n }\n\n 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\n draw (container) {\n this.renderMatrix(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(TOP);\n this.className(params.config.className);\n }\n}\n","import { selectElement, getEvent } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport MatrixComponent from './matrix-component';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\nimport { WHEEL_DELTA_MODIFIER } from '../../enums/constants';\n\n/**\n * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific\n * elements based on the scroll distance provided\n *\n *\n */\nconst applyScrollAction = (elem, classPrefix, scollDistance, type) => {\n selectElement(elem)\n .selectAll(`.${classPrefix}-grid`)\n .property(type, scollDistance);\n};\n\n/**\n * Applies the action of the scroll by actually scrolling the respective matrices based on the\n * type of scroll. It returns a function which has both the scroll methods available\n *\n * @return {Object} contains the horizontal and vertical scroll actions on the grid component\n */\nconst scrollActionApplier = (movement, context) => {\n const classPrefix = context.params.config.classPrefix;\n\n return {\n horizontal: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[e][1].renderAt()}`, classPrefix, movement, 'scrollLeft'));\n },\n vertical: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[1][e].renderAt()}`, classPrefix, movement, 'scrollTop'));\n }\n };\n};\n\nexport default class GridComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.gridComponents = [];\n this.setParams(params);\n }\n\n sanitizeGrid () {\n let height = 0;\n let width = 0;\n const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo();\n const scrollInfo = this.component.scrollInfo();\n const {\n viewHeight,\n viewWidth,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n\n for (let i = 0; i < 3; i++) {\n if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) {\n this.gridComponents[i] = [];\n }\n for (let j = 0; j < 3; j++) {\n const matrixDim = {\n height: viewHeight[i],\n width: viewWidth[j],\n unitHeights,\n unitWidths\n };\n const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j];\n const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`;\n const matrixConfig = {\n dimensions: matrixDim,\n border: layoutDimensions.border,\n classPrefix: this.params.config.classPrefix,\n scrollInfo,\n row: ROW_MATRIX_INDEX[i],\n column: j\n };\n if (this.gridComponents[i][j] instanceof MuzeComponent) {\n this.gridComponents[i][j].updateWrapper({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n } else {\n const matrixWrapper = new MatrixComponent({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n this.gridComponents[i].push(matrixWrapper);\n }\n if (i === 0) {\n width += matrixDim.width;\n }\n if (j === 0) {\n height += matrixDim.height;\n }\n }\n }\n this.boundBox({ height, width });\n\n this.component = this.gridComponents;\n this.allComponents = this.gridComponents;\n }\n\n scrollBarManager (...manager) {\n if (manager.length) {\n this._scrollBarManager = manager[0];\n return this;\n }\n return this._scrollBarManager;\n }\n\n /**\n * Attaches a mousewheel listener to the center matrix, based on which the scrolling can occur.\n * It uses the scroll component to change the position of the scroller, which ultimately scrolls the center matrix\n *\n *\n * @return {GridComponent} Instance of the GridComponent\n */\n attachScrollListener () {\n const scrollBarManager = this.scrollBarManager();\n selectElement(`#${this.component[1][1].renderAt()}`)\n .on('wheel', () => {\n const event = getEvent();\n const {\n wheelDeltaX,\n wheelDeltaY\n } = event;\n\n // Scrolling horizontally\n if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('horizontal', event)\n .triggerScrollBarAction('horizontal', wheelDeltaX / WHEEL_DELTA_MODIFIER);\n }\n\n // Scrolling Vertically\n if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('vertical', event)\n .triggerScrollBarAction('vertical', wheelDeltaY / WHEEL_DELTA_MODIFIER);\n }\n });\n return this;\n }\n\n performScrollAction (direction, movedView) {\n scrollActionApplier(movedView, this)[direction]();\n return this;\n }\n\n getBoundBox () {\n const { top, left } = this.component[0][0].boundBox();\n const { height, width } = this.boundBox();\n\n return {\n top,\n left,\n height,\n width\n };\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.className(params.config.className);\n this.sanitizeGrid();\n return this;\n }\n\n attachListener () {\n this.attachScrollListener();\n return this;\n }\n}\n","export const SIDE_EFFECT_COMMON = 'common';\nexport const SIDE_EFFECT_INDIVIDUAL = 'individual';\nexport const TOOLTIP_CONSOLIDATED = 'consolidated';\nexport const TOOLTIP_FRAGMENTED = 'fragmented';\nexport const WHEEL_DELTA_MODIFIER = 30;\n","import { selectElement, makeElement, applyStyle } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\n\nexport default class MessageComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n }\n\n render (container) {\n const parent = selectElement(container);\n\n const { config } = this.params;\n const { className } = config.classPrefix;\n\n const node = makeElement(parent, 'div', [1], className);\n const { height, width } = config.dimensions;\n const { message } = config;\n\n applyStyle(node, { width: `${width}px`, height: `${height}px` });\n\n const child = makeElement(node, 'div', [1], `${className}-child`);\n const textElement = makeElement(child, 'text', [1]);\n\n textElement.html(message);\n }\n\n draw (container) {\n this.render(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n const { target, className } = params.config;\n this.component = params.component;\n this.params = params;\n this.target(target);\n this.className(className);\n this.position(params.config.position);\n return this;\n }\n}\n","import {\n TITLE,\n SUB_TITLE,\n LEGEND, VERTICAL,\n HORIZONTAL,\n WIDTH,\n HEIGHT,\n TOP,\n LEFT,\n RIGHT,\n MESSAGE,\n GRID,\n NO_DATA_MESSAGE,\n HORIZONTAL_CENTER\n} from '../constants';\nimport HeaderComponent from './components/headerComponent';\nimport LegendComponent from './components/legendComponent';\nimport ScrollComponent from './components/scroll-component';\nimport GridComponent from './components/grid-component';\nimport MessageComponent from './components/message-component';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG, CANVAS, MESSAGE_CONFIG } from './defaults';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, CENTER } from '../../../layout/src/enums/constants';\n\n// Mapping between types of headers and their required configs for wrapper creation\nconst headerMap = {\n title: {\n headerCell: 'titleCell',\n configType: TITLE_CONFIG\n },\n subtitle: {\n headerCell: 'subtitleCell',\n configType: SUB_TITLE_CONFIG\n }\n};\n\n// Mapping of header alignment values\nconst headerAlignmentMap = {\n [LEFT]: LEFT,\n [RIGHT]: RIGHT,\n [CENTER]: HORIZONTAL_CENTER\n};\n\n/**\n * returns if data is Valid\n *\n *\n * @param {Object} params object where data has to be checked for validity\n * @return {Boolean} Returns true if all of the params are valid\n */\nconst checkParamsValidation = params => Object.keys(params).every((param => params[param]));\n\n/**\n * returns if message Component is needed or not\n *\n *\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Boolean} Returns if grid is present\n */\nconst isGridPresent = (renderDetails) => {\n const { rows, columns, values } = renderDetails.components;\n return checkParamsValidation({ rows, columns, values });\n};\n\n/**\n * Creates the wrapper for the header, i.e., title and subtitle to be used in the tree layout\n *\n *\n * @param {string} headerType type of header: title/subtite\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createHeaderWrapper = (headerType, layoutManager, renderDetails) => {\n let wrapper = null;\n\n const { components, layoutConfig } = renderDetails;\n const { headerCell, configType } = headerMap[headerType];\n const target = { target: CANVAS };\n\n if (components.headers && components.headers[headerCell]) {\n let headerConfig = layoutConfig[headerType];\n const header = components.headers[headerCell];\n\n headerConfig = Object.assign({}, headerConfig, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n alignWith: `${ROW_MATRIX_INDEX[0]}-${COLUMN_MATRIX_INDEX[1]}`,\n alignment: headerAlignmentMap[headerConfig.align],\n className: configType.className\n });\n\n const wrapperParams = {\n name: headerType,\n component: header,\n config: headerConfig\n };\n\n const existingComponent = layoutManager.getComponent(headerType);\n if (existingComponent) {\n wrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n wrapper = new HeaderComponent(wrapperParams);\n }\n }\n return wrapper;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} canvas canvas instance\n * @return {Instance} Returns the respective wrappers\n */\nconst createMessageWrapper = (layoutManager, canvas, renderDetails, renderGrid) => {\n const headerValues = Object.values(renderDetails.components.headers);\n let sum = 0;\n let messageWrapper = null;\n\n for (const val of headerValues) {\n sum += val.logicalSpace().height;\n }\n\n if (!renderGrid) {\n const defaultDimensions = { height: canvas.height() - sum, width: canvas.width() };\n const gridComponent = layoutManager.getComponent(GRID);\n const { height, width } = (gridComponent && gridComponent.getBoundBox()) || defaultDimensions;\n const target = { target: CANVAS };\n const config = {\n ...target,\n dimensions: { height, width },\n message: NO_DATA_MESSAGE,\n classPrefix: MESSAGE_CONFIG,\n position: TOP\n };\n const wrapperParams = {\n name: MESSAGE,\n component: null,\n config\n };\n const existingComponent = layoutManager.getComponent(MESSAGE);\n\n if (existingComponent) {\n messageWrapper = existingComponent.updateWrapper(wrapperParams);\n } else {\n messageWrapper = new MessageComponent(wrapperParams);\n }\n return messageWrapper;\n }\n return null;\n};\n\n// Mapping between types of scrollBars and their required configs for wrapper creation\nconst scrollBarMap = config => ({\n vertical: {\n componentName: 'verticalScrollBar',\n width: 'thickness',\n height: 'layoutBasedMeasure',\n layoutBasedMeasure: HEIGHT,\n viewMeasure: 'viewHeight',\n rowAlign: 1,\n colAlign: config.align === 'right' ? 2 : 0,\n position: config.align,\n alignment: TOP\n },\n horizontal: {\n componentName: 'horizontalScrollBar',\n width: 'layoutBasedMeasure',\n layoutBasedMeasure: WIDTH,\n viewMeasure: 'viewWidth',\n height: 'thickness',\n rowAlign: config.align === 'top' ? 0 : 2,\n colAlign: 1,\n position: config.align,\n alignment: LEFT\n }\n});\n\n/**\n * Creates the wrapper for the scroller, i.e., horizontal and vertical to be used in the tree layout\n *\n *\n * @param {string} scrollBarType type of scrollbar: horizontal/vertical\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst createScrollBarWrapper = (scrollBarType, layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let scrollBarWrapper = null;\n const { layoutConfig } = renderDetails;\n const target = { target: CANVAS };\n const { scrollBar } = layoutConfig;\n const { layoutDimensions } = grid.viewInfo();\n const {\n actualCenterMeasures,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n const {\n componentName, layoutBasedMeasure, width, height, rowAlign, colAlign,\n viewMeasure, position, alignment\n } = scrollBarMap(scrollBar[scrollBarType])[scrollBarType];\n const dimensions = {\n thickness: scrollBar.thickness,\n layoutBasedMeasure: layoutDimensions[viewMeasure][1]\n };\n const isScroll = grid.scrollInfo()[scrollBarType];\n const totalLength = actualCenterMeasures[layoutBasedMeasure];\n const viewLength = layoutDimensions[viewMeasure][1];\n\n const scrollConfig = Object.assign({}, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n scrollBarComponentConfig: {\n ...scrollBar,\n classPrefix: layoutConfig.classPrefix\n },\n\n type: scrollBarType,\n alignWith: `${ROW_MATRIX_INDEX[rowAlign]}-${COLUMN_MATRIX_INDEX[colAlign]}`,\n alignment,\n position\n });\n\n const wrapperParams = {\n name: componentName,\n config: scrollConfig,\n dimensions: {\n width: dimensions[width],\n height: dimensions[height],\n totalLength,\n viewLength,\n unitHeights,\n unitWidths\n }\n };\n\n const existingComponent = layoutManager.getComponent(componentName);\n\n if (!isScroll) {\n existingComponent && existingComponent.remove();\n return null;\n }\n\n if (existingComponent) {\n scrollBarWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n scrollBarWrapper = new ScrollComponent(wrapperParams);\n }\n\n return scrollBarWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the legend to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createLegendWrapper = (layoutManager, renderDetails, renderGrid) => {\n if (renderGrid) {\n let legendWrapper = null;\n const { components, layoutConfig, measurement } = renderDetails;\n const target = { target: CANVAS };\n\n if (components.legends && components.legends.length) {\n const legendConfig = { ...layoutConfig.legend, ...target, measurement };\n const wrapperParams = {\n name: LEGEND,\n component: components.legends,\n config: legendConfig\n };\n\n const existingComponent = layoutManager.getComponent(LEGEND);\n\n if (existingComponent) {\n legendWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n legendWrapper = new LegendComponent(wrapperParams);\n }\n }\n return legendWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst gridLayoutWrapper = (layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let gridWrapper = null;\n const target = { target: CANVAS };\n const { layoutConfig } = renderDetails;\n\n const config = {\n ...target,\n pagination: layoutConfig.pagination,\n classPrefix: layoutConfig.classPrefix,\n dimensions: { height: 0, width: 0 }\n };\n const wrapperParams = {\n name: GRID,\n component: grid,\n config\n };\n const existingComponent = layoutManager.getComponent(GRID);\n if (existingComponent) {\n gridWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n gridWrapper = new GridComponent(wrapperParams);\n }\n return gridWrapper;\n }\n return null;\n};\n/**\n * Responsible for providing the wrapper creators for every component in Muze.\n * This function, when called, returns the set of components and their respective wrappers.\n *\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} grid Instance of the grid layout\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers for each component\n */\nexport const componentWrapperMaker = (canvas, grid, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const renderGrid = isGridPresent(renderDetails);\n return {\n title: createHeaderWrapper(TITLE, layoutManager, renderDetails),\n subtitle: createHeaderWrapper(SUB_TITLE, layoutManager, renderDetails),\n message: createMessageWrapper(layoutManager, canvas, renderDetails, renderGrid),\n legend: createLegendWrapper(layoutManager, renderDetails, renderGrid),\n grid: gridLayoutWrapper(layoutManager, renderDetails, grid, renderGrid),\n verticalScrollBar: createScrollBarWrapper(VERTICAL, layoutManager, renderDetails, grid, renderGrid),\n horizontalScrollBar: createScrollBarWrapper(HORIZONTAL, layoutManager, renderDetails, grid, renderGrid)\n };\n};\n","export class ScrollManager {\n\n constructor () {\n this._scrollBarComponents = {};\n this._attachedComponents = {};\n }\n\n scrollBarComponents (...sbc) {\n if (sbc.length) {\n this._scrollBarComponents = sbc[0];\n return this;\n }\n return this._scrollBarComponents;\n }\n\n attachedComponents (...abc) {\n if (abc.length) {\n this._attachedComponents = abc[0];\n return this;\n }\n return this._attachedComponents;\n }\n\n preventBrowserScroll (type, event) {\n if (this.scrollBarComponents()[type]) {\n // Prevent default behaviour and stop propagating\n event.preventDefault();\n event.stopPropagation();\n }\n return this;\n }\n\n performAttachedScrollFunction (type, movedViewLength) {\n Object.values(this.attachedComponents()).forEach((e) => {\n e.performScrollAction(type, movedViewLength);\n });\n return this;\n }\n\n triggerScrollBarAction (type, delta) {\n this.scrollBarComponents()[type] && this.scrollBarComponents()[type].scrollDeltaTo(delta);\n return this;\n }\n}\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { componentWrapperMaker } from './component-wrapper-maker';\nimport {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n TITLE,\n SUB_TITLE,\n LEGEND,\n VERTICAL_SCROLL_BAR,\n HORIZONTAL_SCROLL_BAR,\n GRID,\n MESSAGE\n} from '../constants';\nimport { ScrollManager } from './scroll-manager';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const prepareLayout = (layout, renderDetails) => {\n const { components, layoutConfig, measurement } = renderDetails;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n if (rows && columns) {\n layout.measurement(measurement)\n .config(layoutConfig)\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 *\n * @param {*} context\n * @param {*} mount\n *\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 priority,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend,\n pagination,\n scrollBar\n } = context.config();\n\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\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 buffer: scrollBar.thickness,\n pagination,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual,\n mount,\n priority\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n\nconst componentIndexes = {\n title: 0,\n subtitle: 1,\n legend: 2,\n verticalScrollBar: 3,\n horizontalScrollBar: 4,\n grid: 5,\n message: 6\n};\n\nconst componentNames = {\n 0: TITLE,\n 1: SUB_TITLE,\n 2: LEGEND,\n 3: VERTICAL_SCROLL_BAR,\n 4: HORIZONTAL_SCROLL_BAR,\n 5: GRID,\n 6: MESSAGE\n};\n\nconst attachListeners = (componentWrappers) => {\n componentWrappers.forEach((componentWrapper) => {\n if (componentWrapper) {\n componentWrapper.attachListener();\n }\n });\n};\n\n/**\n * Responsible for creating a scroll manager that manages interactions between the grid\n * component and the scroll bar components\n *\n * @param {Array} componentWrappers Contains the wrappers for all the components\n * @param {Canvas} canvas Instance of the current canvas\n * @return {Array} Positions of units either horizontal or vertical\n */\nconst createScrollManager = (componentWrappers, canvas) => {\n const {\n horizontalScrollBar,\n verticalScrollBar,\n grid\n } = componentIndexes;\n\n const horizontalScrollWrapper = componentWrappers[horizontalScrollBar];\n const verticalScrollWrapper = componentWrappers[verticalScrollBar];\n const gridWrapper = componentWrappers[grid];\n const scrollBarManager = new ScrollManager();\n const scrollBarComponents = {};\n\n verticalScrollWrapper && (scrollBarComponents.vertical = verticalScrollWrapper);\n horizontalScrollWrapper && (scrollBarComponents.horizontal = horizontalScrollWrapper);\n\n scrollBarManager\n .scrollBarComponents(scrollBarComponents)\n .attachedComponents({\n grid: gridWrapper\n });\n canvas.composition().hScrollBar = horizontalScrollWrapper;\n canvas.composition().vScrollBar = verticalScrollWrapper;\n\n [horizontalScrollWrapper, verticalScrollWrapper].forEach((wrapper) => {\n wrapper && wrapper.manager(scrollBarManager);\n });\n\n gridWrapper.scrollBarManager(scrollBarManager);\n};\n\nexport const renderLayout = (canvas, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const gridLayout = canvas.layout();\n const {\n\n grid\n } = componentIndexes;\n\n // Get the component wrappers\n const compWrappers = componentWrapperMaker(canvas, gridLayout, renderDetails);\n const componentWrappers = Object.keys(componentIndexes).map(e => compWrappers[e]);\n const gridWrapper = componentWrappers[grid];\n if (gridWrapper) {\n createScrollManager(componentWrappers, canvas);\n }\n\n componentWrappers.forEach((componentWrapper, index) => {\n if (!componentWrapper) {\n const deleteElementName = componentNames[index];\n layoutManager.removeComponent(deleteElementName);\n }\n });\n layoutManager.registerComponents(componentWrappers).compute();\n attachListeners(componentWrappers);\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive,\n isSimpleObject,\n CommonProps\n} from 'muze-utils';\nimport { Firebolt } from '@chartshq/muze-firebolt';\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 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 selectionBox: () => false\n }\n};\n\n/**\n * This class is responsible for dispatching any behavioural action to all the visual units housed by the canvas.\n * It is created by {@link Canvas}. This class does not handle any physical actions. Physical actions get triggered\n * in {@link VisualUnit} which is managed by it's own firebolt instance. The firebolt instance of canvas only\n * propagates the action to all the visual units in it's composition.\n *\n * To get the firebolt instance of {@link Canvas}\n * ```\n * const firebolt = canvas.firebolt();\n * ```\n *\n * @class GroupFireBolt\n * @public\n */\nexport default class GroupFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy());\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 const context = this.context;\n applyInteractionPolicy(this);\n context._throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => {\n applyInteractionPolicy(this);\n });\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n /**\n * Dispatches a behavioural action with a payload. It takes the name of the behavioural action and a payload\n * object which contains the criteria aend an array of side effects which determines what side effects are\n * going to be shown in each visual unit of the canvas. It prepares the datamodel from the given criteria\n * and initiates a propagation from the datamodel of canvas. Then all the visual units of canvas which listens\n * to the propagation gets informed on which rows got selected and dispatches the behavioural action sent during\n * propagation.\n *\n * To dispatch a behavioural action on the canvas\n * ```\n * // Get the firebolt instance of the canvas\n * const firebolt = canvas.firebolt();\n * // Dispatch a brush behaviour\n * firebolt.dispatchBehaviour('brush', {\n * // Selects all the rows with Horsepower having range between 100 and 200.\n * criteria: {\n * Horsepower: [100, 200]\n * }\n * });\n * // On dispatch of this behavioural action, a selection box gets created and plots gets faded out which are the\n * // default side effects mapped to this behavioural action.\n * ```\n *\n * ```\n * Additionally, it can also be passed an array of side effects in the payload.\n * // Dispatch a select behaviour with only crossline as side effect.\n * firebolt.dispatchBehaviour('select', {\n * criteria: {\n * Cylinders: ['8']\n * },\n * sideEffects: ['crossline']\n * });\n * ```\n *\n * @public\n *\n * @param {string} behaviour Name of the behavioural action\n * @param {Object} payload Object which contains the interaction information.\n * @param {Object | Array.} payload.criteria Identifiers by which the selection happens.\n * @param {Array.} payload.sideEffects Side effects which needs to be shown.\n *\n * @return {GroupFireBolt} Instance of firebolt.\n */\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.composition().visualGroup.getGroupByData();\n const fieldsConfig = data.getFieldsConfig();\n const model = getDataModelFromIdentifiers(data, criteria);\n const behaviouralAction = this._actions.behavioural[behaviour];\n\n if (behaviouralAction) {\n const fields = isSimpleObject(criteria) ? Object.keys(criteria) : (criteria ? criteria[0] : []);\n const validFields = fields.filter(field => field in fieldsConfig);\n const mutates = behaviouralAction.constructor.mutates();\n const propConfig = {\n payload: propPayload,\n action: behaviour,\n criteria: model,\n sourceId: this.context.alias(),\n isMutableAction: mutates,\n propagateInterpolatedValues: validFields.every(field => fieldsConfig[field].def.type ===\n FieldType.MEASURE)\n };\n data.propagate(model, propConfig, true);\n }\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","import GroupFireBolt from './group-firebolt';\n\nexport default GroupFireBolt;\n","export const APP_INITIAL_STATE = {\n app: {\n group: {},\n units: {},\n layers: {},\n canvas: {}\n },\n local: {\n canvas: {},\n group: {},\n units: {},\n layers: {}\n }\n};\n\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId, selectElement, STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout, renderLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { APP_INITIAL_STATE } from './app-state';\nimport { initCanvas,\n setupChangeListener,\n setLabelRotationForAxes,\n createGroupState,\n createLayoutManager,\n setLayoutInfForUnits\n} from './helper';\n/**\n * Canvas is a logical component which houses a visualization by taking multiple variable in different encoding channel.\n * Canvas manages lifecycle of many other logical component and exposes one consistent interface for creation of chart.\n * Canvas is intialized from environment with settings from environment and singleton dependencies.\n *\n * To create an instance of canvas\n * ```\n * const env = Muze();\n * const canvas = env.canvas()\n * ```\n *\n *\n * @class\n * @public\n * @module Canvas\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(APP_INITIAL_STATE);\n\n this._throwback = new Store({\n [CommonProps.MATRIX_CREATED]: false,\n [CommonProps.ON_LAYER_DRAW]: null\n });\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE;\n const allOptions = Object.assign({}, options, localOptions, canvasOptions);\n\n transactor(this, allOptions, this._store, {\n namespace\n });\n\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this, {\n behavioural: behaviouralActions,\n physical: physicalActions,\n physicalBehaviouralMap: {}\n }, sideEffects, behaviourEffectMap));\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 // init layoutManager\n this._layoutManager = createLayoutManager();\n }\n\n /**\n * Retrieves an instance of layout which is responsible for layouting. Layout is responsible for creating faceted\n * presentation using table layout.\n *\n * @public\n *\n * @return {GridLayout} Instance of layout attached to canvas.\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n * Retrieves the composition for a canvas\n *\n * @public\n *\n * @return {object} Instances of the components which canvas requires to draw the full visualization.\n * ```\n * {\n * layout: // Instance of {@link GridLayout}\n * legend: // Instance of {@link Legend}\n * subtitle: // Instance of {@link TextCell} using which the title is rendered\n * title: // Instance of {@link TextCell} using which the title is rendered\n * visualGroup: // Instance of {@link visualGroup}\n * }\n * ```\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 * Sets or gets the alias of the canvas. Alias is a name by which the canvas can be referred.\n *\n * When setter\n * @param {string} alias Name of the alias.\n *\n * @return {Canvas} Instance of the canvas.\n *\n * When getter\n *\n * @return {string} Alias of canvas.\n *\n * @public\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 *\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n * Returns the instance of firebolt associated with this canvas. The firebolt instance can be used to dispatch a\n * behaviour dynamically on the canvas. This firebolt does not handle any physical actions. It is just used to\n * propagate the action to all the visual units in it's composition.\n *\n * @public\n *\n * @return {GroupFireBolt} Instance of firebolt associated with 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 createGroupState(this);\n this.composition().visualGroup.alias(this.alias()).store(this._store);\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 *\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 * Returns a promise for various {@link LifecycleEvents} of the various components of canvas. The promise gets\n * resolved once the particular event gets completed.\n *\n * To use this,\n * ```\n * canvas.once('layer.drawn').then(() => {\n * // Do any post drawing work here.\n * });\n * ```\n * @public\n *\n * @param {string} eventName Name of the lifecycle event.\n *\n * @return {Promise} A pending promise waiting for resolve to be called.\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 // removeChild(mount);\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const renderDetails = getRenderDetails(this, mount);\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), renderDetails);\n\n this._layoutManager.dimension({\n height: renderDetails.measurement.canvasHeight,\n width: renderDetails.measurement.canvasWidth\n });\n\n this._layoutManager.renderAt(mount);\n\n // Render each component\n renderLayout(this, renderDetails);\n\n setLayoutInfForUnits(this);\n\n // setLabelRotation\n setLabelRotationForAxes(this);\n }\n\n /**\n * Returns the instances of x axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the top axis and the second element represents the bottom\n * // axis.\n * [\n * [X1, X2],\n * [X3, X4]\n * ]\n * ```\n * @public\n *\n * @return {Array.} Instances of x axis.\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n * Returns the instances of y axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the left axis and the second element represents the right\n * // axis.\n * [\n * [Y1, Y2],\n * [Y3, Y4]\n * ]\n * ```\n * @public\n * @return {Array.} Instances of y axis.\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n * Returns all the retinal axis of the canvas. Color, shape and size axis are combinedly called retinal axis.\n *\n * @public\n * @return {Object} Instances of retinal axis.\n * ```\n * {\n * color: [ColorAxis], // Array of color axis.\n * shape: [ShapeAxis], // Array of shape axis.\n * size: [SizeAxis] // Array of size axis.\n * }\n * ```\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n\n mount (...params) {\n if (params.length) {\n let value = params[0];\n if (typeof params[0] === 'string') {\n value = selectElement(params[0]).node();\n }\n this._mount = value;\n return this;\n }\n return this._mount;\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 Store\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};\nmuze.Model = new Store().model.constructor;\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f4ab7b4e..e9dbd02c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,17 +4,17 @@ "lockfileVersion": 1, "dependencies": { "@babel/cli": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.4.4.tgz", - "integrity": "sha512-XGr5YjQSjgTa6OzQZY57FAJsdeVSAKR/u/KA5exWIz66IKtv/zXtHy+fIZcMry/EgYegwuHE7vzGnrFhjdIAsQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.6.0.tgz", + "integrity": "sha512-1CTDyGUjQqW3Mz4gfKZ04KGOckyyaNmKneAMlABPS+ZyuxWv3FrVEVz7Ag08kNIztVx8VaJ8YgvYLSNlMKAT5Q==", "dev": true, "requires": { - "chokidar": "^2.0.4", + "chokidar": "^2.1.8", "commander": "^2.8.1", "convert-source-map": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "glob": "^7.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "mkdirp": "^0.5.1", "output-file-sync": "^2.0.0", "slash": "^2.0.0", @@ -22,31 +22,31 @@ } }, "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "dev": true, "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/core": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.4.tgz", - "integrity": "sha512-lQgGX3FPRgbz2SKmhMtYgJvVzGZrmjaF4apZ2bLwofAKiSjxU0drPh4S/VasyYXwaTs+A1gvQ45BN8SQJzHsQQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", - "@babel/helpers": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.0.tgz", + "integrity": "sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.6.0", + "@babel/helpers": "^7.6.0", + "@babel/parser": "^7.6.0", + "@babel/template": "^7.6.0", + "@babel/traverse": "^7.6.0", + "@babel/types": "^7.6.0", "convert-source-map": "^1.1.0", "debug": "^4.1.0", "json5": "^2.1.0", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" @@ -62,22 +62,22 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.0.tgz", + "integrity": "sha512-Ms8Mo7YBdMMn1BYuNtKuP/z0TgEIhbcyB8HVR6PPNYp4P61lMsABiS4A3VG1qznjXVCf3r+fVHhm4efTYVsySA==", "dev": true, "requires": { - "@babel/types": "^7.4.4", + "@babel/types": "^7.6.0", "jsesc": "^2.5.1", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "source-map": "^0.5.0", "trim-right": "^1.0.1" } @@ -113,14 +113,14 @@ } }, "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", + "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", "dev": true, "requires": { "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" } }, "@babel/helper-explode-assignable-expression": { @@ -163,12 +163,12 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", + "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.5.5" } }, "@babel/helper-module-imports": { @@ -181,17 +181,17 @@ } }, "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", + "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-simple-access": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" } }, "@babel/helper-optimise-call-expression": { @@ -210,12 +210,12 @@ "dev": true }, "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/helper-remap-async-to-generator": { @@ -232,15 +232,15 @@ } }, "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", + "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", + "@babel/helper-member-expression-to-functions": "^7.5.5", "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" } }, "@babel/helper-simple-access": { @@ -275,20 +275,20 @@ } }, "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.6.0.tgz", + "integrity": "sha512-W9kao7OBleOjfXtFGgArGRX6eCP0UEcA2ZWEWNkJdRZnHhW4eEbeswbG3EwaRsnQUAEGWYgMq1HsIXuNNNy2eQ==", "dev": true, "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/template": "^7.6.0", + "@babel/traverse": "^7.6.0", + "@babel/types": "^7.6.0" } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -297,9 +297,9 @@ } }, "@babel/parser": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.4.tgz", - "integrity": "sha512-5pCS4mOsL+ANsFZGdvNLybx4wtqAZJ0MJjMHxvzI3bvIsz6sQvzW8XX92EYIkiPtIvcfG3Aj+Ir5VNyjnZhP7w==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.0.tgz", + "integrity": "sha512-+o2q111WEx4srBs7L9eJmcwi655eD8sXniLqMB93TBK9GrNzGrxDWSjiqz2hLU0Ha8MTXFIP0yd9fNdP+m43ZQ==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { @@ -313,6 +313,16 @@ "@babel/plugin-syntax-async-generators": "^7.2.0" } }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", + "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0" + } + }, "@babel/plugin-proposal-json-strings": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", @@ -324,9 +334,9 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz", + "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -363,6 +373,15 @@ "@babel/helper-plugin-utils": "^7.0.0" } }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, "@babel/plugin-syntax-json-strings": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", @@ -400,9 +419,9 @@ } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", + "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", @@ -420,27 +439,27 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.0.tgz", + "integrity": "sha512-tIt4E23+kw6TgL/edACZwP1OUKrjOTyMrFMLoT5IOFrfMRabCgekjqFd5o6PaAMildBu46oFkekIdMuGkkPEpA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" + "lodash": "^4.17.13" } }, "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", + "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", + "@babel/helper-define-map": "^7.5.5", "@babel/helper-function-name": "^7.1.0", "@babel/helper-optimise-call-expression": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", + "@babel/helper-replace-supers": "^7.5.5", "@babel/helper-split-export-declaration": "^7.4.4", "globals": "^11.1.0" } @@ -455,9 +474,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz", + "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -475,9 +494,9 @@ } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" @@ -531,34 +550,37 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz", + "integrity": "sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.4.4", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0" + "@babel/helper-simple-access": "^7.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", + "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { @@ -572,12 +594,12 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.4.tgz", - "integrity": "sha512-Ki+Y9nXBlKfhD+LXaRS7v95TtTGYRAf9Y1rTDiE75zf8YQz4GDaWRXosMfJBXxnk88mGFjWdCRIeqDbon7spYA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.0.tgz", + "integrity": "sha512-jem7uytlmrRl3iCAuQyw8BpB4c4LWvSpvIeXKpMb+7j84lkx4m4mYr5ErAcmN5KM7B6BqrAvRGjBIbbzqCczew==", "dev": true, "requires": { - "regexp-tree": "^0.1.0" + "regexp-tree": "^0.1.13" } }, "@babel/plugin-transform-new-target": { @@ -590,13 +612,13 @@ } }, "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" + "@babel/helper-replace-supers": "^7.5.5" } }, "@babel/plugin-transform-parameters": { @@ -620,12 +642,12 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.4.tgz", - "integrity": "sha512-Zz3w+pX1SI0KMIiqshFZkwnVGUhDZzpX2vtPzfJBKQQq8WsP/Xy9DNdELWivxcKOCX/Pywge4SiEaPaLtoDT4g==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", + "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", "dev": true, "requires": { - "regenerator-transform": "^0.13.4" + "regenerator-transform": "^0.14.0" } }, "@babel/plugin-transform-reserved-words": { @@ -696,46 +718,48 @@ } }, "@babel/preset-env": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.4.tgz", - "integrity": "sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.0.tgz", + "integrity": "sha512-1efzxFv/TcPsNXlRhMzRnkBFMeIqBBgzwmZwlFDw5Ubj0AGLeufxugirwZmkkX/ayi3owsSqoQ4fw8LkfK9SYg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.0.0", "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.4.4", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", "@babel/plugin-syntax-json-strings": "^7.2.0", "@babel/plugin-syntax-object-rest-spread": "^7.2.0", "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.4.4", + "@babel/plugin-transform-async-to-generator": "^7.5.0", "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.4", - "@babel/plugin-transform-classes": "^7.4.4", + "@babel/plugin-transform-block-scoping": "^7.6.0", + "@babel/plugin-transform-classes": "^7.5.5", "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.4.4", + "@babel/plugin-transform-destructuring": "^7.6.0", "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.2.0", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", "@babel/plugin-transform-exponentiation-operator": "^7.2.0", "@babel/plugin-transform-for-of": "^7.4.4", "@babel/plugin-transform-function-name": "^7.4.4", "@babel/plugin-transform-literals": "^7.2.0", "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.2.0", - "@babel/plugin-transform-modules-commonjs": "^7.4.4", - "@babel/plugin-transform-modules-systemjs": "^7.4.4", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.6.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.0", "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.2.0", + "@babel/plugin-transform-object-super": "^7.5.5", "@babel/plugin-transform-parameters": "^7.4.4", "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.4", + "@babel/plugin-transform-regenerator": "^7.4.5", "@babel/plugin-transform-reserved-words": "^7.2.0", "@babel/plugin-transform-shorthand-properties": "^7.2.0", "@babel/plugin-transform-spread": "^7.2.0", @@ -743,40 +767,40 @@ "@babel/plugin-transform-template-literals": "^7.4.4", "@babel/plugin-transform-typeof-symbol": "^7.2.0", "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "browserslist": "^4.5.2", - "core-js-compat": "^3.0.0", + "@babel/types": "^7.6.0", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", "invariant": "^2.2.2", "js-levenshtein": "^1.1.3", "semver": "^5.5.0" } }, "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", + "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.0" } }, "@babel/traverse": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.4.tgz", - "integrity": "sha512-Gw6qqkw/e6AGzlyj9KnkabJX7VcubqPtkUQVAwkc0wUMldr3A/hezNB3Rc5eIvId95iSGkGIOe5hh1kMKf951A==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.0.tgz", + "integrity": "sha512-93t52SaOBgml/xY74lsmt7xOR4ufYvhb5c5qiM6lu4J/dWGMAfAh6eKw4PjLes6DI6nQgearoxnFJk60YchpvQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.4.4", + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.6.0", "@babel/helper-function-name": "^7.1.0", "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4", + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.0", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.11" + "lodash": "^4.17.13" }, "dependencies": { "debug": { @@ -789,112 +813,266 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz", + "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==", "dev": true, "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.11", + "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } }, + "@evocateur/libnpmaccess": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@evocateur/libnpmaccess/-/libnpmaccess-3.1.2.tgz", + "integrity": "sha512-KSCAHwNWro0CF2ukxufCitT9K5LjL/KuMmNzSu8wuwN2rjyKHD8+cmOsiybK+W5hdnwc5M1SmRlVCaMHQo+3rg==", + "dev": true, + "requires": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "npm-package-arg": "^6.1.0" + }, + "dependencies": { + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + } + } + }, + "@evocateur/libnpmpublish": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@evocateur/libnpmpublish/-/libnpmpublish-1.2.2.tgz", + "integrity": "sha512-MJrrk9ct1FeY9zRlyeoyMieBjGDG9ihyyD9/Ft6MMrTxql9NyoEx2hw9casTIP4CdqEVu+3nQ2nXxoJ8RCXyFg==", + "dev": true, + "requires": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "aproba": "^2.0.0", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.0.0", + "lodash.clonedeep": "^4.5.0", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "semver": "^5.5.1", + "ssri": "^6.0.1" + }, + "dependencies": { + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + } + } + }, + "@evocateur/npm-registry-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@evocateur/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz", + "integrity": "sha512-k1WGfKRQyhJpIr+P17O5vLIo2ko1PFLKwoetatdduUSt/aQ4J2sJrJwwatdI5Z3SiYk/mRH9S3JpdmMFd/IK4g==", + "dev": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "@evocateur/pacote": { + "version": "9.6.5", + "resolved": "https://registry.npmjs.org/@evocateur/pacote/-/pacote-9.6.5.tgz", + "integrity": "sha512-EI552lf0aG2nOV8NnZpTxNo2PcXKPmDbF9K8eCBFQdIZwHNGN/mi815fxtmUMa2wTa1yndotICIDt/V0vpEx2w==", + "dev": true, + "requires": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "bluebird": "^3.5.3", + "cacache": "^12.0.3", + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.5.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.4.4", + "npm-pick-manifest": "^3.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.3", + "safe-buffer": "^5.2.0", + "semver": "^5.7.0", + "ssri": "^6.0.1", + "tar": "^4.4.10", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, "@lerna/add": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.13.3.tgz", - "integrity": "sha512-T3/Lsbo9ZFq+vL3ssaHxA8oKikZAPTJTGFe4CRuQgWCDd/M61+51jeWsngdaHpwzSSRDRjxg8fJTG10y10pnfA==", + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.16.2.tgz", + "integrity": "sha512-RAAaF8aODPogj2Ge9Wj3uxPFIBGpog9M+HwSuq03ZnkkO831AmasCTJDqV+GEpl1U2DvnhZQEwHpWmTT0uUeEw==", "dev": true, "requires": { - "@lerna/bootstrap": "3.13.3", - "@lerna/command": "3.13.3", - "@lerna/filter-options": "3.13.3", - "@lerna/npm-conf": "3.13.0", + "@evocateur/pacote": "^9.6.3", + "@lerna/bootstrap": "3.16.2", + "@lerna/command": "3.16.0", + "@lerna/filter-options": "3.16.0", + "@lerna/npm-conf": "3.16.0", "@lerna/validation-error": "3.13.0", "dedent": "^0.7.0", "npm-package-arg": "^6.1.0", - "p-map": "^1.2.0", - "pacote": "^9.5.0", - "semver": "^5.5.0" + "p-map": "^2.1.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@lerna/batch-packages": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/batch-packages/-/batch-packages-3.13.0.tgz", - "integrity": "sha512-TgLBTZ7ZlqilGnzJ3xh1KdAHcySfHytgNRTdG9YomfriTU6kVfp1HrXxKJYVGs7ClPUNt2CTFEOkw0tMBronjw==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/batch-packages/-/batch-packages-3.16.0.tgz", + "integrity": "sha512-7AdMkANpubY/FKFI01im01tlx6ygOBJ/0JcixMUWoWP/7Ds3SWQF22ID6fbBr38jUWptYLDs2fagtTDL7YUPuA==", "dev": true, "requires": { - "@lerna/package-graph": "3.13.0", - "@lerna/validation-error": "3.13.0", + "@lerna/package-graph": "3.16.0", "npmlog": "^4.1.2" } }, "@lerna/bootstrap": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.13.3.tgz", - "integrity": "sha512-2XzijnLHRZOVQh8pwS7+5GR3cG4uh+EiLrWOishCq2TVzkqgjaS3GGBoef7KMCXfWHoLqAZRr/jEdLqfETLVqg==", + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.16.2.tgz", + "integrity": "sha512-I+gs7eh6rv9Vyd+CwqL7sftRfOOsSzCle8cv/CGlMN7/p7EAVhxEdAw8SYoHIKHzipXszuqqy1Y3opyleD0qdA==", "dev": true, "requires": { - "@lerna/batch-packages": "3.13.0", - "@lerna/command": "3.13.3", - "@lerna/filter-options": "3.13.3", - "@lerna/has-npm-version": "3.13.3", - "@lerna/npm-install": "3.13.3", - "@lerna/package-graph": "3.13.0", + "@lerna/batch-packages": "3.16.0", + "@lerna/command": "3.16.0", + "@lerna/filter-options": "3.16.0", + "@lerna/has-npm-version": "3.16.0", + "@lerna/npm-install": "3.16.0", + "@lerna/package-graph": "3.16.0", "@lerna/pulse-till-done": "3.13.0", - "@lerna/rimraf-dir": "3.13.3", - "@lerna/run-lifecycle": "3.13.0", - "@lerna/run-parallel-batches": "3.13.0", - "@lerna/symlink-binary": "3.13.0", - "@lerna/symlink-dependencies": "3.13.0", + "@lerna/rimraf-dir": "3.14.2", + "@lerna/run-lifecycle": "3.16.2", + "@lerna/run-parallel-batches": "3.16.0", + "@lerna/symlink-binary": "3.16.2", + "@lerna/symlink-dependencies": "3.16.2", "@lerna/validation-error": "3.13.0", "dedent": "^0.7.0", - "get-port": "^3.2.0", - "multimatch": "^2.1.0", + "get-port": "^4.2.0", + "multimatch": "^3.0.0", "npm-package-arg": "^6.1.0", "npmlog": "^4.1.2", "p-finally": "^1.0.0", - "p-map": "^1.2.0", + "p-map": "^2.1.0", "p-map-series": "^1.0.0", "p-waterfall": "^1.0.0", "read-package-tree": "^5.1.6", - "semver": "^5.5.0" + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@lerna/changed": { - "version": "3.13.4", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.13.4.tgz", - "integrity": "sha512-9lfOyRVObasw6L/z7yCSfsEl1QKy0Eamb8t2Krg1deIoAt+cE3JXOdGGC1MhOSli+7f/U9LyLXjJzIOs/pc9fw==", + "version": "3.16.4", + "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.16.4.tgz", + "integrity": "sha512-NCD7XkK744T23iW0wqKEgF4R9MYmReUbyHCZKopFnsNpQdqumc3SOIvQUAkKCP6hQJmYvxvOieoVgy/CVDpZ5g==", "dev": true, "requires": { - "@lerna/collect-updates": "3.13.3", - "@lerna/command": "3.13.3", - "@lerna/listable": "3.13.0", + "@lerna/collect-updates": "3.16.0", + "@lerna/command": "3.16.0", + "@lerna/listable": "3.16.0", "@lerna/output": "3.13.0", - "@lerna/version": "3.13.4" + "@lerna/version": "3.16.4" } }, "@lerna/check-working-tree": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.13.3.tgz", - "integrity": "sha512-LoGZvTkne+V1WpVdCTU0XNzFKsQa2AiAFKksGRT0v8NQj6VAPp0jfVYDayTqwaWt2Ne0OGKOFE79Y5LStOuhaQ==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.14.2.tgz", + "integrity": "sha512-7safqxM/MYoAoxZxulUDtIJIbnBIgo0PB/FHytueG+9VaX7GMnDte2Bt1EKa0dz2sAyQdmQ3Q8ZXpf/6JDjaeg==", "dev": true, "requires": { - "@lerna/describe-ref": "3.13.3", + "@lerna/collect-uncommitted": "3.14.2", + "@lerna/describe-ref": "3.14.2", "@lerna/validation-error": "3.13.0" } }, "@lerna/child-process": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.13.3.tgz", - "integrity": "sha512-3/e2uCLnbU+bydDnDwyadpOmuzazS01EcnOleAnuj9235CU2U97DH6OyoG1EW/fU59x11J+HjIqovh5vBaMQjQ==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.14.2.tgz", + "integrity": "sha512-xnq+W5yQb6RkwI0p16ZQnrn6HkloH/MWTw4lGE1nKsBLAUbmSU5oTE93W1nrG0X3IMF/xWc9UYvNdUGMWvZZ4w==", "dev": true, "requires": { "chalk": "^2.3.1", @@ -903,17 +1081,17 @@ } }, "@lerna/clean": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.13.3.tgz", - "integrity": "sha512-xmNauF1PpmDaKdtA2yuRc23Tru4q7UMO6yB1a/TTwxYPYYsAWG/CBK65bV26J7x4RlZtEv06ztYGMa9zh34UXA==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.16.0.tgz", + "integrity": "sha512-5P9U5Y19WmYZr7UAMGXBpY7xCRdlR7zhHy8MAPDKVx70rFIBS6nWXn5n7Kntv74g7Lm1gJ2rsiH5tj1OPcRJgg==", "dev": true, "requires": { - "@lerna/command": "3.13.3", - "@lerna/filter-options": "3.13.3", + "@lerna/command": "3.16.0", + "@lerna/filter-options": "3.16.0", "@lerna/prompt": "3.13.0", "@lerna/pulse-till-done": "3.13.0", - "@lerna/rimraf-dir": "3.13.3", - "p-map": "^1.2.0", + "@lerna/rimraf-dir": "3.14.2", + "p-map": "^2.1.0", "p-map-series": "^1.0.0", "p-waterfall": "^1.0.0" } @@ -930,92 +1108,108 @@ "yargs": "^12.0.1" } }, + "@lerna/collect-uncommitted": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/@lerna/collect-uncommitted/-/collect-uncommitted-3.14.2.tgz", + "integrity": "sha512-4EkQu4jIOdNL2BMzy/N0ydHB8+Z6syu6xiiKXOoFl0WoWU9H1jEJCX4TH7CmVxXL1+jcs8FIS2pfQz4oew99Eg==", + "dev": true, + "requires": { + "@lerna/child-process": "3.14.2", + "chalk": "^2.3.1", + "figgy-pudding": "^3.5.1", + "npmlog": "^4.1.2" + } + }, "@lerna/collect-updates": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.13.3.tgz", - "integrity": "sha512-sTpALOAxli/ZS+Mjq6fbmjU9YXqFJ2E4FrE1Ijl4wPC5stXEosg2u0Z1uPY+zVKdM+mOIhLxPVdx83rUgRS+Cg==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.16.0.tgz", + "integrity": "sha512-HwAIl815X2TNlmcp28zCrSdXfoZWNP7GJPEqNWYk7xDJTYLqQ+SrmKUePjb3AMGBwYAraZSEJLbHdBpJ5+cHmQ==", "dev": true, "requires": { - "@lerna/child-process": "3.13.3", - "@lerna/describe-ref": "3.13.3", + "@lerna/child-process": "3.14.2", + "@lerna/describe-ref": "3.14.2", "minimatch": "^3.0.4", "npmlog": "^4.1.2", - "slash": "^1.0.0" - }, - "dependencies": { - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - } + "slash": "^2.0.0" } }, "@lerna/command": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.13.3.tgz", - "integrity": "sha512-WHFIQCubJV0T8gSLRNr6exZUxTswrh+iAtJCb86SE0Sa+auMPklE8af7w2Yck5GJfewmxSjke3yrjNxQrstx7w==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.16.0.tgz", + "integrity": "sha512-u7tE4GC4/gfbPA9eQg+0ulnoJ+PMoMqomx033r/IxqZrHtmJR9+pF/37S0fsxJ2hX/RMFPC7c9Q/i8NEufSpdQ==", "dev": true, "requires": { - "@lerna/child-process": "3.13.3", - "@lerna/package-graph": "3.13.0", - "@lerna/project": "3.13.1", + "@lerna/child-process": "3.14.2", + "@lerna/package-graph": "3.16.0", + "@lerna/project": "3.16.0", "@lerna/validation-error": "3.13.0", "@lerna/write-log-file": "3.13.0", "dedent": "^0.7.0", "execa": "^1.0.0", - "is-ci": "^1.0.10", - "lodash": "^4.17.5", + "is-ci": "^2.0.0", + "lodash": "^4.17.14", "npmlog": "^4.1.2" } }, "@lerna/conventional-commits": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.13.0.tgz", - "integrity": "sha512-BeAgcNXuocmLhPxnmKU2Vy8YkPd/Uo+vu2i/p3JGsUldzrPC8iF3IDxH7fuXpEFN2Nfogu7KHachd4tchtOppA==", + "version": "3.16.4", + "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.16.4.tgz", + "integrity": "sha512-QSZJ0bC9n6FVaf+7KDIq5zMv8WnHXnwhyL5jG1Nyh3SgOg9q2uflqh7YsYB+G6FwaRfnPaKosh6obijpYg0llA==", "dev": true, "requires": { "@lerna/validation-error": "3.13.0", "conventional-changelog-angular": "^5.0.3", "conventional-changelog-core": "^3.1.6", - "conventional-recommended-bump": "^4.0.4", - "fs-extra": "^7.0.0", + "conventional-recommended-bump": "^5.0.0", + "fs-extra": "^8.1.0", "get-stream": "^4.0.0", + "lodash.template": "^4.5.0", "npm-package-arg": "^6.1.0", "npmlog": "^4.1.2", - "pify": "^3.0.0", - "semver": "^5.5.0" + "pify": "^4.0.1", + "semver": "^6.2.0" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@lerna/create": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.13.3.tgz", - "integrity": "sha512-4M5xT1AyUMwt1gCDph4BfW3e6fZmt0KjTa3FoXkUotf/w/eqTsc2IQ+ULz2+gOFQmtuNbqIZEOK3J4P9ArJJ/A==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.16.0.tgz", + "integrity": "sha512-OZApR1Iz7awutbmj4sAArwhqCyKgcrnw9rH0aWAUrkYWrD1w4TwkvAcYAsfx5GpQGbLQwoXhoyyPwPfZRRWz3Q==", "dev": true, "requires": { - "@lerna/child-process": "3.13.3", - "@lerna/command": "3.13.3", - "@lerna/npm-conf": "3.13.0", + "@evocateur/pacote": "^9.6.3", + "@lerna/child-process": "3.14.2", + "@lerna/command": "3.16.0", + "@lerna/npm-conf": "3.16.0", "@lerna/validation-error": "3.13.0", "camelcase": "^5.0.0", "dedent": "^0.7.0", - "fs-extra": "^7.0.0", - "globby": "^8.0.1", + "fs-extra": "^8.1.0", + "globby": "^9.2.0", "init-package-json": "^1.10.3", "npm-package-arg": "^6.1.0", "p-reduce": "^1.0.0", - "pacote": "^9.5.0", - "pify": "^3.0.0", - "semver": "^5.5.0", - "slash": "^1.0.0", + "pify": "^4.0.1", + "semver": "^6.2.0", + "slash": "^2.0.0", "validate-npm-package-license": "^3.0.3", "validate-npm-package-name": "^3.0.0", "whatwg-url": "^7.0.0" @@ -1027,86 +1221,104 @@ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@lerna/create-symlink": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.13.0.tgz", - "integrity": "sha512-PTvg3jAAJSAtLFoZDsuTMv1wTOC3XYIdtg54k7uxIHsP8Ztpt+vlilY/Cni0THAqEMHvfiToel76Xdta4TU21Q==", + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.16.2.tgz", + "integrity": "sha512-pzXIJp6av15P325sgiIRpsPXLFmkisLhMBCy4764d+7yjf2bzrJ4gkWVMhsv4AdF0NN3OyZ5jjzzTtLNqfR+Jw==", "dev": true, "requires": { - "cmd-shim": "^2.0.2", - "fs-extra": "^7.0.0", + "@zkochan/cmd-shim": "^3.1.0", + "fs-extra": "^8.1.0", "npmlog": "^4.1.2" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "@lerna/describe-ref": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.13.3.tgz", - "integrity": "sha512-5KcLTvjdS4gU5evW8ESbZ0BF44NM5HrP3dQNtWnOUSKJRgsES8Gj0lq9AlB2+YglZfjEftFT03uOYOxnKto4Uw==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.14.2.tgz", + "integrity": "sha512-qa5pzDRK2oBQXNjyRmRnN7E8a78NMYfQjjlRFB0KNHMsT6mCiL9+8kIS39sSE2NqT8p7xVNo2r2KAS8R/m3CoQ==", "dev": true, "requires": { - "@lerna/child-process": "3.13.3", + "@lerna/child-process": "3.14.2", "npmlog": "^4.1.2" } }, "@lerna/diff": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.13.3.tgz", - "integrity": "sha512-/DRS2keYbnKaAC+5AkDyZRGkP/kT7v1GlUS0JGZeiRDPQ1H6PzhX09EgE5X6nj0Ytrm0sUasDeN++CDVvgaI+A==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.16.0.tgz", + "integrity": "sha512-QUpVs5TPl8vBIne10/vyjUxanQBQQp7Lk3iaB8MnCysKr0O+oy7trWeFVDPEkBTCD177By7yPGyW5Yey1nCBbA==", "dev": true, "requires": { - "@lerna/child-process": "3.13.3", - "@lerna/command": "3.13.3", + "@lerna/child-process": "3.14.2", + "@lerna/command": "3.16.0", "@lerna/validation-error": "3.13.0", "npmlog": "^4.1.2" } }, "@lerna/exec": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.13.3.tgz", - "integrity": "sha512-c0bD4XqM96CTPV8+lvkxzE7mkxiFyv/WNM4H01YvvbFAJzk+S4Y7cBtRkIYFTfkFZW3FLo8pEgtG1ONtIdM+tg==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.16.0.tgz", + "integrity": "sha512-mH3O5NXf/O88jBaBBTUf+d56CUkxpg782s3Jxy7HWbVuSUULt3iMRPTh+zEXO5/555etsIVVDDyUR76meklrJA==", "dev": true, "requires": { - "@lerna/batch-packages": "3.13.0", - "@lerna/child-process": "3.13.3", - "@lerna/command": "3.13.3", - "@lerna/filter-options": "3.13.3", - "@lerna/run-parallel-batches": "3.13.0", - "@lerna/validation-error": "3.13.0" + "@lerna/child-process": "3.14.2", + "@lerna/command": "3.16.0", + "@lerna/filter-options": "3.16.0", + "@lerna/run-topologically": "3.16.0", + "@lerna/validation-error": "3.13.0", + "p-map": "^2.1.0" } }, "@lerna/filter-options": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.13.3.tgz", - "integrity": "sha512-DbtQX4eRgrBz1wCFWRP99JBD7ODykYme9ykEK79+RrKph40znhJQRlLg4idogj6IsUEzwo1OHjihCzSfnVo6Cg==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.16.0.tgz", + "integrity": "sha512-InIi1fF8+PxpCwir9bIy+pGxrdE6hvN0enIs1eNGCVS1TTE8osNgiZXa838bMQ1yaEccdcnVX6Z03BNKd56kNg==", "dev": true, "requires": { - "@lerna/collect-updates": "3.13.3", - "@lerna/filter-packages": "3.13.0", + "@lerna/collect-updates": "3.16.0", + "@lerna/filter-packages": "3.16.0", "dedent": "^0.7.0" } }, "@lerna/filter-packages": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.13.0.tgz", - "integrity": "sha512-RWiZWyGy3Mp7GRVBn//CacSnE3Kw82PxE4+H6bQ3pDUw/9atXn7NRX+gkBVQIYeKamh7HyumJtyOKq3Pp9BADQ==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.16.0.tgz", + "integrity": "sha512-eGFzQTx0ogkGDCnbTuXqssryR6ilp8+dcXt6B+aq1MaqL/vOJRZyqMm4TY3CUOUnzZCi9S2WWyMw3PnAJOF+kg==", "dev": true, "requires": { "@lerna/validation-error": "3.13.0", - "multimatch": "^2.1.0", + "multimatch": "^3.0.0", "npmlog": "^4.1.2" } }, @@ -1120,29 +1332,53 @@ } }, "@lerna/get-packed": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-3.13.0.tgz", - "integrity": "sha512-EgSim24sjIjqQDC57bgXD9l22/HCS93uQBbGpkzEOzxAVzEgpZVm7Fm1t8BVlRcT2P2zwGnRadIvxTbpQuDPTg==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/get-packed/-/get-packed-3.16.0.tgz", + "integrity": "sha512-AjsFiaJzo1GCPnJUJZiTW6J1EihrPkc2y3nMu6m3uWFxoleklsSCyImumzVZJssxMi3CPpztj8LmADLedl9kXw==", "dev": true, "requires": { - "fs-extra": "^7.0.0", + "fs-extra": "^8.1.0", "ssri": "^6.0.1", "tar": "^4.4.8" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "@lerna/github-client": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-3.13.3.tgz", - "integrity": "sha512-fcJkjab4kX0zcLLSa/DCUNvU3v8wmy2c1lhdIbL7s7gABmDcV0QZq93LhnEee3VkC9UpnJ6GKG4EkD7eIifBnA==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/github-client/-/github-client-3.16.0.tgz", + "integrity": "sha512-IVJjcKjkYaUEPJsDyAblHGEFFNKCRyMagbIDm14L7Ab94ccN6i4TKOqAFEJn2SJHYvKKBdp3Zj2zNlASOMe3DA==", "dev": true, "requires": { - "@lerna/child-process": "3.13.3", - "@octokit/plugin-enterprise-rest": "^2.1.1", - "@octokit/rest": "^16.16.0", + "@lerna/child-process": "3.14.2", + "@octokit/plugin-enterprise-rest": "^3.6.1", + "@octokit/rest": "^16.28.4", "git-url-parse": "^11.1.2", "npmlog": "^4.1.2" } }, + "@lerna/gitlab-client": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@lerna/gitlab-client/-/gitlab-client-3.15.0.tgz", + "integrity": "sha512-OsBvRSejHXUBMgwWQqNoioB8sgzL/Pf1pOUhHKtkiMl6aAWjklaaq5HPMvTIsZPfS6DJ9L5OK2GGZuooP/5c8Q==", + "dev": true, + "requires": { + "node-fetch": "^2.5.0", + "npmlog": "^4.1.2", + "whatwg-url": "^7.0.0" + } + }, "@lerna/global-options": { "version": "3.13.0", "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.13.0.tgz", @@ -1150,180 +1386,228 @@ "dev": true }, "@lerna/has-npm-version": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.13.3.tgz", - "integrity": "sha512-mQzoghRw4dBg0R9FFfHrj0TH0glvXyzdEZmYZ8Isvx5BSuEEwpsryoywuZSdppcvLu8o7NAdU5Tac8cJ/mT52w==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.16.0.tgz", + "integrity": "sha512-TIY036dA9J8OyTrZq9J+it2DVKifL65k7hK8HhkUPpitJkw6jwbMObA/8D40LOGgWNPweJWqmlrTbRSwsR7DrQ==", "dev": true, "requires": { - "@lerna/child-process": "3.13.3", - "semver": "^5.5.0" + "@lerna/child-process": "3.14.2", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@lerna/import": { - "version": "3.13.4", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.13.4.tgz", - "integrity": "sha512-dn6eNuPEljWsifBEzJ9B6NoaLwl/Zvof7PBUPA4hRyRlqG5sXRn6F9DnusMTovvSarbicmTURbOokYuotVWQQA==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.16.0.tgz", + "integrity": "sha512-trsOmGHzw0rL/f8BLNvd+9PjoTkXq2Dt4/V2UCha254hMQaYutbxcYu8iKPxz9x86jSPlH7FpbTkkHXDsoY7Yg==", "dev": true, "requires": { - "@lerna/child-process": "3.13.3", - "@lerna/command": "3.13.3", + "@lerna/child-process": "3.14.2", + "@lerna/command": "3.16.0", "@lerna/prompt": "3.13.0", "@lerna/pulse-till-done": "3.13.0", "@lerna/validation-error": "3.13.0", "dedent": "^0.7.0", - "fs-extra": "^7.0.0", + "fs-extra": "^8.1.0", "p-map-series": "^1.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "@lerna/init": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.13.3.tgz", - "integrity": "sha512-bK/mp0sF6jT0N+c+xrbMCqN4xRoiZCXQzlYsyACxPK99KH/mpHv7hViZlTYUGlYcymtew6ZC770miv5A9wF9hA==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.16.0.tgz", + "integrity": "sha512-Ybol/x5xMtBgokx4j7/Y3u0ZmNh0NiSWzBFVaOs2NOJKvuqrWimF67DKVz7yYtTYEjtaMdug64ohFF4jcT/iag==", "dev": true, "requires": { - "@lerna/child-process": "3.13.3", - "@lerna/command": "3.13.3", - "fs-extra": "^7.0.0", - "p-map": "^1.2.0", - "write-json-file": "^2.3.0" + "@lerna/child-process": "3.14.2", + "@lerna/command": "3.16.0", + "fs-extra": "^8.1.0", + "p-map": "^2.1.0", + "write-json-file": "^3.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "@lerna/link": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.13.3.tgz", - "integrity": "sha512-IHhtdhA0KlIdevCsq6WHkI2rF3lHWHziJs2mlrEWAKniVrFczbELON1KJAgdJS1k3kAP/WeWVqmIYZ2hJDxMvg==", + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.16.2.tgz", + "integrity": "sha512-eCPg5Lo8HT525fIivNoYF3vWghO3UgEVFdbsiPmhzwI7IQyZro5HWYzLtywSAdEog5XZpd2Bbn0CsoHWBB3gww==", "dev": true, "requires": { - "@lerna/command": "3.13.3", - "@lerna/package-graph": "3.13.0", - "@lerna/symlink-dependencies": "3.13.0", - "p-map": "^1.2.0", - "slash": "^1.0.0" - }, - "dependencies": { - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - } + "@lerna/command": "3.16.0", + "@lerna/package-graph": "3.16.0", + "@lerna/symlink-dependencies": "3.16.2", + "p-map": "^2.1.0", + "slash": "^2.0.0" } }, "@lerna/list": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.13.3.tgz", - "integrity": "sha512-rLRDsBCkydMq2FL6WY1J/elvnXIjxxRtb72lfKHdvDEqVdquT5Qgt9ci42hwjmcocFwWcFJgF6BZozj5pbc13A==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.16.0.tgz", + "integrity": "sha512-TkvstoPsgKqqQ0KfRumpsdMXfRSEhdXqOLq519XyI5IRWYxhoqXqfi8gG37UoBPhBNoe64japn5OjphF3rOmQA==", "dev": true, "requires": { - "@lerna/command": "3.13.3", - "@lerna/filter-options": "3.13.3", - "@lerna/listable": "3.13.0", + "@lerna/command": "3.16.0", + "@lerna/filter-options": "3.16.0", + "@lerna/listable": "3.16.0", "@lerna/output": "3.13.0" } }, "@lerna/listable": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-3.13.0.tgz", - "integrity": "sha512-liYJ/WBUYP4N4MnSVZuLUgfa/jy3BZ02/1Om7xUY09xGVSuNVNEeB8uZUMSC+nHqFHIsMPZ8QK9HnmZb1E/eTA==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-3.16.0.tgz", + "integrity": "sha512-mtdAT2EEECqrJSDm/aXlOUFr1MRE4p6hppzY//Klp05CogQy6uGaKk+iKG5yyCLaOXFFZvG4HfO11CmoGSDWzw==", "dev": true, "requires": { - "@lerna/batch-packages": "3.13.0", + "@lerna/query-graph": "3.16.0", "chalk": "^2.3.1", "columnify": "^1.5.4" } }, "@lerna/log-packed": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.13.0.tgz", - "integrity": "sha512-Rmjrcz+6aM6AEcEVWmurbo8+AnHOvYtDpoeMMJh9IZ9SmZr2ClXzmD7wSvjTQc8BwOaiWjjC/ukcT0UYA2m7wg==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.16.0.tgz", + "integrity": "sha512-Fp+McSNBV/P2mnLUYTaSlG8GSmpXM7krKWcllqElGxvAqv6chk2K3c2k80MeVB4WvJ9tRjUUf+i7HUTiQ9/ckQ==", "dev": true, "requires": { - "byte-size": "^4.0.3", + "byte-size": "^5.0.1", "columnify": "^1.5.4", "has-unicode": "^2.0.1", "npmlog": "^4.1.2" } }, "@lerna/npm-conf": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-3.13.0.tgz", - "integrity": "sha512-Jg2kANsGnhg+fbPEzE0X9nX5oviEAvWj0nYyOkcE+cgWuT7W0zpnPXC4hA4C5IPQGhwhhh0IxhWNNHtjTuw53g==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-3.16.0.tgz", + "integrity": "sha512-HbO3DUrTkCAn2iQ9+FF/eisDpWY5POQAOF1m7q//CZjdC2HSW3UYbKEGsSisFxSfaF9Z4jtrV+F/wX6qWs3CuA==", "dev": true, "requires": { "config-chain": "^1.1.11", - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "pify": "^4.0.1" } }, "@lerna/npm-dist-tag": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.13.0.tgz", - "integrity": "sha512-mcuhw34JhSRFrbPn0vedbvgBTvveG52bR2lVE3M3tfE8gmR/cKS/EJFO4AUhfRKGCTFn9rjaSEzlFGYV87pemQ==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.16.0.tgz", + "integrity": "sha512-MQrBkqJJB9+eNphuj9w90QPMOs4NQXMuSRk9NqzeFunOmdDopPCV0Q7IThSxEuWnhJ2n3B7G0vWUP7tNMPdqIQ==", "dev": true, "requires": { + "@evocateur/npm-registry-fetch": "^4.0.0", + "@lerna/otplease": "3.16.0", "figgy-pudding": "^3.5.1", "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^3.9.0", "npmlog": "^4.1.2" } }, "@lerna/npm-install": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.13.3.tgz", - "integrity": "sha512-7Jig9MLpwAfcsdQ5UeanAjndChUjiTjTp50zJ+UZz4CbIBIDhoBehvNMTCL2G6pOEC7sGEg6sAqJINAqred6Tg==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.16.0.tgz", + "integrity": "sha512-APUOIilZCzDzce92uLEwzt1r7AEMKT/hWA1ThGJL+PO9Rn8A95Km3o2XZAYG4W0hR+P4O2nSVuKbsjQtz8CjFQ==", "dev": true, "requires": { - "@lerna/child-process": "3.13.3", + "@lerna/child-process": "3.14.2", "@lerna/get-npm-exec-opts": "3.13.0", - "fs-extra": "^7.0.0", + "fs-extra": "^8.1.0", "npm-package-arg": "^6.1.0", "npmlog": "^4.1.2", "signal-exit": "^3.0.2", "write-pkg": "^3.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "@lerna/npm-publish": { - "version": "3.13.2", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.13.2.tgz", - "integrity": "sha512-HMucPyEYZfom5tRJL4GsKBRi47yvSS2ynMXYxL3kO0ie+j9J7cb0Ir8NmaAMEd3uJWJVFCPuQarehyfTDZsSxg==", + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.16.2.tgz", + "integrity": "sha512-tGMb9vfTxP57vUV5svkBQxd5Tzc+imZbu9ZYf8Mtwe0+HYfDjNiiHLIQw7G95w4YRdc5KsCE8sQ0uSj+f2soIg==", "dev": true, "requires": { - "@lerna/run-lifecycle": "3.13.0", + "@evocateur/libnpmpublish": "^1.2.2", + "@lerna/otplease": "3.16.0", + "@lerna/run-lifecycle": "3.16.2", "figgy-pudding": "^3.5.1", - "fs-extra": "^7.0.0", - "libnpmpublish": "^1.1.1", + "fs-extra": "^8.1.0", "npm-package-arg": "^6.1.0", "npmlog": "^4.1.2", - "pify": "^3.0.0", + "pify": "^4.0.1", "read-package-json": "^2.0.13" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } } } }, "@lerna/npm-run-script": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.13.3.tgz", - "integrity": "sha512-qR4o9BFt5hI8Od5/DqLalOJydnKpiQFEeN0h9xZi7MwzuX1Ukwh3X22vqsX4YRbipIelSFtrDzleNVUm5jj0ow==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.14.2.tgz", + "integrity": "sha512-LbVFv+nvAoRTYLMrJlJ8RiakHXrLslL7Jp/m1R18vYrB8LYWA3ey+nz5Tel2OELzmjUiemAKZsD9h6i+Re5egg==", "dev": true, "requires": { - "@lerna/child-process": "3.13.3", + "@lerna/child-process": "3.14.2", "@lerna/get-npm-exec-opts": "3.13.0", "npmlog": "^4.1.2" } }, + "@lerna/otplease": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/otplease/-/otplease-3.16.0.tgz", + "integrity": "sha512-uqZ15wYOHC+/V0WnD2iTLXARjvx3vNrpiIeyIvVlDB7rWse9mL4egex/QSgZ+lDx1OID7l2kgvcUD9cFpbqB7Q==", + "dev": true, + "requires": { + "@lerna/prompt": "3.13.0", + "figgy-pudding": "^3.5.1" + } + }, "@lerna/output": { "version": "3.13.0", "resolved": "https://registry.npmjs.org/@lerna/output/-/output-3.13.0.tgz", @@ -1334,42 +1618,43 @@ } }, "@lerna/pack-directory": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.13.1.tgz", - "integrity": "sha512-kXnyqrkQbCIZOf1054N88+8h0ItC7tUN5v9ca/aWpx298gsURpxUx/1TIKqijL5TOnHMyIkj0YJmnH/PyBVLKA==", + "version": "3.16.4", + "resolved": "https://registry.npmjs.org/@lerna/pack-directory/-/pack-directory-3.16.4.tgz", + "integrity": "sha512-uxSF0HZeGyKaaVHz5FroDY9A5NDDiCibrbYR6+khmrhZtY0Bgn6hWq8Gswl9iIlymA+VzCbshWIMX4o2O8C8ng==", "dev": true, "requires": { - "@lerna/get-packed": "3.13.0", - "@lerna/package": "3.13.0", - "@lerna/run-lifecycle": "3.13.0", + "@lerna/get-packed": "3.16.0", + "@lerna/package": "3.16.0", + "@lerna/run-lifecycle": "3.16.2", "figgy-pudding": "^3.5.1", - "npm-packlist": "^1.4.1", + "npm-packlist": "^1.4.4", "npmlog": "^4.1.2", - "tar": "^4.4.8", + "tar": "^4.4.10", "temp-write": "^3.4.0" } }, "@lerna/package": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-3.13.0.tgz", - "integrity": "sha512-kSKO0RJQy093BufCQnkhf1jB4kZnBvL7kK5Ewolhk5gwejN+Jofjd8DGRVUDUJfQ0CkW1o6GbUeZvs8w8VIZDg==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/package/-/package-3.16.0.tgz", + "integrity": "sha512-2lHBWpaxcBoiNVbtyLtPUuTYEaB/Z+eEqRS9duxpZs6D+mTTZMNy6/5vpEVSCBmzvdYpyqhqaYjjSLvjjr5Riw==", "dev": true, "requires": { - "load-json-file": "^4.0.0", + "load-json-file": "^5.3.0", "npm-package-arg": "^6.1.0", "write-pkg": "^3.1.0" }, "dependencies": { "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.1.15", "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" } }, "parse-json": { @@ -1381,56 +1666,87 @@ "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true } } }, "@lerna/package-graph": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.13.0.tgz", - "integrity": "sha512-3mRF1zuqFE1HEFmMMAIggXy+f+9cvHhW/jzaPEVyrPNLKsyfJQtpTNzeI04nfRvbAh+Gd2aNksvaW/w3xGJnnw==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.16.0.tgz", + "integrity": "sha512-A2mum/gNbv7zCtAwJqoxzqv89As73OQNK2MgSX1SHWya46qoxO9a9Z2c5lOFQ8UFN5ZxqWMfFYXRCz7qzwmFXw==", "dev": true, "requires": { + "@lerna/prerelease-id-from-version": "3.16.0", "@lerna/validation-error": "3.13.0", "npm-package-arg": "^6.1.0", - "semver": "^5.5.0" + "npmlog": "^4.1.2", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@lerna/prerelease-id-from-version": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-3.16.0.tgz", + "integrity": "sha512-qZyeUyrE59uOK8rKdGn7jQz+9uOpAaF/3hbslJVFL1NqF9ELDTqjCPXivuejMX/lN4OgD6BugTO4cR7UTq/sZA==", + "dev": true, + "requires": { + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@lerna/project": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-3.13.1.tgz", - "integrity": "sha512-/GoCrpsCCTyb9sizk1+pMBrIYchtb+F1uCOn3cjn9yenyG/MfYEnlfrbV5k/UDud0Ei75YBLbmwCbigHkAKazQ==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/project/-/project-3.16.0.tgz", + "integrity": "sha512-NrKcKK1EqXqhrGvslz6Q36+ZHuK3zlDhGdghRqnxDcHxMPT01NgLcmsnymmQ+gjMljuLRmvKYYCuHrknzX8VrA==", "dev": true, "requires": { - "@lerna/package": "3.13.0", + "@lerna/package": "3.16.0", "@lerna/validation-error": "3.13.0", "cosmiconfig": "^5.1.0", "dedent": "^0.7.0", "dot-prop": "^4.2.0", - "glob-parent": "^3.1.0", - "globby": "^8.0.1", - "load-json-file": "^4.0.0", + "glob-parent": "^5.0.0", + "globby": "^9.2.0", + "load-json-file": "^5.3.0", "npmlog": "^4.1.2", - "p-map": "^1.2.0", + "p-map": "^2.1.0", "resolve-from": "^4.0.0", - "write-json-file": "^2.3.0" + "write-json-file": "^3.2.0" }, "dependencies": { + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", + "integrity": "sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.1.15", "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "pify": "^4.0.1", + "strip-bom": "^3.0.0", + "type-fest": "^0.3.0" } }, "parse-json": { @@ -1443,12 +1759,6 @@ "json-parse-better-errors": "^1.0.1" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -1498,9 +1808,9 @@ } }, "inquirer": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", - "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", "dev": true, "requires": { "ansi-escapes": "^3.2.0", @@ -1509,7 +1819,7 @@ "cli-width": "^2.0.0", "external-editor": "^3.0.3", "figures": "^2.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.12", "mute-stream": "0.0.7", "run-async": "^2.2.0", "rxjs": "^6.4.0", @@ -1599,41 +1909,60 @@ } }, "@lerna/publish": { - "version": "3.13.4", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.13.4.tgz", - "integrity": "sha512-v03pabiPlqCDwX6cVNis1PDdT6/jBgkVb5Nl4e8wcJXevIhZw3ClvtI94gSZu/wdoVFX0RMfc8QBVmaimSO0qg==", - "dev": true, - "requires": { - "@lerna/batch-packages": "3.13.0", - "@lerna/check-working-tree": "3.13.3", - "@lerna/child-process": "3.13.3", - "@lerna/collect-updates": "3.13.3", - "@lerna/command": "3.13.3", - "@lerna/describe-ref": "3.13.3", - "@lerna/log-packed": "3.13.0", - "@lerna/npm-conf": "3.13.0", - "@lerna/npm-dist-tag": "3.13.0", - "@lerna/npm-publish": "3.13.2", + "version": "3.16.4", + "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.16.4.tgz", + "integrity": "sha512-XZY+gRuF7/v6PDQwl7lvZaGWs8CnX6WIPIu+OCcyFPSL/rdWegdN7HieKBHskgX798qRQc2GrveaY7bNoTKXAw==", + "dev": true, + "requires": { + "@evocateur/libnpmaccess": "^3.1.2", + "@evocateur/npm-registry-fetch": "^4.0.0", + "@evocateur/pacote": "^9.6.3", + "@lerna/check-working-tree": "3.14.2", + "@lerna/child-process": "3.14.2", + "@lerna/collect-updates": "3.16.0", + "@lerna/command": "3.16.0", + "@lerna/describe-ref": "3.14.2", + "@lerna/log-packed": "3.16.0", + "@lerna/npm-conf": "3.16.0", + "@lerna/npm-dist-tag": "3.16.0", + "@lerna/npm-publish": "3.16.2", + "@lerna/otplease": "3.16.0", "@lerna/output": "3.13.0", - "@lerna/pack-directory": "3.13.1", + "@lerna/pack-directory": "3.16.4", + "@lerna/prerelease-id-from-version": "3.16.0", "@lerna/prompt": "3.13.0", "@lerna/pulse-till-done": "3.13.0", - "@lerna/run-lifecycle": "3.13.0", - "@lerna/run-parallel-batches": "3.13.0", + "@lerna/run-lifecycle": "3.16.2", + "@lerna/run-topologically": "3.16.0", "@lerna/validation-error": "3.13.0", - "@lerna/version": "3.13.4", + "@lerna/version": "3.16.4", "figgy-pudding": "^3.5.1", - "fs-extra": "^7.0.0", - "libnpmaccess": "^3.0.1", + "fs-extra": "^8.1.0", "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^3.9.0", "npmlog": "^4.1.2", "p-finally": "^1.0.0", - "p-map": "^1.2.0", + "p-map": "^2.1.0", "p-pipe": "^1.2.0", - "p-reduce": "^1.0.0", - "pacote": "^9.5.0", - "semver": "^5.5.0" + "semver": "^6.2.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "@lerna/pulse-till-done": { @@ -1645,93 +1974,152 @@ "npmlog": "^4.1.2" } }, + "@lerna/query-graph": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/query-graph/-/query-graph-3.16.0.tgz", + "integrity": "sha512-p0RO+xmHDO95ChJdWkcy9TNLysLkoDARXeRHzY5U54VCwl3Ot/2q8fMCVlA5UeGXDutEyyByl3URqEpcQCWI7Q==", + "dev": true, + "requires": { + "@lerna/package-graph": "3.16.0", + "figgy-pudding": "^3.5.1" + } + }, "@lerna/resolve-symlink": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.13.0.tgz", - "integrity": "sha512-Lc0USSFxwDxUs5JvIisS8JegjA6SHSAWJCMvi2osZx6wVRkEDlWG2B1JAfXUzCMNfHoZX0/XX9iYZ+4JIpjAtg==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.16.0.tgz", + "integrity": "sha512-Ibj5e7njVHNJ/NOqT4HlEgPFPtPLWsO7iu59AM5bJDcAJcR96mLZ7KGVIsS2tvaO7akMEJvt2P+ErwCdloG3jQ==", "dev": true, "requires": { - "fs-extra": "^7.0.0", + "fs-extra": "^8.1.0", "npmlog": "^4.1.2", "read-cmd-shim": "^1.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "@lerna/rimraf-dir": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.13.3.tgz", - "integrity": "sha512-d0T1Hxwu3gpYVv73ytSL+/Oy8JitsmvOYUR5ouRSABsmqS7ZZCh5t6FgVDDGVXeuhbw82+vuny1Og6Q0k4ilqw==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.14.2.tgz", + "integrity": "sha512-eFNkZsy44Bu9v1Hrj5Zk6omzg8O9h/7W6QYK1TTUHeyrjTEwytaNQlqF0lrTLmEvq55sviV42NC/8P3M2cvq8Q==", "dev": true, "requires": { - "@lerna/child-process": "3.13.3", + "@lerna/child-process": "3.14.2", "npmlog": "^4.1.2", "path-exists": "^3.0.0", "rimraf": "^2.6.2" } }, "@lerna/run": { - "version": "3.13.3", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.13.3.tgz", - "integrity": "sha512-ygnLIfIYS6YY1JHWOM4CsdZiY8kTYPsDFOLAwASlRnlAXF9HiMT08GFXLmMHIblZJ8yJhsM2+QgraCB0WdxzOQ==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.16.0.tgz", + "integrity": "sha512-woTeLlB1OAAz4zzjdI6RyIxSGuxiUPHJZm89E1pDEPoWwtQV6HMdMgrsQd9ATsJ5Ez280HH4bF/LStAlqW8Ufg==", "dev": true, "requires": { - "@lerna/batch-packages": "3.13.0", - "@lerna/command": "3.13.3", - "@lerna/filter-options": "3.13.3", - "@lerna/npm-run-script": "3.13.3", + "@lerna/command": "3.16.0", + "@lerna/filter-options": "3.16.0", + "@lerna/npm-run-script": "3.14.2", "@lerna/output": "3.13.0", - "@lerna/run-parallel-batches": "3.13.0", + "@lerna/run-topologically": "3.16.0", "@lerna/timer": "3.13.0", "@lerna/validation-error": "3.13.0", - "p-map": "^1.2.0" + "p-map": "^2.1.0" } }, "@lerna/run-lifecycle": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.13.0.tgz", - "integrity": "sha512-oyiaL1biZdjpmjh6X/5C4w07wNFyiwXSSHH5GQB4Ay4BPwgq9oNhCcxRoi0UVZlZ1YwzSW8sTwLgj8emkIo3Yg==", + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.16.2.tgz", + "integrity": "sha512-RqFoznE8rDpyyF0rOJy3+KjZCeTkO8y/OB9orPauR7G2xQ7PTdCpgo7EO6ZNdz3Al+k1BydClZz/j78gNCmL2A==", "dev": true, "requires": { - "@lerna/npm-conf": "3.13.0", + "@lerna/npm-conf": "3.16.0", "figgy-pudding": "^3.5.1", - "npm-lifecycle": "^2.1.0", + "npm-lifecycle": "^3.1.2", "npmlog": "^4.1.2" } }, "@lerna/run-parallel-batches": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/run-parallel-batches/-/run-parallel-batches-3.13.0.tgz", - "integrity": "sha512-bICFBR+cYVF1FFW+Tlm0EhWDioTUTM6dOiVziDEGE1UZha1dFkMYqzqdSf4bQzfLS31UW/KBd/2z8jy2OIjEjg==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/run-parallel-batches/-/run-parallel-batches-3.16.0.tgz", + "integrity": "sha512-2J/Nyv+MvogmQEfC7VcS21ifk7w0HVvzo2yOZRPvkCzGRu/rducxtB4RTcr58XCZ8h/Bt1aqQYKExu3c/3GXwg==", "dev": true, "requires": { - "p-map": "^1.2.0", + "p-map": "^2.1.0", "p-map-series": "^1.0.0" } }, + "@lerna/run-topologically": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/@lerna/run-topologically/-/run-topologically-3.16.0.tgz", + "integrity": "sha512-4Hlpv4zDtKWa5Z0tPkeu0sK+bxZEKgkNESMGmWrUCNfj7xwvAJurcraK8+a2Y0TFYwf0qjSLY/MzX+ZbJA3Cgw==", + "dev": true, + "requires": { + "@lerna/query-graph": "3.16.0", + "figgy-pudding": "^3.5.1", + "p-queue": "^4.0.0" + } + }, "@lerna/symlink-binary": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.13.0.tgz", - "integrity": "sha512-obc4Y6jxywkdaCe+DB0uTxYqP0IQ8mFWvN+k/YMbwH4G2h7M7lCBWgPy8e7xw/50+1II9tT2sxgx+jMus1sTJg==", + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.16.2.tgz", + "integrity": "sha512-kz9XVoFOGSF83gg4gBqH+mG6uxfJfTp8Uy+Cam40CvMiuzfODrGkjuBEFoM/uO2QOAwZvbQDYOBpKUa9ZxHS1Q==", "dev": true, "requires": { - "@lerna/create-symlink": "3.13.0", - "@lerna/package": "3.13.0", - "fs-extra": "^7.0.0", - "p-map": "^1.2.0" + "@lerna/create-symlink": "3.16.2", + "@lerna/package": "3.16.0", + "fs-extra": "^8.1.0", + "p-map": "^2.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "@lerna/symlink-dependencies": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.13.0.tgz", - "integrity": "sha512-7CyN5WYEPkbPLbqHBIQg/YiimBzb5cIGQB0E9IkLs3+racq2vmUNQZn38LOaazQacAA83seB+zWSxlI6H+eXSg==", + "version": "3.16.2", + "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.16.2.tgz", + "integrity": "sha512-wnZqGJQ+Jvr1I3inxrkffrFZfmQI7Ta8gySw/UWCy95QtZWF/f5yk8zVIocCAsjzD0wgb3jJE3CFJ9W5iwWk1A==", "dev": true, "requires": { - "@lerna/create-symlink": "3.13.0", - "@lerna/resolve-symlink": "3.13.0", - "@lerna/symlink-binary": "3.13.0", - "fs-extra": "^7.0.0", + "@lerna/create-symlink": "3.16.2", + "@lerna/resolve-symlink": "3.16.0", + "@lerna/symlink-binary": "3.16.2", + "fs-extra": "^8.1.0", "p-finally": "^1.0.0", - "p-map": "^1.2.0", + "p-map": "^2.1.0", "p-map-series": "^1.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "@lerna/timer": { @@ -1750,39 +2138,41 @@ } }, "@lerna/version": { - "version": "3.13.4", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.13.4.tgz", - "integrity": "sha512-pptWUEgN/lUTQZu34+gfH1g4Uhs7TDKRcdZY9A4T9k6RTOwpKC2ceLGiXdeR+ZgQJAey2C4qiE8fo5Z6Rbc6QA==", - "dev": true, - "requires": { - "@lerna/batch-packages": "3.13.0", - "@lerna/check-working-tree": "3.13.3", - "@lerna/child-process": "3.13.3", - "@lerna/collect-updates": "3.13.3", - "@lerna/command": "3.13.3", - "@lerna/conventional-commits": "3.13.0", - "@lerna/github-client": "3.13.3", + "version": "3.16.4", + "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.16.4.tgz", + "integrity": "sha512-ikhbMeIn5ljCtWTlHDzO4YvTmpGTX1lWFFIZ79Vd1TNyOr+OUuKLo/+p06mCl2WEdZu0W2s5E9oxfAAQbyDxEg==", + "dev": true, + "requires": { + "@lerna/check-working-tree": "3.14.2", + "@lerna/child-process": "3.14.2", + "@lerna/collect-updates": "3.16.0", + "@lerna/command": "3.16.0", + "@lerna/conventional-commits": "3.16.4", + "@lerna/github-client": "3.16.0", + "@lerna/gitlab-client": "3.15.0", "@lerna/output": "3.13.0", + "@lerna/prerelease-id-from-version": "3.16.0", "@lerna/prompt": "3.13.0", - "@lerna/run-lifecycle": "3.13.0", + "@lerna/run-lifecycle": "3.16.2", + "@lerna/run-topologically": "3.16.0", "@lerna/validation-error": "3.13.0", "chalk": "^2.3.1", "dedent": "^0.7.0", "minimatch": "^3.0.4", "npmlog": "^4.1.2", - "p-map": "^1.2.0", + "p-map": "^2.1.0", "p-pipe": "^1.2.0", "p-reduce": "^1.0.0", "p-waterfall": "^1.0.0", - "semver": "^5.5.0", - "slash": "^1.0.0", + "semver": "^6.2.0", + "slash": "^2.0.0", "temp-write": "^3.4.0" }, "dependencies": { - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } @@ -1814,15 +2204,13 @@ "dev": true }, "@octokit/endpoint": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.1.1.tgz", - "integrity": "sha512-kCv3ZyqFTWGYmvuU0TETzC4jPGzyLCJrjXp65kRe9DHyQULZak+dpwmEbT7M2rpdr/O2im8ivrPGT6J+2WsKNg==", + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.3.5.tgz", + "integrity": "sha512-f8KqzIrnzPLiezDsZZPB+K8v8YSv6aKFl7eOu59O46lmlW4HagWl1U6NWl6LmT8d1w7NsKBI3paVtzcnRGO1gw==", "dev": true, "requires": { - "deepmerge": "3.2.0", "is-plain-object": "^3.0.0", - "universal-user-agent": "^2.0.1", - "url-template": "^2.0.8" + "universal-user-agent": "^4.0.0" }, "dependencies": { "is-plain-object": { @@ -1843,23 +2231,24 @@ } }, "@octokit/plugin-enterprise-rest": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-2.2.2.tgz", - "integrity": "sha512-CTZr64jZYhGWNTDGlSJ2mvIlFsm9OEO3LqWn9I/gmoHI4jRBp4kpHoFYNemG4oA75zUAcmbuWblb7jjP877YZw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-3.6.2.tgz", + "integrity": "sha512-3wF5eueS5OHQYuAEudkpN+xVeUsg8vYEMMenEzLphUZ7PRZ8OJtDcsreL3ad9zxXmBbaFWzLmFcdob5CLyZftA==", "dev": true }, "@octokit/request": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-3.0.2.tgz", - "integrity": "sha512-lBH2hf2Yuh9XlmP3MSpn3jL9DyCGG+cuPXDRQiJMK42BwW6xFhwWmG1k6xWykcLM4GwZG/5fuwcqnQXYG0ZTSg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.1.0.tgz", + "integrity": "sha512-I15T9PwjFs4tbWyhtFU2Kq7WDPidYMvRB7spmxoQRZfxSmiqullG+Nz+KbSmpkfnlvHwTr1e31R5WReFRKMXjg==", "dev": true, "requires": { "@octokit/endpoint": "^5.1.0", - "deprecation": "^1.0.1", + "@octokit/request-error": "^1.0.1", + "deprecation": "^2.0.0", "is-plain-object": "^3.0.0", "node-fetch": "^2.3.0", "once": "^1.4.0", - "universal-user-agent": "^2.0.1" + "universal-user-agent": "^4.0.0" }, "dependencies": { "is-plain-object": { @@ -1879,24 +2268,34 @@ } } }, + "@octokit/request-error": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.0.4.tgz", + "integrity": "sha512-L4JaJDXn8SGT+5G0uX79rZLv0MNJmfGa4vb4vy1NnpjSnWDLJRy6m90udGwvMmavwsStgbv2QNkPzzTCMmL+ig==", + "dev": true, + "requires": { + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, "@octokit/rest": { - "version": "16.25.3", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.25.3.tgz", - "integrity": "sha512-/6/Isn9pNoKUQwuWUaskxMC6kFxtXTHhzsgYbyirEQ3UvcLciHvPgtRTbuV3bbVf0x4+4WEfKaI9UzxmPQ3W3A==", + "version": "16.28.9", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.28.9.tgz", + "integrity": "sha512-IKGnX+Tvzt7XHhs8f4ajqxyJvYAMNX5nWfoJm4CQj8LZToMiaJgutf5KxxpxoC3y5w7JTJpW5rnWnF4TsIvCLA==", "dev": true, "requires": { - "@octokit/request": "3.0.2", + "@octokit/request": "^5.0.0", + "@octokit/request-error": "^1.0.2", "atob-lite": "^2.0.0", - "before-after-hook": "^1.4.0", + "before-after-hook": "^2.0.0", "btoa-lite": "^1.0.0", - "deprecation": "^1.0.1", + "deprecation": "^2.0.0", "lodash.get": "^4.4.2", "lodash.set": "^4.3.2", "lodash.uniq": "^4.5.0", "octokit-pagination-methods": "^1.1.0", "once": "^1.4.0", - "universal-user-agent": "^2.0.0", - "url-template": "^2.0.8" + "universal-user-agent": "^4.0.0" } }, "@types/events": { @@ -1923,9 +2322,9 @@ "dev": true }, "@types/node": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.0.tgz", - "integrity": "sha512-Jrb/x3HT4PTJp6a4avhmJCDEVrPdqLfl3e8GGMbpkGGdwAV5UGlIs4vVEfsHHfylZVOKZWpOqmqFH8CbfOZ6kg==", + "version": "12.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.5.tgz", + "integrity": "sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w==", "dev": true }, "@types/q": { @@ -2122,6 +2521,17 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "@zkochan/cmd-shim": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz", + "integrity": "sha512-o8l0+x7C7sMZU3v9GuJIAU10qQLtwR1dtRQIOmlNMtyaqhmpXOzx1HWiYoWfmmf9HHZoAkXpc9TM9PQYF9d4Jg==", + "dev": true, + "requires": { + "is-windows": "^1.0.0", + "mkdirp-promise": "^5.0.1", + "mz": "^2.5.0" + } + }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", @@ -2154,12 +2564,6 @@ "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", "dev": true }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", - "dev": true - }, "acorn-jsx": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", @@ -2171,7 +2575,7 @@ "dependencies": { "acorn": { "version": "3.3.0", - "resolved": "http://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", "dev": true } @@ -2184,9 +2588,9 @@ "dev": true }, "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, "requires": { "es6-promisify": "^5.0.0" @@ -2279,6 +2683,12 @@ "color-convert": "^1.9.0" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -2363,9 +2773,9 @@ "dev": true }, "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-2.1.0.tgz", + "integrity": "sha512-KbUpJgx909ZscOc/7CLATBFam7P1Z1QRQInvgT0UztM9Q72aGKCunKASAl7WNW0tnPmPyEMeMhdsfWhfmW037w==", "dev": true }, "array-find-index": { @@ -2513,12 +2923,12 @@ "dev": true }, "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.14" } }, "async-each": { @@ -2534,9 +2944,9 @@ "dev": true }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, "asynckit": { @@ -2558,17 +2968,18 @@ "dev": true }, "autoprefixer": { - "version": "9.5.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.5.1.tgz", - "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", + "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", "dev": true, "requires": { - "browserslist": "^4.5.4", - "caniuse-lite": "^1.0.30000957", + "browserslist": "^4.6.3", + "caniuse-lite": "^1.0.30000980", + "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.14", - "postcss-value-parser": "^3.3.1" + "postcss": "^7.0.17", + "postcss-value-parser": "^4.0.0" } }, "aws-sign2": { @@ -2584,13 +2995,21 @@ "dev": true }, "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", + "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", "dev": true, "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "dev": true + } } }, "axobject-query": { @@ -2621,7 +3040,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -2647,17 +3066,17 @@ } }, "babel-eslint": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", - "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.3.tgz", + "integrity": "sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.0.0", "@babel/traverse": "^7.0.0", "@babel/types": "^7.0.0", - "eslint-scope": "3.7.1", - "eslint-visitor-keys": "^1.0.0" + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" } }, "babel-generator": { @@ -2678,22 +3097,22 @@ "dependencies": { "jsesc": { "version": "1.3.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true } } }, "babel-loader": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", - "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", + "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", "dev": true, "requires": { "find-cache-dir": "^2.0.0", "loader-utils": "^1.0.2", "mkdirp": "^0.5.1", - "util.promisify": "^1.0.0" + "pify": "^4.0.1" } }, "babel-messages": { @@ -2705,6 +3124,15 @@ "babel-runtime": "^6.22.0" } }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -2713,14 +3141,6 @@ "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", - "dev": true - } } }, "babel-template": { @@ -2861,9 +3281,9 @@ "dev": true }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true }, "base64id": { @@ -2888,9 +3308,9 @@ } }, "before-after-hook": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-1.4.0.tgz", - "integrity": "sha512-l5r9ir56nda3qu14nAXIlyq1MmUSs0meCIaFAh8HwkFwP1F8eToOuS3ah2VAHHcY04jaYD7FpJC5JTXHYRbkzg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz", + "integrity": "sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==", "dev": true }, "better-assert": { @@ -2941,9 +3361,9 @@ } }, "bluebird": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", - "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", "dev": true }, "bn.js": { @@ -2991,10 +3411,18 @@ "dev": true }, "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", + "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } } } }, @@ -3057,7 +3485,7 @@ }, "browserify-aes": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { @@ -3094,7 +3522,7 @@ }, "browserify-rsa": { "version": "4.0.1", - "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { @@ -3127,14 +3555,14 @@ } }, "browserslist": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.6.tgz", - "integrity": "sha512-o/hPOtbU9oX507lIqon+UvPYqpx3mHc8cV3QemSBTXwkG8gSQSK6UKvXcE/DcleU3+A59XTUHyCvZ5qGy8xVAg==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", + "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000963", - "electron-to-chromium": "^1.3.127", - "node-releases": "^1.1.17" + "caniuse-lite": "^1.0.30000989", + "electron-to-chromium": "^1.3.247", + "node-releases": "^1.1.29" } }, "btoa-lite": { @@ -3145,7 +3573,7 @@ }, "buffer": { "version": "4.9.1", - "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { @@ -3219,9 +3647,9 @@ "dev": true }, "byte-size": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-4.0.4.tgz", - "integrity": "sha512-82RPeneC6nqCdSwCX2hZUz3JPOvN5at/nTEw/CMf05Smu3Hrpo9Psb7LjN+k+XndNArG1EY8L4+BM3aTM4BCvw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-5.0.1.tgz", + "integrity": "sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw==", "dev": true }, "bytes": { @@ -3231,22 +3659,23 @@ "dev": true }, "cacache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", - "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", "dev": true, "requires": { - "bluebird": "^3.5.3", + "bluebird": "^3.5.5", "chownr": "^1.1.1", "figgy-pudding": "^3.5.1", - "glob": "^7.1.3", + "glob": "^7.1.4", "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", "lru-cache": "^5.1.1", "mississippi": "^3.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", + "rimraf": "^2.6.3", "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" @@ -3303,7 +3732,7 @@ "dependencies": { "callsites": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true } @@ -3372,15 +3801,15 @@ } }, "caniuse-db": { - "version": "1.0.30000967", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000967.tgz", - "integrity": "sha512-70gk6cLSD5rItxnZ7WUxyCpM9LAjEb1tVzlENQfXQXZS/IiGnfAC6u32G5cZFlDBKjNPBIta/QSx5CZLZepxRA==", + "version": "1.0.30000994", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000994.tgz", + "integrity": "sha512-7KjfAAhO0qJOs92z8lMWkcRA2ig7Ewv5SQSAy+dik8MFQCDSua+j4RbPFnGrXuOSFe/3RhmGr+68DxKZrbJQGg==", "dev": true }, "caniuse-lite": { - "version": "1.0.30000967", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000967.tgz", - "integrity": "sha512-rUBIbap+VJfxTzrM4akJ00lkvVb5/n5v3EGXfWzSH5zT8aJmGzjA8HWhJ4U6kCpzxozUSnB+yvAYDRPY6mRpgQ==", + "version": "1.0.30000989", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", + "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==", "dev": true }, "caseless": { @@ -3390,12 +3819,12 @@ "dev": true }, "catharsis": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.10.tgz", - "integrity": "sha512-l2OUaz/3PU3MZylspVFJvwHCVfWyvcduPq4lv3AzZ2pJzZCo7kNKFNyatwujD7XgvGkNAE/Jhhbh2uARNwNkfw==", + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz", + "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.14" } }, "chai": { @@ -3433,9 +3862,9 @@ "dev": true }, "chokidar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", - "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { "anymatch": "^2.0.0", @@ -3453,24 +3882,24 @@ } }, "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", "dev": true }, "chrome-trace-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", - "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "dev": true, "requires": { "tslib": "^1.9.0" } }, "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, "cipher-base": { @@ -3506,7 +3935,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -3558,9 +3987,9 @@ } }, "cli-spinners": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.1.0.tgz", - "integrity": "sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz", + "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==", "dev": true }, "cli-width": { @@ -3620,36 +4049,14 @@ "dev": true }, "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { - "for-own": "^1.0.0", "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } - } - }, - "cmd-shim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz", - "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "mkdirp": "~0.5.0" + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, "co": { @@ -3755,9 +4162,9 @@ } }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" @@ -3891,14 +4298,14 @@ } }, "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", "utils-merge": "1.0.1" } }, @@ -3936,10 +4343,13 @@ "dev": true }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "dev": true + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } }, "content-type": { "version": "1.0.4", @@ -3958,18 +4368,18 @@ } }, "conventional-changelog-core": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.2.tgz", - "integrity": "sha512-cssjAKajxaOX5LNAJLB+UOcoWjAIBvXtDMedv/58G+YEmAXMNfC16mmPl0JDOuVJVfIqM0nqQiZ8UCm8IXbE0g==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.2.3.tgz", + "integrity": "sha512-LMMX1JlxPIq/Ez5aYAYS5CpuwbOk6QFp8O4HLAcZxe3vxoCtABkhfjetk8IYdRB9CDQGwJFLR3Dr55Za6XKgUQ==", "dev": true, "requires": { - "conventional-changelog-writer": "^4.0.5", - "conventional-commits-parser": "^3.0.2", + "conventional-changelog-writer": "^4.0.6", + "conventional-commits-parser": "^3.0.3", "dateformat": "^3.0.0", "get-pkg-repo": "^1.0.0", "git-raw-commits": "2.0.0", "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^2.0.2", + "git-semver-tags": "^2.0.3", "lodash": "^4.2.1", "normalize-package-data": "^2.3.5", "q": "^1.5.1", @@ -4091,29 +4501,35 @@ } }, "conventional-changelog-preset-loader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.1.1.tgz", - "integrity": "sha512-K4avzGMLm5Xw0Ek/6eE3vdOXkqnpf9ydb68XYmCc16cJ99XMMbc2oaNMuPwAsxVK6CC1yA4/I90EhmWNj0Q6HA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.2.0.tgz", + "integrity": "sha512-zXB+5vF7D5Y3Cb/rJfSyCCvFphCVmF8mFqOdncX3BmjZwAtGAPfYrBcT225udilCKvBbHgyzgxqz2GWDB5xShQ==", "dev": true }, "conventional-changelog-writer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.5.tgz", - "integrity": "sha512-g/Myp4MaJ1A+f7Ai+SnVhkcWtaHk6flw0SYN7A+vQ+MTu0+gSovQWs4Pg4NtcNUcIztYQ9YHsoxHP+GGQplI7Q==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.7.tgz", + "integrity": "sha512-p/wzs9eYaxhFbrmX/mCJNwJuvvHR+j4Fd0SQa2xyAhYed6KBiZ780LvoqUUvsayP4R1DtC27czalGUhKV2oabw==", "dev": true, "requires": { "compare-func": "^1.3.1", "conventional-commits-filter": "^2.0.2", "dateformat": "^3.0.0", - "handlebars": "^4.1.0", + "handlebars": "^4.1.2", "json-stringify-safe": "^5.0.1", "lodash": "^4.2.1", "meow": "^4.0.0", - "semver": "^5.5.0", + "semver": "^6.0.0", "split": "^1.0.0", "through2": "^3.0.0" }, "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, "through2": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", @@ -4136,13 +4552,13 @@ } }, "conventional-commits-parser": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.2.tgz", - "integrity": "sha512-y5eqgaKR0F6xsBNVSQ/5cI5qIF3MojddSUi1vKIggRkqUTbkqFKH9P5YX/AT1BVZp9DtSzBTIkvjyVLotLsVog==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.3.tgz", + "integrity": "sha512-KaA/2EeUkO4bKjinNfGUyqPTX/6w9JGshuQRik4r/wJz7rUw3+D3fDG6sZSEqJvKILzKXFQuFkpPLclcsAuZcg==", "dev": true, "requires": { "JSONStream": "^1.0.4", - "is-text-path": "^1.0.0", + "is-text-path": "^2.0.0", "lodash": "^4.2.1", "meow": "^4.0.0", "split2": "^2.0.0", @@ -4162,17 +4578,17 @@ } }, "conventional-recommended-bump": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-4.1.1.tgz", - "integrity": "sha512-JT2vKfSP9kR18RXXf55BRY1O3AHG8FPg5btP3l7LYfcWJsiXI6MCf30DepQ98E8Qhowvgv7a8iev0J1bEDkTFA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-5.0.1.tgz", + "integrity": "sha512-RVdt0elRcCxL90IrNP0fYCpq1uGt2MALko0eyeQ+zQuDVWtMGAy9ng6yYn3kax42lCj9+XBxQ8ZN6S9bdKxDhQ==", "dev": true, "requires": { "concat-stream": "^2.0.0", "conventional-changelog-preset-loader": "^2.1.1", "conventional-commits-filter": "^2.0.2", - "conventional-commits-parser": "^3.0.2", + "conventional-commits-parser": "^3.0.3", "git-raw-commits": "2.0.0", - "git-semver-tags": "^2.0.2", + "git-semver-tags": "^2.0.3", "meow": "^4.0.0", "q": "^1.5.1" }, @@ -4190,9 +4606,9 @@ } }, "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -4244,37 +4660,29 @@ "dev": true }, "core-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.0.1.tgz", - "integrity": "sha512-sco40rF+2KlE0ROMvydjkrVMMG1vYilP2ALoRXcYR4obqbYIuV3Bg+51GEDW+HF8n7NRA+iaA4qD0nD9lo9mew==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", "dev": true }, "core-js-compat": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.0.1.tgz", - "integrity": "sha512-2pC3e+Ht/1/gD7Sim/sqzvRplMiRnFQVlPpDVaHtY9l7zZP7knamr3VRD6NyGfHd84MrDC0tAM9ulNxYMW0T3g==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", + "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", "dev": true, "requires": { - "browserslist": "^4.5.4", - "core-js": "3.0.1", - "core-js-pure": "3.0.1", - "semver": "^6.0.0" + "browserslist": "^4.6.6", + "semver": "^6.3.0" }, "dependencies": { "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, - "core-js-pure": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.0.1.tgz", - "integrity": "sha512-mSxeQ6IghKW3MoyF4cz19GJ1cMm7761ON+WObSyLfTu/Jn3x7w4NwNFnrZxgl4MTSvYYepVLNuRtlB4loMwJ5g==", - "dev": true - }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -4282,14 +4690,14 @@ "dev": true }, "cosmiconfig": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.0.tgz", - "integrity": "sha512-nxt+Nfc3JAqf4WIWd0jXLjTJZmsPLrA9DDc4nRw2KFJQJK7DNooqSXrNI7tzLG50CF8axczly5UV929tBmh/7g==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, "requires": { "import-fresh": "^2.0.0", "is-directory": "^0.3.1", - "js-yaml": "^3.13.0", + "js-yaml": "^3.13.1", "parse-json": "^4.0.0" }, "dependencies": { @@ -4333,7 +4741,7 @@ }, "create-hash": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { @@ -4346,7 +4754,7 @@ }, "create-hmac": { "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { @@ -4359,13 +4767,12 @@ } }, "cross-env": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", - "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", + "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", "dev": true, "requires": { - "cross-spawn": "^6.0.5", - "is-windows": "^1.0.0" + "cross-spawn": "^6.0.5" } }, "cross-spawn": { @@ -4446,7 +4853,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -4483,6 +4890,12 @@ "supports-color": "^3.2.3" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -4525,7 +4938,7 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true }, @@ -4542,13 +4955,13 @@ }, "regjsgen": { "version": "0.2.0", - "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "dev": true }, "regjsparser": { "version": "0.1.5", - "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { @@ -4558,12 +4971,12 @@ } }, "css-tree": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", - "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "version": "1.0.0-alpha.33", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz", + "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==", "dev": true, "requires": { - "mdn-data": "~1.1.0", + "mdn-data": "2.0.4", "source-map": "^0.5.3" } }, @@ -4573,12 +4986,6 @@ "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", "dev": true }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", - "dev": true - }, "css-what": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", @@ -4663,7 +5070,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -4700,6 +5107,12 @@ "supports-color": "^3.2.3" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -4773,9 +5186,9 @@ } }, "color": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.1.tgz", - "integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", "dev": true, "requires": { "color-convert": "^1.9.1", @@ -4844,6 +5257,12 @@ "esprima": "^4.0.0" } }, + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "dev": true + }, "normalize-url": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", @@ -5111,18 +5530,23 @@ "uniqs": "^2.0.0" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "svgo": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", - "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz", + "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==", "dev": true, "requires": { "chalk": "^2.4.1", "coa": "^2.0.2", "css-select": "^2.0.0", "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.28", - "css-url-regex": "^1.1.0", + "css-tree": "1.0.0-alpha.33", "csso": "^3.5.1", "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", @@ -5194,18 +5618,19 @@ "dev": true }, "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", "dev": true }, "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, "requires": { - "es5-ext": "^0.10.9" + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, "damerau-levenshtein": { @@ -5324,12 +5749,6 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "deepmerge": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-3.2.0.tgz", - "integrity": "sha512-6+LuZGU7QCNUnAJyX8cIrlzoEgggTM6B7mm+znKOX4t5ltluT9KLjN6g61ECMS0LTsLW7yDpNoxhix5FZcrIow==", - "dev": true - }, "default-gateway": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", @@ -5460,12 +5879,6 @@ "dev": true } } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true } } }, @@ -5488,9 +5901,9 @@ "dev": true }, "deprecation": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-1.0.1.tgz", - "integrity": "sha512-ccVHpE72+tcIKaGMql33x5MAjKQIZrk+3x2GbJ7TeraUCZWHoT+KSZpoC+JQFsUBlSTXUrBaGiF0j6zVTepPLg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true }, "des.js": { @@ -5554,7 +5967,7 @@ }, "diffie-hellman": { "version": "5.0.3", - "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { @@ -5564,12 +5977,11 @@ } }, "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "dev": true, "requires": { - "arrify": "^1.0.1", "path-type": "^3.0.0" }, "dependencies": { @@ -5637,13 +6049,27 @@ } }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz", + "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==", "dev": true, "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "dev": true + } } }, "domain-browser": { @@ -5685,7 +6111,7 @@ }, "duplexer": { "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, @@ -5718,21 +6144,21 @@ "dev": true }, "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.1.tgz", + "integrity": "sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ==", "dev": true }, "electron-to-chromium": { - "version": "1.3.133", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.133.tgz", - "integrity": "sha512-lyoC8aoqbbDqsprb6aPdt9n3DpOZZzdz/T4IZKsR0/dkZIxnJVUjjcpOSwA66jPRIOyDAamCTAUqweU05kKNSg==", + "version": "1.3.255", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.255.tgz", + "integrity": "sha512-SZ6NlaNw3h4WR5kA1BK8XltdJCax02P+lW+z78RYoLDqmpyYuDQ5bS+/O6MCJ/j761qoZIFox2qYYt+UwqGA5w==", "dev": true }, "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -5796,7 +6222,7 @@ "dependencies": { "debug": { "version": "2.3.3", - "resolved": "http://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", "dev": true, "requires": { @@ -5839,7 +6265,7 @@ }, "debug": { "version": "2.3.3", - "resolved": "http://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", "dev": true, "requires": { @@ -5891,6 +6317,12 @@ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, + "env-paths": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", + "dev": true + }, "err-code": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", @@ -5916,17 +6348,21 @@ } }, "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz", + "integrity": "sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==", "dev": true, "requires": { "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", "has": "^1.0.3", + "has-symbols": "^1.0.0", "is-callable": "^1.1.4", "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.0.0", + "string.prototype.trimright": "^2.0.0" } }, "es-to-primitive": { @@ -5941,9 +6377,9 @@ } }, "es5-ext": { - "version": "0.10.50", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", - "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", + "version": "0.10.51", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.51.tgz", + "integrity": "sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==", "dev": true, "requires": { "es6-iterator": "~2.0.3", @@ -5977,15 +6413,15 @@ } }, "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true }, "es6-promisify": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.1.tgz", - "integrity": "sha512-J3ZkwbEnnO+fGAKrjVpeUAnZshAdfZvbhQpqfIH9kSAspReRC4nJnu8ewm55b4y9ElyeuhCTzJD0XiH8Tsbhlw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-6.0.2.tgz", + "integrity": "sha512-eO6vFm0JvqGzjWIQA6QVKjxpmELfhWbDUWHm1rPfIbn55mhKPiAa5xpLmQWJrNa629ZIeQ8ZvMAi13kvrjK6Mg==", "dev": true }, "es6-set": { @@ -5999,27 +6435,39 @@ "es6-iterator": "~2.0.1", "es6-symbol": "3.1.1", "event-emitter": "~0.3.5" + }, + "dependencies": { + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + } } }, "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.2.tgz", + "integrity": "sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "d": "^1.0.1", + "es5-ext": "^0.10.51" } }, "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "dev": true, "requires": { "d": "1", - "es5-ext": "^0.10.14", - "es6-iterator": "^2.0.1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.1" } }, @@ -6098,7 +6546,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -6163,9 +6611,9 @@ } }, "eslint-module-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", - "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", + "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", "dev": true, "requires": { "debug": "^2.6.8", @@ -6284,12 +6732,13 @@ }, "dependencies": { "jsx-ast-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz", - "integrity": "sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz", + "integrity": "sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==", "dev": true, "requires": { - "array-includes": "^3.0.3" + "array-includes": "^3.0.3", + "object.assign": "^4.1.0" } } } @@ -6301,9 +6750,9 @@ "dev": true }, "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -6311,9 +6760,9 @@ } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", "dev": true }, "espree": { @@ -6351,15 +6800,15 @@ } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "etag": { @@ -6576,148 +7025,64 @@ } }, "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, "requires": { - "accepts": "~1.3.5", + "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", "content-type": "~1.0.4", - "cookie": "0.3.1", + "cookie": "0.4.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.1", + "finalhandler": "~1.1.2", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "dev": true, - "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - } - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - } - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "dev": true, - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", - "dev": true } } }, @@ -6749,9 +7114,9 @@ } }, "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { "chardet": "^0.7.0", @@ -6866,9 +7231,9 @@ "dev": true }, "fast-glob": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.6.tgz", - "integrity": "sha512-0BvMaZc1k9F+MeWWMe8pL6YltFzZYcJsYU7D4JyDA6PAczaXvxqQQ/z+mDF7/4Mw01DeUc+i3CTKajnkANkV4w==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "dev": true, "requires": { "@mrmlnc/readdir-enhanced": "^2.2.1", @@ -6978,26 +7343,18 @@ } }, "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.1", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", "unpipe": "~1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - } } }, "find-cache-dir": { @@ -7021,26 +7378,15 @@ } }, "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dev": true, "requires": { "detect-file": "^1.0.0", - "is-glob": "^3.1.0", + "is-glob": "^4.0.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } } }, "flat-cache": { @@ -7053,6 +7399,17 @@ "graceful-fs": "^4.1.2", "rimraf": "~2.6.2", "write": "^0.2.1" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } } }, "flatten": { @@ -7072,28 +7429,22 @@ } }, "follow-redirects": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", - "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", "dev": true, "requires": { - "debug": "^3.2.6" + "debug": "=3.1.0" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true } } }, @@ -7119,9 +7470,9 @@ "dev": true }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -7181,9 +7532,9 @@ } }, "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", "dev": true, "requires": { "minipass": "^2.2.1" @@ -7233,8 +7584,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -7255,14 +7605,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7277,20 +7625,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -7407,8 +7752,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -7420,7 +7764,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -7435,7 +7778,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -7443,14 +7785,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -7469,7 +7809,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -7550,8 +7889,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -7563,7 +7901,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -7649,8 +7986,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -7686,7 +8022,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -7706,7 +8041,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -7750,21 +8084,19 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -7921,7 +8253,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -8009,9 +8341,9 @@ } }, "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", + "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", "dev": true }, "get-stdin": { @@ -8076,13 +8408,21 @@ } }, "git-semver-tags": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.2.tgz", - "integrity": "sha512-34lMF7Yo1xEmsK2EkbArdoU79umpvm0MfzaDkSNYSJqtM5QLAVTPWgpiXSVI5o/O9EvZPSrP4Zvnec/CqhSd5w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.3.tgz", + "integrity": "sha512-tj4FD4ww2RX2ae//jSrXZzrocla9db5h0V7ikPl1P/WwoZar9epdUhwR7XHXSgc+ZkNq72BEEerqQuicoEQfzA==", "dev": true, "requires": { "meow": "^4.0.0", - "semver": "^5.5.0" + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "git-up": { @@ -8191,14 +8531,25 @@ "dev": true }, "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + } } }, "global-prefix": { @@ -8221,30 +8572,25 @@ "dev": true }, "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", "dev": true, "requires": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true } } @@ -8261,9 +8607,9 @@ } }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", "dev": true }, "graceful-readlink": { @@ -8303,9 +8649,9 @@ "dev": true }, "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.2.0.tgz", + "integrity": "sha512-Kb4xn5Qh1cxAKvQnzNWZ512DhABzyFNmsaJf3OAkWNa4NkaqWcNI8Tao8Tasi0/F4JD9oyG0YxuFyvyR57d+Gw==", "dev": true, "requires": { "neo-async": "^2.6.0", @@ -8339,9 +8685,9 @@ }, "dependencies": { "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -8490,9 +8836,9 @@ } }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", "dev": true }, "hpack.js": { @@ -8554,12 +8900,20 @@ "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } } }, "http-parser-js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", "dev": true }, "http-proxy": { @@ -8630,12 +8984,12 @@ "dev": true }, "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz", + "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==", "dev": true, "requires": { - "agent-base": "^4.1.0", + "agent-base": "^4.3.0", "debug": "^3.1.0" }, "dependencies": { @@ -8649,9 +9003,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -8733,9 +9087,9 @@ "dev": true }, "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.2.tgz", + "integrity": "sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw==", "dev": true, "requires": { "minimatch": "^3.0.4" @@ -8777,87 +9131,33 @@ } } }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", - "dev": true, - "requires": { - "pkg-dir": "^2.0.0", - "resolve-cwd": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true - }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - } } } }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -8888,6 +9188,12 @@ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -8899,9 +9205,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "ini": { @@ -8928,7 +9234,7 @@ }, "inquirer": { "version": "0.12.0", - "resolved": "http://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", "dev": true, "requires": { @@ -8955,7 +9261,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -9049,6 +9355,12 @@ } } }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -9077,12 +9389,12 @@ "dev": true }, "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { - "ci-info": "^1.5.0" + "ci-info": "^2.0.0" } }, "is-color-stop": { @@ -9245,14 +9557,14 @@ }, "is-obj": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, "is-path-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz", - "integrity": "sha512-Sc5j3/YnM8tDeyCsVeKlm/0p95075DyLmDEIkSgQ7mXkrOX+uTCtmQFm0CYzVyJwcCCmO3k8qfJt17SxQwB5Zw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true }, "is-path-in-cwd": { @@ -9361,12 +9673,12 @@ } }, "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", "dev": true, "requires": { - "text-extensions": "^1.0.0" + "text-extensions": "^2.0.0" } }, "is-typedarray": { @@ -9574,9 +9886,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -9634,22 +9946,22 @@ "dev": true }, "jsdoc": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.1.tgz", - "integrity": "sha512-mMMsst31b8c7/Z6ewnO6ORIdVMwsobg1enX9b/2XAzW8mM3KuMANRWcMD1KMBq91IAUMOIhC5NsXu7xvNQrRyQ==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.3.tgz", + "integrity": "sha512-Yf1ZKA3r9nvtMWHO1kEuMZTlHOF8uoQ0vyo5eH7SQy5YeIiHM+B0DgKnn+X6y6KDYZcF7G2SPkKF+JORCXWE/A==", "dev": true, "requires": { "@babel/parser": "^7.4.4", "bluebird": "^3.5.4", - "catharsis": "^0.8.10", + "catharsis": "^0.8.11", "escape-string-regexp": "^2.0.0", "js2xmlparser": "^4.0.0", "klaw": "^3.0.0", "markdown-it": "^8.4.2", "markdown-it-anchor": "^5.0.2", - "marked": "^0.6.2", + "marked": "^0.7.0", "mkdirp": "^0.5.1", - "requizzle": "^0.2.2", + "requizzle": "^0.2.3", "strip-json-comments": "^3.0.1", "taffydb": "2.6.2", "underscore": "~1.9.1" @@ -9734,7 +10046,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -9873,12 +10185,6 @@ "readdirp": "^2.0.0" } }, - "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", - "dev": true - }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", @@ -9932,7 +10238,7 @@ }, "lodash": { "version": "3.10.1", - "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", "dev": true }, @@ -10005,7 +10311,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -10084,27 +10390,27 @@ } }, "lerna": { - "version": "3.13.4", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.13.4.tgz", - "integrity": "sha512-qTp22nlpcgVrJGZuD7oHnFbTk72j2USFimc2Pj4kC0/rXmcU2xPtCiyuxLl8y6/6Lj5g9kwEuvKDZtSXujjX/A==", + "version": "3.16.4", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.16.4.tgz", + "integrity": "sha512-0HfwXIkqe72lBLZcNO9NMRfylh5Ng1l8tETgYQ260ZdHRbPuaLKE3Wqnd2YYRRkWfwPyEyZO8mZweBR+slVe1A==", "dev": true, "requires": { - "@lerna/add": "3.13.3", - "@lerna/bootstrap": "3.13.3", - "@lerna/changed": "3.13.4", - "@lerna/clean": "3.13.3", + "@lerna/add": "3.16.2", + "@lerna/bootstrap": "3.16.2", + "@lerna/changed": "3.16.4", + "@lerna/clean": "3.16.0", "@lerna/cli": "3.13.0", - "@lerna/create": "3.13.3", - "@lerna/diff": "3.13.3", - "@lerna/exec": "3.13.3", - "@lerna/import": "3.13.4", - "@lerna/init": "3.13.3", - "@lerna/link": "3.13.3", - "@lerna/list": "3.13.3", - "@lerna/publish": "3.13.4", - "@lerna/run": "3.13.3", - "@lerna/version": "3.13.4", - "import-local": "^1.0.0", + "@lerna/create": "3.16.0", + "@lerna/diff": "3.16.0", + "@lerna/exec": "3.16.0", + "@lerna/import": "3.16.0", + "@lerna/init": "3.16.0", + "@lerna/link": "3.16.2", + "@lerna/list": "3.16.0", + "@lerna/publish": "3.16.4", + "@lerna/run": "3.16.0", + "@lerna/version": "3.16.4", + "import-local": "^2.0.0", "npmlog": "^4.1.2" } }, @@ -10118,55 +10424,10 @@ "type-check": "~0.3.2" } }, - "libnpmaccess": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-3.0.1.tgz", - "integrity": "sha512-RlZ7PNarCBt+XbnP7R6PoVgOq9t+kou5rvhaInoNibhPO7eMlRfS0B8yjatgn2yaHIwWNyoJDolC/6Lc5L/IQA==", - "dev": true, - "requires": { - "aproba": "^2.0.0", - "get-stream": "^4.0.0", - "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^3.8.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - } - } - }, - "libnpmpublish": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-1.1.1.tgz", - "integrity": "sha512-nefbvJd/wY38zdt+b9SHL6171vqBrMtZ56Gsgfd0duEKb/pB8rDT4/ObUQLrHz1tOfht1flt2zM+UGaemzAG5g==", - "dev": true, - "requires": { - "aproba": "^2.0.0", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.0.0", - "lodash.clonedeep": "^4.5.0", - "normalize-package-data": "^2.4.0", - "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^3.8.0", - "semver": "^5.5.1", - "ssri": "^6.0.1" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - } - } - }, "linkify-it": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz", - "integrity": "sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", "dev": true, "requires": { "uc.micro": "^1.0.1" @@ -10237,9 +10498,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, "lodash._baseassign": { @@ -10370,29 +10631,23 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true - }, "lodash.template": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "dev": true, "requires": { - "lodash._reinterpolate": "~3.0.0", + "lodash._reinterpolate": "^3.0.0", "lodash.templatesettings": "^4.0.0" } }, "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", "dev": true, "requires": { - "lodash._reinterpolate": "~3.0.0" + "lodash._reinterpolate": "^3.0.0" } }, "lodash.uniq": { @@ -10412,7 +10667,7 @@ }, "log4js": { "version": "0.6.38", - "resolved": "http://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", "dev": true, "requires": { @@ -10428,7 +10683,7 @@ }, "readable-stream": { "version": "1.0.34", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { @@ -10453,9 +10708,9 @@ } }, "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz", + "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==", "dev": true }, "loglevelnext": { @@ -10498,9 +10753,9 @@ } }, "macos-release": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.2.0.tgz", - "integrity": "sha512-iV2IDxZaX8dIcM7fG6cI46uNmHUxHE4yN+Z8tKHAW1TBPMZDIKHf/3L+YnOuj/FK9il14UaVdHmiQ1tsi90ltA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz", + "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==", "dev": true }, "make-dir": { @@ -10514,22 +10769,39 @@ } }, "make-fetch-happen": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz", - "integrity": "sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz", + "integrity": "sha512-nFr/vpL1Jc60etMVKeaLOqfGjMMb3tAHFVJWxHOFCFS04Zmd7kGlMxo0l1tzfhoQje0/UPnd0X8OeGUiXXnfPA==", "dev": true, "requires": { "agentkeepalive": "^3.4.1", - "cacache": "^11.0.1", + "cacache": "^12.0.0", "http-cache-semantics": "^3.8.1", "http-proxy-agent": "^2.1.0", "https-proxy-agent": "^2.2.1", - "lru-cache": "^4.1.2", + "lru-cache": "^5.1.1", "mississippi": "^3.0.0", "node-fetch-npm": "^2.0.2", "promise-retry": "^1.1.1", "socks-proxy-agent": "^4.0.0", "ssri": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } } }, "mamacro": { @@ -10582,15 +10854,15 @@ } }, "markdown-it-anchor": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.0.2.tgz", - "integrity": "sha512-AFM/woBI8QDJMS/9+MmsBMT5/AR+ImfOsunQZTZhzcTmna3rIzAzbOh5E0l6mlFM/i9666BpUtkqQ9bS7WApCg==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.2.4.tgz", + "integrity": "sha512-n8zCGjxA3T+Mx1pG8HEgbJbkB8JFUuRkeTZQuIM8iPY6oQ8sWOPRZJDFC9a/pNg2QkHEjjGkhBEl/RSyzaDZ3A==", "dev": true }, "marked": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.6.2.tgz", - "integrity": "sha512-LqxwVH3P/rqKX4EKGz7+c2G9r98WeM/SW34ybhgNGhUQNKtf1GmmSkJ6cDGJ/t6tiyae49qRkpyTw2B9HOrgUA==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", + "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", "dev": true }, "math-expression-evaluator": { @@ -10617,9 +10889,9 @@ } }, "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", "dev": true }, "mdurl": { @@ -10713,7 +10985,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -10796,9 +11068,9 @@ "dev": true }, "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz", + "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A==", "dev": true }, "methods": { @@ -10877,9 +11149,9 @@ }, "dependencies": { "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -10889,9 +11161,9 @@ } }, "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", "dev": true }, "schema-utils": { @@ -10930,7 +11202,7 @@ }, "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, @@ -10945,9 +11217,9 @@ } }, "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.5.1.tgz", + "integrity": "sha512-dmpSnLJtNQioZFI5HfQ55Ad0DzzsMAb+HfokwRTNXwEQjepbTkl5mtIlSVxGIkOkxlpX7wIn5ET/oAd9fZ/Y/Q==", "dev": true, "requires": { "safe-buffer": "^5.1.2", @@ -10990,9 +11262,9 @@ } }, "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { "for-in": "^1.0.2", @@ -11010,33 +11282,24 @@ } } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { "minimist": "0.0.8" } }, + "mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", + "dev": true, + "requires": { + "mkdirp": "*" + } + }, "mocha": { "version": "3.4.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.4.2.tgz", @@ -11058,7 +11321,7 @@ "dependencies": { "commander": { "version": "2.9.0", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", "dev": true, "requires": { @@ -11067,7 +11330,7 @@ }, "debug": { "version": "2.6.0", - "resolved": "http://registry.npmjs.org/debug/-/debug-2.6.0.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.0.tgz", "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", "dev": true, "requires": { @@ -11264,13 +11527,13 @@ }, "json5": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, "jsonfile": { "version": "2.4.0", - "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { @@ -11361,7 +11624,7 @@ }, "os-locale": { "version": "1.4.0", - "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { @@ -11454,7 +11717,7 @@ }, "yargs": { "version": "4.8.1", - "resolved": "http://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", "dev": true, "requires": { @@ -11529,15 +11792,15 @@ "dev": true }, "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-3.0.0.tgz", + "integrity": "sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA==", "dev": true, "requires": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" + "array-differ": "^2.0.3", + "array-union": "^1.0.2", + "arrify": "^1.0.1", + "minimatch": "^3.0.4" } }, "mute-stream": { @@ -11546,10 +11809,21 @@ "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", "dev": true }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nan": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.13.2.tgz", - "integrity": "sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "dev": true }, "nanomatch": { @@ -11590,9 +11864,9 @@ "dev": true }, "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, "next-tick": { @@ -11608,9 +11882,9 @@ "dev": true }, "node-fetch": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.5.0.tgz", - "integrity": "sha512-YuZKluhWGJwCcUu4RlZstdAxr8bFfOVHakc1mplwHkk8J+tqM1Y5yraYvIUpeX8aY7+crCwiELJq7Vl0o0LWXw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", "dev": true }, "node-fetch-npm": { @@ -11625,23 +11899,23 @@ } }, "node-forge": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", - "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.2.tgz", + "integrity": "sha512-mXQ9GBq1N3uDCyV1pdSzgIguwgtVpM7f5/5J4ipz12PKWElmPpVWLDuWl8iXmhysr21+WmX/OJ5UKx82wjomgg==", "dev": true }, "node-gyp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-4.0.0.tgz", - "integrity": "sha512-2XiryJ8sICNo6ej8d0idXDEMKfVfFK7kekGCtJAuelGsYHQxhj13KTf95swTCN2dZ/4lTfZ84Fu31jqJEEgjWA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.0.3.tgz", + "integrity": "sha512-z/JdtkFGUm0QaQUusvloyYuGDub3nUbOo5de1Fz57cM++osBTvQatBUSTlF1k/w8vFHPxxXW6zxGvkxXSpaBkQ==", "dev": true, "requires": { + "env-paths": "^1.0.0", "glob": "^7.0.3", "graceful-fs": "^4.1.2", "mkdirp": "^0.5.0", "nopt": "2 || 3", "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", "request": "^2.87.0", "rimraf": "2", "semver": "~5.3.0", @@ -11658,9 +11932,9 @@ } }, "node-libs-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", - "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "requires": { "assert": "^1.1.1", @@ -11673,7 +11947,7 @@ "events": "^3.0.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", + "path-browserify": "0.0.1", "process": "^0.11.10", "punycode": "^1.2.4", "querystring-es3": "^0.2.0", @@ -11685,7 +11959,7 @@ "tty-browserify": "0.0.0", "url": "^0.11.0", "util": "^0.11.0", - "vm-browserify": "0.0.4" + "vm-browserify": "^1.0.1" }, "dependencies": { "punycode": { @@ -11697,9 +11971,9 @@ } }, "node-releases": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.18.tgz", - "integrity": "sha512-/mnVgm6u/8OwlIsoyRXtTI0RfQcxZoAZbdwyXap0EeWwcOpDDymyCHM2/aR9XKmHXrvizHoPAOs0pcbiJ6RUaA==", + "version": "1.1.30", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.30.tgz", + "integrity": "sha512-BHcr1g6NeUH12IL+X3Flvs4IOnl1TL0JczUhEZjDE+FXXPQcVCNr8NEPb01zqGxzhTpdyJL5GXemaCW7aw6Khw==", "dev": true, "requires": { "semver": "^5.3.0" @@ -11945,13 +12219,13 @@ "dev": true }, "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", "dev": true, "requires": { "block-stream": "*", - "fstream": "^1.0.2", + "fstream": "^1.0.12", "inherits": "2" } }, @@ -12015,14 +12289,14 @@ "dev": true }, "npm-lifecycle": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-2.1.1.tgz", - "integrity": "sha512-+Vg6I60Z75V/09pdcH5iUo/99Q/vop35PaI99elvxk56azSVVsdsSsS/sXqKDNwbRRNN1qSxkcO45ZOu0yOWew==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-3.1.3.tgz", + "integrity": "sha512-M0QmmqbEHBXxDrmc6X3+eKjW9+F7Edg1ENau92WkYw1sox6wojHzEZJIRm1ItljEiaigZlKL8mXni/4ylAy1Dg==", "dev": true, "requires": { "byline": "^5.0.0", "graceful-fs": "^4.1.15", - "node-gyp": "^4.0.0", + "node-gyp": "^5.0.2", "resolve-from": "^4.0.0", "slide": "^1.1.6", "uid-number": "0.0.6", @@ -12039,21 +12313,21 @@ } }, "npm-package-arg": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", - "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.1.tgz", + "integrity": "sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg==", "dev": true, "requires": { - "hosted-git-info": "^2.6.0", + "hosted-git-info": "^2.7.1", "osenv": "^0.1.5", - "semver": "^5.5.0", + "semver": "^5.6.0", "validate-npm-package-name": "^3.0.0" } }, "npm-packlist": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", - "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz", + "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==", "dev": true, "requires": { "ignore-walk": "^3.0.1", @@ -12061,9 +12335,9 @@ } }, "npm-pick-manifest": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz", - "integrity": "sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", + "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", "dev": true, "requires": { "figgy-pudding": "^3.5.1", @@ -12071,20 +12345,6 @@ "semver": "^5.4.1" } }, - "npm-registry-fetch": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz", - "integrity": "sha512-srwmt8YhNajAoSAaDWndmZgx89lJwIZ1GWxOuckH4Coek4uHv5S+o/l9FLQe/awA+JwTnj4FJHldxhlXdZEBmw==", - "dev": true, - "requires": { - "JSONStream": "^1.3.4", - "bluebird": "^3.5.1", - "figgy-pudding": "^3.4.1", - "lru-cache": "^4.1.3", - "make-fetch-happen": "^4.0.1", - "npm-package-arg": "^6.1.0" - } - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -12188,6 +12448,18 @@ "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", "dev": true }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "dev": true + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -12332,12 +12604,12 @@ } }, "optimize-css-assets-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", "dev": true, "requires": { - "cssnano": "^4.1.0", + "cssnano": "^4.1.10", "last-call-webpack-plugin": "^3.0.0" }, "dependencies": { @@ -12522,9 +12794,9 @@ "dev": true }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -12540,9 +12812,9 @@ } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, "p-map-series": { @@ -12560,79 +12832,53 @@ "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", "dev": true }, + "p-queue": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-4.0.0.tgz", + "integrity": "sha512-3cRXXn3/O0o3+eVmUroJPSj/esxoEFIm0ZOno/T+NzG/VZgPOqQ8WKmlNqubSEpZmCIngEy34unkHGg83ZIBmg==", + "dev": true, + "requires": { + "eventemitter3": "^3.1.0" + } + }, "p-reduce": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", "dev": true }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "p-waterfall": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-1.0.0.tgz", - "integrity": "sha1-ftlLPOszMngjU69qrhGqn8I1uwA=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "pacote": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.0.tgz", - "integrity": "sha512-aUplXozRbzhaJO48FaaeClmN+2Mwt741MC6M3bevIGZwdCaP7frXzbUOfOWa91FPHoLITzG0hYaKY363lxO3bg==", + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", "dev": true, "requires": { - "bluebird": "^3.5.3", - "cacache": "^11.3.2", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.1.0", - "glob": "^7.1.3", - "lru-cache": "^5.1.1", - "make-fetch-happen": "^4.0.1", - "minimatch": "^3.0.4", - "minipass": "^2.3.5", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "normalize-package-data": "^2.4.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.1.12", - "npm-pick-manifest": "^2.2.3", - "npm-registry-fetch": "^3.8.0", - "osenv": "^0.1.5", - "promise-inflight": "^1.0.1", - "promise-retry": "^1.1.1", - "protoduck": "^5.0.1", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.2", - "semver": "^5.6.0", - "ssri": "^6.0.1", - "tar": "^4.4.8", - "unique-filename": "^1.1.1", - "which": "^1.3.1" + "retry": "^0.12.0" }, "dependencies": { - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true } } }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "p-waterfall": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-1.0.0.tgz", + "integrity": "sha1-ftlLPOszMngjU69qrhGqn8I1uwA=", + "dev": true, + "requires": { + "p-reduce": "^1.0.0" + } + }, "pako": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", @@ -12640,12 +12886,12 @@ "dev": true }, "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, "requires": { - "cyclist": "~0.2.2", + "cyclist": "^1.0.1", "inherits": "^2.0.3", "readable-stream": "^2.1.5" } @@ -12784,9 +13030,9 @@ "dev": true }, "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", "dev": true }, "path-dirname": { @@ -12910,9 +13156,9 @@ "dev": true }, "portfinder": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", - "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", + "version": "1.0.24", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.24.tgz", + "integrity": "sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg==", "dev": true, "requires": { "async": "^1.5.2", @@ -12935,9 +13181,9 @@ "dev": true }, "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", + "version": "7.0.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.18.tgz", + "integrity": "sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -12981,7 +13227,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13048,7 +13294,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13085,6 +13331,12 @@ "supports-color": "^3.2.3" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -13114,7 +13366,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13151,6 +13403,12 @@ "supports-color": "^3.2.3" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -13179,7 +13437,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13244,7 +13502,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13309,7 +13567,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13374,7 +13632,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13440,7 +13698,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13505,7 +13763,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13554,53 +13812,13 @@ } }, "postcss-load-config": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", - "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", "dev": true, "requires": { - "cosmiconfig": "^4.0.0", + "cosmiconfig": "^5.0.0", "import-cwd": "^2.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", - "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", - "dev": true, - "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0", - "require-from-string": "^2.0.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - } } }, "postcss-loader": { @@ -13616,9 +13834,9 @@ }, "dependencies": { "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -13628,9 +13846,9 @@ } }, "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", "dev": true }, "schema-utils": { @@ -13665,7 +13883,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13702,6 +13920,12 @@ "supports-color": "^3.2.3" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -13730,7 +13954,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13809,7 +14033,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13882,7 +14106,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13919,6 +14143,12 @@ "supports-color": "^3.2.3" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -13948,7 +14178,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -13985,6 +14215,12 @@ "supports-color": "^3.2.3" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -14016,7 +14252,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14053,6 +14289,12 @@ "supports-color": "^3.2.3" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -14084,7 +14326,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14264,7 +14506,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14321,6 +14563,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-positions": { @@ -14333,6 +14583,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-repeat-style": { @@ -14345,6 +14603,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-string": { @@ -14356,6 +14622,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-timing-functions": { @@ -14367,6 +14641,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-unicode": { @@ -14378,6 +14660,14 @@ "browserslist": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-normalize-url": { @@ -14400,7 +14690,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14437,6 +14727,12 @@ "supports-color": "^3.2.3" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -14456,6 +14752,14 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-ordered-values": { @@ -14476,7 +14780,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14513,6 +14817,12 @@ "supports-color": "^3.2.3" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -14542,7 +14852,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14579,6 +14889,12 @@ "supports-color": "^3.2.3" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -14607,7 +14923,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14674,7 +14990,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14711,6 +15027,12 @@ "supports-color": "^3.2.3" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -14753,7 +15075,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14790,6 +15112,12 @@ "supports-color": "^3.2.3" } }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -14820,7 +15148,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14869,9 +15197,9 @@ } }, "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", "dev": true }, "postcss-zindex": { @@ -14893,7 +15221,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -14972,9 +15300,9 @@ "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "progress": { @@ -15077,9 +15405,9 @@ "dev": true }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", "dev": true }, "public-encrypt": { @@ -15244,9 +15572,9 @@ } }, "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", + "version": "16.9.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", + "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==", "dev": true }, "read": { @@ -15259,18 +15587,18 @@ } }, "read-cmd-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz", - "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.4.tgz", + "integrity": "sha512-Pqpl3qJ/QdOIjRYA0q5DND/gLvGOfpIz/fYVDGYpOXfW/lFrIttmLsBnd6IkyK10+JHU9zhsaudfvrQTBB9YFQ==", "dev": true, "requires": { "graceful-fs": "^4.1.2" } }, "read-package-json": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.13.tgz", - "integrity": "sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.0.tgz", + "integrity": "sha512-KLhu8M1ZZNkMcrq1+0UJbR8Dii8KZUqB0Sha4mOx/bknfKI/fyrQVrG/YIt2UOtG667sD8+ee4EXMM91W9dC+A==", "dev": true, "requires": { "glob": "^7.1.1", @@ -15289,16 +15617,14 @@ } }, "read-package-tree": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.2.2.tgz", - "integrity": "sha512-rW3XWUUkhdKmN2JKB4FL563YAgtINifso5KShykufR03nJ5loGFlkUMe1g/yxmqX073SoYYTsgXu7XdDinKZuA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", "dev": true, "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "once": "^1.3.0", "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0" + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" } }, "read-pkg": { @@ -15369,7 +15695,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -15383,9 +15709,9 @@ } }, "readdir-scoped-modules": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz", - "integrity": "sha1-n6+jfShr5dksuuve4DDcm19AZ0c=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", "dev": true, "requires": { "debuglog": "^1.0.1", @@ -15478,9 +15804,9 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz", - "integrity": "sha512-SbA/iNrBUf6Pv2zU8Ekv1Qbhv92yxL4hiDa2siuxs4KKn4oOoMDHXjAf7+Nz9qinUQ46B1LcWEi/PhJfPWpZWQ==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", "dev": true, "requires": { "regenerate": "^1.4.0" @@ -15493,9 +15819,9 @@ "dev": true }, "regenerator-transform": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.4.tgz", - "integrity": "sha512-T0QMBjK3J0MtxjPmdIMXm72Wvj2Abb0Bd4HADdfijwMdoIsyQZ6fWC7kDFhk2YinBBEMZDL7Y7wh0J1sGx3S4A==", + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", "dev": true, "requires": { "private": "^0.1.6" @@ -15521,19 +15847,28 @@ } }, "regexp-tree": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.6.tgz", - "integrity": "sha512-LFrA98Dw/heXqDojz7qKFdygZmFoiVlvE1Zp7Cq2cvF+ZA+03Gmhy0k0PQlsC1jvHPiTUSs+pDHEuSWv6+6D7w==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.13.tgz", + "integrity": "sha512-hwdV/GQY5F8ReLZWO+W1SRoN5YfpOKY6852+tBFcma72DKBIcHjPRIlIvQN35bCOljuAfP2G2iB0FC/w236mUw==", "dev": true }, + "regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2" + } + }, "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz", + "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==", "dev": true, "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", + "regenerate-unicode-properties": "^8.1.0", "regjsgen": "^0.5.0", "regjsparser": "^0.6.0", "unicode-match-property-ecmascript": "^1.0.4", @@ -15624,6 +15959,17 @@ "uuid": "^3.3.2" }, "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", @@ -15638,12 +15984,6 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", @@ -15667,18 +16007,18 @@ "dev": true }, "requizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.2.tgz", - "integrity": "sha512-oJ6y7JcUJkblRGhMByGNcszeLgU0qDxNKFCiUZR1XyzHyVsev+Mxb1tyygxLd1ORsKee1SA5BInFdUwY64GE/A==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", + "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.14" } }, "resolve": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", - "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -15709,6 +16049,19 @@ "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } } }, "resolve-from": { @@ -15764,9 +16117,9 @@ "dev": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -15807,9 +16160,9 @@ "dev": true }, "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -15905,7 +16258,7 @@ }, "os-locale": { "version": "1.4.0", - "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, "requires": { @@ -16013,23 +16366,22 @@ } }, "sass-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.3.1.tgz", + "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==", "dev": true, "requires": { - "clone-deep": "^2.0.1", + "clone-deep": "^4.0.1", "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", "neo-async": "^2.5.0", - "pify": "^3.0.0", - "semver": "^5.5.0" + "pify": "^4.0.1", + "semver": "^6.3.0" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } @@ -16051,9 +16403,9 @@ }, "dependencies": { "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -16063,9 +16415,9 @@ } }, "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", "dev": true } } @@ -16098,24 +16450,24 @@ "dev": true }, "selfsigned": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", - "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.6.tgz", + "integrity": "sha512-i3+CeqxL7DpAazgVpAGdKMwHuL63B5nhJMh9NQ7xmChGkA3jNFflq6Jyo1LLJYcr3idWiNOPWHCrm4zMayLG4w==", "dev": true, "requires": { - "node-forge": "0.7.5" + "node-forge": "0.8.2" } }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, "requires": { "debug": "2.6.9", @@ -16125,50 +16477,26 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "dependencies": { - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true } } }, "serialize-javascript": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", - "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", + "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", "dev": true }, "serve-index": { @@ -16208,6 +16536,12 @@ "statuses": ">= 1.4.0 < 2" } }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -16223,15 +16557,15 @@ } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.17.1" } }, "set-blocking": { @@ -16241,9 +16575,9 @@ "dev": true }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -16277,7 +16611,7 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { @@ -16286,22 +16620,12 @@ } }, "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "kind-of": "^6.0.2" } }, "shebang-command": { @@ -16501,7 +16825,7 @@ "dependencies": { "debug": { "version": "2.3.3", - "resolved": "http://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", "dev": true, "requires": { @@ -16534,7 +16858,7 @@ "dependencies": { "debug": { "version": "2.3.3", - "resolved": "http://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", "dev": true, "requires": { @@ -16576,7 +16900,7 @@ }, "debug": { "version": "2.3.3", - "resolved": "http://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", "dev": true, "requires": { @@ -16611,7 +16935,7 @@ }, "debug": { "version": "2.2.0", - "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", "dev": true, "requires": { @@ -16666,18 +16990,18 @@ } }, "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -16700,6 +17024,26 @@ "requires": { "agent-base": "~4.2.1", "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + } } }, "sort-keys": { @@ -16737,9 +17081,9 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -16787,15 +17131,15 @@ } }, "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "spdy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", - "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -16815,9 +17159,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -16844,17 +17188,17 @@ "requires": { "ms": "^2.1.1" } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -17027,6 +17371,26 @@ "strip-ansi": "^3.0.0" } }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -17082,7 +17446,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -17148,7 +17512,7 @@ }, "table": { "version": "3.8.3", - "resolved": "http://registry.npmjs.org/table/-/table-3.8.3.tgz", + "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", "dev": true, "requires": { @@ -17174,7 +17538,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -17233,18 +17597,18 @@ "dev": true }, "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", + "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", "dev": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "yallist": "^3.0.3" }, "dependencies": { "yallist": { @@ -17293,14 +17657,14 @@ } }, "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.1.tgz", + "integrity": "sha512-pnzH6dnFEsR2aa2SJaKb1uSCl3QmIsJ8dEkj0Fky+2AwMMcC9doMqLOQIH6wVTEKaVfKVvLSk5qxPBEZT9mywg==", "dev": true, "requires": { - "commander": "^2.19.0", + "commander": "^2.20.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.10" + "source-map-support": "~0.5.12" }, "dependencies": { "source-map": { @@ -17312,25 +17676,26 @@ } }, "terser-webpack-plugin": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", - "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", "dev": true, "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", + "serialize-javascript": "^1.7.0", "source-map": "^0.6.1", - "terser": "^3.16.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" }, "dependencies": { "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -17340,9 +17705,9 @@ } }, "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", "dev": true }, "schema-utils": { @@ -17365,9 +17730,9 @@ } }, "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.0.0.tgz", + "integrity": "sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ==", "dev": true }, "text-table": { @@ -17376,9 +17741,27 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -17399,9 +17782,9 @@ "dev": true }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -17555,9 +17938,9 @@ "dev": true }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, "tty-browserify": { @@ -17581,6 +17964,12 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "type": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz", + "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg==", + "dev": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -17596,6 +17985,12 @@ "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=", "dev": true }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -17619,9 +18014,9 @@ "dev": true }, "uglify-js": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.11.tgz", - "integrity": "sha512-izPJg8RsSyqxbdnqX36ExpbH3K7tDBsAU/VfNv89VkMFy3z39zFjunQGsSHOlGlyIfGLGprGeosgQno3bo2/Kg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", "dev": true, "optional": true, "requires": { @@ -17867,38 +18262,15 @@ "dev": true }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "uniq": { @@ -17923,21 +18295,21 @@ } }, "unique-slug": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "requires": { "imurmurhash": "^0.1.4" } }, "universal-user-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-2.1.0.tgz", - "integrity": "sha512-8itiX7G05Tu3mGDTdNY2fB4KJ8MgZLS54RdG6PkkfwMAavrXu1mV/lls/GABx9O3Rw4PnTtasxrvbMQoBYY92Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.0.tgz", + "integrity": "sha512-eM8knLpev67iBDizr/YtqkJsF3GK8gzDc6st/WKzrTuPtcsOKW/0IdL4cnMBsU69pOx0otavLWBDGTwg+dB0aA==", "dev": true, "requires": { - "os-name": "^3.0.0" + "os-name": "^3.1.0" } }, "universalify": { @@ -17999,9 +18371,9 @@ } }, "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, "uri-js": { @@ -18053,12 +18425,6 @@ "requires-port": "^1.0.0" } }, - "url-template": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", - "integrity": "sha1-/FZaPMy/93MMd19WQflVV5FDnyE=", - "dev": true - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -18091,6 +18457,14 @@ "dev": true, "requires": { "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } } }, "util-deprecate": { @@ -18099,6 +18473,15 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, "util.promisify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", @@ -18138,9 +18521,9 @@ "dev": true }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", "dev": true }, "v8-compile-cache": { @@ -18192,13 +18575,10 @@ } }, "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", + "dev": true }, "void-elements": { "version": "2.0.1", @@ -18242,47 +18622,46 @@ "dev": true }, "webpack": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.31.0.tgz", - "integrity": "sha512-n6RVO3X0LbbipoE62akME9K/JI7qYrwwufs20VvgNNpqUoH4860KkaxJTbGq5bgkVZF9FqyyTG/0WPLH3PVNJA==", + "version": "4.39.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.3.tgz", + "integrity": "sha512-BXSI9M211JyCVc3JxHWDpze85CvjC842EvpRsVTc/d15YJGlox7GIDd38kJgWrb3ZluyvIjgenbLDMBQPDcxYQ==", "dev": true, "requires": { "@webassemblyjs/ast": "1.8.5", "@webassemblyjs/helper-module-context": "1.8.5", "@webassemblyjs/wasm-edit": "1.8.5", "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.0.5", - "acorn-dynamic-import": "^4.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", + "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" }, "dependencies": { "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", "dev": true }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -18292,21 +18671,11 @@ } }, "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", "dev": true }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -18353,39 +18722,145 @@ } }, "webpack-cli": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.2.tgz", - "integrity": "sha512-FLkobnaJJ+03j5eplxlI0TUxhGCOdfewspIGuvDVtpOlrAuKMFC57K42Ukxqs1tn8947/PM6tP95gQc0DCzRYA==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "findup-sync": "^2.0.0", - "global-modules": "^1.0.0", - "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.5" + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.8.tgz", + "integrity": "sha512-RANYSXwikSWINjHMd/mtesblNSpjpDLoYTBtP99n1RhXqVI/wxN40Auqy42I7y4xrbmRBoA5Zy5E0JSBD5XRhw==", + "dev": true, + "requires": { + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "findup-sync": "3.0.0", + "global-modules": "2.0.0", + "import-local": "2.0.0", + "interpret": "1.2.0", + "loader-utils": "1.2.3", + "supports-color": "6.1.0", + "v8-compile-cache": "2.0.3", + "yargs": "13.2.4" }, "dependencies": { - "import-local": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "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 + }, + "require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", "dev": true, "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, "webpack-dev-middleware": { "version": "2.0.6", - "resolved": "http://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-2.0.6.tgz", "integrity": "sha512-tj5LLD9r4tDuRIDa5Mu9lnY2qBBehAITv6A9irqXhw/HQquZgTx3BCd57zYbU2gMDnncA49ufK2qVQSbaKJwOw==", "dev": true, "requires": { @@ -18399,55 +18874,58 @@ }, "dependencies": { "mime": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", - "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", "dev": true } } }, "webpack-dev-server": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.3.1.tgz", - "integrity": "sha512-jY09LikOyGZrxVTXK0mgIq9y2IhCoJ05848dKZqX1gAGLU1YDqgpOT71+W53JH/wI4v6ky4hm+KvSyW14JEs5A==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.0.tgz", + "integrity": "sha512-Hs8K9yI6pyMvGkaPTeTonhD6JXVsigXDApYk9JLW4M7viVBspQvb1WdAcWxqtmttxNW4zf2UFLsLNe0y87pIGQ==", "dev": true, "requires": { "ansi-html": "0.0.7", "bonjour": "^3.5.0", - "chokidar": "^2.1.5", + "chokidar": "^2.1.6", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", "debug": "^4.1.1", - "del": "^4.1.0", - "express": "^4.16.4", + "del": "^4.1.1", + "express": "^4.17.1", "html-entities": "^1.2.1", "http-proxy-middleware": "^0.19.1", "import-local": "^2.0.0", - "internal-ip": "^4.2.0", + "internal-ip": "^4.3.0", "ip": "^1.1.5", + "is-absolute-url": "^3.0.0", "killable": "^1.0.1", - "loglevel": "^1.6.1", + "loglevel": "^1.6.3", "opn": "^5.5.0", - "portfinder": "^1.0.20", + "p-retry": "^3.0.1", + "portfinder": "^1.0.21", "schema-utils": "^1.0.0", "selfsigned": "^1.10.4", - "semver": "^6.0.0", + "semver": "^6.3.0", "serve-index": "^1.9.1", "sockjs": "0.3.19", "sockjs-client": "1.3.0", - "spdy": "^4.0.0", + "spdy": "^4.0.1", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", "url": "^0.11.0", - "webpack-dev-middleware": "^3.6.2", + "webpack-dev-middleware": "^3.7.0", "webpack-log": "^2.0.0", + "ws": "^6.2.1", "yargs": "12.0.5" }, "dependencies": { "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -18457,9 +18935,9 @@ } }, "ajv-keywords": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", - "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", "dev": true }, "debug": { @@ -18471,26 +18949,22 @@ "ms": "^2.1.1" } }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - } + "is-absolute-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.1.tgz", + "integrity": "sha512-c2QjUwuMxLsld90sj3xYzpFYWJtuxkIn1f5ua9RTEYJt/vV2IsM+Py00/6qjV7qExgifUvt7qfyBGBBKm+2iBg==", + "dev": true }, "mime": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.2.tgz", - "integrity": "sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", "dev": true }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "schema-utils": { @@ -18505,9 +18979,9 @@ } }, "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "supports-color": { @@ -18520,14 +18994,15 @@ } }, "webpack-dev-middleware": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.6.2.tgz", - "integrity": "sha512-A47I5SX60IkHrMmZUlB0ZKSWi29TZTcPz7cha1Z75yYOsgWh/1AcPmQEbC8ZIbU3A1ytSv1PMU0PyPz2Lmz2jg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.1.tgz", + "integrity": "sha512-5MWu9SH1z3hY7oHOV6Kbkz5x7hXbxK56mGHNqHTe6d+ewxOwKUxoUJBs7QIaJb33lPjl9bJZ3X0vCoooUzC36A==", "dev": true, "requires": { "memory-fs": "^0.4.1", - "mime": "^2.3.1", - "range-parser": "^1.0.3", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", "webpack-log": "^2.0.0" } }, @@ -18540,6 +19015,15 @@ "ansi-colors": "^3.0.0", "uuid": "^3.3.2" } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } } } }, @@ -18560,7 +19044,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -18592,9 +19076,9 @@ } }, "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -18610,12 +19094,13 @@ } }, "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", "dev": true, "requires": { - "http-parser-js": ">=0.4.0", + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, @@ -18733,7 +19218,7 @@ }, "wrap-ansi": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { @@ -18757,9 +19242,9 @@ } }, "write-file-atomic": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz", - "integrity": "sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "requires": { "graceful-fs": "^4.1.11", @@ -18768,17 +19253,17 @@ } }, "write-json-file": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz", - "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", "dev": true, "requires": { "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "pify": "^3.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", "sort-keys": "^2.0.0", - "write-file-atomic": "^2.0.0" + "write-file-atomic": "^2.4.2" }, "dependencies": { "detect-indent": { @@ -18787,21 +19272,6 @@ "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", "dev": true }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, "sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", @@ -18823,6 +19293,27 @@ "write-json-file": "^2.2.0" }, "dependencies": { + "detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", + "dev": true + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, "sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", @@ -18831,6 +19322,20 @@ "requires": { "is-plain-obj": "^1.0.0" } + }, + "write-json-file": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz", + "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=", + "dev": true, + "requires": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "pify": "^3.0.0", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.0.0" + } } } }, @@ -18863,9 +19368,9 @@ "dev": true }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { diff --git a/packages/muze-utils/package.json b/packages/muze-utils/package.json index 47c4bebc..f53d6407 100644 --- a/packages/muze-utils/package.json +++ b/packages/muze-utils/package.json @@ -56,7 +56,7 @@ "d3-time": "^1.0.11", "d3-transition": "^1.1.1", "d3-voronoi": "^1.1.2", - "datamodel": "^2.2.1", + "datamodel": "^2.2.2", "fusioncharts-smartlabel": "^1.0.2", "hyperdis": "^1.0.1" } diff --git a/packages/muze/npm/dist/muze.css.map b/packages/muze/npm/dist/muze.css.map deleted file mode 100644 index 276aab6e..00000000 --- a/packages/muze/npm/dist/muze.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack://muze/./packages/muze-firebolt/src/side-effects/selection-box/styles.scss","webpack://muze/./packages/muze-tooltip/src/styles.scss","webpack://muze/./packages/muze-firebolt/src/side-effects/tooltip/styles.scss","webpack://muze/./packages/muze-firebolt/src/side-effects/crossline/styles.scss","webpack://muze/./packages/muze-firebolt/src/side-effects/anchors/styles.scss","webpack://muze/./packages/muze-axis/src/styles.scss","webpack://muze/./packages/visual-layer/src/layers/line/styles.scss","webpack://muze/./packages/visual-layer/src/layers/area/styles.scss","webpack://muze/./packages/visual-layer/src/layers/arc/styles.scss","webpack://muze/./packages/visual-layer/src/layers/text/styles.scss","webpack://muze/./packages/visual-layer/src/layers/point/styles.scss","webpack://muze/./packages/visual-layer/src/layers/bar/styles.scss","webpack://muze/./packages/visual-layer/src/layers/tick/styles.scss","webpack://muze/./packages/visual-unit/src/styles.scss","webpack://muze/./packages/muze-legend/src/styles.scss","webpack://muze/./packages/muze-legend/src/firebolt/side-effects/selection-box/styles.scss","webpack://muze/./packages/visual-cell/src/text-cell.scss","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/scroll-bar.scss","webpack://muze/./packages/muze/src/muze.scss"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,sBAAsB;;ACLtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA,iBAAiB;;AAEjB;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA,oBAAoB;;AAEpB;AACA,eAAe;;AAEf;AACA,oBAAoB;;ACrGpB;AACA,iCAAiC;;AAEjC;AACA,sBAAsB;;ACJtB;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA,oBAAoB;;ACTpB;AACA,uBAAuB;;ACDvB;AACA;AACA,6EAA6E;;AAE7E;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA;AACA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA,gBAAgB;;AAEhB;AACA,gBAAgB;;AC3BhB;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA,kBAAkB;;ACNlB;AACA;AACA;AACA,oBAAoB;;ACHpB;AACA,2BAA2B;;AAE3B;AACA,+BAA+B;;AAE/B;AACA,2BAA2B;;AAE3B;AACA,gBAAgB;;ACVhB;AACA;AACA,aAAa;;AAEb;AACA;AACA,oBAAoB;;AAEpB;AACA,kBAAkB;;AAElB;AACA,+BAA+B;;AAE/B;AACA,wBAAwB;;ACfxB;AACA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA,wBAAwB;;AClBxB;AACA,kBAAkB;;AAElB;AACA,kBAAkB;;AAElB;AACA,+BAA+B;;AAE/B;AACA,6BAA6B;;ACV7B;AACA;AACA,kBAAkB;;AAElB;AACA,oBAAoB;;AAEpB;AACA;AACA,6BAA6B;;AAE7B;AACA,0BAA0B;;ACZ1B;AACA,0BAA0B;;AAE1B;AACA,oBAAoB;;AAEpB;AACA,kBAAkB;;AAElB;AACA,kBAAkB;;AAElB;AACA;AACA,4BAA4B;;ACd5B;AACA;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA,6EAA6E;;AAE7E;AACA;AACA;AACA,wBAAwB;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB;;AAEnB;AACA;AACA,yBAAyB;;AAEzB;AACA,qBAAqB;;AAErB;AACA,kBAAkB;;AAElB;AACA,kBAAkB;;AAElB;AACA,qBAAqB;;AAErB;AACA,qBAAqB;;AAErB;AACA;AACA,eAAe;;AAEf;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA,kCAAkC;;AAElC;AACA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA;AACA,oCAAoC;;AC7EpC;AACA;AACA;AACA;AACA;AACA,sBAAsB;;ACLtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;;AC3BtB;AACA;AACA;AACA,kBAAkB;;AAElB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA,2BAA2B;;AAE3B;AACA;AACA;AACA;AACA,qBAAqB;;AAErB;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA,aAAa;;AAEb;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;;AAExC;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;;ACzJxC;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH;;AAEtH;AACA;AACA;AACA;AACA;AACA;AACA,4KAA4K;;AAE5K;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH;;AAEtH;AACA;AACA;AACA;AACA;AACA;AACA,4KAA4K;;AAE5K;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH;;AAEtH;AACA;AACA;AACA;AACA;AACA;AACA,4KAA4K;;AAE5K;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH;;AAEtH;AACA;AACA;AACA;AACA;AACA;AACA,4KAA4K;;AAE5K;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH;;AAEtH;AACA;AACA;AACA;AACA;AACA;AACA,4KAA4K;;AAE5K;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH;;AAEtH;AACA;AACA;AACA;AACA;AACA;AACA,4KAA4K;;AAE5K;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH;;AAEtH;AACA;AACA;AACA;AACA;AACA;AACA,4KAA4K;;AAE5K;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH;;AAEtH;AACA;AACA;AACA;AACA;AACA;AACA,4KAA4K;;AAE5K;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH;;AAEtH;AACA;AACA;AACA;AACA;AACA;AACA,4KAA4K;;AAE5K;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH;;AAEtH;AACA;AACA;AACA;AACA;AACA;AACA,4KAA4K;;AAE5K;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH;;AAEtH;AACA;AACA;AACA;AACA;AACA;AACA,4KAA4K;;AAE5K;AACA;AACA;AACA;AACA;AACA;AACA,yFAAyF;;AAEzF;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+D;;AAE/D;AACA;AACA;AACA;AACA;AACA;AACA,sHAAsH;;AAEtH;AACA;AACA;AACA;AACA;AACA;AACA,4KAA4K;;AAE5K;AACA,6EAA6E;;AAE7E;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;AACA,2BAA2B;AAC3B;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA,eAAe;AACf;AACA,eAAe;AACf;AACA;AACA,qBAAqB;AACrB;AACA,eAAe;;AAEf;AACA,cAAc;;AAEd;AACA;AACA,qBAAqB;;AAErB;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B;;AAE1B;AACA;AACA,cAAc;;AAEd;AACA;AACA,qBAAqB;;AAErB;AACA;AACA,cAAc;;AAEd;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA,aAAa;;AAEb;AACA;AACA,kBAAkB;;AAElB;AACA;AACA,kBAAkB;;AAElB;AACA;AACA,qBAAqB;;AAErB;AACA;AACA,cAAc;;AAEd;AACA;AACA,4BAA4B;;AAE5B;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA;AACA,oBAAoB;;AAEpB;AACA;AACA;AACA,iBAAiB;;AAEjB;AACA,aAAa;;AAEb;AACA,cAAc;;AAEd;AACA;AACA;AACA,4BAA4B;;AAE5B;AACA;AACA;AACA;AACA;AACA,sBAAsB;;AAEtB;AACA,gBAAgB","file":"muze.css","sourcesContent":[".muze-selection-box-group {\n fill: #777777;\n fill-opacity: 0.3;\n stroke: #fff;\n cursor: all-scroll;\n pointer-events: all; }\n",".muze-tooltip-box {\n opacity: 0.9;\n border: 1px solid rgba(151, 151, 151, 0.19);\n background: #fbfbfb;\n -webkit-box-shadow: 2px 2px 3px 0px rgba(211, 211, 211, 0.5);\n box-shadow: 2px 2px 3px 0px rgba(211, 211, 211, 0.5);\n font-size: 12px;\n color: #5f5f5f;\n -webkit-border-radius: 1px;\n border-radius: 1px;\n padding-left: 8px;\n padding-right: 8px;\n padding-top: 4px;\n display: inline-block;\n pointer-events: none;\n z-index: 9999999999;\n text-align: left; }\n\n.muze-tooltip-row {\n padding-bottom: 8px;\n overflow: auto; }\n\n.muze-tooltip-row:last-child {\n padding-bottom: 4px; }\n\n.muze-tooltip-value {\n font-weight: 600;\n float: right;\n margin-left: 10px; }\n\n.muze-tooltip-connectors path {\n stroke-width: 2px;\n stroke: #c7c7be;\n stroke-linejoin: round;\n stroke-linecap: round; }\n\n.muze-tooltip-arrow-bottom {\n border-top: 10px solid #fbfbfb;\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n right: 0; }\n\n.muze-tooltip-arrow-right {\n border-left: 10px solid #fbfbfb;\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n right: -10px; }\n\n.muze-tooltip-arrow-left {\n border-right: 10px solid #fbfbfb;\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n right: 0;\n left: -10px; }\n\n.muze-tooltip-arrow-top {\n border-bottom: 10px solid #fbfbfb;\n border-left: 5px solid transparent;\n border-right: 5px solid transparent;\n right: 0; }\n\n.muze-tooltip-background-arrow-top {\n border-bottom: 12px solid rgba(151, 151, 151, 0.19);\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n top: 0%;\n right: 0; }\n\n.muze-tooltip-background-arrow-bottom {\n border-top: 12px solid rgba(151, 151, 151, 0.19);\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n top: 102%;\n right: 0; }\n\n.muze-tooltip-background-arrow-right {\n border-left: 12px solid rgba(151, 151, 151, 0.19);\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n right: -12px; }\n\n.muze-tooltip-background-arrow-left {\n border-right: 12px solid rgba(151, 151, 151, 0.19);\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n right: 0;\n left: -12px; }\n\n.muze-tooltip-content-container {\n float: none !important;\n padding-left: 8px;\n padding-right: 8px;\n padding-top: 4px; }\n\n.muze--tooltip-value {\n font-weight: bold; }\n\n.muze-tooltip-table-tbody td {\n padding: 3px; }\n\n.muze-tooltip-table-row-0 {\n font-weight: bold; }\n",".muze-tooltip-content-container {\n border-bottom: 1px solid black; }\n\n.muze-tooltip-content-parent-container :last-child {\n border-bottom: none; }\n",".muze-crossband {\n stroke-opacity: 0;\n fill: grey;\n fill-opacity: 0.2; }\n\n.muze-crossline {\n stroke: grey;\n stroke-dasharray: 2,4;\n fill: grey;\n fill-opacity: 0.2; }\n",".muze-anchors-group {\n pointer-events: none; }\n",".muze-simple-axis text {\n text-align: center;\n font-family: 'Source Sans Pro',\"Helvetica Neue\",Helvetica,Arial,sans-serif; }\n\n.muze-ticks {\n font-size: 12px;\n text-align: center;\n font-weight: 400;\n font-family: 'Source Sans Pro',\"Helvetica Neue\",Helvetica,Arial,sans-serif;\n font-style: 'normal';\n fill: #858585; }\n\n.muze-tick-lines {\n font-size: 12px;\n text-align: center;\n font-weight: 400;\n font-family: 'Source Sans Pro',\"Helvetica Neue\",Helvetica,Arial,sans-serif;\n stroke: #efefef; }\n\n.muze-axis-name {\n font-size: 14px;\n text-align: center;\n font-weight: 400;\n font-family: 'Source Sans Pro',\"Helvetica Neue\",Helvetica,Arial,sans-serif;\n fill: #5f5f5f; }\n\n.muze-axis-name.hidden {\n display: none; }\n",".muze-fadeout-interaction {\n stroke-opacity: 0.3; }\n\n.muze-layer-line {\n stroke-linejoin: round;\n stroke-width: 2px;\n stroke: #086bb6; }\n",".muze-layer-area {\n stroke-linejoin: round;\n fill: #086bb6;\n fill-opacity: 0.7; }\n",".muze-layer-arc-highlight {\n fill: #7f7f7f !important; }\n\n.muze-layer-arc-fadeout {\n fill-opacity: 0.3 !important; }\n\n.muze-layer-arc-selected {\n fill: #e6e6e6 !important; }\n\n.muze-layer-arc {\n fill: #086bb6; }\n",".muze-layer-text text {\n font-size: 12px;\n fill: #000; }\n\n.muze-layer-text rect {\n fill: #7f7f7f;\n fill-opacity: 0.3; }\n\n.muze-layer-text-highlight {\n fill-opacity: 1; }\n\n.muze-layer-text-fadeout {\n fill-opacity: 0.3 !important; }\n\n.muze-layer-text-selected {\n fill: #000 !important; }\n",".muze-layer-point {\n fill-opacity: 0.5;\n stroke-opacity: 0.5;\n fill: #086bb6;\n stroke: #086bb6; }\n\n.muze-layer-point-highlight {\n stroke-width: 2px !important;\n fill-opacity: 0;\n stroke-opacity: 1; }\n\n.muze-layer-point-fadeout {\n fill-opacity: 0.3 !important;\n fill: #7f7f7f !important;\n stroke-opacity: 0.3 !important;\n stroke: #7f7f7f !important; }\n\n.muze-layer-point-selected {\n fill: #000 !important; }\n",".muze-layer-bar {\n fill-opacity: 1; }\n\n.muze-layer-bar-highlight {\n fill-opacity: 1; }\n\n.muze-layer-bar-fadeout {\n fill-opacity: 0.2 !important; }\n\n.muze-layer-bar-selected {\n fill: steelblue !important; }\n",".muze-layer-tick {\n stroke-opacity: 0.7;\n stroke: #F44336; }\n\n.muze-layer-tick-highlight {\n stroke-opacity: 1; }\n\n.muze-layer-tick-fadeout {\n stroke-opacity: 0.3 !important;\n stroke: #7f7f7f !important; }\n\n.muze-layer-tick-selected {\n stroke: #000 !important; }\n",".muze-visual-unit {\n background: transparent; }\n\n.muze-axis-zero-line {\n stroke-width: 1px; }\n\n.muze-grid-band-x-0 {\n fill-opacity: 0; }\n\n.muze-grid-band-y-0 {\n fill-opacity: 0; }\n\n.muze-unit {\n -webkit-touch-callout: none;\n -webkit-user-select: none; }\n",".muze-legend-selection-box {\n fill: #777777;\n fill-opacity: 0.3;\n stroke: #fff;\n cursor: all-scroll;\n pointer-events: all; }\n\n.muze-legend-box, .muze-legend-title, .muze-legend-item-info {\n font-family: 'Source Sans Pro',\"Helvetica Neue\",Helvetica,Arial,sans-serif; }\n\n.muze-legend-box {\n line-height: 10px !important;\n height: 100px;\n display: inline-block; }\n\n.muze-legend-title {\n display: table;\n -webkit-box-align: center;\n -webkit-align-items: center;\n align-items: center;\n float: left;\n text-align: left;\n font-size: 14px;\n height: 30px;\n fill: #5F5F5F;\n font-weight: 600; }\n\n.muze-legend-title-text {\n display: table-cell;\n vertical-align: middle; }\n\n.muze-legend-overflow {\n text-align: center; }\n\n.muze-legend-icon-svg {\n cursor: pointer; }\n\n.muze-legend-icon {\n cursor: pointer; }\n\n.muze-overflow-y {\n overflow-y: scroll; }\n\n.muze-overflow-x {\n overflow-x: scroll; }\n\n.muze-legend-fadeout {\n fill-opacity: 0.3;\n opacity: 0.3; }\n\n.muze-legend-brighten {\n fill-opacity: 1; }\n\n.muze-legend-item-info {\n float: left;\n display: -webkit-box;\n display: -webkit-flex;\n display: flex;\n -webkit-box-align: center;\n -webkit-align-items: center;\n align-items: center;\n cursor: pointer;\n font-size: 12px; }\n\n.muze-legend-item-info.center {\n -webkit-box-pack: center;\n -webkit-justify-content: center;\n justify-content: center; }\n\n.muze-legend-item-info.start {\n -webkit-box-pack: start;\n -webkit-justify-content: flex-start;\n justify-content: flex-start; }\n\n.muze-legend-item-info.end {\n -webkit-box-pack: end;\n -webkit-justify-content: flex-end;\n justify-content: flex-end; }\n",".muze-legend-selection-box {\n fill: #777777;\n fill-opacity: 0.3;\n stroke: #fff;\n cursor: all-scroll;\n pointer-events: all; }\n",".muze-text-cell {\n font-size: 14px;\n text-align: center;\n color: #5f5f5f;\n font-weight: 400;\n font-family: 'Source Sans Pro',\"Helvetica Neue\", Helvetica, Arial, sans-serif;\n line-height: 1;\n white-space: nowrap;\n -webkit-transform-origin: 0 0;\n transform-origin: 0 0; }\n\n.muze-header-cell {\n font-size: 16px;\n text-align: center;\n color: #858585;\n font-weight: 800;\n font-family: 'Source Sans Pro',\"Helvetica Neue\", Helvetica, Arial, sans-serif;\n line-height: 1;\n white-space: nowrap; }\n\n.muze-subheader-cell {\n font-size: 15px;\n text-align: center;\n color: #858585;\n font-weight: 800;\n font-family: 'Source Sans Pro',\"Helvetica Neue\", Helvetica, Arial, sans-serif;\n line-height: 1;\n white-space: nowrap; }\n",".muze-scroll-bar {\n background: #f8f8f8;\n position: relative;\n font-size: 10px; }\n\n.muze-scroll-arrow {\n float: left;\n cursor: pointer;\n display: -webkit-box;\n display: -webkit-flex;\n display: flex;\n -webkit-box-align: center;\n -webkit-align-items: center;\n align-items: center;\n -webkit-box-pack: center;\n -webkit-justify-content: center;\n justify-content: center;\n background: #a2a2a2;\n color: white; }\n\n.muze-scroll-arrow-left {\n height: 100%;\n width: 20px;\n -webkit-border-top-right-radius: 3px;\n border-top-right-radius: 3px;\n -webkit-border-bottom-right-radius: 3px;\n border-bottom-right-radius: 3px; }\n\n.muze-scroll-arrow-right {\n height: 100%;\n width: 20px;\n -webkit-border-top-left-radius: 3px;\n border-top-left-radius: 3px;\n -webkit-border-bottom-left-radius: 3px;\n border-bottom-left-radius: 3px; }\n\n.muze-scroll-arrow-top {\n width: 100%;\n height: 20px;\n -webkit-border-bottom-left-radius: 3px;\n border-bottom-left-radius: 3px;\n -webkit-border-bottom-right-radius: 3px;\n border-bottom-right-radius: 3px; }\n\n.muze-scroll-arrow-bottom {\n width: 100%;\n height: 20px;\n -webkit-border-top-left-radius: 3px;\n border-top-left-radius: 3px;\n -webkit-border-top-right-radius: 3px;\n border-top-right-radius: 3px; }\n\n.muze-scroll-rect {\n float: left;\n position: relative; }\n\n.muze-scroll-mover {\n position: absolute;\n -webkit-border-radius: 3px;\n border-radius: 3px;\n background: #a2a2a2;\n cursor: -webkit-grab;\n border-radius: 3px; }\n\n.muze-scroll-mover:active {\n cursor: -webkit-grabbing; }\n\n.muze-scroll-arrow-chevron {\n position: relative;\n text-align: center;\n padding: 1px;\n margin-bottom: 0px; }\n\n.muze-scroll-arrow-chevron::before {\n content: '';\n position: absolute;\n background: white; }\n\n.muze-scroll-arrow-chevron::after {\n content: '';\n position: absolute;\n background: white; }\n\n#muze-scroll-arrow-chevron-bottom, #muze-scroll-arrow-chevron-top {\n height: 1px;\n width: 6px; }\n\n#muze-scroll-arrow-chevron-left, #muze-scroll-arrow-chevron-right {\n width: 1px;\n height: 6px; }\n\n#muze-scroll-arrow-chevron-bottom:before {\n top: 0;\n left: 0;\n height: 100%;\n width: 51%;\n -webkit-transform: skew(0deg, 35deg);\n transform: skew(0deg, 35deg); }\n\n#muze-scroll-arrow-chevron-bottom:after {\n top: 0;\n right: 0;\n height: 100%;\n width: 50%;\n -webkit-transform: skew(0deg, -35deg);\n transform: skew(0deg, -35deg); }\n\n#muze-scroll-arrow-chevron-top:before {\n top: 0;\n left: 0;\n height: 100%;\n width: 51%;\n -webkit-transform: skew(0deg, -35deg);\n transform: skew(0deg, -35deg); }\n\n#muze-scroll-arrow-chevron-top:after {\n top: 0;\n right: 0;\n height: 100%;\n width: 50%;\n -webkit-transform: skew(0deg, 35deg);\n transform: skew(0deg, 35deg); }\n\n#muze-scroll-arrow-chevron-right:before {\n top: 0;\n left: 0;\n height: 51%;\n width: 100%;\n -webkit-transform: skew(35deg, 0deg);\n transform: skew(35deg, 0deg); }\n\n#muze-scroll-arrow-chevron-right:after {\n bottom: 0;\n left: 0;\n width: 100%;\n height: 50%;\n -webkit-transform: skew(-35deg, 0deg);\n transform: skew(-35deg, 0deg); }\n\n#muze-scroll-arrow-chevron-left:before {\n bottom: 0;\n left: 0;\n width: 100%;\n height: 51%;\n -webkit-transform: skew(35deg, 0deg);\n transform: skew(35deg, 0deg); }\n\n#muze-scroll-arrow-chevron-left:after {\n top: 0;\n left: 0;\n width: 100%;\n height: 50%;\n -webkit-transform: skew(-35deg, 0deg);\n transform: skew(-35deg, 0deg); }\n","/* cyrillic-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight Italic\"), local(\"SourceSansPro-ExtraLightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdh18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }\n\n/* cyrillic */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight Italic\"), local(\"SourceSansPro-ExtraLightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdo18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }\n\n/* greek-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight Italic\"), local(\"SourceSansPro-ExtraLightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdg18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+1F00-1FFF; }\n\n/* greek */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight Italic\"), local(\"SourceSansPro-ExtraLightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdv18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0370-03FF; }\n\n/* vietnamese */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight Italic\"), local(\"SourceSansPro-ExtraLightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdj18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; }\n\n/* latin-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight Italic\"), local(\"SourceSansPro-ExtraLightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSdi18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; }\n\n/* latin */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight Italic\"), local(\"SourceSansPro-ExtraLightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZYokSds18S0xR41.woff2) format(\"woff2\");\n unicode-range: U+0000-00FF, 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; }\n\n/* cyrillic-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 300;\n src: local(\"Source Sans Pro Light Italic\"), local(\"SourceSansPro-LightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidh18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }\n\n/* cyrillic */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 300;\n src: local(\"Source Sans Pro Light Italic\"), local(\"SourceSansPro-LightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkido18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }\n\n/* greek-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 300;\n src: local(\"Source Sans Pro Light Italic\"), local(\"SourceSansPro-LightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidg18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+1F00-1FFF; }\n\n/* greek */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 300;\n src: local(\"Source Sans Pro Light Italic\"), local(\"SourceSansPro-LightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidv18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0370-03FF; }\n\n/* vietnamese */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 300;\n src: local(\"Source Sans Pro Light Italic\"), local(\"SourceSansPro-LightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidj18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; }\n\n/* latin-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 300;\n src: local(\"Source Sans Pro Light Italic\"), local(\"SourceSansPro-LightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkidi18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; }\n\n/* latin */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 300;\n src: local(\"Source Sans Pro Light Italic\"), local(\"SourceSansPro-LightItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZMkids18S0xR41.woff2) format(\"woff2\");\n unicode-range: U+0000-00FF, 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; }\n\n/* cyrillic-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 400;\n src: local(\"Source Sans Pro Italic\"), local(\"SourceSansPro-Italic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7qsDJB9cme_xc.woff2) format(\"woff2\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }\n\n/* cyrillic */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 400;\n src: local(\"Source Sans Pro Italic\"), local(\"SourceSansPro-Italic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7jsDJB9cme_xc.woff2) format(\"woff2\");\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }\n\n/* greek-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 400;\n src: local(\"Source Sans Pro Italic\"), local(\"SourceSansPro-Italic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7rsDJB9cme_xc.woff2) format(\"woff2\");\n unicode-range: U+1F00-1FFF; }\n\n/* greek */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 400;\n src: local(\"Source Sans Pro Italic\"), local(\"SourceSansPro-Italic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7ksDJB9cme_xc.woff2) format(\"woff2\");\n unicode-range: U+0370-03FF; }\n\n/* vietnamese */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 400;\n src: local(\"Source Sans Pro Italic\"), local(\"SourceSansPro-Italic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7osDJB9cme_xc.woff2) format(\"woff2\");\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; }\n\n/* latin-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 400;\n src: local(\"Source Sans Pro Italic\"), local(\"SourceSansPro-Italic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7psDJB9cme_xc.woff2) format(\"woff2\");\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; }\n\n/* latin */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 400;\n src: local(\"Source Sans Pro Italic\"), local(\"SourceSansPro-Italic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK1dSBYKcSV-LCoeQqfX1RYOo3qPZ7nsDJB9cme.woff2) format(\"woff2\");\n unicode-range: U+0000-00FF, 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; }\n\n/* cyrillic-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold Italic\"), local(\"SourceSansPro-SemiBoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdh18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }\n\n/* cyrillic */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold Italic\"), local(\"SourceSansPro-SemiBoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdo18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }\n\n/* greek-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold Italic\"), local(\"SourceSansPro-SemiBoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdg18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+1F00-1FFF; }\n\n/* greek */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold Italic\"), local(\"SourceSansPro-SemiBoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdv18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0370-03FF; }\n\n/* vietnamese */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold Italic\"), local(\"SourceSansPro-SemiBoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdj18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; }\n\n/* latin-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold Italic\"), local(\"SourceSansPro-SemiBoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCdi18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; }\n\n/* latin */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold Italic\"), local(\"SourceSansPro-SemiBoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZY4lCds18S0xR41.woff2) format(\"woff2\");\n unicode-range: U+0000-00FF, 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; }\n\n/* cyrillic-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold Italic\"), local(\"SourceSansPro-BoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdh18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }\n\n/* cyrillic */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold Italic\"), local(\"SourceSansPro-BoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdo18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }\n\n/* greek-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold Italic\"), local(\"SourceSansPro-BoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdg18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+1F00-1FFF; }\n\n/* greek */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold Italic\"), local(\"SourceSansPro-BoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdv18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0370-03FF; }\n\n/* vietnamese */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold Italic\"), local(\"SourceSansPro-BoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdj18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; }\n\n/* latin-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold Italic\"), local(\"SourceSansPro-BoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSdi18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; }\n\n/* latin */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold Italic\"), local(\"SourceSansPro-BoldItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZclSds18S0xR41.woff2) format(\"woff2\");\n unicode-range: U+0000-00FF, 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; }\n\n/* cyrillic-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 900;\n src: local(\"Source Sans Pro Black Italic\"), local(\"SourceSansPro-BlackItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydh18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }\n\n/* cyrillic */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 900;\n src: local(\"Source Sans Pro Black Italic\"), local(\"SourceSansPro-BlackItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydo18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }\n\n/* greek-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 900;\n src: local(\"Source Sans Pro Black Italic\"), local(\"SourceSansPro-BlackItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydg18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+1F00-1FFF; }\n\n/* greek */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 900;\n src: local(\"Source Sans Pro Black Italic\"), local(\"SourceSansPro-BlackItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydv18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0370-03FF; }\n\n/* vietnamese */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 900;\n src: local(\"Source Sans Pro Black Italic\"), local(\"SourceSansPro-BlackItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydj18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; }\n\n/* latin-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 900;\n src: local(\"Source Sans Pro Black Italic\"), local(\"SourceSansPro-BlackItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklydi18S0xR41YDw.woff2) format(\"woff2\");\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; }\n\n/* latin */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: italic;\n font-weight: 900;\n src: local(\"Source Sans Pro Black Italic\"), local(\"SourceSansPro-BlackItalic\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKwdSBYKcSV-LCoeQqfX1RYOo3qPZZklyds18S0xR41.woff2) format(\"woff2\");\n unicode-range: U+0000-00FF, 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; }\n\n/* cyrillic-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight\"), local(\"SourceSansPro-ExtraLight\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmhdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }\n\n/* cyrillic */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight\"), local(\"SourceSansPro-ExtraLight\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wkxdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }\n\n/* greek-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight\"), local(\"SourceSansPro-ExtraLight\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmxdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+1F00-1FFF; }\n\n/* greek */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight\"), local(\"SourceSansPro-ExtraLight\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlBdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0370-03FF; }\n\n/* vietnamese */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight\"), local(\"SourceSansPro-ExtraLight\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmBdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; }\n\n/* latin-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight\"), local(\"SourceSansPro-ExtraLight\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wmRdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; }\n\n/* latin */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 200;\n src: local(\"Source Sans Pro ExtraLight\"), local(\"SourceSansPro-ExtraLight\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i94_wlxdu3cOWxw.woff2) format(\"woff2\");\n unicode-range: U+0000-00FF, 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; }\n\n/* cyrillic-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 300;\n src: local(\"Source Sans Pro Light\"), local(\"SourceSansPro-Light\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmhdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }\n\n/* cyrillic */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 300;\n src: local(\"Source Sans Pro Light\"), local(\"SourceSansPro-Light\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwkxdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }\n\n/* greek-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 300;\n src: local(\"Source Sans Pro Light\"), local(\"SourceSansPro-Light\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmxdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+1F00-1FFF; }\n\n/* greek */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 300;\n src: local(\"Source Sans Pro Light\"), local(\"SourceSansPro-Light\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlBdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0370-03FF; }\n\n/* vietnamese */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 300;\n src: local(\"Source Sans Pro Light\"), local(\"SourceSansPro-Light\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmBdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; }\n\n/* latin-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 300;\n src: local(\"Source Sans Pro Light\"), local(\"SourceSansPro-Light\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwmRdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; }\n\n/* latin */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 300;\n src: local(\"Source Sans Pro Light\"), local(\"SourceSansPro-Light\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ik4zwlxdu3cOWxw.woff2) format(\"woff2\");\n unicode-range: U+0000-00FF, 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; }\n\n/* cyrillic-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 400;\n src: local(\"Source Sans Pro Regular\"), local(\"SourceSansPro-Regular\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNa7lujVj9_mf.woff2) format(\"woff2\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }\n\n/* cyrillic */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 400;\n src: local(\"Source Sans Pro Regular\"), local(\"SourceSansPro-Regular\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qPK7lujVj9_mf.woff2) format(\"woff2\");\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }\n\n/* greek-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 400;\n src: local(\"Source Sans Pro Regular\"), local(\"SourceSansPro-Regular\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNK7lujVj9_mf.woff2) format(\"woff2\");\n unicode-range: U+1F00-1FFF; }\n\n/* greek */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 400;\n src: local(\"Source Sans Pro Regular\"), local(\"SourceSansPro-Regular\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qO67lujVj9_mf.woff2) format(\"woff2\");\n unicode-range: U+0370-03FF; }\n\n/* vietnamese */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 400;\n src: local(\"Source Sans Pro Regular\"), local(\"SourceSansPro-Regular\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qN67lujVj9_mf.woff2) format(\"woff2\");\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; }\n\n/* latin-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 400;\n src: local(\"Source Sans Pro Regular\"), local(\"SourceSansPro-Regular\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qNq7lujVj9_mf.woff2) format(\"woff2\");\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; }\n\n/* latin */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 400;\n src: local(\"Source Sans Pro Regular\"), local(\"SourceSansPro-Regular\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xK3dSBYKcSV-LCoeQqfX1RYOo3qOK7lujVj9w.woff2) format(\"woff2\");\n unicode-range: U+0000-00FF, 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; }\n\n/* cyrillic-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold\"), local(\"SourceSansPro-SemiBold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmhdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }\n\n/* cyrillic */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold\"), local(\"SourceSansPro-SemiBold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwkxdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }\n\n/* greek-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold\"), local(\"SourceSansPro-SemiBold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmxdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+1F00-1FFF; }\n\n/* greek */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold\"), local(\"SourceSansPro-SemiBold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlBdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0370-03FF; }\n\n/* vietnamese */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold\"), local(\"SourceSansPro-SemiBold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmBdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; }\n\n/* latin-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold\"), local(\"SourceSansPro-SemiBold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwmRdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; }\n\n/* latin */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 600;\n src: local(\"Source Sans Pro SemiBold\"), local(\"SourceSansPro-SemiBold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3i54rwlxdu3cOWxw.woff2) format(\"woff2\");\n unicode-range: U+0000-00FF, 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; }\n\n/* cyrillic-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold\"), local(\"SourceSansPro-Bold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmhdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }\n\n/* cyrillic */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold\"), local(\"SourceSansPro-Bold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwkxdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }\n\n/* greek-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold\"), local(\"SourceSansPro-Bold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmxdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+1F00-1FFF; }\n\n/* greek */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold\"), local(\"SourceSansPro-Bold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlBdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0370-03FF; }\n\n/* vietnamese */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold\"), local(\"SourceSansPro-Bold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmBdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; }\n\n/* latin-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold\"), local(\"SourceSansPro-Bold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwmRdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; }\n\n/* latin */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 700;\n src: local(\"Source Sans Pro Bold\"), local(\"SourceSansPro-Bold\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3ig4vwlxdu3cOWxw.woff2) format(\"woff2\");\n unicode-range: U+0000-00FF, 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; }\n\n/* cyrillic-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 900;\n src: local(\"Source Sans Pro Black\"), local(\"SourceSansPro-Black\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmhdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; }\n\n/* cyrillic */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 900;\n src: local(\"Source Sans Pro Black\"), local(\"SourceSansPro-Black\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwkxdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; }\n\n/* greek-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 900;\n src: local(\"Source Sans Pro Black\"), local(\"SourceSansPro-Black\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmxdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+1F00-1FFF; }\n\n/* greek */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 900;\n src: local(\"Source Sans Pro Black\"), local(\"SourceSansPro-Black\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlBdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0370-03FF; }\n\n/* vietnamese */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 900;\n src: local(\"Source Sans Pro Black\"), local(\"SourceSansPro-Black\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmBdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB; }\n\n/* latin-ext */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 900;\n src: local(\"Source Sans Pro Black\"), local(\"SourceSansPro-Black\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwmRdu3cOWxy40.woff2) format(\"woff2\");\n unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; }\n\n/* latin */\n@font-face {\n font-family: 'Source Sans Pro';\n font-style: normal;\n font-weight: 900;\n src: local(\"Source Sans Pro Black\"), local(\"SourceSansPro-Black\"), url(https://fonts.gstatic.com/s/sourcesanspro/v11/6xKydSBYKcSV-LCoeQqfX1RYOo3iu4nwlxdu3cOWxw.woff2) format(\"woff2\");\n unicode-range: U+0000-00FF, 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; }\n\n.muze-group-container, .muze-title-cell, .muze-subtitle-cell {\n font-family: 'Source Sans Pro',\"Helvetica Neue\",Helvetica,Arial,sans-serif; }\n\n.muze-group-container {\n font-size: 14px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n line-height: 1.42857143;\n color: #333;\n background-color: transparent;\n margin: 0; }\n .muze-group-container * {\n -webkit-box-sizing: border-box;\n box-sizing: border-box; }\n .muze-group-container *:before, .muze-group-container *:after {\n -webkit-box-sizing: border-box;\n box-sizing: border-box; }\n .muze-group-container .muze-table-arrow {\n margin: 5px;\n width: 0px;\n height: 0px;\n position: absolute;\n opacity: 0.5;\n z-index: 10;\n cursor: pointer; }\n .muze-group-container .muze-table-arrow:hover {\n opacity: 1.0; }\n .muze-group-container .muze-table-arrow-right {\n left: 100%;\n top: -webkit-calc(50% - 25px);\n top: calc(50% - 25px);\n border-top: 20px solid transparent;\n border-bottom: 20px solid transparent;\n border-left: 15px solid steelblue; }\n .muze-group-container .muze-table-arrow-left {\n right: 100%;\n top: -webkit-calc(50% - 25px);\n top: calc(50% - 25px);\n border-top: 20px solid transparent;\n border-bottom: 20px solid transparent;\n border-right: 15px solid steelblue; }\n .muze-group-container .muze-table-arrow-bottom {\n left: -webkit-calc(50% - 25px);\n left: calc(50% - 25px);\n top: 100%;\n border-left: 20px solid transparent;\n border-right: 20px solid transparent;\n border-top: 15px solid steelblue; }\n .muze-group-container .muze-table-arrow-top {\n left: -webkit-calc(50% - 25px);\n left: calc(50% - 25px);\n bottom: 100%;\n border-left: 20px solid transparent;\n border-right: 20px solid transparent;\n border-bottom: 15px solid steelblue; }\n .muze-group-container .table-row-nested {\n visibility: hidden;\n border-top: none; }\n .muze-group-container svg {\n display: block;\n width: inherit;\n height: inherit;\n float: left;\n vertical-align: top; }\n .muze-group-container .axisName.hidden {\n opacity: 0; }\n .muze-group-container .axisName {\n opacity: 1; }\n .muze-group-container .grid-td svg {\n max-width: 100%;\n max-height: 100%; }\n .muze-group-container .domain {\n opacity: 0; }\n\n.muze-board {\n float: left; }\n\n.muze-layout-container {\n float: left;\n position: relative; }\n\n.muze-legend-section, .muze-board-legend {\n text-align: center;\n float: left; }\n\n.muze-legend-horizontal-section {\n display: -webkit-box;\n display: -webkit-flex;\n display: flex;\n -webkit-box-align: center;\n -webkit-align-items: center;\n align-items: center;\n -webkit-box-pack: center;\n -webkit-justify-content: center;\n justify-content: center;\n -webkit-flex-wrap: wrap;\n flex-wrap: wrap; }\n\n.muze-legend-components {\n text-align: center;\n float: left; }\n\n.muze-grid-layout, .muze-grid-layout-row {\n float: left;\n position: relative; }\n\n.muze-grid-layout-container {\n position: relative;\n float: left; }\n\n.muze-grid-table {\n background-color: transparent;\n border-spacing: 0;\n table-layout: fixed; }\n\n.muze-grid-td, .muze-grid-th {\n padding: 0; }\n\n.muze-table-header {\n width: inherit;\n height: inherit; }\n\n.muze-table-header {\n width: inherit;\n height: inherit; }\n\n.muze-grid-layout {\n float: left;\n position: relative; }\n\n.muze-layout-grid-container {\n position: relative;\n float: left; }\n\n.muze-grid div {\n float: left;\n border-collapse: collapse; }\n\n.muze-grid table {\n border-collapse: collapse; }\n\n.muze-title-cell {\n font-size: 24px;\n font-weight: bold;\n color: #5f5f5f; }\n\n.muze-grid-headers {\n font-size: 14px;\n font-weight: bold; }\n\n.muze-subtitle-cell {\n font-size: 16px;\n font-weight: normal;\n color: #b1b1b1; }\n\n.domain {\n opacity: 0; }\n\n.muze-group-container, .muze-layout-container, .muze-legend-container {\n float: left; }\n\n.muze-message-container {\n background-color: #f1f1f1;\n display: table;\n border: 1px solid #c3c9d0; }\n\n.muze-message-container-child {\n vertical-align: middle;\n text-align: center;\n font-size: 18px;\n color: #8c8d8e;\n display: table-cell; }\n\n.hidden {\n display: none; }\n"],"sourceRoot":""} \ No newline at end of file diff --git a/packages/muze/npm/dist/muze.js b/packages/muze/npm/dist/muze.js index f583306a..1e9810cc 100644 --- a/packages/muze/npm/dist/muze.js +++ b/packages/muze/npm/dist/muze.js @@ -1,2 +1,2 @@ -!function webpackUniversalModuleDefinition(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define("muze",[],factory):"object"==typeof exports?exports.muze=factory():root.muze=factory()}(window,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=7)}([function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.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 a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));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=JSON.parse('{"name":"datamodel","description":"Relational algebra compliant in-memory tabular data store","homepage":"https://github.com/chartshq/datamodel","version":"2.2.1","license":"MIT","main":"dist/datamodel.js","keywords":["datamodel","data","relational","algebra","model","muze","fusioncharts","table","tabular","operation"],"author":"Muzejs.org (https://muzejs.org/)","repository":{"type":"git","url":"https://github.com/chartshq/datamodel.git"},"contributors":[{"name":"Akash Goswami","email":"akashgoswami90s@gmail.com"},{"name":"Subhash Haldar"},{"name":"Rousan Ali","email":"rousanali786@gmail.com","url":"https://rousan.io"},{"name":"Ujjal Kumar Dutta","email":"duttaujjalkumar@live.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":"npm run build:prod","build:dev":"webpack --mode development","build:prod":"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 l}),n.d(r,"GROUP_BY_FUNCTIONS",function(){return s});var a={};n.r(a),n.d(a,"DSVArr",function(){return rt}),n.d(a,"DSVStr",function(){return mt}),n.d(a,"FlatJSON",function(){return yt}),n.d(a,"Auto",function(){return bt});var i={};n.r(i),n.d(i,"sum",function(){return un}),n.d(i,"avg",function(){return cn}),n.d(i,"min",function(){return fn}),n.d(i,"max",function(){return ln}),n.d(i,"first",function(){return sn}),n.d(i,"last",function(){return dn}),n.d(i,"count",function(){return pn}),n.d(i,"sd",function(){return hn});var o={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"},u={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo",BINNED:"binned"},c={CONTINUOUS:"continuous"},f={MEASURE:"measure",DIMENSION:"dimension"},l={NORMAL:"normal",INVERSE:"inverse",ALL:"all"},s={SUM:"sum",AVG:"avg",MIN:"min",MAX:"max",FIRST:"first",LAST:"last",COUNT:"count",STD:"std"};function d(e){return e instanceof Date?e:new Date(e)}function p(e){return e<10?"0"+e:e}function h(e){this.format=e,this.dtParams=void 0,this.nativeDate=void 0}RegExp.escape=function(e){return e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},h.TOKEN_PREFIX="%",h.DATETIME_PARAM_SEQUENCE={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6},h.defaultNumberParser=function(e){return function(t){var n;return isFinite(n=parseInt(t,10))?n:e}},h.defaultRangeParser=function(e,t){return function(n){var r,a=void 0;if(!n)return t;var i=n.toLowerCase();for(a=0,r=e.length;aa.getFullYear()&&(t=""+(i-1)+r),d(t).getFullYear()},formatter:function formatter(e){var t=d(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:"Y",index:0,extract:function extract(){return"(\\d{4})"},parser:h.defaultNumberParser(),formatter:function formatter(e){return d(e).getFullYear().toString()}}}},h.getTokenFormalNames=function(){var e=h.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},h.tokenResolver=function(){var e=h.getTokenDefinitions(),t=function t(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[i+1],-1!==r.indexOf(o)&&a.push({index:i,token:o});return a},h.formatAs=function(e,t){var n,r=d(e),a=h.findTokens(t),i=h.getTokenDefinitions(),o=String(t),u=h.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=a.length;l=0;d--)(f=i[d].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(d=0;d0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],a=+(n[1]||n[0]);if(a>=r)for(var i=r;i<=a;i+=1)t(i)})}var R=function(){function e(e,t){for(var n=0;n3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:L.CROSS,i=[],o=[],u=n||H,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,d=c.name+"."+f.name,p=B(c,f);if(l===s)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=_({},e.schema());-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),i.push(t)}),f.fields.forEach(function(e){var t=_({},e.schema());-1!==p.indexOf(t.name)?r||(t.name=f.name+"."+t.name,i.push(t)):i.push(t)}),T(e._rowDiffset,function(n){var d=!1,h=void 0;T(t._rowDiffset,function(v){var m=[],y={};y[l]={},y[s]={},c.fields.forEach(function(e){m.push(e.partialField.data[n]),y[l][e.name()]={rawValue:e.partialField.data[n],formattedValue:e.formattedData()[n]}}),f.fields.forEach(function(e){-1!==p.indexOf(e.schema().name)&&r||m.push(e.partialField.data[v]),y[s][e.name()]={rawValue:e.partialField.data[v],formattedValue:e.formattedData()[v]}});var g=At(y[l]),b=At(y[s]);if(u(g,b,function(){return e.detachedRoot()},function(){return t.detachedRoot()},{})){var w={};m.forEach(function(e,t){w[i[t].name]=e}),d&&L.CROSS!==a?o[h]=w:(o.push(w),d=!0,h=n)}else if((a===L.LEFTOUTER||a===L.RIGHTOUTER)&&!d){var O={},_=c.fields.length-1;m.forEach(function(e,t){O[i[t].name]=t<=_?e:null}),d=!0,h=n,o.push(O)}})}),new on(o,i,{name:d})}function J(e,t){var n=""+e,r=""+t;return nr?1:0}function z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J;return e.length>1&&function e(t,n,r,a){if(r===n)return t;var i=n+Math.floor((r-n)/2);return e(t,n,i,a),e(t,i+1,r,a),function(e,t,n,r,a){for(var i=e,o=[],u=t;u<=r;u+=1)o[u]=i[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(i[l]=o[f],f+=1):f>r?(i[l]=o[c],c+=1):a(o[c],o[f])<=0?(i[l]=o[c],c+=1):(i[l]=o[f],f+=1)}(t,n,i,r,a),t}(e,0,e.length-1,t),e}var K=function K(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function W(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt?1:-1}:function(e,t){return(e=""+e)==(t=""+t)?0:e>t?-1:1}}return n}(e.type,n)}function q(e,t){var n=new Map,r=[];return e.forEach(function(e){var a=e[t];n.has(a)?r[n.get(a)][1].push(e):(r.push([a,[e]]),n.set(a,r.length-1))}),r}function Z(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,a){return t[r]=e[1].map(function(e){return e[n[a].index]}),t},r),r}function $(e,t,n){for(var r=void 0,a=void 0,i=void 0,o=n.length-1;o>=0;o--)r=n[o][0],a=n[o][1],(i=Ht(t,r))&&("function"==typeof a?z(e,function(e,t){return a(e[i.index],t[i.index])}):E(a)?function(){var n=q(e,i.index),r=a[a.length-1],o=a.slice(0,a.length-1),u=o.map(function(e){return Ht(t,e)});n.forEach(function(e){e.push(Z(e,o,u))}),z(n,function(e,t){var n=e[2],a=t[2];return r(n,a)}),e.length=0,n.forEach(function(t){e.push.apply(e,W(t[1]))})}():function(){var t=X(i,a);z(e,function(e,n){return t(e[i.index],n[i.index])})}())}var Q,ee=function e(t,n,r,a){if(0===t.length)return n;var i=t[0],o=new Map;n.reduce(function(e,t){var n=t[i.index];return e.has(n)?e.get(n).push(t):e.set(n,[t]),e},o);var u=!0,c=!1,f=void 0;try{for(var l,s=o[Symbol.iterator]();!(u=(l=s.next()).done);u=!0){var d=l.value,p=K(d,2),h=p[0],v=p[1],m=e(t.slice(1),v,r,a);o.set(h,m),Array.isArray(m)&&$(m,r,a)}}catch(e){c=!0,f=e}finally{try{!u&&s.return&&s.return()}finally{if(c)throw f}}return o};function ne(e,t,n,r,a){var i={schema:[],data:[],uids:[]},o=(a=Object.assign({},{addUid:!1,columnWise:!1},a)).addUid,u=r&&r.length>0,c=[];if(n.split(",").forEach(function(t){for(var n=0;nn&&(n=a))}),[t,n]}}]),t}(),He=function(){function e(e,t){for(var n=0;n=i?c=!0:(r=e.charCodeAt(o++))===ut?f=!0:r===ct&&(f=!0,e.charCodeAt(o)===ut&&++o),e.slice(a+1,t-1).replace(/""/g,'"')}for(;o9999?"+"+st(t,6):st(t,4))+"-"+st(e.getUTCMonth()+1,2)+"-"+st(e.getUTCDate(),2)+(i?"T"+st(n,2)+":"+st(r,2)+":"+st(a,2)+"."+st(i,3)+"Z":a?"T"+st(n,2)+":"+st(r,2)+":"+st(a,2)+"Z":r||n?"T"+st(n,2)+":"+st(r,2)+"Z":"")}(e):t.test(e+="")?'"'+e.replace(/"/g,'""')+'"':e}return{parse:function parse(e,t){var n,a,i=r(e,function(e,r){if(n)return n(e,r-1);a=e,n=t?function(e,t){var n=ft(e);return function(r,a){return t(n(r),a,e)}}(e,t):ft(e)});return i.columns=a||[],i},parseRows:r,format:function format(t,n){return null==n&&(n=lt(t)),[n.map(o).join(e)].concat(a(t,n)).join("\n")},formatBody:function formatBody(e,t){return null==t&&(t=lt(e)),a(e,t).join("\n")},formatRows:function formatRows(e){return e.map(i).join("\n")}}},ht=pt(","),vt=(ht.parse,ht.parseRows,ht.format,ht.formatBody,ht.formatRows,pt("\t"));vt.parse,vt.parseRows,vt.format,vt.formatBody,vt.formatRows;var gt,mt=function mt(e,t,n){n=Object.assign({},{firstRowHeader:!0,fieldSeparator:","},n);var r=pt(n.fieldSeparator);return rt(r.parseRows(e),t,n)},yt=function yt(e,t){if(!Array.isArray(t))throw new Error("Schema missing or is in an unsupported format");var n={},r=0,a=void 0,i=[],o=v(i),u=t.map(function(e){return e.name});return e.forEach(function(e){var t=[];u.forEach(function(i){i in n?a=n[i]:(n[i]=r++,a=r-1),t[a]=e[i]}),o.apply(void 0,t)}),[Object.keys(n),i]},bt=function bt(e,t,n){var r={FlatJSON:yt,DSVStr:mt,DSVArr:rt},a=D(e);if(!a)throw new Error("Couldn't detect the data format");return r[a](e,t,n)},wt=function wt(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function Ot(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _t(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},a=arguments[3];t===U.COMPOSE?(e._derivation.length=0,(n=e._derivation).push.apply(n,_t(a))):e._derivation.push({op:t,meta:r,criteria:a})})(t,n,arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},arguments[4]),function Dt(e,t){var n;(n=t._ancestorDerivation).push.apply(n,_t(e._ancestorDerivation).concat(_t(e._derivation)))}(e,t)},Nt=(Ot(gt={},l.NORMAL,{diffIndex:["rowDiffset"],calcDiff:[!0,!1]}),Ot(gt,l.INVERSE,{diffIndex:["rejectRowDiffset"],calcDiff:[!1,!0]}),Ot(gt,l.ALL,{diffIndex:["rowDiffset","rejectRowDiffset"],calcDiff:[!0,!0]}),gt),kt=function kt(e,t,n){if(-1!==n&&t===n+1){var r=e.length-1;e[r]=e[r].split("-")[0]+"-"+t}else e.push(""+t)},Tt=function Tt(e,t,n){var r=[],a=[],i=wt(Nt[n].calcDiff,2),o=i[0],u=i[1];return T(e,function(e){var n=t(e);n&&o&&kt(r,e,-1),!n&&u&&kt(a,e,-1)}),{rowDiffset:r.join(","),rejectRowDiffset:a.join(",")}},Ct=function Ct(e,t,n,r,a){var i={},o=function o(){return r.detachedRoot()},u=n.mode,c=e._rowDiffset,f=e.getPartialFieldspace().fields,l=f.map(function(e){return e.formattedData()}),s=f.map(function(e){return e.data()});return a(c,function(e){return t(Et(f,l,s,e),e,o,i)},u)},It=function It(e,t,n){for(var r=n(e,t,0),a=1,i=e.length;a2&&void 0!==arguments[2]?arguments[2]:{},r=[],a=n.operation||"and",i=n.filterByMeasure||!1,o=function Mt(e){var t=e.clone(!1),n=e.getPartialFieldspace();return t._colIdentifier=n.fields.map(function(e){return e.name()}).join(","),n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,t.__calculateFieldspace().calculateFieldsConfig(),t}(e),u=o.getFieldsConfig();return r=t.length?t.map(function(e){return n=void 0,r=(t=e).getData(),a=t.getFieldsConfig(),o=Object.keys(t.getFieldspace().getDimension()).filter(function(e){return e in u}),c=o.length,f=o.map(function(e){return a[e].index}),l=Object.keys(t.getFieldspace().getMeasure()).filter(function(e){return e in u}),s=t.getFieldspace().fieldsObj(),d=r.data,p=l.reduce(function(e,t){return e[t]=s[t].domain(),e},{}),h={},n=function n(e,t,_n){return t[e[_n]]},c&&d.forEach(function(e){var t=It(f,e,n);h[t]=1}),n=function n(e,t,_n2){return t[e[_n2]].internalValue},d.length?function(e){var t=!c||h[It(o,e,n)];return i?l.every(function(t){return e[t].internalValue>=p[t][0]&&e[t].internalValue<=p[t][1]})&&t:t}:function(){return!1};var t,n,r,a,o,c,f,l,s,d,p,h}):[function(){return!1}],"and"===a?o.select(function(e){return r.every(function(t){return t(e)})},{saveChild:!1}):o.select(function(e){return r.some(function(t){return t(e)})},{saveChild:!1})},xt=function xt(e,t,n,r,a){e._rowDiffset=t,e.__calculateFieldspace().calculateFieldsConfig(),Ft(n,e,U.SELECT,{config:r},a)},Ut=function Ut(e,t,n,r){var a=e.clone(n.saveChild),i=t;return n.mode===l.INVERSE&&(i=r.filter(function(e){return-1===t.indexOf(e)})),a._colIdentifier=i.join(","),a.__calculateFieldspace().calculateFieldsConfig(),Ft(e,a,U.PROJECT,{projField:t,config:n,actualProjField:i},null),a},Vt=function Vt(e){if((e=_({},e)).type||(e.type=f.DIMENSION),!e.subtype)switch(e.type){case f.MEASURE:e.subtype=c.CONTINUOUS;break;default:case f.DIMENSION:e.subtype=u.CATEGORICAL}return e},Yt=function Yt(e){return e.map(function(e){return function(e){var t=[c.CONTINUOUS],n=[u.CATEGORICAL,u.BINNED,u.TEMPORAL,u.GEO],r=e.type,a=e.subtype,i=e.name;switch(r){case f.DIMENSION:if(-1===n.indexOf(a))throw new Error("DataModel doesn't support dimension field subtype "+a+" used for "+i+" field");break;case f.MEASURE:if(-1===t.indexOf(a))throw new Error("DataModel doesn't support measure field subtype "+a+" used for "+i+" field");break;default:throw new Error("DataModel doesn't support field type "+r+" used for "+i+" field")}}(e=Vt(e)),e})},Bt=function Bt(e,t,n,r){n=Yt(n),r=Object.assign(Object.assign({},nt),r);var i=a[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var u=i(t,n,r),c=wt(u,2),f=c[0],l=c[1];!function(e,t){n.forEach(function(e){var n=e.as;if(n){var r=t.indexOf(e.name);t[r]=n,e.name=n,delete e.as}})}(0,f);var s=tt(l,n,f),d=F.createNamespace(s,r.name);e._partialFieldspace=d,e._rowDiffset=l.length&&l[0].length?"0-"+(l[0].length-1):"";var p=[],h=d.fields,v=h.map(function(e){return e.data()}),m=h.map(function(e){return e.formattedData()});return T(e._rowDiffset,function(e){p[e]=Et(h,m,v,e)}),d._cachedValueObjects=p,e._colIdentifier=n.map(function(e){return e.name}).join(),e._dataFormat=r.dataFormat===o.AUTO?D(t):r.dataFormat,e},Ht=function Ht(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a.nonTraversingModel,o=a.excludeModels||[];t!==i&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var i=Gt(n,t);e(t,i,r,a)}))},Xt=function Xt(e,t,n,r){var a=void 0,i=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}],a=[];else{var s,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),(a=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:a,models:e.model,path:function Wt(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t}(e.model)}))})}a=(s=[]).concat.apply(s,[].concat(_t(p),[e])).filter(function(e){return null!==e}),l.push({criteria:a,excludeModels:[].concat(h,_t(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(i=Pt(g,a,{filterByMeasure:f}),Jt(g,i,y)),l.forEach(function(e){var t=Pt(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n1?(a=e.clone(r.saveChild),xt(a,u[c[1]],e,n,t),[o,a]):o}(this,e,t,{saveChild:t.saveChild})}},{key:"isEmpty",value:function value(){return!this._rowDiffset.length||!this._colIdentifier.length}},{key:"clone",value:function value(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=new this.constructor(this);return e?t.setParent(this):t.setParent(null),t}},{key:"project",value:function value(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),a=Object.keys(r),i=t.mode,o=$t(e,a,r);return i===l.ALL?[Ut(this,o,{mode:l.NORMAL,saveChild:t.saveChild},a),Ut(this,o,{mode:l.INVERSE,saveChild:t.saveChild},a)]:Ut(this,o,t,a)}},{key:"getFieldsConfig",value:function value(){return this._fieldConfig}},{key:"calculateFieldsConfig",value:function value(){return this._fieldConfig=this._fieldspace.fields.reduce(function(e,t,n){return e[t.name()]={index:n,def:t.schema()},e},{}),this}},{key:"dispose",value:function value(){this._parent&&this._parent.removeChild(this),this._parent=null,this._children.forEach(function(e){e._parent=null}),this._children=[]}},{key:"removeChild",value:function value(e){var t=this._children.findIndex(function(t){return t===e});-1===t||this._children.splice(t,1)}},{key:"setParent",value:function value(e){this._parent&&this._parent.removeChild(this),this._parent=e,e&&e._children.push(this)}},{key:"getParent",value:function value(){return this._parent}},{key:"getChildren",value:function value(){return this._children}},{key:"getDerivations",value:function value(){return this._derivation}},{key:"getAncestorDerivations",value:function value(){return this._ancestorDerivation}}]),e}(),nn=function nn(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},rn=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=function Ae(e,t,n,r){var a=function(e,t){var n=[],r=e.getFieldspace().getDimension();return Object.entries(r).forEach(function(e){var r=Ee(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),n}(e,t),i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=e.getFieldspace().getMeasure(),a=_e.defaultReducer();return Object.keys(r).forEach(function(e){"string"!=typeof t[e]&&(t[e]=r[e].defAggFn());var i=_e.resolve(t[e]);i?n[e]=i:(n[e]=a,t[e]=ge)}),n}(e,n),o=e.getFieldspace(),u=o.fieldsObj(),c=o.name,l=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=Ee(e,2),n=t[0],r=t[1];if(-1!==a.indexOf(n)||i[n])switch(d.push(_({},r.schema())),r.schema().type){case f.MEASURE:s.push(n);break;default:case f.DIMENSION:l.push(n)}});var m=0;T(e._rowDiffset,function(e){var t="";l.forEach(function(n){t=t+"-"+u[n].partialField.data[e]}),void 0===p[t]?(p[t]=m,h.push({}),l.forEach(function(t){h[m][t]=u[t].partialField.data[e]}),s.forEach(function(t){h[m][t]=[u[t].partialField.data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].partialField.data[e])})});var y={},g=function g(){return e.detachedRoot()};return h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=i[n](e[n],g,y)})}),r?(r.__calculateFieldspace(),v=r):v=new yn(h,d,{name:c}),v}.apply(void 0,[this,e,t]);return Ft(this,i,U.GROUPBY,{fieldsArr:e,groupByString:r,defaultReducer:_e.defaultReducer()},t),n.saveChild?i.setParent(this):i.setParent(null),i}},{key:"sort",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{saveChild:!1},n=this.getData({order:"row",sort:e}),a=[n.schema.map(function(e){return e.name})].concat(n.data),i=new this.constructor(a,n.schema,{dataFormat:"DSVArr"});return Ft(this,i,U.SORT,t,e),t.saveChild?i.setParent(this):i.setParent(null),i}},{key:"serialize",value:function value(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:","},t);var n=this.getFieldspace().fields,r=n.map(function(e){return e.formattedData()}),a=r[0].length,i=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(i=[],u=0;u=0&&(n.fields[o]=e)}else n.fields.push(e),r.forEach(function(t,n){t[e.name()]=new k(a[n],i[n],e)});return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t,n){var r=this;e=Vt(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var a=this.getFieldsConfig(),i=t.slice(0,t.length-1),o=t[t.length-1];if(a[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in datamodel");var u=i.map(function(e){var t=a[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),c=this.clone(n.saveChild),f=c.getFieldspace().fields,l=u.map(function(e){return f[e]}),s={},d=function d(){return r.detachedRoot()},p=[];T(c._rowDiffset,function(e){var t=l.map(function(t){return t.partialField.data[e]});p[e]=o.apply(void 0,an(t).concat([e,d,s]))});var h=tt([p],[e],[e.name]),v=nn(h,1)[0];return c.addField(v),Ft(this,c,U.CAL_VAR,{config:e,fields:i},o),c}},{key:"propagate",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=t.isMutableAction,i=t.sourceId,o=t.payload,u=function Kt(e){for(;e._parent;)e=e._parent;return e}(this),c=u._propagationNameSpace,l={groupByModel:function zt(e){for(;e._parent&&e._derivation.find(function(e){return e.op!==U.GROUPBY});)e=e._parent;return e}(this),model:u};return n&&function Zt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,a=t.isMutableAction,i=t.criteria,o=t.action+"-"+t.sourceId;r=a?e.mutableActions:e.immutableActions,null===i?delete r[o]:r[o]={model:n,config:t}}(c,t,this),Xt(e,l,{propagationNameSpace:c,sourceId:i},Object.assign({payload:o},t)),a&&function qt(e,t,n){var r=e.immutableActions;for(var a in r){var i=r[a].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(i,n.config);if(i.sourceId!==o&&u){var c=i.criteria;Xt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},i)}}}(c,l,{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,t){var n=this.getFieldsConfig();if(!n[e])throw new Error("Field "+e+" doesn't exist");var r=t.name||e+"_binned";if(n[r])throw new Error("Field "+r+" already exists");var a=function(e,t,n){var r=n.buckets,a=n.binsCount,i=n.binSize,o=n.start,u=n.end,f=function I(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}(e.domain(),2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var d=[],p=0;p=(i=e[a=n+Math.floor((r-n)/2)]).start&&t=i.end?n=a+1:t2&&void 0!==arguments[2]?arguments[2]:function(e){return e},r=arguments[3],a=r.saveChild,i=e.getFieldspace().fieldsObj(),o=Ct(e.clone(a),n,r,e,function(){for(var e=arguments.length,n=Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments[2],r={mode:l.NORMAL,saveChild:!0},a=this.getFieldsConfig(),i=Object.keys(a),o=[[t]];return n=Object.assign({},r,n),(e=e.length?e:[[]]).forEach(function(e,n){o[n]=$t([].concat(an(e),an(t)),i,a)}),function Lt(e,t,n,r){return t.map(function(t){return Ut(e,t,n,r)})}(this,o,n,i)}}],[{key:"configureInvalidAwareTypes",value:function value(e){return M.invalidAwareVals(e)}},{key:"Reducers",get:function get(){return _e}}]),t}(),un=ye.sum,cn=ye.avg,fn=ye.min,ln=ye.max,sn=ye.first,dn=ye.last,pn=ye.count,hn=ye.std,vn={compose:function compose(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0},r=e,a=void 0,i=[];return t.forEach(function(e){r=e(r),i.push.apply(i,function Y(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t/gi),smartlabel},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(text,calculateDifference,length){if(!this._init)return!1;var size,csArr,tw,twi,cachedStyle,asymmetricDifference,maxAdvancedCacheLimit=this.options.maxCacheLimit,container=this._container,style=this.style||{},cache=this._advancedCache||(this._advancedCache={}),advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]),cacheName=text+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||""),cacheInitName=text+"init"+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||"");return htmlSplCharSpace[text]&&(text=htmlSplCharSpace[text]),calculateDifference?void 0===(asymmetricDifference=cache[cacheInitName])&&(container.innerHTML=text.repeat?text.repeat(length):Array(length+1).join(text),tw=container.offsetWidth,container.innerHTML=text,twi=container.offsetWidth,asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1),advancedCacheKey.push(cacheInitName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()]):asymmetricDifference=0,(cachedStyle=cache[cacheName])?(csArr=cachedStyle.split(","),{width:parseFloat(csArr[0],10),height:parseFloat(csArr[1],10)}):(container.innerHTML=text,size={height:container.offsetHeight,width:container.offsetWidth+asymmetricDifference},cache[cacheName]=size.width+","+size.height,advancedCacheKey.push(cacheName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()],size)},SmartLabelManager.prototype._getWidthFn=function(){var contObj=this._containerObj,container=this._container,svgText=contObj.svgText;return svgText?function(str){var bbox,width;return svgText.textContent=str,(width=(bbox=svgText.getBBox()).width-SVG_BBOX_CORRECTION)<1&&(width=bbox.width),width}:function(str){return container.innerHTML=str,container.offsetWidth}},SmartLabelManager.prototype.setStyle=function(style){return this._init?style!==this.style||this._styleNotSet?(style||(style=this.style),slLib.setLineHeight(style),this.style=style,this._containerObj=sCont=this._containerManager.get(style),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var sCont},SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){return this._init?(this._showNoEllipses=!useEllipses,this):this},SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag=!1,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?"":"...",lineHeight=this._lineHeight,context=this._context,container=this._container,sCont=this._containerObj,ellipsesWidth=sCont.ellipsesWidth,dotWidth=sCont.dotWidth,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,fastTrim=function fastTrim(str){for(var ws=/\s/,i=(str=str.replace(/^\s\s*/,"")).length;ws.test(str.charAt(i-=1)););return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:!1};if(getWidth=this._getWidthFn(),maxHeight===lineHeight&&(maxHeight*=1.2),container){if(!documentSupport.isBrowserLess){if((hasHTMLTag=slLib.xmlTagRegEx.test(text))?(container.innerHTML=text,smartLabel.oriTextWidth=oriWidth=container.offsetWidth,smartLabel.oriTextHeight=oriHeight=container.offsetHeight):(tmpText=text.replace(slLib.ltgtRegex,function(match){return"<"===match?"<":">"}),getOriSizeImproveObj=this.getOriSize(tmpText,!0),smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width,smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height),oriHeight<=maxHeight&&oriWidth<=maxWidth)return smartLabel.width=smartLabel.oriTextWidth=oriWidth,smartLabel.height=smartLabel.oriTextHeight=oriHeight,smartLabel;if(lineHeight>maxHeight)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=0,smartLabel.height=smartLabel.oriTextHeight=0,smartLabel}if(text=fastTrim(text).replace(/(\s+)/g," "),maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth,!hasHTMLTag){if(len=(oriTextArr=text.split("")).length,trimStr="",tempArr=[],tempChar=oriTextArr[0],this._cache[tempChar]?minWidth=this._cache[tempChar].width:(minWidth=getWidth(tempChar),this._cache[tempChar]={width:minWidth}),maxWidthWithEll>minWidth)i=(tempArr=text.substr(0,slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split("")).length;else{if(minWidth>maxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;ellipsesStr&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr=""))}if(strWidth=getWidth(tempArr.join("")),strHeight=this._lineHeight,noWrap){for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth))return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=getWidth(smartLabel.text),smartLabel.height=this._lineHeight,smartLabel;return smartLabel.text=tempArr.join(""),smartLabel.width=strWidth,smartLabel.height=this._lineHeight,smartLabel}for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth)){if(lastSpace=text.substr(0,tempArr.length).lastIndexOf(" "),lastDash=text.substr(0,tempArr.length).lastIndexOf("-"),lastSpace>lastIndexBroken?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastSpace,1,"
"),lastIndexBroken=lastSpace,newCharIndex=lastSpace+1):lastDash>lastIndexBroken?(lastDash===tempArr.length-1?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"
-")):(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"-
")),lastIndexBroken=lastDash,newCharIndex=lastDash+1):(tempArr.splice(tempArr.length-1,1,"
"+oriTextArr[i]),lastLineBreak=tempArr.length-2,strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join("")),lastIndexBroken=lastLineBreak,newCharIndex=i),(strHeight+=this._lineHeight)>maxHeight)return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=maxWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel;maxStrWidth=max(maxStrWidth,strWidth),trimStr=null,nearestChar=slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this),strWidth=getWidth(text.substr(newCharIndex,nearestChar||1)),tempArr.length)/g,'$1'),container.innerHTML=text,x=0,y=(spanArr=container[documentSupport.childRetriverFn](documentSupport.childRetriverString)).length;xmaxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;if(minWidth>maxWidthWithEll&&!this._showNoEllipses&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr="")),initialLeft=characterArr[0].elem.offsetLeft,initialTop=characterArr[0].elem.offsetTop,noWrap)for(;imaxWidthWithEll&&(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),container.offsetWidth>maxWidth&&(removeFromIndex=i,i=len));else for(;imaxWidthWithEll?(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),elemRightMostPoint>maxWidth&&(lastSpace=characterArr[i].spaceIdx,lastDash=characterArr[i].dashIdx,lastSpace>lastIndexBroken?(characterArr[lastSpace].elem.innerHTML="
",lastIndexBroken=lastSpace):lastDash>lastIndexBroken?(characterArr[lastDash].elem.innerHTML=lastDash===i?"
-":"-
",lastIndexBroken=lastDash):elem.parentNode.insertBefore(lastBR=doc.createElement("br"),elem),elem.offsetHeight+elem.offsetTop>maxHeight?(lastBR?lastBR.parentNode.removeChild(lastBR):lastIndexBroken===lastDash?characterArr[lastDash].elem.innerHTML="-":characterArr[lastSpace].elem.innerHTML=" ",removeFromIndex=i,i=len):removeFromIndexForEllipses=null)):elemLowestPoint>maxHeight&&(removeFromIndex=i,i=len);if(removeFromIndex=removeFromIndexForEllipses;i-=1)(elem=characterArr[i].elem).parentNode.removeChild(elem);for(;i>=0;i-=1)elem=characterArr[i].elem,slLib.classNameBrReg.test(elem.className)?elem.parentNode.removeChild(elem):i=0}return smartLabel.text=container.innerHTML.replace(slLib.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),smartLabel.isTruncated&&(smartLabel.text+=ellipsesStr,smartLabel.tooltext=toolText),smartLabel.height=container.offsetHeight,smartLabel.width=container.offsetWidth,smartLabel}return smartLabel.error=new Error("Body Tag Missing!"),smartLabel},SmartLabelManager.prototype.getOriSize=function(text,detailedCalculationFlag){if(!this._init)return!1;var textArr,letter,lSize,i,l,cumulativeSize=0,height=0,indiSizeStore={};if(!detailedCalculationFlag)return this._calCharDimWithCache(text);for(i=0,l=(textArr=text.split("")).length;i]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+classNameWithTag+"[^\\>]{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 childRetriverFn,childRetriverString,noClassTesting;return doc.getElementsByClassName?(childRetriverFn="getElementsByClassName",childRetriverString=classNameWithTag,noClassTesting=!0):(childRetriverFn="getElementsByTagName",childRetriverString="span",noClassTesting=!1),{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(userAgent),isWebKit:new RegExp(" AppleWebKit/").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild)return containerParent.appendChild(container=doc.createElement("DIV")),container.className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),container}else if((body=doc.getElementsByTagName("body")[0])&&body.appendChild)return(container=doc.createElement("DIV")).className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),1,body.appendChild(container),container},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length)return 0;var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;if(difference=maxWidth,charLen=ceil(maxWidth/avgWidth),oriWidthtext.length&&(difference=maxWidth-oriWidth,charLen=text.length);difference>0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}for(;difference<0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}return charLen},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize=styleObj.fontSize||"12px";return styleObj.lineHeight=styleObj.lineHeight||styleObj["line-height"]||1.2*parseInt(fSize,10)+"px",styleObj}}}};exports.default=lib,module.exports=exports.default},function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";r.r(t);var n=function(){function e(e,t){for(var r=0;r2?(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 value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"next",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(n,P(e)),o}},{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,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 value(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i5?maxContainers:5)<20?maxContainers:20,this.maxContainers=maxContainers,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=parentContainer,isBrowserLess&&((svg=doc.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),svg.setAttributeNS("http://www.w3.org/2000/svg","height","0"),svg.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=svg,this.rootNode.appendChild(svg))}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr="";for(key in slLib.supportedStyle)void 0!==style[key]&&(keyStr+=slLib.supportedStyle[key]+":"+style[key]+";");if(!keyStr)return!1;if(containerObj=containers[keyStr])this.first!==containerObj&&(containerObj.prev&&(containerObj.prev.next=containerObj.next),containerObj.next&&(containerObj.next.prev=containerObj.prev),containerObj.next=this.first,containerObj.next.prev=containerObj,this.last===containerObj&&(this.last=containerObj.prev),containerObj.prev=null,this.first=containerObj);else{if(len>=max)for(diff=len-max+1;diff--;)this.removeContainer(this.last);containerObj=this.addContainer(keyStr)}return containerObj},ContainerManager.prototype.addContainer=function(keyStr){var node,container;return this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}},container.next=this.first,container.next&&(container.next.prev=container),this.first=container,this.last||(this.last=container),this.length+=1,node=container.node=doc.createElement("div"),this.rootNode.appendChild(node),documentSupport.isIE&&!documentSupport.hasSVG?node.style.setAttribute("cssText",keyStr):node.setAttribute("style",keyStr),node.setAttribute("aria-hidden","true"),node.setAttribute("role","presentation"),node.style.display="inline-block",node.innerHTML=slLib.testStrAvg,container.lineHeight=node.offsetHeight,container.avgCharWidth=node.offsetWidth/3,documentSupport.isBrowserLess?((node=container.svgText=doc.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",keyStr),this.svgRoot.appendChild(node),node.textContent=slLib.testStrAvg,container.lineHeight=node.getBBox().height,container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3,node.textContent="...",container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION,node.textContent=".",container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION):(node.innerHTML="...",container.ellipsesWidth=node.offsetWidth,node.innerHTML=".",container.dotWidth=node.offsetWidth,node.innerHTML=""),container},ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;keyStr&&this.length&&cObj&&(this.length-=1,cObj.prev&&(cObj.prev.next=cObj.next),cObj.next&&(cObj.next.prev=cObj.prev),this.first===cObj&&(this.first=cObj.next),this.last===cObj&&(this.last=cObj.prev),cObj.node.parentNode.removeChild(cObj.node),delete this.containers[keyStr])},ContainerManager.prototype.dispose=function(){var key,containers=this.containers;for(key in this.maxContainers=null,containers)this.removeContainer(containers[key]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},module.exports=ContainerManager},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var scales_namespaceObject={};__webpack_require__.r(scales_namespaceObject),__webpack_require__.d(scales_namespaceObject,"scaleLinear",function(){return linear_linear}),__webpack_require__.d(scales_namespaceObject,"scaleThreshold",function(){return threshold_threshold}),__webpack_require__.d(scales_namespaceObject,"scaleLog",function(){return log}),__webpack_require__.d(scales_namespaceObject,"scalePow",function(){return pow}),__webpack_require__.d(scales_namespaceObject,"scaleIdentity",function(){return identity_identity}),__webpack_require__.d(scales_namespaceObject,"scaleOrdinal",function(){return ordinal}),__webpack_require__.d(scales_namespaceObject,"scaleSequential",function(){return sequential}),__webpack_require__.d(scales_namespaceObject,"scaleQuantize",function(){return quantize_quantize}),__webpack_require__.d(scales_namespaceObject,"scaleQuantile",function(){return quantile_quantile}),__webpack_require__.d(scales_namespaceObject,"schemeCategory10",function(){return category10}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20",function(){return category20}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20b",function(){return category20b}),__webpack_require__.d(scales_namespaceObject,"scaleBand",function(){return band}),__webpack_require__.d(scales_namespaceObject,"scaleTime",function(){return src_time});var color_schemes_namespaceObject={};__webpack_require__.r(color_schemes_namespaceObject),__webpack_require__.d(color_schemes_namespaceObject,"schemeDark2",function(){return Dark2}),__webpack_require__.d(color_schemes_namespaceObject,"schemePaired",function(){return Paired}),__webpack_require__.d(color_schemes_namespaceObject,"schemeAccent",function(){return Accent}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel1",function(){return Pastel1}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel2",function(){return Pastel2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet1",function(){return Set1}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet2",function(){return Set2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet3",function(){return Set3}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBlues",function(){return Blues_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBrBG",function(){return BrBG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePRGn",function(){return PRGn_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePiYG",function(){return PiYG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBrBG",function(){return BrBG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePRGn",function(){return PRGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePiYG",function(){return PiYG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuOr",function(){return PuOr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdBu",function(){return RdBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdGy",function(){return RdGy}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlBu",function(){return RdYlBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlGn",function(){return RdYlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateSpectral",function(){return Spectral}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBlues",function(){return Blues}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreens",function(){return Greens}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreys",function(){return Greys}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOranges",function(){return Oranges}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePurples",function(){return Purples}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateReds",function(){return Reds}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateViridis",function(){return sequential_multi_viridis}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateInferno",function(){return viridis_inferno}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateMagma",function(){return viridis_magma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePlasma",function(){return viridis_plasma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateWarm",function(){return rainbow_warm}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCool",function(){return rainbow_cool}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCubehelixDefault",function(){return sequential_multi_cubehelix}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuGn",function(){return BuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuPu",function(){return BuPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGnBu",function(){return GnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOrRd",function(){return OrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBuGn",function(){return PuBuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBu",function(){return PuBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuRd",function(){return PuRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdPu",function(){return RdPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGnBu",function(){return YlGnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGn",function(){return YlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrBr",function(){return YlOrBr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrRd",function(){return YlOrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRainbow",function(){return sequential_multi_rainbow});var namespace_namespaceObject={};__webpack_require__.r(namespace_namespaceObject),__webpack_require__.d(namespace_namespaceObject,"UNIT_GLOBAL_NAMESPACE",function(){return UNIT_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"UNIT_LOCAL_NAMESPACE",function(){return UNIT_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_LOCAL_NAMESPACE",function(){return LAYER_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_GLOBAL_NAMESPACE",function(){return LAYER_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_GLOBAL_NAMESPACE",function(){return GROUP_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_LOCAL_NAMESPACE",function(){return GROUP_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_LOCAL_NAMESPACE",function(){return CANVAS_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_GLOBAL_NAMESPACE",function(){return CANVAS_GLOBAL_NAMESPACE});var actions_namespaceObject={};__webpack_require__.r(actions_namespaceObject),__webpack_require__.d(actions_namespaceObject,"DRAG",function(){return DRAG}),__webpack_require__.d(actions_namespaceObject,"HOVER",function(){return HOVER}),__webpack_require__.d(actions_namespaceObject,"SELECTIONDRAG",function(){return SELECTIONDRAG}),__webpack_require__.d(actions_namespaceObject,"CLICK",function(){return CLICK}),__webpack_require__.d(actions_namespaceObject,"LONGTOUCH",function(){return LONGTOUCH}),__webpack_require__.d(actions_namespaceObject,"TOUCHDRAG",function(){return TOUCHDRAG}),__webpack_require__.d(actions_namespaceObject,"ALL_ACTIONS",function(){return ALL_ACTIONS});var enums_selection_namespaceObject={};__webpack_require__.r(enums_selection_namespaceObject),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_ENTRY",function(){return SELECTION_NEW_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_EXIT",function(){return SELECTION_NEW_EXIT}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NULL",function(){return SELECTION_NULL}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_ENTRY",function(){return SELECTION_OLD_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_EXIT",function(){return SELECTION_OLD_EXIT});var behaviours_namespaceObject={};__webpack_require__.r(behaviours_namespaceObject),__webpack_require__.d(behaviours_namespaceObject,"BRUSH",function(){return BRUSH}),__webpack_require__.d(behaviours_namespaceObject,"HIGHLIGHT",function(){return HIGHLIGHT}),__webpack_require__.d(behaviours_namespaceObject,"TOOLTIP",function(){return behaviours_TOOLTIP}),__webpack_require__.d(behaviours_namespaceObject,"FILTER",function(){return FILTER}),__webpack_require__.d(behaviours_namespaceObject,"SELECT",function(){return SELECT});var behavioural_namespaceObject={};__webpack_require__.r(behavioural_namespaceObject),__webpack_require__.d(behavioural_namespaceObject,"HighlightBeahviour",function(){return highlight_HighlightBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"BrushBehaviour",function(){return brush_BrushBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"FilterBehaviour",function(){return filter_FilterBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"SelectBehaviour",function(){return select_SelectBehaviour});var side_effects_namespaceObject={};__webpack_require__.r(side_effects_namespaceObject),__webpack_require__.d(side_effects_namespaceObject,"ANCHORS",function(){return side_effects_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"BRUSH_ANCHORS",function(){return side_effects_BRUSH_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"PERSISTENT_ANCHORS",function(){return side_effects_PERSISTENT_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"FILTER",function(){return side_effects_FILTER}),__webpack_require__.d(side_effects_namespaceObject,"HIGHLIGHTER",function(){return side_effects_HIGHLIGHTER}),__webpack_require__.d(side_effects_namespaceObject,"CROSSLINE",function(){return CROSSLINE}),__webpack_require__.d(side_effects_namespaceObject,"TOOLTIP",function(){return side_effects_TOOLTIP});var src_side_effects_namespaceObject={};__webpack_require__.r(src_side_effects_namespaceObject),__webpack_require__.d(src_side_effects_namespaceObject,"SelectionBox",function(){return selection_box}),__webpack_require__.d(src_side_effects_namespaceObject,"Tooltip",function(){return side_effects_tooltip_Tooltip}),__webpack_require__.d(src_side_effects_namespaceObject,"Crossline",function(){return crossline_Crossline}),__webpack_require__.d(src_side_effects_namespaceObject,"PlotHighlighter",function(){return plot_highlighter_PlotHighlighter}),__webpack_require__.d(src_side_effects_namespaceObject,"FilterEffect",function(){return FilterEffect}),__webpack_require__.d(src_side_effects_namespaceObject,"PersistentAnchors",function(){return persistent_anchors_PersistentAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"BrushAnchors",function(){return brush_anchors_BrushAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"AnchorEffect",function(){return anchors_AnchorEffect});var axis_orientation_namespaceObject={};__webpack_require__.r(axis_orientation_namespaceObject),__webpack_require__.d(axis_orientation_namespaceObject,"BOTTOM",function(){return axis_orientation_BOTTOM}),__webpack_require__.d(axis_orientation_namespaceObject,"TOP",function(){return axis_orientation_TOP}),__webpack_require__.d(axis_orientation_namespaceObject,"LEFT",function(){return axis_orientation_LEFT}),__webpack_require__.d(axis_orientation_namespaceObject,"RIGHT",function(){return axis_orientation_RIGHT}),__webpack_require__.d(axis_orientation_namespaceObject,"axisOrientationMap",function(){return axisOrientationMap});var scale_type_namespaceObject={};__webpack_require__.r(scale_type_namespaceObject),__webpack_require__.d(scale_type_namespaceObject,"LINEAR",function(){return LINEAR}),__webpack_require__.d(scale_type_namespaceObject,"BAND",function(){return BAND}),__webpack_require__.d(scale_type_namespaceObject,"TIME",function(){return TIME}),__webpack_require__.d(scale_type_namespaceObject,"COLOR",function(){return scale_type_COLOR}),__webpack_require__.d(scale_type_namespaceObject,"ORDINAL",function(){return ORDINAL}),__webpack_require__.d(scale_type_namespaceObject,"QUANTIZE",function(){return QUANTIZE}),__webpack_require__.d(scale_type_namespaceObject,"QUANTILE",function(){return QUANTILE}),__webpack_require__.d(scale_type_namespaceObject,"LOG",function(){return LOG}),__webpack_require__.d(scale_type_namespaceObject,"POW",function(){return POW}),__webpack_require__.d(scale_type_namespaceObject,"IDENTITY",function(){return scale_type_IDENTITY}),__webpack_require__.d(scale_type_namespaceObject,"SEQUENTIAL",function(){return SEQUENTIAL}),__webpack_require__.d(scale_type_namespaceObject,"THRESHOLD",function(){return THRESHOLD});var layer_types_namespaceObject={};__webpack_require__.r(layer_types_namespaceObject),__webpack_require__.d(layer_types_namespaceObject,"AREA_LAYER",function(){return layer_types_AREA_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"ARC_LAYER",function(){return layer_types_ARC_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"LINE_LAYER",function(){return layer_types_LINE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TEXT_LAYER",function(){return layer_types_TEXT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"POINT_LAYER",function(){return layer_types_POINT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BAR_LAYER",function(){return layer_types_BAR_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TICK_LAYER",function(){return layer_types_TICK_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"SIMPLE_LAYER",function(){return layer_types_SIMPLE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BASE_LAYER",function(){return layer_types_BASE_LAYER});var firebolt_behavioural_namespaceObject={};__webpack_require__.r(firebolt_behavioural_namespaceObject),__webpack_require__.d(firebolt_behavioural_namespaceObject,"SelectBehaviour",function(){return behavioural_select_SelectBehaviour});var firebolt_side_effects_namespaceObject={};__webpack_require__.r(firebolt_side_effects_namespaceObject),__webpack_require__.d(firebolt_side_effects_namespaceObject,"SelectionBox",function(){return side_effects_selection_box}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendHighlighter",function(){return legend_highlighter_LegendHighlighter});var operators_namespaceObject={};__webpack_require__.r(operators_namespaceObject),__webpack_require__.d(operators_namespaceObject,"share",function(){return operators_share}),__webpack_require__.d(operators_namespaceObject,"html",function(){return operators_html});var dist_datamodel=__webpack_require__(0),datamodel_default=__webpack_require__.n(dist_datamodel),ascending=function(a,b){return ab?1:a>=b?0:NaN},bisector=function(compare){return 1===compare.length&&(compare=function ascendingComparator(f){return function(d,x){return ascending(f(d),x)}}(compare)),{left:function left(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)<0?lo=mid+1:hi=mid}return lo},right:function right(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)>0?hi=mid:lo=mid+1}return lo}}};var ascendingBisect=bisector(ascending),bisectRight=ascendingBisect.right,bisect=(ascendingBisect.left,bisectRight);var number=function(x){return null===x?NaN:+x},array_array=Array.prototype,src_range=(array_array.slice,array_array.map,function(start,stop,step){start=+start,stop=+stop,step=(n=arguments.length)<2?(stop=start,start=0,1):n<3?1:+step;for(var i=-1,n=0|Math.max(0,Math.ceil((stop-start)/step)),range=new Array(n);++i0)return[start];if((reverse=stop0)for(start=Math.ceil(start/step),stop=Math.floor(stop/step),ticks=new Array(n=Math.ceil(stop-start+1));++i=0?(error>=e10?10:error>=e5?5:error>=e2?2:1)*Math.pow(10,power):-Math.pow(10,-power)/(error>=e10?10:error>=e5?5:error>=e2?2:1)}function tickStep(start,stop,count){var step0=Math.abs(stop-start)/Math.max(0,count),step1=Math.pow(10,Math.floor(Math.log(step0)/Math.LN10)),error=step0/step1;return error>=e10?step1*=10:error>=e5?step1*=5:error>=e2&&(step1*=2),stop=1)return+valueof(values[n-1],n-1,values);var n,i=(n-1)*p,i0=Math.floor(i),value0=+valueof(values[i0],i0,values);return value0+(+valueof(values[i0+1],i0+1,values)-value0)*(i-i0)}};function map_Map(){}function map_map(object,f){var map=new map_Map;if(object instanceof map_Map)object.each(function(value,key){map.set(key,value)});else if(Array.isArray(object)){var o,i=-1,n=object.length;if(null==f)for(;++i=keys.length)return null!=_sortValues&&array.sort(_sortValues),null!=_rollup?_rollup(array):array;for(var keyValue,value,values,i=-1,n=array.length,key=keys[depth++],valuesByKey=src_map(),result=createResult();++ikeys.length)return map;var array,sortKey=_sortKeys[depth-1];return null!=_rollup&&depth>=keys.length?array=map.entries():(array=[],map.each(function(v,k){array.push({key:k,values:_entries(v,depth)})})),null!=sortKey?array.sort(function(a,b){return sortKey(a.key,b.key)}):array}(apply(array,0,createMap,setMap),0)},key:function key(d){return keys.push(d),nest},sortKeys:function sortKeys(order){return _sortKeys[keys.length-1]=order,nest},sortValues:function sortValues(order){return _sortValues=order,nest},rollup:function rollup(f){return _rollup=f,nest}}};function createObject(){return{}}function setObject(object,key,value){object[key]=value}function createMap(){return src_map()}function setMap(map,key,value){map.set(key,value)}function set_Set(){}var proto=src_map.prototype;function set_set(object,f){var set=new set_Set;if(object instanceof set_Set)object.each(function(value){set.add(value)});else if(object){var i=-1,n=object.length;if(null==f)for(;++i1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo)),hiIndex=getClosestIndexOf(values,hi),b=lo===hi?a:Math.max(a,hiIndex-1),reverse&&(t=a,a=n-b,b=n-t),a>b?void 0:domain().slice(a,b+1)},scale.invert=function(r0,r1){var a,t,lo=+r0,hi=arguments.length>1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo,"left")),domain()[reverse?n-a:a]},rescale()}function getClosestIndexOf(arr,value,side){for(var highVal,mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1:high}var define=function(constructor,factory,prototype){constructor.prototype=factory.prototype=prototype,prototype.constructor=constructor};function extend(parent,definition){var prototype=Object.create(parent.prototype);for(var key in definition)prototype[key]=definition[key];return prototype}function Color(){}var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex3=/^#([0-9a-f]{3})$/,reHex6=/^#([0-9a-f]{6})$/,reRgbInteger=new RegExp("^rgb\\("+[reI,reI,reI]+"\\)$"),reRgbPercent=new RegExp("^rgb\\("+[reP,reP,reP]+"\\)$"),reRgbaInteger=new RegExp("^rgba\\("+[reI,reI,reI,reN]+"\\)$"),reRgbaPercent=new RegExp("^rgba\\("+[reP,reP,reP,reN]+"\\)$"),reHslPercent=new RegExp("^hsl\\("+[reN,reP,reP]+"\\)$"),reHslaPercent=new RegExp("^hsla\\("+[reN,reP,reP,reN]+"\\)$"),named={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_formatHex(){return this.rgb().formatHex()}function color_formatRgb(){return this.rgb().formatRgb()}function color_color(format){var m;return format=(format+"").trim().toLowerCase(),(m=reHex3.exec(format))?new Rgb((m=parseInt(m[1],16))>>8&15|m>>4&240,m>>4&15|240&m,(15&m)<<4|15&m,1):(m=reHex6.exec(format))?rgbn(parseInt(m[1],16)):(m=reRgbInteger.exec(format))?new Rgb(m[1],m[2],m[3],1):(m=reRgbPercent.exec(format))?new Rgb(255*m[1]/100,255*m[2]/100,255*m[3]/100,1):(m=reRgbaInteger.exec(format))?rgba(m[1],m[2],m[3],m[4]):(m=reRgbaPercent.exec(format))?rgba(255*m[1]/100,255*m[2]/100,255*m[3]/100,m[4]):(m=reHslPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,1):(m=reHslaPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,m[4]):named.hasOwnProperty(format)?rgbn(named[format]):"transparent"===format?new Rgb(NaN,NaN,NaN,0):null}function rgbn(n){return new Rgb(n>>16&255,n>>8&255,255&n,1)}function rgba(r,g,b,a){return a<=0&&(r=g=b=NaN),new Rgb(r,g,b,a)}function rgbConvert(o){return o instanceof Color||(o=color_color(o)),o?new Rgb((o=o.rgb()).r,o.g,o.b,o.opacity):new Rgb}function color_rgb(r,g,b,opacity){return 1===arguments.length?rgbConvert(r):new Rgb(r,g,b,null==opacity?1:opacity)}function Rgb(r,g,b,opacity){this.r=+r,this.g=+g,this.b=+b,this.opacity=+opacity}function rgb_formatHex(){return"#"+hex(this.r)+hex(this.g)+hex(this.b)}function rgb_formatRgb(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"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===a?")":", "+a+")")}function hex(value){return((value=Math.max(0,Math.min(255,Math.round(value)||0)))<16?"0":"")+value.toString(16)}function hsla(h,s,l,a){return a<=0?h=s=l=NaN:l<=0||l>=1?h=s=NaN:s<=0&&(h=NaN),new Hsl(h,s,l,a)}function hslConvert(o){if(o instanceof Hsl)return new Hsl(o.h,o.s,o.l,o.opacity);if(o instanceof Color||(o=color_color(o)),!o)return new Hsl;if(o instanceof Hsl)return o;var r=(o=o.rgb()).r/255,g=o.g/255,b=o.b/255,min=Math.min(r,g,b),max=Math.max(r,g,b),h=NaN,s=max-min,l=(max+min)/2;return s?(h=r===max?(g-b)/s+6*(g0&&l<1?0:h,new Hsl(h,s,l,o.opacity)}function hsl(h,s,l,opacity){return 1===arguments.length?hslConvert(h):new Hsl(h,s,l,null==opacity?1:opacity)}function Hsl(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function hsl2rgb(h,m1,m2){return 255*(h<60?m1+(m2-m1)*h/60:h<180?m2:h<240?m1+(m2-m1)*(240-h)/60:m1)}define(Color,color_color,{copy:function copy(channels){return Object.assign(new this.constructor,this,channels)},displayable:function displayable(){return this.rgb().displayable()},hex:color_formatHex,formatHex:color_formatHex,formatHsl:function color_formatHsl(){return hslConvert(this).formatHsl()},formatRgb:color_formatRgb,toString:color_formatRgb}),define(Rgb,color_rgb,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:rgb_formatHex,formatHex:rgb_formatHex,formatRgb:rgb_formatRgb,toString:rgb_formatRgb})),define(Hsl,hsl,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=this.h%360+360*(this.h<0),s=isNaN(h)||isNaN(this.s)?0:this.s,l=this.l,m2=l+(l<.5?l:1-l)*s,m1=2*l-m2;return new Rgb(hsl2rgb(h>=240?h-240:h+120,m1,m2),hsl2rgb(h,m1,m2),hsl2rgb(h<120?h+240:h-120,m1,m2),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},formatHsl:function formatHsl(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===a?")":", "+a+")")}}));var deg2rad=Math.PI/180,rad2deg=180/Math.PI,Xn=.96422,Yn=1,Zn=.82521,lab_t0=4/29,lab_t1=6/29,t2=3*lab_t1*lab_t1,t3=lab_t1*lab_t1*lab_t1;function labConvert(o){if(o instanceof Lab)return new Lab(o.l,o.a,o.b,o.opacity);if(o instanceof Hcl)return hcl2lab(o);o instanceof Rgb||(o=rgbConvert(o));var x,z,r=rgb2lrgb(o.r),g=rgb2lrgb(o.g),b=rgb2lrgb(o.b),y=xyz2lab((.2225045*r+.7168786*g+.0606169*b)/Yn);return r===g&&g===b?x=z=y:(x=xyz2lab((.4360747*r+.3850649*g+.1430804*b)/Xn),z=xyz2lab((.0139322*r+.0971045*g+.7141733*b)/Zn)),new Lab(116*y-16,500*(x-y),200*(y-z),o.opacity)}function lab(l,a,b,opacity){return 1===arguments.length?labConvert(l):new Lab(l,a,b,null==opacity?1:opacity)}function Lab(l,a,b,opacity){this.l=+l,this.a=+a,this.b=+b,this.opacity=+opacity}function xyz2lab(t){return t>t3?Math.pow(t,1/3):t/t2+lab_t0}function lab2xyz(t){return t>lab_t1?t*t*t:t2*(t-lab_t0)}function lrgb2rgb(x){return 255*(x<=.0031308?12.92*x:1.055*Math.pow(x,1/2.4)-.055)}function rgb2lrgb(x){return(x/=255)<=.04045?x/12.92:Math.pow((x+.055)/1.055,2.4)}function hclConvert(o){if(o instanceof Hcl)return new Hcl(o.h,o.c,o.l,o.opacity);if(o instanceof Lab||(o=labConvert(o)),0===o.a&&0===o.b)return new Hcl(NaN,0180||d<-180?d-360*Math.round(d/360):d):src_constant(isNaN(a)?b:a)}function gamma(y){return 1==(y=+y)?nogamma:function(a,b){return b-a?function exponential(a,b,y){return a=Math.pow(a,y),b=Math.pow(b,y)-a,y=1/y,function(t){return Math.pow(a+t*b,y)}}(a,b,y):src_constant(isNaN(a)?b:a)}}function nogamma(a,b){var d=b-a;return d?linear(a,d):src_constant(isNaN(a)?b:a)}var src_rgb=function rgbGamma(y){var color=gamma(y);function rgb(start,end){var r=color((start=color_rgb(start)).r,(end=color_rgb(end)).r),g=color(start.g,end.g),b=color(start.b,end.b),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.r=r(t),start.g=g(t),start.b=b(t),start.opacity=opacity(t),start+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(spline){return function(colors){var i,color,n=colors.length,r=new Array(n),g=new Array(n),b=new Array(n);for(i=0;i=1?(t=1,n-1):Math.floor(t*n),v1=values[i],v2=values[i+1],v0=i>0?values[i-1]:2*v1-v2,v3=ibi&&(bs=b.slice(bi,bs),s[i]?s[i]+=bs:s[++i]=bs),(am=am[0])===(bm=bm[0])?s[i]?s[i]+=bm:s[++i]=bm:(s[++i]=null,q.push({i:i,x:src_number(am,bm)})),bi=reB.lastIndex;return bi180?b+=360:b-a>180&&(a+=360),q.push({i:s.push(pop(s)+"rotate(",null,degParen)-2,x:src_number(a,b)})):b&&s.push(pop(s)+"rotate("+b+degParen)}(a.rotate,b.rotate,s,q),function skewX(a,b,s,q){a!==b?q.push({i:s.push(pop(s)+"skewX(",null,degParen)-2,x:src_number(a,b)}):b&&s.push(pop(s)+"skewX("+b+degParen)}(a.skewX,b.skewX,s,q),function scale(xa,ya,xb,yb,s,q){if(xa!==xb||ya!==yb){var i=s.push(pop(s)+"scale(",null,",",null,")");q.push({i:i-4,x:src_number(xa,xb)},{i:i-2,x:src_number(ya,yb)})}else 1===xb&&1===yb||s.push(pop(s)+"scale("+xb+","+yb+")")}(a.scaleX,a.scaleY,b.scaleX,b.scaleY,s,q),a=b=null,function(t){for(var o,i=-1,n=q.length;++i2?polymap:bimap,output=input=null,scale}function scale(x){return(output||(output=piecewise(domain,range,clamp?function deinterpolateClamp(deinterpolate){return function(a,b){var d=deinterpolate(a=+a,b=+b);return function(x){return x<=a?0:x>=b?1:d(x)}}}(deinterpolate):deinterpolate,interpolate)))(+x)}return scale.invert=function(y){return(input||(input=piecewise(range,domain,deinterpolateLinear,clamp?function reinterpolateClamp(reinterpolate){return function(a,b){var r=reinterpolate(a=+a,b=+b);return function(t){return t<=0?a:t>=1?b:r(t)}}}(reinterpolate):reinterpolate)))(+y)},scale.domain=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),rescale()):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),rescale()):range.slice()},scale.rangeRound=function(_){return range=array_slice.call(_),interpolate=src_round,rescale()},scale.clamp=function(_){return arguments.length?(clamp=!!_,rescale()):clamp},scale.interpolate=function(_){return arguments.length?(interpolate=_,rescale()):interpolate},rescale()}var formatDecimal=function(x,p){if((i=(x=p?x.toExponential(p-1):x.toExponential()).indexOf("e"))<0)return null;var i,coefficient=x.slice(0,i);return[coefficient.length>1?coefficient[0]+coefficient.slice(2):coefficient,+x.slice(i+1)]},src_exponent=function(x){return(x=formatDecimal(Math.abs(x)))?x[1]:NaN},re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(specifier){return new FormatSpecifier(specifier)}function FormatSpecifier(specifier){if(!(match=re.exec(specifier)))throw new Error("invalid format: "+specifier);var match;this.fill=match[1]||" ",this.align=match[2]||">",this.sign=match[3]||"-",this.symbol=match[4]||"",this.zero=!!match[5],this.width=match[6]&&+match[6],this.comma=!!match[7],this.precision=match[8]&&+match[8].slice(1),this.trim=!!match[9],this.type=match[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 prefixExponent,defaultLocale_locale,defaultLocale_format,defaultLocale_formatPrefix,formatTrim=function(s){out:for(var i1,n=s.length,i=1,i0=-1;i0){if(!+s[i])break out;i0=0}}return i0>0?s.slice(0,i0)+s.slice(i1+1):s},formatRounded=function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1];return exponent<0?"0."+new Array(-exponent).join("0")+coefficient:coefficient.length>exponent+1?coefficient.slice(0,exponent+1)+"."+coefficient.slice(exponent+1):coefficient+new Array(exponent-coefficient.length+2).join("0")},formatTypes={"%":function _(x,p){return(100*x).toFixed(p)},b:function b(x){return Math.round(x).toString(2)},c:function c(x){return x+""},d:function d(x){return Math.round(x).toString(10)},e:function e(x,p){return x.toExponential(p)},f:function f(x,p){return x.toFixed(p)},g:function g(x,p){return x.toPrecision(p)},o:function o(x){return Math.round(x).toString(8)},p:function p(x,_p){return formatRounded(100*x,_p)},r:formatRounded,s:function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1],i=exponent-(prefixExponent=3*Math.max(-8,Math.min(8,Math.floor(exponent/3))))+1,n=coefficient.length;return i===n?coefficient:i>n?coefficient+new Array(i-n+1).join("0"):i>0?coefficient.slice(0,i)+"."+coefficient.slice(i):"0."+new Array(1-i).join("0")+formatDecimal(x,Math.max(0,p+i-1))[0]},X:function X(x){return Math.round(x).toString(16).toUpperCase()},x:function x(_x){return Math.round(_x).toString(16)}},src_identity=function(x){return x},prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],src_locale=function(locale){var group=locale.grouping&&locale.thousands?function(grouping,thousands){return function(value,width){for(var i=value.length,t=[],j=0,g=grouping[0],length=0;i>0&&g>0&&(length+g+1>width&&(g=Math.max(1,width-length)),t.push(value.substring(i-=g,i+g)),!((length+=g+1)>width));)g=grouping[j=(j+1)%grouping.length];return t.reverse().join(thousands)}}(locale.grouping,locale.thousands):src_identity,currency=locale.currency,decimal=locale.decimal,numerals=locale.numerals?function(numerals){return function(value){return value.replace(/[0-9]/g,function(i){return numerals[+i]})}}(locale.numerals):src_identity,percent=locale.percent||"%";function newFormat(specifier){var fill=(specifier=formatSpecifier(specifier)).fill,align=specifier.align,sign=specifier.sign,symbol=specifier.symbol,zero=specifier.zero,width=specifier.width,comma=specifier.comma,precision=specifier.precision,trim=specifier.trim,type=specifier.type;"n"===type?(comma=!0,type="g"):formatTypes[type]||(null==precision&&(precision=12),trim=!0,type="g"),(zero||"0"===fill&&"="===align)&&(zero=!0,fill="0",align="=");var prefix="$"===symbol?currency[0]:"#"===symbol&&/[boxX]/.test(type)?"0"+type.toLowerCase():"",suffix="$"===symbol?currency[1]:/[%p]/.test(type)?percent:"",formatType=formatTypes[type],maybeSuffix=/[defgprs%]/.test(type);function format(value){var i,n,c,valuePrefix=prefix,valueSuffix=suffix;if("c"===type)valueSuffix=formatType(value)+valueSuffix,value="";else{var valueNegative=(value=+value)<0;if(value=formatType(Math.abs(value),precision),trim&&(value=formatTrim(value)),valueNegative&&0==+value&&(valueNegative=!1),valuePrefix=(valueNegative?"("===sign?sign:"-":"-"===sign||"("===sign?"":sign)+valuePrefix,valueSuffix=("s"===type?prefixes[8+prefixExponent/3]:"")+valueSuffix+(valueNegative&&"("===sign?")":""),maybeSuffix)for(i=-1,n=value.length;++i(c=value.charCodeAt(i))||c>57){valueSuffix=(46===c?decimal+value.slice(i+1):value.slice(i))+valueSuffix,value=value.slice(0,i);break}}comma&&!zero&&(value=group(value,1/0));var length=valuePrefix.length+value.length+valueSuffix.length,padding=length>1)+valuePrefix+value+valueSuffix+padding.slice(length);break;default:value=padding+valuePrefix+value+valueSuffix}return numerals(value)}return precision=null==precision?6:/[gprs]/.test(type)?Math.max(1,Math.min(21,precision)):Math.max(0,Math.min(20,precision)),format.toString=function(){return specifier+""},format}return{format:newFormat,formatPrefix:function formatPrefix(specifier,value){var f=newFormat(((specifier=formatSpecifier(specifier)).type="f",specifier)),e=3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3))),k=Math.pow(10,-e),prefix=prefixes[8+e/3];return function(value){return f(k*value)+prefix}}}};!function defaultLocale(definition){return defaultLocale_locale=src_locale(definition),defaultLocale_format=defaultLocale_locale.format,defaultLocale_formatPrefix=defaultLocale_locale.formatPrefix,defaultLocale_locale}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var src_tickFormat=function(domain,count,specifier){var precision,start=domain[0],stop=domain[domain.length-1],step=tickStep(start,stop,null==count?10:count);switch((specifier=formatSpecifier(null==specifier?",f":specifier)).type){case"s":var value=Math.max(Math.abs(start),Math.abs(stop));return null!=specifier.precision||isNaN(precision=function(step,value){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3)))-src_exponent(Math.abs(step)))}(step,value))||(specifier.precision=precision),defaultLocale_formatPrefix(specifier,value);case"":case"e":case"g":case"p":case"r":null!=specifier.precision||isNaN(precision=function(step,max){return step=Math.abs(step),max=Math.abs(max)-step,Math.max(0,src_exponent(max)-src_exponent(step))+1}(step,Math.max(Math.abs(start),Math.abs(stop))))||(specifier.precision=precision-("e"===specifier.type));break;case"f":case"%":null!=specifier.precision||isNaN(precision=function(step){return Math.max(0,-src_exponent(Math.abs(step)))}(step))||(specifier.precision=precision-2*("%"===specifier.type))}return defaultLocale_format(specifier)};function linearish(scale){var domain=scale.domain;return scale.ticks=function(count){var d=domain();return src_ticks(d[0],d[d.length-1],null==count?10:count)},scale.tickFormat=function(count,specifier){return src_tickFormat(domain(),count,specifier)},scale.nice=function(count){null==count&&(count=10);var step,d=domain(),i0=0,i1=d.length-1,start=d[i0],stop=d[i1];return stop0?step=tickIncrement(start=Math.floor(start/step)*step,stop=Math.ceil(stop/step)*step,count):step<0&&(step=tickIncrement(start=Math.ceil(start*step)/step,stop=Math.floor(stop*step)/step,count)),step>0?(d[i0]=Math.floor(start/step)*step,d[i1]=Math.ceil(stop/step)*step,domain(d)):step<0&&(d[i0]=Math.ceil(start*step)/step,d[i1]=Math.floor(stop*step)/step,domain(d)),scale},scale}function linear_linear(){var scale=continuous(deinterpolateLinear,src_number);return scale.copy=function(){return copy(scale,linear_linear())},linearish(scale)}function identity_identity(){var domain=[0,1];function scale(x){return+x}return scale.invert=scale,scale.domain=scale.range=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),scale):domain.slice()},scale.copy=function(){return identity_identity().domain(domain)},linearish(scale)}var nice=function(domain,interval){var t,i0=0,i1=(domain=domain.slice()).length-1,x0=domain[i0],x1=domain[i1];return x10){for(;iv)break;z.push(t)}}else for(;i=1;--k)if(!((t=p*k)v)break;z.push(t)}}else z=src_ticks(i,j,Math.min(j-i,n)).map(pows);return r?z.reverse():z},scale.tickFormat=function(count,specifier){if(null==specifier&&(specifier=10===base?".0e":","),"function"!=typeof specifier&&(specifier=defaultLocale_format(specifier)),count===1/0)return specifier;null==count&&(count=10);var k=Math.max(1,base*count/scale.ticks().length);return function(d){var i=d/pows(Math.round(logs(d)));return i*base0?thresholds[i-1]:domain[0],i=n?[domain[n-1],x1]:[domain[i-1],domain[i]]},scale.copy=function(){return quantize_quantize().domain([x0,x1]).range(range)},linearish(scale)}function threshold_threshold(){var domain=[.5],range=[0,1],n=1;function scale(x){if(x<=x)return range[bisect(domain,x,0,n)]}return scale.domain=function(_){return arguments.length?(domain=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):range.slice()},scale.invertExtent=function(y){var i=range.indexOf(y);return[domain[i-1],domain[i]]},scale.copy=function(){return threshold_threshold().domain(domain).range(range)},scale}var interval_t0=new Date,interval_t1=new Date;function newInterval(floori,offseti,count,field){function interval(date){return floori(date=new Date(+date)),date}return interval.floor=interval,interval.ceil=function(date){return floori(date=new Date(date-1)),offseti(date,1),floori(date),date},interval.round=function(date){var d0=interval(date),d1=interval.ceil(date);return date-d00))return range;do{range.push(previous=new Date(+start)),offseti(start,step),floori(start)}while(previous=date)for(;floori(date),!test(date);)date.setTime(date-1)},function(date,step){if(date>=date)if(step<0)for(;++step<=0;)for(;offseti(date,-1),!test(date););else for(;--step>=0;)for(;offseti(date,1),!test(date););})},count&&(interval.count=function(start,end){return interval_t0.setTime(+start),interval_t1.setTime(+end),floori(interval_t0),floori(interval_t1),Math.floor(count(interval_t0,interval_t1))},interval.every=function(step){return step=Math.floor(step),isFinite(step)&&step>0?step>1?interval.filter(field?function(d){return field(d)%step==0}:function(d){return interval.count(0,d)%step==0}):interval:null}),interval}var millisecond_millisecond=newInterval(function(){},function(date,step){date.setTime(+date+step)},function(start,end){return end-start});millisecond_millisecond.every=function(k){return k=Math.floor(k),isFinite(k)&&k>0?k>1?newInterval(function(date){date.setTime(Math.floor(date/k)*k)},function(date,step){date.setTime(+date+step*k)},function(start,end){return(end-start)/k}):millisecond_millisecond:null};var src_millisecond=millisecond_millisecond,durationMinute=(millisecond_millisecond.range,6e4),durationWeek=6048e5,second_second=newInterval(function(date){date.setTime(date-date.getMilliseconds())},function(date,step){date.setTime(+date+1e3*step)},function(start,end){return(end-start)/1e3},function(date){return date.getUTCSeconds()}),src_second=second_second,minute_minute=(second_second.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds())},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getMinutes()})),src_minute=minute_minute,hour_hour=(minute_minute.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds()-date.getMinutes()*durationMinute)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getHours()})),src_hour=hour_hour,day_day=(hour_hour.range,newInterval(function(date){date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/864e5},function(date){return date.getDate()-1})),src_day=day_day;day_day.range;function weekday(i){return newInterval(function(date){date.setDate(date.getDate()-(date.getDay()+7-i)%7),date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+7*step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/durationWeek})}var sunday=weekday(0),monday=weekday(1),tuesday=weekday(2),wednesday=weekday(3),thursday=weekday(4),friday=weekday(5),saturday=weekday(6),month_month=(sunday.range,monday.range,tuesday.range,wednesday.range,thursday.range,friday.range,saturday.range,newInterval(function(date){date.setDate(1),date.setHours(0,0,0,0)},function(date,step){date.setMonth(date.getMonth()+step)},function(start,end){return end.getMonth()-start.getMonth()+12*(end.getFullYear()-start.getFullYear())},function(date){return date.getMonth()})),src_month=month_month,year_year=(month_month.range,newInterval(function(date){date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step)},function(start,end){return end.getFullYear()-start.getFullYear()},function(date){return date.getFullYear()}));year_year.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setFullYear(Math.floor(date.getFullYear()/k)*k),date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step*k)}):null};var src_year=year_year,utcMinute=(year_year.range,newInterval(function(date){date.setUTCSeconds(0,0)},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getUTCMinutes()})),utcHour=(utcMinute.range,newInterval(function(date){date.setUTCMinutes(0,0,0)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getUTCHours()})),utcDay=(utcHour.range,newInterval(function(date){date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+step)},function(start,end){return(end-start)/864e5},function(date){return date.getUTCDate()-1})),src_utcDay=utcDay;utcDay.range;function utcWeekday(i){return newInterval(function(date){date.setUTCDate(date.getUTCDate()-(date.getUTCDay()+7-i)%7),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+7*step)},function(start,end){return(end-start)/durationWeek})}var utcSunday=utcWeekday(0),utcMonday=utcWeekday(1),utcTuesday=utcWeekday(2),utcWednesday=utcWeekday(3),utcThursday=utcWeekday(4),utcFriday=utcWeekday(5),utcSaturday=utcWeekday(6),utcMonth=(utcSunday.range,utcMonday.range,utcTuesday.range,utcWednesday.range,utcThursday.range,utcFriday.range,utcSaturday.range,newInterval(function(date){date.setUTCDate(1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCMonth(date.getUTCMonth()+step)},function(start,end){return end.getUTCMonth()-start.getUTCMonth()+12*(end.getUTCFullYear()-start.getUTCFullYear())},function(date){return date.getUTCMonth()})),utcYear=(utcMonth.range,newInterval(function(date){date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step)},function(start,end){return end.getUTCFullYear()-start.getUTCFullYear()},function(date){return date.getUTCFullYear()}));utcYear.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setUTCFullYear(Math.floor(date.getUTCFullYear()/k)*k),date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step*k)}):null};var src_utcYear=utcYear;utcYear.range;function localDate(d){if(0<=d.y&&d.y<100){var date=new Date(-1,d.m,d.d,d.H,d.M,d.S,d.L);return date.setFullYear(d.y),date}return new Date(d.y,d.m,d.d,d.H,d.M,d.S,d.L)}function utcDate(d){if(0<=d.y&&d.y<100){var date=new Date(Date.UTC(-1,d.m,d.d,d.H,d.M,d.S,d.L));return date.setUTCFullYear(d.y),date}return new Date(Date.UTC(d.y,d.m,d.d,d.H,d.M,d.S,d.L))}function newYear(y){return{y:y,m:0,d:1,H:0,M:0,S:0,L:0}}var src_defaultLocale_locale,timeFormat,utcFormat,utcParse,pads={"-":"",_:" ",0:"0"},numberRe=/^\s*\d+/,percentRe=/^%/,requoteRe=/[\\^$*+?|[\]().{}]/g;function locale_pad(value,fill,width){var sign=value<0?"-":"",string=(sign?-value:value)+"",length=string.length;return sign+(length68?1900:2e3),i+n[0].length):-1}function parseZone(d,string,i){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i,i+6));return n?(d.Z=n[1]?0:-(n[2]+(n[3]||"00")),i+n[0].length):-1}function parseMonthNumber(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.m=n[0]-1,i+n[0].length):-1}function parseDayOfMonth(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.d=+n[0],i+n[0].length):-1}function parseDayOfYear(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.m=0,d.d=+n[0],i+n[0].length):-1}function parseHour24(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.H=+n[0],i+n[0].length):-1}function parseMinutes(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.M=+n[0],i+n[0].length):-1}function parseSeconds(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.S=+n[0],i+n[0].length):-1}function parseMilliseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.L=+n[0],i+n[0].length):-1}function parseMicroseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+6));return n?(d.L=Math.floor(n[0]/1e3),i+n[0].length):-1}function parseLiteralPercent(d,string,i){var n=percentRe.exec(string.slice(i,i+1));return n?i+n[0].length:-1}function parseUnixTimestamp(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=+n[0],i+n[0].length):-1}function parseUnixTimestampSeconds(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=1e3*+n[0],i+n[0].length):-1}function formatDayOfMonth(d,p){return locale_pad(d.getDate(),p,2)}function formatHour24(d,p){return locale_pad(d.getHours(),p,2)}function formatHour12(d,p){return locale_pad(d.getHours()%12||12,p,2)}function formatDayOfYear(d,p){return locale_pad(1+src_day.count(src_year(d),d),p,3)}function formatMilliseconds(d,p){return locale_pad(d.getMilliseconds(),p,3)}function formatMicroseconds(d,p){return formatMilliseconds(d,p)+"000"}function formatMonthNumber(d,p){return locale_pad(d.getMonth()+1,p,2)}function formatMinutes(d,p){return locale_pad(d.getMinutes(),p,2)}function formatSeconds(d,p){return locale_pad(d.getSeconds(),p,2)}function formatWeekdayNumberMonday(d){var day=d.getDay();return 0===day?7:day}function formatWeekNumberSunday(d,p){return locale_pad(sunday.count(src_year(d),d),p,2)}function formatWeekNumberISO(d,p){var day=d.getDay();return d=day>=4||0===day?thursday(d):thursday.ceil(d),locale_pad(thursday.count(src_year(d),d)+(4===src_year(d).getDay()),p,2)}function formatWeekdayNumberSunday(d){return d.getDay()}function formatWeekNumberMonday(d,p){return locale_pad(monday.count(src_year(d),d),p,2)}function locale_formatYear(d,p){return locale_pad(d.getFullYear()%100,p,2)}function formatFullYear(d,p){return locale_pad(d.getFullYear()%1e4,p,4)}function formatZone(d){var z=d.getTimezoneOffset();return(z>0?"-":(z*=-1,"+"))+locale_pad(z/60|0,"0",2)+locale_pad(z%60,"0",2)}function formatUTCDayOfMonth(d,p){return locale_pad(d.getUTCDate(),p,2)}function formatUTCHour24(d,p){return locale_pad(d.getUTCHours(),p,2)}function formatUTCHour12(d,p){return locale_pad(d.getUTCHours()%12||12,p,2)}function formatUTCDayOfYear(d,p){return locale_pad(1+src_utcDay.count(src_utcYear(d),d),p,3)}function formatUTCMilliseconds(d,p){return locale_pad(d.getUTCMilliseconds(),p,3)}function formatUTCMicroseconds(d,p){return formatUTCMilliseconds(d,p)+"000"}function formatUTCMonthNumber(d,p){return locale_pad(d.getUTCMonth()+1,p,2)}function formatUTCMinutes(d,p){return locale_pad(d.getUTCMinutes(),p,2)}function formatUTCSeconds(d,p){return locale_pad(d.getUTCSeconds(),p,2)}function formatUTCWeekdayNumberMonday(d){var dow=d.getUTCDay();return 0===dow?7:dow}function formatUTCWeekNumberSunday(d,p){return locale_pad(utcSunday.count(src_utcYear(d),d),p,2)}function formatUTCWeekNumberISO(d,p){var day=d.getUTCDay();return d=day>=4||0===day?utcThursday(d):utcThursday.ceil(d),locale_pad(utcThursday.count(src_utcYear(d),d)+(4===src_utcYear(d).getUTCDay()),p,2)}function formatUTCWeekdayNumberSunday(d){return d.getUTCDay()}function formatUTCWeekNumberMonday(d,p){return locale_pad(utcMonday.count(src_utcYear(d),d),p,2)}function formatUTCYear(d,p){return locale_pad(d.getUTCFullYear()%100,p,2)}function formatUTCFullYear(d,p){return locale_pad(d.getUTCFullYear()%1e4,p,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(d){return+d}function formatUnixTimestampSeconds(d){return Math.floor(+d/1e3)}!function defaultLocale_defaultLocale(definition){return src_defaultLocale_locale=function formatLocale(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_weekdays=locale.days,locale_shortWeekdays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths,periodRe=formatRe(locale_periods),periodLookup=formatLookup(locale_periods),weekdayRe=formatRe(locale_weekdays),weekdayLookup=formatLookup(locale_weekdays),shortWeekdayRe=formatRe(locale_shortWeekdays),shortWeekdayLookup=formatLookup(locale_shortWeekdays),monthRe=formatRe(locale_months),monthLookup=formatLookup(locale_months),shortMonthRe=formatRe(locale_shortMonths),shortMonthLookup=formatLookup(locale_shortMonths),formats={a:function formatShortWeekday(d){return locale_shortWeekdays[d.getDay()]},A:function formatWeekday(d){return locale_weekdays[d.getDay()]},b:function formatShortMonth(d){return locale_shortMonths[d.getMonth()]},B:function formatMonth(d){return locale_months[d.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(d){return locale_periods[+(d.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},utcFormats={a:function formatUTCShortWeekday(d){return locale_shortWeekdays[d.getUTCDay()]},A:function formatUTCWeekday(d){return locale_weekdays[d.getUTCDay()]},b:function formatUTCShortMonth(d){return locale_shortMonths[d.getUTCMonth()]},B:function formatUTCMonth(d){return locale_months[d.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(d){return locale_periods[+(d.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},parses={a:function parseShortWeekday(d,string,i){var n=shortWeekdayRe.exec(string.slice(i));return n?(d.w=shortWeekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},A:function parseWeekday(d,string,i){var n=weekdayRe.exec(string.slice(i));return n?(d.w=weekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},b:function parseShortMonth(d,string,i){var n=shortMonthRe.exec(string.slice(i));return n?(d.m=shortMonthLookup[n[0].toLowerCase()],i+n[0].length):-1},B:function parseMonth(d,string,i){var n=monthRe.exec(string.slice(i));return n?(d.m=monthLookup[n[0].toLowerCase()],i+n[0].length):-1},c:function parseLocaleDateTime(d,string,i){return parseSpecifier(d,locale_dateTime,string,i)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(d,string,i){var n=periodRe.exec(string.slice(i));return n?(d.p=periodLookup[n[0].toLowerCase()],i+n[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(d,string,i){return parseSpecifier(d,locale_date,string,i)},X:function parseLocaleTime(d,string,i){return parseSpecifier(d,locale_time,string,i)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(specifier,formats){return function(date){var c,pad,format,string=[],i=-1,j=0,n=specifier.length;for(date instanceof Date||(date=new Date(+date));++i53)return null;"w"in d||(d.w=1),"Z"in d?(week=(day=(week=utcDate(newYear(d.y))).getUTCDay())>4||0===day?utcMonday.ceil(week):utcMonday(week),week=src_utcDay.offset(week,7*(d.V-1)),d.y=week.getUTCFullYear(),d.m=week.getUTCMonth(),d.d=week.getUTCDate()+(d.w+6)%7):(week=(day=(week=newDate(newYear(d.y))).getDay())>4||0===day?monday.ceil(week):monday(week),week=src_day.offset(week,7*(d.V-1)),d.y=week.getFullYear(),d.m=week.getMonth(),d.d=week.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),day="Z"in d?utcDate(newYear(d.y)).getUTCDay():newDate(newYear(d.y)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(day+5)%7:d.w+7*d.U-(day+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,utcDate(d)):newDate(d)}}function parseSpecifier(d,specifier,string,j){for(var c,parse,i=0,n=specifier.length,m=string.length;i=m)return-1;if(37===(c=specifier.charCodeAt(i++))){if(c=specifier.charAt(i++),!(parse=parses[c in pads?specifier.charAt(i++):c])||(j=parse(d,string,j))<0)return-1}else if(c!=string.charCodeAt(j++))return-1}return j}return formats.x=newFormat(locale_date,formats),formats.X=newFormat(locale_time,formats),formats.c=newFormat(locale_dateTime,formats),utcFormats.x=newFormat(locale_date,utcFormats),utcFormats.X=newFormat(locale_time,utcFormats),utcFormats.c=newFormat(locale_dateTime,utcFormats),{format:function format(specifier){var f=newFormat(specifier+="",formats);return f.toString=function(){return specifier},f},parse:function parse(specifier){var p=newParse(specifier+="",localDate);return p.toString=function(){return specifier},p},utcFormat:function utcFormat(specifier){var f=newFormat(specifier+="",utcFormats);return f.toString=function(){return specifier},f},utcParse:function utcParse(specifier){var p=newParse(specifier,utcDate);return p.toString=function(){return specifier},p}}}(definition),timeFormat=src_defaultLocale_locale.format,src_defaultLocale_locale.parse,utcFormat=src_defaultLocale_locale.utcFormat,utcParse=src_defaultLocale_locale.utcParse,src_defaultLocale_locale}({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||utcFormat("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||utcParse("%Y-%m-%dT%H:%M:%S.%LZ");var time_durationSecond=1e3,time_durationMinute=60*time_durationSecond,time_durationHour=60*time_durationMinute,time_durationDay=24*time_durationHour,time_durationWeek=7*time_durationDay,durationMonth=30*time_durationDay,durationYear=365*time_durationDay;function time_date(t){return new Date(t)}function time_number(t){return t instanceof Date?+t:+new Date(+t)}function calendar(year,month,week,day,hour,minute,second,millisecond,format){var scale=continuous(deinterpolateLinear,src_number),invert=scale.invert,domain=scale.domain,formatMillisecond=format(".%L"),formatSecond=format(":%S"),formatMinute=format("%I:%M"),formatHour=format("%I %p"),formatDay=format("%a %d"),formatWeek=format("%b %d"),formatMonth=format("%B"),formatYear=format("%Y"),tickIntervals=[[second,1,time_durationSecond],[second,5,5*time_durationSecond],[second,15,15*time_durationSecond],[second,30,30*time_durationSecond],[minute,1,time_durationMinute],[minute,5,5*time_durationMinute],[minute,15,15*time_durationMinute],[minute,30,30*time_durationMinute],[hour,1,time_durationHour],[hour,3,3*time_durationHour],[hour,6,6*time_durationHour],[hour,12,12*time_durationHour],[day,1,time_durationDay],[day,2,2*time_durationDay],[week,1,time_durationWeek],[month,1,durationMonth],[month,3,3*durationMonth],[year,1,durationYear]];function tickFormat(date){return(second(date)1)&&(t-=Math.floor(t));var ts=Math.abs(t-.5);return rainbow_c.h=360*t-100,rainbow_c.s=1.5-1.5*ts,rainbow_c.l=.8-.9*ts,rainbow_c+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(range){var n=range.length;return function(t){return range[Math.max(0,Math.min(n-1,Math.floor(t*n)))]}}var sequential_multi_viridis=viridis_ramp(d3_scale_chromatic_src_colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),viridis_magma=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),viridis_inferno=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),viridis_plasma=viridis_ramp(d3_scale_chromatic_src_colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),UNIT_GLOBAL_NAMESPACE="app.units",UNIT_LOCAL_NAMESPACE="local.units",LAYER_LOCAL_NAMESPACE="local.layers",LAYER_GLOBAL_NAMESPACE="app.layers",GROUP_GLOBAL_NAMESPACE="app.group",GROUP_LOCAL_NAMESPACE="local.group",CANVAS_LOCAL_NAMESPACE="local.canvas",CANVAS_GLOBAL_NAMESPACE="app.canvas",reserved_fields={ROW_ID:"__id__"},common_props={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onLayerDraw",MATRIX_CREATED:"matrixCreated"},COORD_TYPES_POLAR="polar",COORD_TYPES_CARTESIAN="cartesian",DATA_TYPE_FUNCTION="function",DATA_TYPE_STRING="string",src_array_slice=Array.prototype.slice,d3_axis_src_identity=function(x){return x},axis_top=1,axis_right=2,axis_bottom=3,axis_left=4,epsilon=1e-6;function translateX(x){return"translate("+(x+.5)+",0)"}function translateY(y){return"translate(0,"+(y+.5)+")"}function entering(){return!this.__axis}function axis_axis(orient,scale){var tickArguments=[],tickValues=null,tickFormat=null,tickTransform=null,tickSizeInner=6,tickSizeOuter=6,tickPadding=3,k=orient===axis_top||orient===axis_left?-1:1,x=orient===axis_left||orient===axis_right?"x":"y",transform=orient===axis_top||orient===axis_bottom?translateX:translateY;function axis(context){var values=null==tickValues?scale.ticks?scale.ticks.apply(scale,tickArguments):scale.domain():tickValues,format=null==tickFormat?scale.tickFormat?scale.tickFormat.apply(scale,tickArguments):d3_axis_src_identity:tickFormat,spacing=Math.max(tickSizeInner,0)+tickPadding,range=scale.range(),range0=+range[0]+.5,range1=+range[range.length-1]+.5,position=(scale.bandwidth?function axis_center(scale){var offset=Math.max(0,scale.bandwidth()-1)/2;return scale.round()&&(offset=Math.round(offset)),function(d){return+scale(d)+offset}}:function axis_number(scale){return function(d){return+scale(d)}})(scale.copy()),selection=context.selection?context.selection():context,path=selection.selectAll(".domain").data([null]),tick=selection.selectAll(".tick").data(values,scale).order(),tickExit=tick.exit(),tickEnter=tick.enter().append("g").attr("class","tick"),line=tick.select("line"),text=tick.select("text");path=path.merge(path.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),tick=tick.merge(tickEnter),line=line.merge(tickEnter.append("line").attr("stroke","#000").attr(x+"2",k*tickSizeInner)),text=text.merge(tickEnter.append("text").attr("fill","#000").attr(x,k*spacing).attr("dy",orient===axis_top?"0em":orient===axis_bottom?"0.71em":"0.32em")).style("transform",tickTransform),context!==selection&&(path=path.transition(context),tick=tick.transition(context),line=line.transition(context),text=text.transition(context),tickExit=tickExit.transition(context).attr("opacity",epsilon).attr("transform",function(d){return isFinite(d=position(d))?transform(d):this.getAttribute("transform")}),tickEnter.attr("opacity",epsilon).attr("transform",function(d){var p=this.parentNode.__axis;return transform(p&&isFinite(p=p(d))?p:position(d))})),tickExit.remove(),path.attr("d",orient===axis_left||orient==axis_right?"M"+k*tickSizeOuter+","+range0+"H0.5V"+range1+"H"+k*tickSizeOuter:"M"+range0+","+k*tickSizeOuter+"V0.5H"+range1+"V"+k*tickSizeOuter),tick.attr("opacity",1).attr("transform",function(d){return transform(position(d))}),line.attr(x+"2",k*tickSizeInner),text.attr(x,k*spacing).text(format),selection.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",orient===axis_right?"start":orient===axis_left?"end":"middle"),selection.each(function(){this.__axis=position})}return axis.scale=function(_){return arguments.length?(scale=_,axis):scale},axis.tickTransform=function(_){return arguments.length?(tickTransform=_,axis):tickTransform},axis.ticks=function(){return tickArguments=src_array_slice.call(arguments),axis},axis.tickArguments=function(_){return arguments.length?(tickArguments=null==_?[]:src_array_slice.call(_),axis):tickArguments.slice()},axis.tickValues=function(_){return arguments.length?(tickValues=null==_?null:src_array_slice.call(_),axis):tickValues&&tickValues.slice()},axis.tickFormat=function(_){return arguments.length?(tickFormat=_,axis):tickFormat},axis.tickSize=function(_){return arguments.length?(tickSizeInner=tickSizeOuter=+_,axis):tickSizeInner},axis.tickSizeInner=function(_){return arguments.length?(tickSizeInner=+_,axis):tickSizeInner},axis.tickSizeOuter=function(_){return arguments.length?(tickSizeOuter=+_,axis):tickSizeOuter},axis.tickPadding=function(_){return arguments.length?(tickPadding=+_,axis):tickPadding},axis}var pi=Math.PI,tau=2*pi,tauEpsilon=tau-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(x,y){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(x,y){this._+="L"+(this._x1=+x)+","+(this._y1=+y)},quadraticCurveTo:function quadraticCurveTo(x1,y1,x,y){this._+="Q"+ +x1+","+ +y1+","+(this._x1=+x)+","+(this._y1=+y)},bezierCurveTo:function bezierCurveTo(x1,y1,x2,y2,x,y){this._+="C"+ +x1+","+ +y1+","+ +x2+","+ +y2+","+(this._x1=+x)+","+(this._y1=+y)},arcTo:function arcTo(x1,y1,x2,y2,r){x1=+x1,y1=+y1,x2=+x2,y2=+y2,r=+r;var x0=this._x1,y0=this._y1,x21=x2-x1,y21=y2-y1,x01=x0-x1,y01=y0-y1,l01_2=x01*x01+y01*y01;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=x1)+","+(this._y1=y1);else if(l01_2>1e-6)if(Math.abs(y01*x21-y21*x01)>1e-6&&r){var x20=x2-x0,y20=y2-y0,l21_2=x21*x21+y21*y21,l20_2=x20*x20+y20*y20,l21=Math.sqrt(l21_2),l01=Math.sqrt(l01_2),l=r*Math.tan((pi-Math.acos((l21_2+l01_2-l20_2)/(2*l21*l01)))/2),t01=l/l01,t21=l/l21;Math.abs(t01-1)>1e-6&&(this._+="L"+(x1+t01*x01)+","+(y1+t01*y01)),this._+="A"+r+","+r+",0,0,"+ +(y01*x20>x01*y20)+","+(this._x1=x1+t21*x21)+","+(this._y1=y1+t21*y21)}else this._+="L"+(this._x1=x1)+","+(this._y1=y1);else;},arc:function arc(x,y,r,a0,a1,ccw){x=+x,y=+y,ccw=!!ccw;var dx=(r=+r)*Math.cos(a0),dy=r*Math.sin(a0),x0=x+dx,y0=y+dy,cw=1^ccw,da=ccw?a0-a1:a1-a0;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+x0+","+y0:(Math.abs(this._x1-x0)>1e-6||Math.abs(this._y1-y0)>1e-6)&&(this._+="L"+x0+","+y0),r&&(da<0&&(da=da%tau+tau),da>tauEpsilon?this._+="A"+r+","+r+",0,1,"+cw+","+(x-dx)+","+(y-dy)+"A"+r+","+r+",0,1,"+cw+","+(this._x1=x0)+","+(this._y1=y0):da>1e-6&&(this._+="A"+r+","+r+",0,"+ +(da>=pi)+","+cw+","+(this._x1=x+r*Math.cos(a1))+","+(this._y1=y+r*Math.sin(a1))))},rect:function rect(x,y,w,h){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)+"h"+ +w+"v"+ +h+"h"+-w+"Z"},toString:function toString(){return this._}};var src_path=path_path,d3_shape_src_constant=function(x){return function constant(){return x}},abs=Math.abs,atan2=Math.atan2,cos=Math.cos,math_max=Math.max,math_min=Math.min,sin=Math.sin,math_sqrt=Math.sqrt,math_epsilon=1e-12,math_pi=Math.PI,halfPi=math_pi/2,math_tau=2*math_pi;function asin(x){return x>=1?halfPi:x<=-1?-halfPi:Math.asin(x)}function arcInnerRadius(d){return d.innerRadius}function arcOuterRadius(d){return d.outerRadius}function arcStartAngle(d){return d.startAngle}function arcEndAngle(d){return d.endAngle}function arcPadAngle(d){return d&&d.padAngle}function cornerTangents(x0,y0,x1,y1,r1,rc,cw){var x01=x0-x1,y01=y0-y1,lo=(cw?rc:-rc)/math_sqrt(x01*x01+y01*y01),ox=lo*y01,oy=-lo*x01,x11=x0+ox,y11=y0+oy,x10=x1+ox,y10=y1+oy,x00=(x11+x10)/2,y00=(y11+y10)/2,dx=x10-x11,dy=y10-y11,d2=dx*dx+dy*dy,r=r1-rc,D=x11*y10-x10*y11,d=(dy<0?-1:1)*math_sqrt(math_max(0,r*r*d2-D*D)),cx0=(D*dy-dx*d)/d2,cy0=(-D*dx-dy*d)/d2,cx1=(D*dy+dx*d)/d2,cy1=(-D*dx+dy*d)/d2,dx0=cx0-x00,dy0=cy0-y00,dx1=cx1-x00,dy1=cy1-y00;return dx0*dx0+dy0*dy0>dx1*dx1+dy1*dy1&&(cx0=cx1,cy0=cy1),{cx:cx0,cy:cy0,x01:-ox,y01:-oy,x11:cx0*(r1/r-1),y11:cy0*(r1/r-1)}}function Linear(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:this._context.lineTo(x,y)}}};var curve_linear=function(context){return new Linear(context)};function point_x(p){return p[0]}function point_y(p){return p[1]}var src_line=function(){var x=point_x,y=point_y,defined=d3_shape_src_constant(!0),context=null,curve=curve_linear,output=null;function line(data){var i,d,buffer,n=data.length,defined0=!1;for(null==context&&(output=curve(buffer=src_path())),i=0;i<=n;++i)!(i=j;--k)output.point(x0z[k],y0z[k]);output.lineEnd(),output.areaEnd()}defined0&&(x0z[i]=+x0(d,i,data),y0z[i]=+y0(d,i,data),output.point(x1?+x1(d,i,data):x0z[i],y1?+y1(d,i,data):y0z[i]))}if(buffer)return output=null,buffer+""||null}function arealine(){return src_line().defined(defined).curve(curve).context(context)}return area.x=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),x1=null,area):x0},area.x0=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),area):x0},area.x1=function(_){return arguments.length?(x1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):x1},area.y=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),y1=null,area):y0},area.y0=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),area):y0},area.y1=function(_){return arguments.length?(y1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):y1},area.lineX0=area.lineY0=function(){return arealine().x(x0).y(y0)},area.lineY1=function(){return arealine().x(x0).y(y1)},area.lineX1=function(){return arealine().x(x1).y(y0)},area.defined=function(_){return arguments.length?(defined="function"==typeof _?_:d3_shape_src_constant(!!_),area):defined},area.curve=function(_){return arguments.length?(curve=_,null!=context&&(output=curve(context)),area):curve},area.context=function(_){return arguments.length?(null==_?context=output=null:output=curve(context=_),area):context},area},src_descending=function(a,b){return ba?1:b>=a?0:NaN},d3_shape_src_identity=function(d){return d};curveRadial(curve_linear);function Radial(curve){this._curve=curve}function curveRadial(curve){function radial(context){return new Radial(curve(context))}return radial._curve=curve,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(a,r){this._curve.point(r*Math.sin(a),r*-Math.cos(a))}};var d3_shape_src_array_slice=Array.prototype.slice;var symbol_circle={draw:function draw(context,size){var r=Math.sqrt(size/math_pi);context.moveTo(r,0),context.arc(0,0,r,0,math_tau)}},symbol_cross={draw:function draw(context,size){var r=Math.sqrt(size/5)/2;context.moveTo(-3*r,-r),context.lineTo(-r,-r),context.lineTo(-r,-3*r),context.lineTo(r,-3*r),context.lineTo(r,-r),context.lineTo(3*r,-r),context.lineTo(3*r,r),context.lineTo(r,r),context.lineTo(r,3*r),context.lineTo(-r,3*r),context.lineTo(-r,r),context.lineTo(-3*r,r),context.closePath()}},tan30=Math.sqrt(1/3),tan30_2=2*tan30,diamond={draw:function draw(context,size){var y=Math.sqrt(size/tan30_2),x=y*tan30;context.moveTo(0,-y),context.lineTo(x,0),context.lineTo(0,y),context.lineTo(-x,0),context.closePath()}},kr=Math.sin(math_pi/10)/Math.sin(7*math_pi/10),kx=Math.sin(math_tau/10)*kr,ky=-Math.cos(math_tau/10)*kr,star={draw:function draw(context,size){var r=Math.sqrt(.8908130915292852*size),x=kx*r,y=ky*r;context.moveTo(0,-r),context.lineTo(x,y);for(var i=1;i<5;++i){var a=math_tau*i/5,c=Math.cos(a),s=Math.sin(a);context.lineTo(s*r,-c*r),context.lineTo(c*x-s*y,s*x+c*y)}context.closePath()}},square={draw:function draw(context,size){var w=Math.sqrt(size),x=-w/2;context.rect(x,x,w,w)}},sqrt3=Math.sqrt(3),triangle={draw:function draw(context,size){var y=-Math.sqrt(size/(3*sqrt3));context.moveTo(0,2*y),context.lineTo(-sqrt3*y,-y),context.lineTo(sqrt3*y,-y),context.closePath()}},wye_s=Math.sqrt(3)/2,wye_k=1/Math.sqrt(12),wye_a=3*(wye_k/2+1),wye={draw:function draw(context,size){var r=Math.sqrt(size/wye_a),x0=r/2,y0=r*wye_k,x1=x0,y1=r*wye_k+r,x2=-x1,y2=y1;context.moveTo(x0,y0),context.lineTo(x1,y1),context.lineTo(x2,y2),context.lineTo(-.5*x0-wye_s*y0,wye_s*x0+-.5*y0),context.lineTo(-.5*x1-wye_s*y1,wye_s*x1+-.5*y1),context.lineTo(-.5*x2-wye_s*y2,wye_s*x2+-.5*y2),context.lineTo(-.5*x0+wye_s*y0,-.5*y0-wye_s*x0),context.lineTo(-.5*x1+wye_s*y1,-.5*y1-wye_s*x1),context.lineTo(-.5*x2+wye_s*y2,-.5*y2-wye_s*x2),context.closePath()}},noop=function(){};function _point(that,x,y){that._context.bezierCurveTo((2*that._x0+that._x1)/3,(2*that._y0+that._y1)/3,(that._x0+2*that._x1)/3,(that._y0+2*that._y1)/3,(that._x0+4*that._x1+x)/6,(that._y0+4*that._y1+y)/6)}function Basis(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);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,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisClosed(context){this._context=context}BasisClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x2=x,this._y2=y;break;case 1:this._point=2,this._x3=x,this._y3=y;break;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;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisOpen(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1;break;case 1:this._point=2;break;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;case 3:this._point=4;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function Bundle(context,beta){this._basis=new Basis(context),this._beta=beta}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var x=this._x,y=this._y,j=x.length-1;if(j>0)for(var t,x0=x[0],y0=y[0],dx=x[j]-x0,dy=y[j]-y0,i=-1;++i<=j;)t=i/j,this._basis.point(this._beta*x[i]+(1-this._beta)*(x0+t*dx),this._beta*y[i]+(1-this._beta)*(y0+t*dy));this._x=this._y=null,this._basis.lineEnd()},point:function point(x,y){this._x.push(+x),this._y.push(+y)}};(function custom(beta){function bundle(context){return 1===beta?new Basis(context):new Bundle(context,beta)}return bundle.beta=function(beta){return custom(+beta)},bundle})(.85);function cardinal_point(that,x,y){that._context.bezierCurveTo(that._x1+that._k*(that._x2-that._x0),that._y1+that._k*(that._y2-that._y0),that._x2+that._k*(that._x1-x),that._y2+that._k*(that._y1-y),that._x2,that._y2)}function Cardinal(context,tension){this._context=context,this._k=(1-tension)/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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2,this._x1=x,this._y1=y;break;case 2:this._point=3;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new Cardinal(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalClosed(context,tension){this._context=context,this._k=(1-tension)/6}CardinalClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalClosed(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalOpen(context,tension){this._context=context,this._k=(1-tension)/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(x,y){switch(x=+x,y=+y,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,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalOpen(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function catmullRom_point(that,x,y){var x1=that._x1,y1=that._y1,x2=that._x2,y2=that._y2;if(that._l01_a>math_epsilon){var a=2*that._l01_2a+3*that._l01_a*that._l12_a+that._l12_2a,n=3*that._l01_a*(that._l01_a+that._l12_a);x1=(x1*a-that._x0*that._l12_2a+that._x2*that._l01_2a)/n,y1=(y1*a-that._y0*that._l12_2a+that._y2*that._l01_2a)/n}if(that._l23_a>math_epsilon){var b=2*that._l23_2a+3*that._l23_a*that._l12_a+that._l12_2a,m=3*that._l23_a*(that._l23_a+that._l12_a);x2=(x2*b+that._x1*that._l23_2a-x*that._l12_2a)/m,y2=(y2*b+that._y1*that._l23_2a-y*that._l12_2a)/m}that._context.bezierCurveTo(x1,y1,x2,y2,that._x2,that._y2)}function CatmullRom(context,alpha){this._context=context,this._alpha=alpha}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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};var curve_catmullRom=function custom(alpha){function catmullRom(context){return alpha?new CatmullRom(context,alpha):new Cardinal(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom}(.5);function CatmullRomClosed(context,alpha){this._context=context,this._alpha=alpha}CatmullRomClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:catmullRom_point(this,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomClosed(context,alpha):new CardinalClosed(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function CatmullRomOpen(context,alpha){this._context=context,this._alpha=alpha}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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,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,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomOpen(context,alpha):new CardinalOpen(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function LinearClosed(context){this._context=context}LinearClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(x,y){x=+x,y=+y,this._point?this._context.lineTo(x,y):(this._point=1,this._context.moveTo(x,y))}};function monotone_sign(x){return x<0?-1:1}function slope3(that,x2,y2){var h0=that._x1-that._x0,h1=x2-that._x1,s0=(that._y1-that._y0)/(h0||h1<0&&-0),s1=(y2-that._y1)/(h1||h0<0&&-0),p=(s0*h1+s1*h0)/(h0+h1);return(monotone_sign(s0)+monotone_sign(s1))*Math.min(Math.abs(s0),Math.abs(s1),.5*Math.abs(p))||0}function slope2(that,t){var h=that._x1-that._x0;return h?(3*(that._y1-that._y0)/h-t)/2:t}function monotone_point(that,t0,t1){var x0=that._x0,y0=that._y0,x1=that._x1,y1=that._y1,dx=(x1-x0)/3;that._context.bezierCurveTo(x0+dx,y0+dx*t0,x1-dx,y1-dx*t1,x1,y1)}function MonotoneX(context){this._context=context}function MonotoneY(context){this._context=new ReflectContext(context)}function ReflectContext(context){this._context=context}function Natural(context){this._context=context}function controlPoints(x){var i,m,n=x.length-1,a=new Array(n),b=new Array(n),r=new Array(n);for(a[0]=0,b[0]=2,r[0]=x[0]+2*x[1],i=1;i=0;--i)a[i]=(r[i]-a[i+1])/b[i];for(b[n-1]=(x[n]+a[n-1])/2,i=0;i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,y),this._context.lineTo(x,y);else{var x1=this._x*(1-this._t)+x*this._t;this._context.lineTo(x1,this._y),this._context.lineTo(x1,y)}}this._x=x,this._y=y}};var curve_step=function(context){return new Step(context,.5)};function stepBefore(context){return new Step(context,0)}function stepAfter(context){return new Step(context,1)}var none=function(series,order){if((n=series.length)>1)for(var j,s0,n,i=1,s1=series[order[0]],m=s1.length;i=0;)o[n]=n;return o};function stackValue(d,key){return d[key]}var order_ascending=function(series){var sums=series.map(ascending_sum);return order_none(series).sort(function(a,b){return sums[a]-sums[b]})};function ascending_sum(series){for(var v,s=0,i=-1,n=series.length;++i0)){if(r/=dx,dx<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=x1-ax,dx||!(r<0)){if(r/=dx,dx<0){if(r>t1)return;r>t0&&(t0=r)}else if(dx>0){if(r0)){if(r/=dy,dy<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=y1-ay,dy||!(r<0)){if(r/=dy,dy<0){if(r>t1)return;r>t0&&(t0=r)}else if(dy>0){if(r0||t1<1)||(t0>0&&(edge[0]=[ax+t0*dx,ay+t0*dy]),t1<1&&(edge[1]=[ax+t1*dx,ay+t1*dy]),!0)}}}}}function connectEdge(edge,x0,y0,x1,y1){var v1=edge[1];if(v1)return!0;var fm,fb,v0=edge[0],left=edge.left,right=edge.right,lx=left[0],ly=left[1],rx=right[0],ry=right[1],fx=(lx+rx)/2,fy=(ly+ry)/2;if(ry===ly){if(fx=x1)return;if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[fx,y0];v1=[fx,y1]}else{if(v0){if(v0[1]1)if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[(y0-fb)/fm,y0];v1=[(y1-fb)/fm,y1]}else{if(v0){if(v0[1]=x1)return}else v0=[x0,fm*x0+fb];v1=[x1,fm*x1+fb]}else{if(v0){if(v0[0]=-Diagram_epsilon2)){var ha=ax*ax+ay*ay,hc=cx*cx+cy*cy,x=(cy*ha-ay*hc)/d,y=(ax*hc-cx*ha)/d,circle=circlePool.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};circle.arc=arc,circle.site=cSite,circle.x=x+bx,circle.y=(circle.cy=y+by)+Math.sqrt(x*x+y*y),arc.circle=circle;for(var before=null,node=circles._;node;)if(circle.yDiagram_epsilon)node=node.L;else{if(!((dxr=x-rightBreakPoint(node,directrix))>Diagram_epsilon)){dxl>-Diagram_epsilon?(lArc=node.P,rArc=node):dxr>-Diagram_epsilon?(lArc=node,rArc=node.N):lArc=rArc=node;break}if(!node.R){lArc=node;break}node=node.R}!function createCell(site){return Diagram_cells[site.index]={site:site,halfedges:[]}}(site);var newArc=createBeach(site);if(beaches.insert(lArc,newArc),lArc||rArc){if(lArc===rArc)return detachCircle(lArc),rArc=createBeach(lArc.site),beaches.insert(newArc,rArc),newArc.edge=rArc.edge=createEdge(lArc.site,newArc.site),attachCircle(lArc),void attachCircle(rArc);if(rArc){detachCircle(lArc),detachCircle(rArc);var lSite=lArc.site,ax=lSite[0],ay=lSite[1],bx=site[0]-ax,by=site[1]-ay,rSite=rArc.site,cx=rSite[0]-ax,cy=rSite[1]-ay,d=2*(bx*cy-by*cx),hb=bx*bx+by*by,hc=cx*cx+cy*cy,vertex=[(cy*hb-by*hc)/d+ax,(bx*hc-cx*hb)/d+ay];setEdgeEnd(rArc.edge,lSite,rSite,vertex),newArc.edge=createEdge(lSite,site,null,vertex),rArc.edge=createEdge(site,rSite,null,vertex),attachCircle(lArc),attachCircle(rArc)}else newArc.edge=createEdge(lArc.site,newArc.site)}}function leftBreakPoint(arc,directrix){var site=arc.site,rfocx=site[0],rfocy=site[1],pby2=rfocy-directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return-1/0;var lfocx=(site=lArc.site)[0],lfocy=site[1],plby2=lfocy-directrix;if(!plby2)return lfocx;var hl=lfocx-rfocx,aby2=1/pby2-1/plby2,b=hl/plby2;return aby2?(-b+Math.sqrt(b*b-2*aby2*(hl*hl/(-2*plby2)-lfocy+plby2/2+rfocy-pby2/2)))/aby2+rfocx:(rfocx+lfocx)/2}function rightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return leftBreakPoint(rArc,directrix);var site=arc.site;return site[1]===directrix?site[0]:1/0}var beaches,Diagram_cells,circles,Diagram_edges,Diagram_epsilon=1e-6,Diagram_epsilon2=1e-12;function triangleArea(a,b,c){return(a[0]-c[0])*(b[1]-a[1])-(a[0]-b[0])*(c[1]-a[1])}function lexicographic(a,b){return b[1]-a[1]||b[0]-a[0]}function Diagram(sites,extent){var x,y,circle,site=sites.sort(lexicographic).pop();for(Diagram_edges=[],Diagram_cells=new Array(sites.length),beaches=new src_RedBlackTree,circles=new src_RedBlackTree;;)if(circle=firstCircle,site&&(!circle||site[1]Diagram_epsilon||Math.abs(edge[0][1]-edge[1][1])>Diagram_epsilon)||delete Diagram_edges[i]}(x0,y0,x1,y1),function clipCells(x0,y0,x1,y1){var iCell,cell,site,iHalfedge,halfedges,nHalfedges,start,startX,startY,end,endX,endY,nCells=Diagram_cells.length,cover=!0;for(iCell=0;iCellDiagram_epsilon||Math.abs(endY-startY)>Diagram_epsilon)&&(halfedges.splice(iHalfedge,0,Diagram_edges.push(createBorderEdge(site,end,Math.abs(endX-x0)Diagram_epsilon?[x0,Math.abs(startX-x0)Diagram_epsilon?[Math.abs(startY-y1)Diagram_epsilon?[x1,Math.abs(startX-x1)Diagram_epsilon?[Math.abs(startY-y0)=n)return null;var dx=x-cell.site[0],dy=y-cell.site[1],d2=dx*dx+dy*dy;do{cell=that.cells[i0=i1],i1=null,cell.halfedges.forEach(function(e){var edge=that.edges[e],v=edge.left;if(v!==cell.site&&v||(v=edge.right)){var vx=x-v[0],vy=y-v[1],v2=vx*vx+vy*vy;v20?0:domain[0],domain[1]=domain[1]>0?domain[1]:0),domain},unionDomain=function unionDomain(domains,fieldType){var _ref2,domain=[];(domains=domains.filter(function(dom){return dom&&dom.length})).length&&(domain=fieldType===CATEGORICAL?(_ref2=[]).concat.apply(_ref2,common_utils_toConsumableArray(domains)):[Math.min.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[0]}))),Math.max.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[1]})))]);return domain},symbolFns={circle:symbol_circle,cross:symbol_cross,diamond:diamond,square:square,star:star,wye:wye,triangle:triangle},easeFns={cubic:cubicInOut,bounce:bounceOut,linear:function src_linear_linear(t){return+t},elastic:elasticOut,back:backInOut,poly:polyInOut,circle:function circleInOut(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}},common_utils_getClosestIndexOf=function getClosestIndexOf(arr,value,side){for(var mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1},getNearestValue=function getNearestValue(data,key){var filterData=data.filter(function(d){return"number"==typeof d});return filterData[common_utils_getClosestIndexOf(filterData,key)]},getWindow=function getWindow(){return window},getQualifiedClassName=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(cls,id,prefix){return cls=cls.replace(/^\.*/,""),["".concat(prefix,"-").concat(cls),"".concat(prefix,"-").concat(cls,"-").concat(id)]}),defaultValue=function defaultValue(param,value){return void 0===param||"object"===common_utils_typeof(param)&&!param?value:param},objectIterator=function objectIterator(obj,fn){for(var key in obj)Object.hasOwnProperty.call(obj,key)&&fn(key,obj)},common_utils_Voronoi=function(){function Voronoi(){var data=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];!function common_utils_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Voronoi),this._voronoi=src_voronoi().x(function(d){return d.x}).y(function(d){return d.y}),this.data(data)}return function common_utils_createClass(Constructor,protoProps,staticProps){return protoProps&&common_utils_defineProperties(Constructor.prototype,protoProps),staticProps&&common_utils_defineProperties(Constructor,staticProps),Constructor}(Voronoi,[{key:"data",value:function data(_data){return _data&&(this._voronoiFn=this._voronoi(_data)),this}},{key:"find",value:function find(x,y,radius){return this._voronoiFn.find(x,y,radius)}}]),Voronoi}(),getObjProp=function getObjProp(obj){if(void 0===obj||null===obj)return obj;for(var retObj=obj,_len=arguments.length,fields=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)fields[_key-1]=arguments[_key];for(var i=0,len=fields.length;i=0;i--)if(arr1[i]!==arr2[i])return!1;return!0}(oldVal,newVal):"Object"===type?Object.is(oldVal,newVal):oldVal===newVal}},ERROR_MSG={INTERFACE_IMPL:"Method not implemented"},mergeRecursive=function mergeRecursive(source,sink){for(var prop in sink)isSimpleObject(source[prop])&&isSimpleObject(sink[prop])?mergeRecursive(source[prop],sink[prop]):sink[prop]instanceof Object&&sink[prop].constructor===Object?(source[prop]={},mergeRecursive(source[prop],sink[prop])):source[prop]=sink[prop];return source},common_utils_createSelection=function createSelection(sel,appendObj,data,idFn){var selection=sel||function dataSelect(idFn){return new DataSystem_selection(idFn)}(idFn),mergedSelection=(selection=selection.data(data)).enter().append(appendObj).merge(selection),exitSelection=selection.exit();return exitSelection.getObjects().forEach(function(inst){return inst.remove()}),exitSelection.remove(),mergedSelection},common_utils_interpolator=function interpolator(){return src_value},common_utils_numberInterpolator=function numberInterpolator(){return src_number},common_utils_piecewiseInterpolator=function piecewiseInterpolator(){return piecewise_piecewise};var rgbToHsv=function rgbToHsv(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r=+r,g=+g,b=+b,a=+a,r/=255,g/=255,b/=255;var h,s,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;switch(s=l>.5?d/(2-max-min):d/(max+min),max){case r:h=(g-b)/d+(g=range[0]&&val<=range[1]})},{saveChild:!1,mode:mode})},common_utils_getDataModelFromIdentifiers=function getDataModelFromIdentifiers(dataModel,identifiers,mode){var filteredDataModel;if(identifiers instanceof Array){var fieldsConfig=dataModel.getFieldsConfig(),dataArr=identifiers.slice(1,identifiers.length);if(identifiers instanceof Function)filteredDataModel=identifiers(dataModel,{},!1);else if(identifiers instanceof Array&&identifiers[0].length){var filteredSchema=identifiers[0].filter(function(d){return d in fieldsConfig});filteredDataModel=dataModel.select(function(fields){var include=!0;return filteredSchema.forEach(function(propField,idx){var value=fields[propField].internalValue,index=dataArr.findIndex(function(d){return d[idx]===value});include=include&&-1!==index}),include},{saveChild:!1,mode:mode})}else filteredDataModel=dataModel.select(function(){return!1},{saveChild:!1,mode:mode})}else filteredDataModel=getDataModelFromRange(dataModel,identifiers,mode);return filteredDataModel},isValidValue=function isValidValue(value){return!isNaN(value)&&value!==-1/0&&value!==1/0},toArray=function toArray(arr){return arr instanceof Array?arr:[arr]},common_utils_getSymbol=function getSymbol(type){return function(){var type=d3_shape_src_constant(symbol_circle),size=d3_shape_src_constant(64),context=null;function symbol(){var buffer;if(context||(context=buffer=src_path()),type.apply(this,arguments).draw(context,+size.apply(this,arguments)),buffer)return context=null,buffer+""||null}return symbol.type=function(_){return arguments.length?(type="function"==typeof _?_:d3_shape_src_constant(_),symbol):type},symbol.size=function(_){return arguments.length?(size="function"==typeof _?_:d3_shape_src_constant(+_),symbol):size},symbol.context=function(_){return arguments.length?(context=null==_?null:_,symbol):context},symbol}().type(symbolFns[type])},stackOrders=(_defineProperty(_stackOrders={},"none",order_none),_defineProperty(_stackOrders,"ascending",order_ascending),_defineProperty(_stackOrders,"descending",function(series){return order_ascending(series).reverse()}),_stackOrders),stackOffsets=(_defineProperty(_stackOffsets={},"diverging",function(series,order){if((n=series.length)>0)for(var i,d,dy,yp,yn,n,j=0,m=series[order[0]].length;j=0?(d[0]=yp,d[1]=yp+=dy):dy<0?(d[1]=yn,d[0]=yn+=dy):d[0]=yp}),_defineProperty(_stackOffsets,"none",none),_defineProperty(_stackOffsets,"expand",function(series,order){if((n=series.length)>0){for(var i,n,y,j=0,m=series[0].length;j0&&(m=(s0=series[order[0]]).length)>0){for(var s0,m,n,y=0,j=1;j0&&(sum+=v);for(null!=sortValues?index.sort(function(i,j){return sortValues(arcs[i],arcs[j])}):null!=sort&&index.sort(function(i,j){return sort(data[i],data[j])}),i=0,k=sum?(da-n*pa)/sum:0;i0?v*k:0)+pa,arcs[j]={data:data[j],index:i,value:v,startAngle:a0,endAngle:a1,padAngle:p};return arcs}return pie.value=function(_){return arguments.length?(value="function"==typeof _?_:d3_shape_src_constant(+_),pie):value},pie.sortValues=function(_){return arguments.length?(sortValues=_,sort=null,pie):sortValues},pie.sort=function(_){return arguments.length?(sort=_,sortValues=null,pie):sort},pie.startAngle=function(_){return arguments.length?(startAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):startAngle},pie.endAngle=function(_){return arguments.length?(endAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):endAngle},pie.padAngle=function(_){return arguments.length?(padAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):padAngle},pie},arc:function(){var innerRadius=arcInnerRadius,outerRadius=arcOuterRadius,cornerRadius=d3_shape_src_constant(0),padRadius=null,startAngle=arcStartAngle,endAngle=arcEndAngle,padAngle=arcPadAngle,context=null;function arc(){var buffer,r,r0=+innerRadius.apply(this,arguments),r1=+outerRadius.apply(this,arguments),a0=startAngle.apply(this,arguments)-halfPi,a1=endAngle.apply(this,arguments)-halfPi,da=abs(a1-a0),cw=a1>a0;if(context||(context=buffer=src_path()),r1math_epsilon)if(da>math_tau-math_epsilon)context.moveTo(r1*cos(a0),r1*sin(a0)),context.arc(0,0,r1,a0,a1,!cw),r0>math_epsilon&&(context.moveTo(r0*cos(a1),r0*sin(a1)),context.arc(0,0,r0,a1,a0,cw));else{var t0,t1,a01=a0,a11=a1,a00=a0,a10=a1,da0=da,da1=da,ap=padAngle.apply(this,arguments)/2,rp=ap>math_epsilon&&(padRadius?+padRadius.apply(this,arguments):math_sqrt(r0*r0+r1*r1)),rc=math_min(abs(r1-r0)/2,+cornerRadius.apply(this,arguments)),rc0=rc,rc1=rc;if(rp>math_epsilon){var p0=asin(rp/r0*sin(ap)),p1=asin(rp/r1*sin(ap));(da0-=2*p0)>math_epsilon?(a00+=p0*=cw?1:-1,a10-=p0):(da0=0,a00=a10=(a0+a1)/2),(da1-=2*p1)>math_epsilon?(a01+=p1*=cw?1:-1,a11-=p1):(da1=0,a01=a11=(a0+a1)/2)}var x01=r1*cos(a01),y01=r1*sin(a01),x10=r0*cos(a10),y10=r0*sin(a10);if(rc>math_epsilon){var oc,x11=r1*cos(a11),y11=r1*sin(a11),x00=r0*cos(a00),y00=r0*sin(a00);if(da1?0:x<-1?math_pi:Math.acos(x)}((ax*bx+ay*by)/(math_sqrt(ax*ax+ay*ay)*math_sqrt(bx*bx+by*by)))/2),lc=math_sqrt(oc[0]*oc[0]+oc[1]*oc[1]);rc0=math_min(rc,(r0-lc)/(kc-1)),rc1=math_min(rc,(r1-lc)/(kc+1))}}da1>math_epsilon?rc1>math_epsilon?(t0=cornerTangents(x00,y00,x01,y01,r1,rc1,cw),t1=cornerTangents(x11,y11,x10,y10,r1,rc1,cw),context.moveTo(t0.cx+t0.x01,t0.cy+t0.y01),rc1math_epsilon&&da0>math_epsilon?rc0>math_epsilon?(t0=cornerTangents(x10,y10,x11,y11,r0,-rc0,cw),t1=cornerTangents(x01,y01,x00,y00,r0,-rc0,cw),context.lineTo(t0.cx+t0.x01,t0.cy+t0.y01),rc01?_len3-1:0),_key3=1;_key3<_len3;_key3++)measureFieldNames[_key3-1]=arguments[_key3];var filteredReducers={};if(dataModel instanceof datamodel_default.a){var derivations=[].concat(common_utils_toConsumableArray(dataModel.getDerivations().reverse()),common_utils_toConsumableArray(dataModel.getAncestorDerivations().reverse())),nearestReducers=defaultValue(getObjProp(derivations.find(function(derv){return derv.op===dist_datamodel.DM_DERIVATIVES.GROUPBY}),"criteria"),{}),measures=dataModel.getFieldspace().getMeasure();(measureFieldNames=measureFieldNames.length?measureFieldNames:Object.keys(measures)).forEach(function(measureName){if(nearestReducers[measureName])filteredReducers[measureName]=nearestReducers[measureName];else{var measureField=measures[measureName];measureField&&(filteredReducers[measureName]=measureField.defAggFn())}})}return filteredReducers},retrieveFieldDisplayName=function retrieveFieldDisplayName(dm,fieldName){return dm.getFieldspace().fieldsObj()[fieldName].displayName()},sortOrderMap=(_defineProperty(_sortOrderMap={},"asc",function(firstVal,secondVal){return firstVal.localeCompare(secondVal)}),_defineProperty(_sortOrderMap,"desc",function(firstVal,secondVal){return secondVal.localeCompare(firstVal)}),_sortOrderMap),common_utils_intersect=function intersect(arr1,arr2){var _accessors=_slicedToArray(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[function(v){return v},function(v){return v}],2),fn1=_accessors[0],fn2=_accessors[1],set=new Set(arr2.map(function(v){return fn2(v)}));return arr1.filter(function(value){return set.has(fn1(value))})},xhtml="http://www.w3.org/1999/xhtml",src_namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},src_namespace=function(name){var prefix=name+="",i=prefix.indexOf(":");return i>=0&&"xmlns"!==(prefix=name.slice(0,i))&&(name=name.slice(i+1)),src_namespaces.hasOwnProperty(prefix)?{space:src_namespaces[prefix],local:name}:name};var creator=function(name){var fullname=src_namespace(name);return(fullname.local?function creatorFixed(fullname){return function(){return this.ownerDocument.createElementNS(fullname.space,fullname.local)}}:function creatorInherit(name){return function(){var document=this.ownerDocument,uri=this.namespaceURI;return uri===xhtml&&document.documentElement.namespaceURI===xhtml?document.createElement(name):document.createElementNS(uri,name)}})(fullname)};function selector_none(){}var src_selector=function(selector){return null==selector?selector_none:function(){return this.querySelector(selector)}};function selectorAll_empty(){return[]}var selectorAll=function(selector){return null==selector?selectorAll_empty:function(){return this.querySelectorAll(selector)}},matcher=function(selector){return function(){return this.matches(selector)}},sparse=function(update){return new Array(update.length)};function EnterNode(parent,datum){this.ownerDocument=parent.ownerDocument,this.namespaceURI=parent.namespaceURI,this._next=null,this._parent=parent,this.__data__=datum}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(child){return this._parent.insertBefore(child,this._next)},insertBefore:function insertBefore(child,next){return this._parent.insertBefore(child,next)},querySelector:function querySelector(selector){return this._parent.querySelector(selector)},querySelectorAll:function querySelectorAll(selector){return this._parent.querySelectorAll(selector)}};var keyPrefix="$";function bindIndex(parent,group,enter,update,exit,data){for(var node,i=0,groupLength=group.length,dataLength=data.length;ib?1:a>=b?0:NaN}var src_window=function(node){return node.ownerDocument&&node.ownerDocument.defaultView||node.document&&node||node.defaultView};function styleValue(node,name){return node.style.getPropertyValue(name)||src_window(node).getComputedStyle(node,null).getPropertyValue(name)}function classArray(string){return string.trim().split(/^|\s+/)}function classList(node){return node.classList||new ClassList(node)}function ClassList(node){this._node=node,this._names=classArray(node.getAttribute("class")||"")}function classedAdd(node,names){for(var list=classList(node),i=-1,n=names.length;++i=0&&(this._names.splice(i,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(name){return this._names.indexOf(name)>=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 parent=this.parentNode;parent&&parent.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 filterEvents={},on_event=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(filterEvents={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(listener,index,group){return listener=contextListener(listener,index,group),function(event){var related=event.relatedTarget;related&&(related===this||8&related.compareDocumentPosition(this))||listener.call(this,event)}}function contextListener(listener,index,group){return function(event1){var event0=on_event;on_event=event1;try{listener.call(this,this.__data__,index,group)}finally{on_event=event0}}}function onRemove(typename){return function(){var on=this.__on;if(on){for(var o,j=0,i=-1,m=on.length;j=i1&&(i1=i0+1);!(next=updateGroup[i1])&&++i1=0;)(node=group[i])&&(next&&4^node.compareDocumentPosition(next)&&next.parentNode.insertBefore(node,next),next=node);return this},sort:function(compare){function compareNode(a,b){return a&&b?compare(a.__data__,b.__data__):!a-!b}compare||(compare=sort_ascending);for(var groups=this._groups,m=groups.length,sortgroups=new Array(m),j=0;j1?this.each((null==value?function styleRemove(name){return function(){this.style.removeProperty(name)}}:"function"==typeof value?function styleFunction(name,value,priority){return function(){var v=value.apply(this,arguments);null==v?this.style.removeProperty(name):this.style.setProperty(name,v,priority)}}:function styleConstant(name,value,priority){return function(){this.style.setProperty(name,value,priority)}})(name,value,null==priority?"":priority)):styleValue(this.node(),name)},property:function(name,value){return arguments.length>1?this.each((null==value?function propertyRemove(name){return function(){delete this[name]}}:"function"==typeof value?function propertyFunction(name,value){return function(){var v=value.apply(this,arguments);null==v?delete this[name]:this[name]=v}}:function propertyConstant(name,value){return function(){this[name]=value}})(name,value)):this.node()[name]},classed:function(name,value){var names=classArray(name+"");if(arguments.length<2){for(var list=classList(this.node()),i=-1,n=names.length;++i=0&&(name=t.slice(i+1),t=t.slice(0,i)),{type:t,name:name}})}(typename+""),n=typenames.length;if(!(arguments.length<2)){for(on=value?onAdd:onRemove,null==capture&&(capture=!1),i=0;i=0&&(name=t.slice(i+1),t=t.slice(0,i)),t&&!types.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:name}})}(typename+"",_),i=-1,n=T.length;if(!(arguments.length<2)){if(null!=callback&&"function"!=typeof callback)throw new Error("invalid callback: "+callback);for(;++i0)for(var n,t,args=new Array(n),i=0;iclickDistance2}gestures.mouse("drag")}function mouseupped(){src_select(on_event.view).on("mousemove.drag mouseup.drag",null),function yesdrag(view,noclick){var root=view.document.documentElement,selection=src_select(view).on("dragstart.drag",null);noclick&&(selection.on("click.drag",noevent,!0),setTimeout(function(){selection.on("click.drag",null)},0)),"onselectstart"in root?selection.on("selectstart.drag",null):(root.style.MozUserSelect=root.__noselect,delete root.__noselect)}(on_event.view,mousemoving),noevent(),gestures.mouse("end")}function touchstarted(){if(filter.apply(this,arguments)){var i,gesture,touches=on_event.changedTouches,c=container.apply(this,arguments),n=touches.length;for(i=0;i=0&&t._call.call(null,e),t=t._next;--timer_frame}()}finally{timer_frame=0,function nap(){var t0,t2,t1=taskHead,time=1/0;for(;t1;)t1._call?(time>t1._time&&(time=t1._time),t0=t1,t1=t1._next):(t2=t1._next,t1._next=null,t1=t0?t0._next=t2:taskHead=t2);taskTail=t0,sleep(time)}(),clockNow=0}}function poke(){var now=clock.now(),delay=now-clockLast;delay>pokeDelay&&(clockSkew-=delay,clockLast=now)}function sleep(time){timer_frame||(timeout&&(timeout=clearTimeout(timeout)),time-clockNow>24?(time<1/0&&(timeout=setTimeout(wake,time-clock.now()-clockSkew)),timer_interval&&(timer_interval=clearInterval(timer_interval))):(timer_interval||(clockLast=clock.now(),timer_interval=setInterval(poke,pokeDelay)),timer_frame=1,setFrame(wake)))}Timer.prototype=timer_timer.prototype={constructor:Timer,restart:function restart(callback,delay,time){if("function"!=typeof callback)throw new TypeError("callback is not a function");time=(null==time?now():+time)+(null==delay?0:+delay),this._next||taskTail===this||(taskTail?taskTail._next=this:taskHead=this,taskTail=this),this._call=callback,this._time=time,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var src_timeout=function(callback,delay,time){var t=new Timer;return delay=null==delay?0:+delay,t.restart(function(elapsed){t.stop(),callback(elapsed+delay)},delay,time),t},emptyOn=src_dispatch("start","end","cancel","interrupt"),emptyTween=[],CREATED=0,SCHEDULED=1,STARTING=2,STARTED=3,RUNNING=4,ENDING=5,ENDED=6,transition_schedule=function(node,name,id,index,group,timing){var schedules=node.__transition;if(schedules){if(id in schedules)return}else node.__transition={};!function schedule_create(node,id,self){var tween,schedules=node.__transition;function start(elapsed){var i,j,n,o;if(self.state!==SCHEDULED)return stop();for(i in schedules)if((o=schedules[i]).name===self.name){if(o.state===STARTED)return src_timeout(start);o.state===RUNNING?(o.state=ENDED,o.timer.stop(),o.on.call("interrupt",node,node.__data__,o.index,o.group),delete schedules[i]):+iCREATED)throw new Error("too late; already scheduled");return schedule}function schedule_set(node,id){var schedule=schedule_get(node,id);if(schedule.state>STARTED)throw new Error("too late; already running");return schedule}function schedule_get(node,id){var schedule=node.__transition;if(!schedule||!(schedule=schedule[id]))throw new Error("transition not found");return schedule}function tweenValue(transition,name,value){var id=transition._id;return transition.each(function(){var schedule=schedule_set(this,id);(schedule.value||(schedule.value={}))[name]=value.apply(this,arguments)}),function(node){return schedule_get(node,id).value[name]}}var transition_interpolate=function(a,b){var c;return("number"==typeof b?src_number:b instanceof color_color?src_rgb:(c=color_color(b))?(b=c,src_rgb):src_string)(a,b)};var transition_selection_Selection=src_selection.prototype.constructor;function style_styleRemove(name){return function(){this.style.removeProperty(name)}}var transition_id=0;function Transition(groups,parents,name,id){this._groups=groups,this._parents=parents,this._name=name,this._id=id}function newId(){return++transition_id}var selection_prototype=src_selection.prototype;Transition.prototype=function src_transition_transition(name){return src_selection().transition(name)}.prototype={constructor:Transition,select:function(select){var name=this._name,id=this._id;"function"!=typeof select&&(select=src_selector(select));for(var groups=this._groups,m=groups.length,subgroups=new Array(m),j=0;j=0&&(t=t.slice(0,i)),!t||"start"===t})}(name)?init:schedule_set;return function(){var schedule=sit(this,id),on=schedule.on;on!==on0&&(on1=(on0=on).copy()).on(name,listener),schedule.on=on1}}(id,name,listener))},attr:function(name,value){var fullname=src_namespace(name),i="transform"===fullname?interpolateTransformSvg:transition_interpolate;return this.attrTween(name,"function"==typeof value?(fullname.local?function attr_attrFunctionNS(fullname,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttributeNS(fullname.space,fullname.local))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttribute(name))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttribute(name)}})(fullname,i,tweenValue(this,"attr."+name,value)):null==value?(fullname.local?function attr_attrRemoveNS(fullname){return function(){this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrRemove(name){return function(){this.removeAttribute(name)}})(fullname):(fullname.local?function attr_attrConstantNS(fullname,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttributeNS(fullname.space,fullname.local);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}:function attr_attrConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttribute(name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}})(fullname,i,value))},attrTween:function(name,value){var key="attr."+name;if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;var fullname=src_namespace(name);return this.tween(key,(fullname.local?function attrTweenNS(fullname,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolateNS(fullname,i){return function(t){this.setAttributeNS(fullname.space,fullname.local,i(t))}}(fullname,i)),t0}return tween._value=value,tween}:function attrTween(name,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolate(name,i){return function(t){this.setAttribute(name,i(t))}}(name,i)),t0}return tween._value=value,tween})(fullname,value))},style:function(name,value,priority){var i="transform"==(name+="")?interpolateTransformCss:transition_interpolate;return null==value?this.styleTween(name,function styleNull(name,interpolate){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),string1=(this.style.removeProperty(name),styleValue(this,name));return string0===string1?null:string0===string00&&string1===string10?interpolate0:interpolate0=interpolate(string00=string0,string10=string1)}}(name,i)).on("end.style."+name,style_styleRemove(name)):"function"==typeof value?this.styleTween(name,function style_styleFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),value1=value(this),string1=value1+"";return null==value1&&(this.style.removeProperty(name),string1=value1=styleValue(this,name)),string0===string1?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1))}}(name,i,tweenValue(this,"style."+name,value))).each(function styleMaybeRemove(id,name){var on0,on1,listener0,remove,key="style."+name,event="end."+key;return function(){var schedule=schedule_set(this,id),on=schedule.on,listener=null==schedule.value[key]?remove||(remove=style_styleRemove(name)):void 0;on===on0&&listener0===listener||(on1=(on0=on).copy()).on(event,listener0=listener),schedule.on=on1}}(this._id,name)):this.styleTween(name,function style_styleConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=styleValue(this,name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}(name,i,value),priority).on("end.style."+name,null)},styleTween:function(name,value,priority){var key="style."+(name+="");if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function styleTween(name,value,priority){var t,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t=(i0=i)&&function styleInterpolate(name,i,priority){return function(t){this.style.setProperty(name,i(t),priority)}}(name,i,priority)),t}return tween._value=value,tween}(name,value,null==priority?"":priority))},text:function(value){return this.tween("text","function"==typeof value?function text_textFunction(value){return function(){var value1=value(this);this.textContent=null==value1?"":value1}}(tweenValue(this,"text",value)):function text_textConstant(value){return function(){this.textContent=value}}(null==value?"":value+""))},remove:function(){return this.on("end.remove",function removeFunction(id){return function(){var parent=this.parentNode;for(var i in this.__transition)if(+i!==id)return;parent&&parent.removeChild(this)}}(this._id))},tween:function(name,value){var id=this._id;if(name+="",arguments.length<2){for(var t,tween=schedule_get(this.node(),id).tween,i=0,n=tween.length;iSTARTING&&schedule.state4&&void 0!==arguments[4]?arguments[4]:{},keyFn=arguments.length>5?arguments[5]:void 0;(parent instanceof HTMLElement||parent instanceof SVGElement)&&(parent=renderer_utils_selectElement(parent));var filter,selectorVal=selector?selector[0]:null,selectorType=null,actualSelector=null,element=null,enterSel=null,mergeSel=null;selectorVal?"#"===selectorVal?(selectorType="id",actualSelector=selector):(selectorType="class",actualSelector="."===selector[0]?selector:".".concat(selector)):(actualSelector=elemType,filter=!0),element=parent.selectAll(actualSelector),filter&&(element=element.filter(function(){return this.parentNode===parent.node()})),enterSel=(element=element.data(data,keyFn)).enter().append(elemType||"div"),callbacks.enter&&enterSel.each(function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];callbacks.enter.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),mergeSel=enterSel.merge(element),callbacks.update&&mergeSel.each(function(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];callbacks.update.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),"class"===selectorType?mergeSel.classed("."===selectorVal?selector.substring(1,selector.length):selector,!0):"id"===selectorType&&mergeSel.attr("id",selector.substring(1,selector.length));var exitSel=element.exit();return callbacks.exit?exitSel.each(function(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];callbacks.exit.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}):exitSel.remove(),mergeSel},applyStyle=function applyStyle(elem,styleObj){return Object.entries(styleObj).forEach(function(d){elem.style(d[0],d[1])},void 0),elem},setElementAttrs=function setElementAttrs(element,attrs){for(var key in attrs)({}).hasOwnProperty.call(attrs,key)&&element.attr(key,attrs[key])},renderer_utils_setAttrs=function setAttrs(element,attrs,className){return element instanceof src_selection||(element=renderer_utils_selectElement(element)),void 0!==className?element.selectAll(".".concat(className)).each(function(){setElementAttrs(src_select(this),attrs)}):setElementAttrs(element,attrs),element},renderer_utils_setStyles=function setStyles(element,styles){for(var key in element instanceof src_selection||(element=renderer_utils_selectElement(element)),styles)({}).hasOwnProperty.call(styles,key)&&element.style(key,styles[key]);return element},renderer_utils_createElements=function createElements(params){var data,sel,container=src_select(params.container);"number"==typeof(data=params.data)&&(data=Array(data).fill().map(function(d,i){return i})),sel=container.selectAll(params.selector).data(data),(sel=container.selectAll(params.selector).filter(function(){return this.parentNode===container.node()}).data(params.data)).enter().append(params.append).merge(sel).each(function(d,i){params.each(d,src_select(this),i)}).attr("class",params.className||""),sel.exit().remove()},renderer_utils_getClientPoint=function getClientPoint(){var pos=src_point.apply(void 0,arguments);return{x:pos[0],y:pos[1]}},renderer_utils_getEvent=function getEvent(){return on_event},renderer_utils_getD3Drag=function getD3Drag(){return src_drag},renderer_utils_getSmartComputedStyle=function getSmartComputedStyle(group,css){var textEl,mandatoryStyle={"fill-opacity":0},className="string"==typeof css?css:css instanceof Array?css.join(" "):void 0;textEl=group.node()instanceof HTMLElement?group.append("div").html("W"):group.append("text").text("W"),className?textEl.attr("class",className):"object"===renderer_utils_typeof(css)&&(delete css["fill-opacity"],mergeRecursive(mandatoryStyle,css)),textEl.style(mandatoryStyle);var computedStyle=window.getComputedStyle(textEl.node()),styleForSmartLabel={fontSize:computedStyle.fontSize,fontFamily:computedStyle.fontFamily,fontWeight:computedStyle.fontWeight,fontStyle:computedStyle.fontStyle};return textEl.remove(),styleForSmartLabel},hasTouch=function hasTouch(){return"ontouchstart"in document.documentElement},hyperdis=__webpack_require__(5),hyperdis_default=__webpack_require__.n(hyperdis);function store_slicedToArray(arr,i){return function store_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function store_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function store_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function store_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:function(){return{}};return props.forEach(function(prop){obj[prop]||(obj[prop]=val()),obj=obj[prop]}),obj},fetchPropValues=function fetchPropValues(propNames,params,deps){return params.map(function(param,i){var prop=propNames[i];return param.map(function(val){return void 0===val||null===val?val:val[deps[prop]]})})},setContexts=function setContexts(contexts,propObj,contextMap){var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,_iterator=propObj.keys()[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0){var key=_step.value;contexts[key]={context:contextMap[key],deps:propObj.get(key).depProps}}}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{_iteratorNormalCompletion||null==_iterator.return||_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}return contexts},store_registerListener=function registerListener(context,type){for(var _len=arguments.length,options=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)options[_key-2]=arguments[_key];var propList=options[0],callBack=options[1],instantCall=options[2],_options$=options[3],namespaceInf=void 0===_options$?{}:_options$,props=propList;Array.isArray(propList)||(props=[propList]);var ns=namespaceInf.namespace,callbackFn=function(propNames,namespaceVal){return function(){var commits=context._savedCommits,propListenerMap=context._propListenerMap;if(!propNames.some(function(prop){return getObjProp(propListenerMap,prop,"disabled")})){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];if(namespaceVal){var listenersObj=context._registeredListeners[namespaceVal],contextMap=context._contextMap[namespaceVal],contextsObj={};for(var key in propNames.forEach(function(prop){var commitsObj=defaultValue(getObjProp(commits,prop,type),{}),listeners=listenersObj[prop].subNamespaces,propDeps=propListenerMap[prop][type];for(var nm in commitsObj){var fnInf=defaultValue(propDeps[nm],{fns:0}),fns=fnInf.fns;fns>0&&(setContexts(contextsObj,listeners[nm],contextMap),fns--),fns<=0&&delete commitsObj[nm],fnInf.fns=fns}}),contextsObj){var obj=contextsObj[key];callBack.apply(void 0,[obj.context].concat(store_toConsumableArray(fetchPropValues(propNames,params,obj.deps))))}}else callBack.apply(void 0,params)}}}(props,ns),fn=context.model[type](props,callbackFn,instantCall);ns&&function registerPropInMaps(store,props,namespaceInf,type){var registeredListeners=store._registeredListeners,propListenerMap=store._propListenerMap,subNamespace=namespaceInf.subNamespace,ns=namespaceInf.namespace;initProp(registeredListeners,[ns]),props.forEach(function(prop){var subNamespaces=defaultValue(getObjProp(registeredListeners,ns,prop,"subNamespace"),[]),fns=defaultValue(getObjProp(propListenerMap,prop,type,"fns"),0);fns++,subNamespace&&subNamespaces.push(subNamespace),registeredListeners[ns][prop]={subNamespace:subNamespaces,allProps:props,subNamespaces:{}},initProp(propListenerMap,[prop,type]),propListenerMap[prop][type]={fns:fns,_fnCount:fns}})}(context,props,namespaceInf,type),function addListenerToNamespace(namespaceInf,fn,context){var key=namespaceInf.key,namespace=namespaceInf.id,listeners=context._listeners;if(namespace){!listeners.get(namespace)&&listeners.set(namespace,new Map);var namespaceListeners=listeners.get(namespace);key||(key=namespaceListeners.size),namespaceListeners.set(key,fn)}else key=key||listeners.size,listeners.set(key,fn)}(namespaceInf,fn,context)},store_createMap=function createMap(){return new Map},listenerTypes=["next","on"],removePropValue=function removePropValue(context,map,propInf){var sns=propInf.subNamespace,prop=propInf.prop,propObj=propInf.propListenerMap[prop];if(listenerTypes.forEach(function(type){type in propObj&&delete propObj[type][sns]}),map.has(sns)){var value=context.get(prop);value instanceof Object&&sns in value&&delete value[sns],map.delete(sns)}},store_Store=function(){function Store(config){!function store_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Store),this.model=hyperdis_default.a.create(config),this._listeners=new Map,this._registeredListeners={},this._contextMap={},this._commits={},this._savedCommits={},this._queuedProps={},this._propListenerMap={},this._locked=!1}return function store_createClass(Constructor,protoProps,staticProps){return protoProps&&store_defineProperties(Constructor.prototype,protoProps),staticProps&&store_defineProperties(Constructor,staticProps),Constructor}(Store,[{key:"lockModel",value:function lockModel(){return this.model.lock(),this._locked=!0,this}},{key:"unlockModel",value:function unlockModel(){return this._locked=!1,this.model.unlock(),this}},{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"lockCommits",value:function lockCommits(props){var _this=this;return props.forEach(function(prop){_this._commits[prop]={locked:!0,queue:[]}}),this}},{key:"unlockCommits",value:function unlockCommits(props){var _this2=this,commitsObj=this._commits;return this.lockModel(),props.forEach(function(prop){commitsObj[prop].locked=!1;var queuedProps={},queue=commitsObj[prop].queue;queue.forEach(function(params){var _params=store_slicedToArray(params,3),propName=_params[0],value=_params[1],namespace=_params[2];if(namespace){var propObj=initProp(queuedProps,[propName,namespace]);Object.assign(propObj,value)}}),queue.forEach(function(params){var _params2=store_slicedToArray(params,3),propName=_params2[0],value=_params2[1],namespace=_params2[2];_this2.commit(propName,propName in queuedProps?queuedProps[propName][namespace]:value,namespace)}),delete commitsObj[prop]}),this.unlockModel(),this}},{key:"addSubNamespace",value:function addSubNamespace(sns,namespace,context){var listeners=this._registeredListeners[namespace],propListenerMap=this._propListenerMap;initProp(this._contextMap,[namespace]),this._contextMap[namespace][sns]=context;var _loop=function _loop(key){var obj=listeners[key],propObj=propListenerMap[key],propFns=listenerTypes.reduce(function(acc,type){var val=defaultValue(getObjProp(propObj,type,"fns"),0);return val&&(acc[type]=val),acc},{}),allProps=obj.allProps,subNamespaces=obj.subNamespaces,subNamespace=obj.subNamespace;(subNamespace.length?subNamespace:[sns]).forEach(function(ns){var nsObj=ns instanceof Function?ns(context):ns,names=function retrieveNamespaces(names,key){return names instanceof Object?[names[key]]:names instanceof Array?names:[names]}(nsObj,key),depProps=allProps.reduce(function(acc,prop){return acc[prop]=ns instanceof Function?nsObj[prop]:ns,acc},{});names.forEach(function(nm){for(var type in initProp(subNamespaces,[nm],store_createMap).set(sns,{depProps:depProps}),propFns){initProp(propObj,[type,nm]);var fns=propFns[type];propObj[type][nm]={fns:fns,_fnCount:fns}}})})};for(var key in listeners)_loop(key);return this}},{key:"commit",value:function commit(propName,value,namespace){var disableListener=arguments.length>3&&void 0!==arguments[3]&&arguments[3],sanitizedVal=value,commits=this._commits,savedCommits=this._savedCommits,locked=getObjProp(commits,propName,"locked"),propListenerMap=this._propListenerMap[propName]||{};if(propListenerMap.disabled=disableListener,locked)return commits[propName].queue.push([propName,value,namespace]),this;if(namespace){if(this._locked){var queuedProps=initProp(this._queuedProps,[propName]);queuedProps[namespace]=value,sanitizedVal=queuedProps}else(sanitizedVal=defaultValue(this.get(propName),{}))[namespace]=value;listenerTypes.forEach(function(type){initProp(savedCommits,[propName,type]),savedCommits[propName][type][namespace]=!0,getObjProp(propListenerMap,type,namespace)&&(propListenerMap[type][namespace].fns=propListenerMap[type][namespace]._fnCount)})}return this.model.prop(propName,sanitizedVal),this}},{key:"registerChangeListener",value:function registerChangeListener(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];return store_registerListener.apply(void 0,[this,"next"].concat(params)),this}},{key:"registerImmediateListener",value:function registerImmediateListener(){for(var _len4=arguments.length,params=new Array(_len4),_key4=0;_key4<_len4;_key4++)params[_key4]=arguments[_key4];store_registerListener.apply(void 0,[this,"on"].concat(params))}},{key:"get",value:function get(propName,subNamespace){var value=this.model.prop(propName);return subNamespace?value&&value[subNamespace]:value}},{key:"computed",value:function computed(propName,callBack){return this.model.calculatedProp(propName,callBack)}},{key:"append",value:function append(){var _this$model;return(_this$model=this.model).append.apply(_this$model,arguments),this}},{key:"unsubscribeAll",value:function unsubscribeAll(){return Object.values(this._listeners).forEach(function(fn){return fn()}),this}},{key:"unsubscribe",value:function unsubscribe(){var namespaceInf=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},id=namespaceInf.id,key=namespaceInf.key,listenersMap=this._listeners,listeners=listenersMap.get(id);if(key){var fn=listenersMap.get(key);fn&&fn()}else{var _iteratorNormalCompletion2=!0,_didIteratorError2=!1,_iteratorError2=void 0;try{for(var _step2,_iterator2=listeners.values()[Symbol.iterator]();!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=!0){(0,_step2.value)()}}catch(err){_didIteratorError2=!0,_iteratorError2=err}finally{try{_iteratorNormalCompletion2||null==_iterator2.return||_iterator2.return()}finally{if(_didIteratorError2)throw _iteratorError2}}listenersMap.set(id,[])}return this}},{key:"removeSubNamespace",value:function removeSubNamespace(subNamespace,namespace){var listenerMap=this._registeredListeners,contextMap=this._contextMap,propListenerMap=this._propListenerMap,listenersObj=listenerMap[namespace];for(var prop in listenersObj){var subNamespaces=listenersObj[prop].subNamespaces,propInf={subNamespace:subNamespace,prop:prop,propListenerMap:propListenerMap};if(subNamespaces[subNamespace])removePropValue(this,subNamespaces[subNamespace],propInf),delete subNamespaces[subNamespace];else for(var ns in subNamespaces){var snsMap=subNamespaces[ns];removePropValue(this,snsMap,propInf),snsMap.size||delete subNamespaces[ns]}}return delete contextMap[namespace][subNamespace],this}}]),Store}(),store_transactor=function transactor(holder,options,model){var conf,namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},store=model instanceof store_Store?model:new store_Store({}),stateProps={},namespace=namespaceInf.namespace,subNamespace=namespaceInf.subNamespace;for(var prop in options)if({}.hasOwnProperty.call(options,prop)){conf=options[prop];var nameSpaceProp=namespace?"".concat(namespace,".").concat(prop):prop;if(subNamespace){var value=defaultValue(store.get(nameSpaceProp),{});value[subNamespace]=conf.value,stateProps[nameSpaceProp]=value}else stateProps[prop]=conf.value;holder[prop]=function(context,meta,nsProp){return function(){for(var _len5=arguments.length,params=new Array(_len5),_key5=0;_key5<_len5;_key5++)params[_key5]=arguments[_key5];if(params.length){var _ref$takesMultiplePar=(meta||{}).takesMultipleParams,takesMultipleParams=void 0!==_ref$takesMultiplePar&&_ref$takesMultiplePar,val=takesMultipleParams?params:params[0];if(meta){var values,prevVal=context.get(nsProp,subNamespace),sanitization=meta.sanitization,typeCheck=meta.typeCheck,typeExpected=meta.typeExpected;if("function"==typeof sanitization&&(val=sanitization(val,prevVal,holder)),"function"==typeof typeCheck)typeCheck(val)&&(values=val);else"string"==typeof typeCheck&&"constructor"===typeCheck?val&&val.constructor.name===typeExpected&&(values=val):values=val;var preset=meta.preset,oldValues=toArray(context.get(nsProp,subNamespace));preset&&preset(values,holder),takesMultipleParams&&oldValues.forEach(function(value,i){void 0===values[i]&&(values[i]=value)}),values&&context.commit(nsProp,values,subNamespace)}else context.commit(nsProp,val,subNamespace);return holder}return context.get(nsProp,subNamespace)}}(store,conf.meta,nameSpaceProp,Array.isArray(conf.value))}if(subNamespace)for(var key in stateProps)store.commit(key,stateProps[key][subNamespace],subNamespace);else void 0===namespace?store.append(stateProps):store.append(namespace,stateProps);return[holder,store]},SmartlabelManager=__webpack_require__(3),SmartlabelManager_default=__webpack_require__.n(SmartlabelManager),events=["initialized","beforeupdate","updated","beforedraw","drawn","beforeremove","removed","animationend"],EVENT_LIST=[];["canvas","unit","layer","axis","facet-headers","legend","caption"].forEach(function(composition){events.forEach(function(event){EVENT_LIST.push("".concat(composition,".").concat(event))})});var event_list=EVENT_LIST;function lifecycle_manager_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=lifeCycles,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(eventName){var _this4=this;setTimeout(function(){_this4._notifiers[eventName]=lifecycle_manager_resolver,_this4._promises.set(eventName,_this4._makeNotifierPromise(eventName))},0)}}]),LifeCycleManager}(),src_InvalidAwareTypes=datamodel_default.a.InvalidAwareTypes,DRAG="drag",HOVER="hover",SELECTIONDRAG="selectiondrag",CLICK="click",LONGTOUCH="longtouch",TOUCHDRAG="touchdrag",ALL_ACTIONS="*",SELECTION_NEW_ENTRY=1,SELECTION_NEW_EXIT=-1,SELECTION_NULL=0,SELECTION_OLD_ENTRY=2,SELECTION_OLD_EXIT=-2;function selection_set_defineProperties(target,props){for(var i=0;i0?(set[key]===SELECTION_OLD_ENTRY&&retObj.entrySet[0].push(key),set[key]===SELECTION_NEW_ENTRY&&retObj.entrySet[1].push(key)):set[key]<0&&(set[key]===SELECTION_OLD_EXIT&&retObj.exitSet[0].push(key),set[key]===SELECTION_NEW_EXIT&&retObj.exitSet[1].push(key)),retObj.completeSet.push(key);return["entrySet","exitSet"].forEach(function(type){retObj[type]=retObj[type].map(function(e){return e.map(Number)})}),retObj.completeSet=retObj.completeSet.map(Number),retObj}},{key:"reset",value:function reset(ids){var set=this._set;if(ids)ids.forEach(function(i){set[i]=SELECTION_NULL});else{var lockedSel=this._lockedSelection;for(var key in set)key in lockedSel||(set[key]=SELECTION_NULL)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var set=this._set,addSet=[];for(var key in set)set[key]===SELECTION_NEW_ENTRY&&addSet.push(key);return addSet}},{key:"getExistingEntrySet",value:function getExistingEntrySet(addSet){var set=this._set;return addSet.filter(function(d){return set[d]===SELECTION_NEW_ENTRY||set[d]===SELECTION_OLD_ENTRY})}},{key:"getExistingExitSet",value:function getExistingExitSet(removeSet){var set=this._set;return removeSet.filter(function(d){return set[d]===SELECTION_NEW_EXIT||set[d]===SELECTION_OLD_EXIT})}},{key:"getOldEntry",value:function getOldEntry(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_ENTRY&&updateSet.push(key);return updateSet}},{key:"getOldExit",value:function getOldExit(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_EXIT&&updateSet.push(key);return updateSet}},{key:"getExitSet",value:function getExitSet(){var set=this._set,removeSet=[];for(var key in set)set[key]===SELECTION_NEW_EXIT&&removeSet.push(key);return removeSet}},{key:"getCompleteSet",value:function getCompleteSet(){var set=this._set,completeSet=[];for(var key in set)completeSet.push(key);return completeSet}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var set=this._set;for(var key in set)set[key]===SELECTION_NEW_ENTRY?set[key]=SELECTION_NEW_EXIT:set[key]===SELECTION_NEW_EXIT?set[key]=SELECTION_NEW_ENTRY:set[key]===SELECTION_OLD_ENTRY?set[key]=SELECTION_OLD_EXIT:set[key]=SELECTION_OLD_ENTRY;return this}}]),SelectionSet}();function helper_toConsumableArray(arr){return function helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},sideEffectStore=this.sideEffects(),sideEffect=sideEffectStore[name],disable=!1;options.filter&&options.filter(sideEffect)&&(disable=!0),!disable&&sideEffectStore[name].apply(selectionSet,payload,options)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(map){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,map||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(behaviour,payload){var propagationInfo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},propagate=void 0===propagationInfo.propagate||propagationInfo.propagate,action=this._actions.behavioural[behaviour],sideEffects=function getSideEffects(behaviour,behaviourEffectMap){var sideEffects=[];for(var key in behaviourEffectMap){var behaviours=key.split(",");behaviours.some(function(d){return d===behaviour})&&sideEffects.push({effects:behaviourEffectMap[key],behaviours:behaviours})}return sideEffects}(behaviour,this._behaviourEffectMap);if(this._propagationInf=propagationInfo,action){var selectionSet=action.dispatch(payload),propagationSelectionSet=this.getPropagationSelectionSet(selectionSet);this._entryExitSet[behaviour]=propagationSelectionSet;var shouldApplySideEffects=this.shouldApplySideEffects(propagate);if(propagate&&this.propagate(behaviour,payload,selectionSet.find(function(d){return d.sourceSelectionSet}),sideEffects),shouldApplySideEffects){var applicableSideEffects=this.getApplicableSideEffects(sideEffects,payload,propagationInfo);this.applySideEffects(applicableSideEffects,propagationSelectionSet,payload)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(selectionSet){return selectionSet.find(function(d){return!d.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(behaviour,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",behaviourConditions=this._sourceBehaviours[behaviour]||(this._sourceBehaviours[behaviour]={});return value instanceof Function?behaviourConditions[key]=value:behaviourConditions[key]=function(){return value},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(sideEffect,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",sideEffectConditions=this._sourceSideEffects[sideEffect]||(this._sourceSideEffects[sideEffect]={});value instanceof Function?sideEffectConditions[key]=value:sideEffectConditions[key]=function(){return value}}},{key:"removeSideEffectPolicy",value:function removeSideEffectPolicy(sideEffect,key){return delete this._sourceSideEffects[sideEffect][key],this}},{key:"removeBehaviourPolicy",value:function removeBehaviourPolicy(behaviour,key){return delete this._sourceBehaviours[behaviour][key],this}},{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(fn){return changeSideEffectAvailability(this,fn,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(fn){return changeSideEffectAvailability(this,fn,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(behaviour,physicalAction){var actionBehaviourMap=this._actionBehaviourMap;for(var key in actionBehaviourMap)if(key===physicalAction){var behaviourMap=actionBehaviourMap[key];behaviourMap.behaviours=behaviourMap.behaviours.filter(function(d){return d!==behaviour}),this.mapActionsAndBehaviour(key)}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(sideEffect,behaviour){var behaviourEffectMap=this._behaviourEffectMap;return behaviourEffectMap[behaviour]=behaviourEffectMap[behaviour].filter(function(d){return(d.name||d)!==sideEffect}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects){return sideEffects}},{key:"attachPropagationListener",value:function attachPropagationListener(dataModel){return dataModel.unsubscribe("propagation"),dataModel.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var _this2=this;return function(propValue){var payload=propValue.payload,action=payload.action;_this2.dispatchBehaviour(action,payload,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(uniqueIds,behaviouralActions){var behaviours=behaviouralActions||this._actions.behavioural,selectionSet=this._selectionSet,volatileSelectionSet=this._volatileSelectionSet;for(var key in behaviours)({}).hasOwnProperty.call(behaviours,key)&&(selectionSet[key]=new src_selection_set(uniqueIds),volatileSelectionSet[key]=new src_selection_set(uniqueIds,!0),this._entryExitSet[key]=null);return this._volatileSelectionSet=volatileSelectionSet,this.selectionSet(selectionSet),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 sideEffectDefinitions=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(context,sideEffects){var sideEffectsMap=context._sideEffects;return(sideEffects=sideEffects instanceof Array?sideEffects:Object.values(sideEffects)).forEach(function(SideEffect){var formalName=SideEffect.formalName(),sideEffectInstance=sideEffectsMap[formalName];sideEffectsMap[formalName]=sideEffectInstance||new SideEffect(context)}),sideEffectsMap}(this,sideEffectDefinitions)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(actions){var initedActions=function initializePhysicalActions(context,actions){var physicalActions={};for(var name in actions)({}).hasOwnProperty.call(name,actions)||(physicalActions[name]=actions[name](context));return physicalActions}(this,actions);return Object.assign(this._actions.physical,initedActions),this}},{key:"propagateWith",value:function propagateWith(action,fields){var append=arguments.length>2&&void 0!==arguments[2]&&arguments[2],behaviouralActions=this._actions.behavioural;if(action===ALL_ACTIONS)for(var key in behaviouralActions)this._propagationFields[key]={fields:fields,append:append};else this._propagationFields[action]={fields:fields,append:append};return this}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(phyAction){var initedPhysicalActions=this._actions.physical,map=this._actionBehaviourMap;for(var action in map)if(!{}.hasOwnProperty.call(action,map)&&action===(phyAction||action)){var target=void 0,mapObj=map[action];target=mapObj.target;var touch=mapObj.touch;target||(target=this.context.getDefaultTargetContainer()),(hasTouch()?!0===touch||void 0===touch:!touch)&&this.bindActionWithBehaviour(initedPhysicalActions[action],target,mapObj.behaviours)}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(map){return this._actionBehaviourMap=mergeRecursive(this._actionBehaviourMap,map),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(action,targets,behaviourList){var _this3=this;return"string"==typeof targets&&(targets=[targets]),targets.forEach(function(target){var mount=_this3.context.mount(),nodes=target.node instanceof Function?target:renderer_utils_selectElement(mount).selectAll(target);nodes.empty()||(nodes instanceof Array?nodes.forEach(function(node){action(renderer_utils_selectElement(node),behaviourList)}):action(nodes,behaviourList))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(criteria){var propagationInf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=this.context,filteredDataModel=propagationInf.data?propagationInf.data:context.getDataModelFromIdentifiers(criteria,"all");return{model:filteredDataModel,uids:null===criteria?null:propagationInf.data?propagationInf.entryRowIds:filteredDataModel[0].getUids()}}},{key:"getSelectionSets",value:function getSelectionSets(action){var sourceId=this.context.id(),propagationSource=(this._propagationInf||{}).sourceId,applicableSelectionSets=[];return propagationSource!==sourceId&&(applicableSelectionSets=[this._volatileSelectionSet[action]]),propagationSource&&applicableSelectionSets.push(this.selectionSet()[action]),applicableSelectionSets}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(behaviour){return this._entryExitSet[behaviour]}}]),Firebolt}();function generic_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},sourceIdentifiers=propagationInf.sourceIdentifiers;return sourceIdentifiers?sourceIdentifiers.getSchema().map(function(d){return d.name}):criteria instanceof Array?criteria[0]:Object.keys(criteria||{})}(propagationInf,payload.criteria),sourceSelectionSet:!0===selectionSet._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}();function volatile_typeof(obj){return(volatile_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function volatile_defineProperties(target,props){for(var i=0;iydom[0]?ydom:xdom,max=min===ydom?xdom:ydom;min[1]100&&Math.abs(startPos.x-endPos.x)<=5)){endPos.x=Math.max(0,Math.min(endPos.x,drawingInf.width)),endPos.y=Math.max(0,Math.min(endPos.y,drawingInf.height));var payload=drag_action_config(firebolt.context.getSourceInfo(),{startPos:startPos,endPos:endPos,snap:!0},firebolt.context.data().getFieldsConfig());payload.dragEnd=!0,behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)})}}))},physical_hover=function hover(firebolt){return function(targetEl,behaviours){var dispatchBehaviour=function dispatchBehaviour(args){var event=renderer_utils_getEvent(),context=firebolt.context,mode=context.config().interaction.tooltip.mode,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{getAllPoints:"consolidated"===mode||"fragmented"===mode,data:args,event:event}),payload={criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos,mode:mode};behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()};targetEl.on("mouseover",dispatchBehaviour).on("mousemove",dispatchBehaviour).on("mouseout",function(){behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})})})}},helpers_generatePayloadFromEvent=function generatePayloadFromEvent(args,event,firebolt){var context=firebolt.context,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event.touches?event.touches[0]:event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{data:args,event:event});return{criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos}},physical_click=function click(firebolt){return function(targetEl,behaviours){targetEl.on("click",function dispatchBehaviour(args){var event=renderer_utils_getEvent(),payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()})}};function physical_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var physicalActions=(physical_defineProperty(_physicalActions={},DRAG,function drag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt)}}),physical_defineProperty(_physicalActions,HOVER,physical_hover),physical_defineProperty(_physicalActions,CLICK,physical_click),physical_defineProperty(_physicalActions,LONGTOUCH,function longtouch(firebolt){return function(targetEl,behaviours){var event,touchEnd;touchEnd=!1,event=renderer_utils_getEvent(),targetEl.on("touchstart",function(args){event=renderer_utils_getEvent(),touchEnd=!1,setTimeout(function(){touchEnd?behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})}):function dispatchBehaviour(args){var payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()}(args)},100)}).on("touchend",function(){touchEnd=!0})}}),physical_defineProperty(_physicalActions,TOUCHDRAG,function touchdrag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt,!0)}}),_physicalActions),side_effects_ANCHORS="anchors",side_effects_TOOLTIP="tooltip",side_effects_BRUSH_ANCHORS="brush-anchors",side_effects_PERSISTENT_ANCHORS="persistent-anchors",side_effects_FILTER="filter",side_effects_HIGHLIGHTER="highlighter",CROSSLINE="crossline",PROPS={valueParser:{defaultValue:function defaultValue(val){return val}}};function generic_sideeffect_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];var interactionType=arguments.length>2?arguments[2]:void 0,apply=arguments.length>3?arguments[3]:void 0;return this.firebolt.context.layers().forEach(function(layer){return!1!==layer.config().interactive&&layer.applyInteractionStyle(interactionType,set.uids,apply)}),this}}]),SurrogateSideEffect}();function spawnable_typeof(obj){return(spawnable_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function spawnable_defineProperties(target,props){for(var i=0;i=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2}},context.data().getFieldsConfig());onDrag(payload)}}).on("end",function(){var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2},snap:!0},context.data().getFieldsConfig());payload.dragEnd=!0,onDrag(payload)}}))}}(firebolt)(renderer_utils_selectElement(this),["brush"],sideEffect)}).merge(selection).each(function(attrs){var element=renderer_utils_selectElement(this);for(var key in transition&&(element=element.transition().duration(transition.duration)),attrs)({}).hasOwnProperty.call(attrs,key)&&isValidValue(attrs[key])&&element.attr(key,attrs[key])}),boxClassName=getQualifiedClassName(boxConf.defClassName,this._id,classPrefix);return selectionBox.classed(boxClassName.join(" "),!0),selectionBox.classed(boxConf.className,!0),this}},{key:"hide",value:function hide(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!1)}},{key:"show",value:function show(drawingInf){helper_changeVisibility(this,drawingInf.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}(),INITIAL_STYLE={position:"absolute",width:0,height:0},default_config_defaultConfig={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"4px 0 4px 0",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)"}},helper_getArrowPos=function getArrowPos(orient,dim,measurement,config){var arrowPos,x=measurement.x,y=measurement.y,boxHeight=measurement.boxHeight,boxWidth=measurement.boxWidth,arrowWidth=config.arrow.disabled?0:config.arrow.size;if("left"===orient||"right"===orient){var start=0,diff=boxHeight/2,plotBottom=dim.y+dim.height,boxBottom=y+boxHeight;dim.y>y?(start=dim.y-y,diff=(plotBottom>=boxBottom?boxBottom-dim.y:dim.height)/2):boxBottom>plotBottom&&(diff=Math.abs(y-(dim.y+dim.height))/2),arrowPos=start+diff-arrowWidth/2}else{var _start=0,_diff=boxWidth/2,plotRight=dim.x+dim.width,boxRight=x+boxWidth;dim.x>x?(_start=dim.x-x,_diff=(plotRight>=boxRight?boxRight-dim.x:dim.width)/2):boxRight>plotRight&&(_diff=Math.abs(x-(dim.x+dim.width))/2),arrowPos=_start+_diff-arrowWidth/2}return arrowPos},helper_placeArrow=function placeArrow(context,position,arrowPos){var tooltipArrow=context._tooltipArrow,tooltipBackground=context._tooltipBackground,config=context._config,classPrefix=config.classPrefix,arrowConf=config.arrow,className=getQualifiedClassName(arrowConf.defClassName,context._id,config.classPrefix);tooltipArrow.style("display","block"),tooltipArrow.attr("class","".concat(className.join(" "))),"left"===position||"right"===position?(tooltipArrow.style("top","".concat(arrowPos,"px")),tooltipArrow.style("left",""),tooltipBackground.style("top","".concat(arrowPos,"px")),tooltipBackground.style("left","")):("bottom"===position?tooltipArrow.style("top","100%"):tooltipArrow.style("top","-".concat(arrowConf.size,"px")),tooltipArrow.style("left","".concat(arrowPos,"px")),"bottom"===position?tooltipBackground.style("top","100%"):tooltipBackground.style("top","-".concat(arrowConf.size+3,"px")),tooltipBackground.style("left","".concat(arrowPos,"px"))),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow"),!0),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(context._arrowOrientation),!1),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(position),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow"),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(context._arrowOrientation),!1),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(position),!0)};__webpack_require__(10);function content_defineProperties(target,props){for(var i=0;i0?(this._config=mergeRecursive(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(item){return this._model=item.model,this._formatter=item.formatter,this}},{key:"context",value:function context(ctx){return this._context=ctx,this}},{key:"render",value:function render(mount){var data,config=this._config,iconContainerSize=config.iconContainerSize,formatter=this._formatter,rowMargin=config.rowMargin,model=this._model,classPrefix=config.classPrefix;if(this._mount=mount,(data=model instanceof Array?model:formatter(this._model,this.config(),this._context))instanceof Function){makeElement(mount,"div",[1],"".concat(classPrefix,"-tooltip-html-container")).html(data())}else{var content=data,displayFormat="default";isSimpleObject(data)&&(content=data.content,displayFormat=data.displayFormat);var body=makeElement(mount,"div",[displayFormat],"".concat(classPrefix,"-tooltip-content"),{},function(d){return d});if("table"===displayFormat){var table=makeElement(body,"table",[1],"".concat(classPrefix,"-tooltip-table")),tbody=makeElement(table,"tbody",[1],"".concat(classPrefix,"-tooltip-table-tbody")),rows=makeElement(tbody,"tr",content,"".concat(classPrefix,"-tooltip-table-row"));rows.each(function(d,i){renderer_utils_selectElement(this).classed("".concat(classPrefix,"-tooltip-table-row-").concat(i),!0)}),makeElement(rows,"td",function(d){return d},"".concat(classPrefix,"-tooltip-table-cell")).each(function(d){renderer_utils_selectElement(this).html(d)})}else{var _rows=makeElement(body,"div",content,"",{update:function update(elem,elemData){return elem.attr("class",elemData.className)}}),_cells=makeElement(_rows,"span",function(d){return d.data},"".concat(classPrefix,"-tooltip-content"));_cells.attr("class","".concat(classPrefix,"-tooltip-content")),renderer_utils_setStyles(_rows,{margin:rowMargin}),renderer_utils_setStyles(_cells,{display:"inline-block"}),_cells.each(function(d){var el=renderer_utils_selectElement(this);if(el.html(""),d instanceof Object)if("icon"===d.type){var svg=makeElement(el,"svg",[1]),path=makeElement(svg,"path",[1]),shape=d.shape instanceof Function?d.shape:common_utils_getSymbol(d.shape);renderer_utils_setAttrs(svg,{x:0,y:0,width:iconContainerSize,height:iconContainerSize}),renderer_utils_setAttrs(path,{d:shape.size(d.size)(),transform:"translate(".concat(iconContainerSize/2,", ").concat(iconContainerSize/2,")")}),renderer_utils_setStyles(path,{fill:d.color}),renderer_utils_setStyles(svg,{width:"".concat(iconContainerSize,"px"),height:"".concat(iconContainerSize,"px")})}else el.html(d.value),d.className&&el.classed(d.className,!0),renderer_utils_setStyles(el,d.style);else el.html(d)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var config=default_config_defaultConfig.content;return config.classPrefix=default_config_defaultConfig.classPrefix,config}}]),Content}();function tooltip_defineProperties(target,props){for(var i=0;i0){var defConf=mergeRecursive({},this.constructor.defaultConfig());return this._config=mergeRecursive(defConf,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(className){return this._tooltipContainer.classed(className,!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(name,data){var contentConfig=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},config=this.config(),classPrefix=config.classPrefix,contentClass=config.content.className,formatter=config.formatter,className=contentConfig.className||"".concat(classPrefix,"-").concat(contentClass,"-").concat(name),content=this._contents[name]=this._contents[name]||new content_Content,container=makeElement(this._contentContainer,"div",[contentConfig.order],className);container.attr("class","".concat(classPrefix,"-").concat(contentClass," ").concat(className)),function reorderContainers(parentContainer,className){parentContainer.selectAll(className).sort(function(a,b){return a-b})}(this._contentContainer,".".concat(classPrefix,"-").concat(contentClass));var contentConf=config.content;return contentConfig.classPrefix=this._config.classPrefix,content.config(contentConf),null===data?(content.clear(),container.remove(),delete this._contents[name]):(content.update({model:data,formatter:contentConfig.formatter||formatter}),content.context(this._context),content.render(container)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(x,y){var conf=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var target=this._target,repositionArrow=conf.repositionArrow;if(target&&repositionArrow){var node=this._tooltipContainer.node(),config=this._config,arrowDisabled=config.arrow.disabled,arrowWidth=arrowDisabled?0:config.arrow.size,arrowOrient=this._arrowOrientation,outsidePlot="left"===arrowOrient||"right"===arrowOrient?y+node.offsetHeight-arrowWidthtarget.y+target.height:x+node.offsetWidth-arrowWidthtarget.x+target.width;if(!arrowDisabled)if(outsidePlot){var path;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var connector=this._tooltipConnectorContainer.selectAll("path").data([1]),enter=connector.enter().append("path");"left"===arrowOrient?path="M ".concat(x," ").concat(y+node.offsetHeight/2," L ").concat(target.x+target.width)+" ".concat(target.y+target.height/2):"right"===arrowOrient?path="M ".concat(x+node.offsetWidth," ").concat(y+node.offsetHeight/2)+" L ".concat(target.x," ").concat(target.y+target.height/2):"bottom"===arrowOrient&&(path="M ".concat(x+node.offsetWidth/2," ").concat(y+node.offsetHeight)+" L ".concat(target.x+target.width/2," ").concat(target.y)),enter.merge(connector).attr("d",path).style("display","block")}else{var arrowPos=helper_getArrowPos(arrowOrient,target,{x:x,y:y,boxHeight:node.offsetHeight,boxWidth:node.offsetWidth},this._config);helper_placeArrow(this,this._arrowOrientation,arrowPos),this._tooltipConnectorContainer.style("display","none")}}var offset=this._offset||{x:0,y:0};return this._tooltipContainer.style("left","".concat(offset.x+x,"px")).style("top","".concat(offset.y+y,"px")),this}},{key:"positionRelativeTo",value:function positionRelativeTo(dim){var obj,_this=this,tooltipConf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},orientation=tooltipConf.orientation;if(this.show(),!dim)return this.hide(),this;var extent=this._extent,node=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var offsetWidth=node.offsetWidth+2,offsetHeight=node.offsetHeight+2,config=this._config,offset=this._offset,arrowDisabled=config.arrow.disabled,arrowSize=arrowDisabled?0:config.arrow.size,draw=void 0===tooltipConf.draw||tooltipConf.draw,topSpace=dim.y,dimX=dim.x+dim.width+offset.x,rightSpace=extent.width-dimX,leftSpace=dim.x+offset.x-extent.x,positionTop=topSpace>offsetHeight+arrowSize,positionRight=rightSpace>=offsetWidth+arrowSize,positionLeft=leftSpace>=offsetWidth+arrowSize;return this._target=dim,orientation||(orientation=positionTop?"vertical":positionRight||positionLeft?"horizontal":"vertical"),"horizontal"===orientation?obj=function positionHorizontal(){var position,x=dim.x+dim.width,y=dim.y;return positionRight?(position="left",x+=arrowSize):positionLeft?(x=dim.x-offsetWidth,position="right",x-=arrowSize):(position="left",x+=arrowSize),dim.height1;hasMultipleMeasures&&content.push({data:[icon,formattedRetinalValue]});var isSelected=target[1][target[0].indexOf(retField)]===retinalFieldValue;measuresArr.forEach(function(measure){var measureIndex=fieldsConfig[measure].index,_fieldInf$measure=fieldInf[measure],dName=_fieldInf$measure.displayName,value=(0,_fieldInf$measure.fn)(valueArr[measureIndex]),keyValue=getKeyValue({field:hasMultipleMeasures?"".concat(dName).concat(separator):formattedRetinalValue,value:value,classPrefix:classPrefix,margin:hasMultipleMeasures?margin:void 0,isSelected:isSelected});hasMultipleMeasures||(keyValue.data=[icon].concat(strategies_toConsumableArray(keyValue.data))),content.push(keyValue)})}};for(var retField in retinalFields)_loop(retField)},strategies_buildTooltipData=function buildTooltipData(dataModel){var nestedDataObj,displayFormat,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=arguments.length>2?arguments[2]:void 0,fieldValues=[],_dataModel$getData=dataModel.getData(),data=_dataModel$getData.data,schema=_dataModel$getData.schema,fieldspace=dataModel.getFieldspace(),fieldsConfig=dataModel.getFieldsConfig(),_context$firebolt$con=context.firebolt.context.retinalFields(),color=_context$firebolt$con.color,shape=_context$firebolt$con.shape,size=_context$firebolt$con.size,detailFields=context.detailFields||[],dimensions=schema.filter(function(d){return d.type===dist_datamodel.FieldType.DIMENSION}),measures=schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),containsDetailField=!!common_utils_intersect(schema,detailFields).length,dataLen=data.length,dimensionMeasureMap=context.dimensionMeasureMap,axes=context.axes,fieldInf=function getFieldInf(schema,dataModel,context){var valueParser=context.valueParser,timeDiffs=context.timeDiffs,fieldsObj=dataModel.getFieldspace().fieldsObj(),defFormatter=strategies_formatters(null,null,valueParser)[dist_datamodel.DimensionSubtype.CATEGORICAL];return schema.reduce(function(inf,field){var subtype=field.subtype,name=field.name,type=field.type,interval=subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[name]:0,nf=type===dist_datamodel.FieldType.MEASURE?fieldsObj[name].numberFormat():function(val){return val};return inf[name]={fn:defaultValue(strategies_formatters(nf,interval,valueParser)[subtype],defFormatter),displayName:"".concat(retrieveFieldDisplayName(dataModel,name))},inf},{})}(schema,dataModel,context);if(dataLen>1&&containsDetailField)fieldValues=function getTabularData(dataObj,fieldInf){var rows=[],data=dataObj.data,schema=dataObj.schema;return rows.push(schema.map(function(d){return fieldInf[d.name].displayName})),data.forEach(function(d){var row=[];schema.forEach(function(fieldObj,i){var value=fieldInf[fieldObj.name].fn(d[i]);row.push(value)}),rows.push(row)}),rows}({data:data,schema:schema,fieldspace:fieldspace},fieldInf),displayFormat="table";else{var retinalFields=[color.field,shape.field,size.field].reduce(function(acc,field){return field&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION&&(acc[field]=1),acc},{}),indices=dimensions.filter(function(field){return!retinalFields[field.name]}).map(function(dim){return fieldsConfig[dim.name].index}),allMeasures=strategies_toConsumableArray(_construct(Set,strategies_toConsumableArray(Object.values(dimensionMeasureMap)))),filteredMeasures=dataLen>1?measures.filter(function(d){return-1===allMeasures.indexOf(d.name)}):measures;nestedDataObj=common_utils_nestCollection({data:data,keys:indices});!function generateTooltipContent(nestedData){for(var index=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,content=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],classPrefix=config.classPrefix,separator=config.separator,i=0,len=nestedData.length;i1;content.push(getKeyValue({field:"".concat(displayName).concat(separator),value:formattedValue,classPrefix:classPrefix,margin:margin,isSelected:void 0,removeKey:removeKey}))}if(values[0]&&values[0].key)generateTooltipContent(values,index+1,content);else for(var _loop2=function _loop2(j,len2){var valueArr=values[j];generateRetinalFieldsValues(valueArr,retinalFields,content,{fieldInf:fieldInf,axes:axes,config:config,fieldsConfig:fieldsConfig,dimensionMeasureMap:dimensionMeasureMap,dataLen:dataLen,target:context.payload.target}),filteredMeasures.forEach(function(measure){var name=measure.name,_fieldInf$name=fieldInf[name],displayName=_fieldInf$name.displayName,fn=_fieldInf$name.fn;content.push(getKeyValue({field:"".concat(displayName).concat(separator),value:fn(valueArr[fieldsConfig[name].index]),classPrefix:classPrefix,margin:10}))})},j=0,len2=values.length;j2&&void 0!==arguments[2]?arguments[2]:{},totalHeight=0,totalWidth=0,dataModel=selectionSet.mergedEnter.model,context=this.firebolt.context,drawingInf=this.drawingContext();if(dataModel.isEmpty()||null===payload.criteria)return this.hide(options,null),this;var tooltips=this._tooltips,config=this.config(),boundBox={width:drawingInf.width,height:drawingInf.height},showInPosition=payload.showInPosition,pad=config.padding,dataModels=[],fragmented="fragmented"===config.mode,sourceInf=context.getSourceInfo(),fields=sourceInf.fields,showVertically=!!(!!fields.x[0]&&fields.x[0].type()===dist_datamodel.FieldType.DIMENSION),tooltipPos=payload.position,boxes=[],enter={},uids=dataModel.getData().uids;fragmented?dataModels.push.apply(dataModels,tooltip_toConsumableArray(uids.map(function(d){return dataModel.select(function(fieldsArr,i){return i===d},{saveChild:!1})}))):dataModels.push(dataModel);var target=payload.target,targetFields=[];if(target){targetFields=target[0]||[];for(var sourceFields=payload.sourceFields,indices=[],i=0,len=targetFields.length;idrawingInf.height:totalWidth>drawingInf.width)break;boxes.push({x:position.x,y:position.y,width:tooltipBoundBox.width,height:tooltipBoundBox.height,tooltip:tooltipInst})}}for(var key in tooltips)if(!enter[key]){var tooltip=tooltips[key];tooltip.content(payload.action,null),tooltip.getContents().length||(tooltip.remove(),delete tooltips[key])}return fragmented&&(!function spaceOutBoxes(boxes,extent,showVertically){var y,height,x,width,i,len=boxes.length,spaceOutIfOverlap=function spaceOutIfOverlap(firstBox,secondBox,opposite){x=firstBox.x,width=firstBox.width,y=firstBox.y,height=firstBox.height;var bottom=y+height,right=x+width;showVertically?(opposite?ysecondBox.y)&&(secondBox.y=opposite?firstBox.y-secondBox.height-5:bottom+5):(opposite?xsecondBox.x)&&(secondBox.x=opposite?firstBox.x-secondBox.width-5:right+5)};for(boxes.sort(function(a,b){return showVertically?a.y-b.y:a.x-b.x}),i=0,i=0;iextent.height||boxes[i].x+boxes[i].width>extent.width)for(showVertically?boxes[i].y-=boxes[i].height+boxes[i].y-extent.height:boxes[i].x-=boxes[i].width+boxes[i].x-extent.width,i=len-1;i>0;i--)spaceOutIfOverlap(boxes[i],boxes[i-1],!0)}(boxes,boundBox,showVertically),boxes.forEach(function(box){return box.tooltip.position(box.x,box.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var strategy=options.strategy||this._strategy;tooltips[key].content(strategy,null),tooltips[key].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0},highlightSummary:{dataTransform:function dataTransform(dt,fields){return fields?dt.project(fields,{saveChild:!1}):dt}},selectionSummary:{dataTransform:function dataTransform(dt,fields){var fieldspace=dt.getFieldspace(),dimensions=Object.keys(fieldspace.getDimension()),measures=Object.keys(fieldspace.getMeasure()),projectedFields=defaultValue(fields,measures.length?[measures[0]]:[]);return dt.project([].concat(tooltip_toConsumableArray(dimensions),tooltip_toConsumableArray(projectedFields)),{saveChild:!1})}}}}},{key:"formalName",value:function formalName(){return side_effects_TOOLTIP}}]),Tooltip}();__webpack_require__(12);function crossline_typeof(obj){return(crossline_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function crossline_toConsumableArray(arr){return function crossline_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{};return(0,this._strategies[options.strategy||this._strategy])(selectionSet,this,options.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return side_effects_HIGHLIGHTER}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}();function side_effects_filter_typeof(obj){return(side_effects_filter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function side_effects_filter_defineProperties(target,props){for(var i=0;i67.5&&rotationNormalizer<=90||(yShift+=2*height),xShift=width,xShift=90===rotation?height:270===rotation?-height:0,orientation===axis_orientation_TOP?(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift+xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(-xShift+tickSize,"\n ").concat(-yShift-tickSize,") rotate(").concat(rotation,")"))):(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift-xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(xShift-tickSize,"\n ").concat(yShift+tickSize,") rotate(").concat(rotation,")"))),renderer_utils_selectElement(this).transition().duration(1e3).text(datum)}),tickText},axis_renderer_changeTickOrientation=function changeTickOrientation(selectContainer,axisInstance,tickSize){var _smartTicks=axisInstance._smartTicks,config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,orientation=config.orientation,classPrefix=config.classPrefix,labels=renderConfig.labels,rotation=labels.rotation,isSmartTicks=labels.smartTicks,tickText=selectContainer.selectAll(".tick text");if(tickText.selectAll("tspan").remove(),!rotation||"top"!==orientation&&"bottom"!==orientation)if(rotation||isSmartTicks){if(tickText.text(""),"top"===orientation||"bottom"===orientation)tickText.attr("y",0).attr("x",0).attr("transform","").text(""),makeElement(tickText,"tspan",function(d,i){return _smartTicks[i]?_smartTicks[i].lines:[]},"".concat(classPrefix,"-smart-text")).attr("dy","0").style("opacity","0").transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).attr("dy",function(d,i){return"bottom"===orientation||0!==i?_smartTicks[0].oriTextHeight:-_smartTicks[0].oriTextHeight*(_smartTicks[0].lines.length-1)-tickSize}).style("opacity",1).text(function(e){return e}).attr("x",0);else makeElement(tickText,"tspan",function(d,i){return _smartTicks[i].lines},"".concat(classPrefix,"-smart-text")).text(function(e){return e})}else tickText.attr("transform","");else axis_renderer_rotateAxis(axisInstance,tickText,labelManager);return tickText},axis_renderer_setFixedBaseline=function setFixedBaseline(axisInstance){var fixedBaseline=axisInstance.config().fixedBaseline,showInnerTicks=axisInstance.renderConfig().showInnerTicks,domain=axisInstance.domain();fixedBaseline&&domain.length&&showInnerTicks&&axisInstance.setFixedBaseline()},axis_renderer_setAxisNamePos=function setAxisNamePos(textNode,orientation,measures){var axisNameHeight=measures.axisNameHeight,availableSpace=measures.availableSpace;switch(orientation){case axis_orientation_LEFT:textNode.attr("transform","translate(".concat(-(availableSpace.width-axisNameHeight),",").concat(availableSpace.height/2,")rotate(-90)"));break;case axis_orientation_RIGHT:textNode.attr("transform","translate(".concat(availableSpace.width-axisNameHeight,",").concat(availableSpace.height/2,")rotate(90)"));break;case axis_orientation_TOP:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(-availableSpace.height+axisNameHeight,")"));break;case axis_orientation_BOTTOM:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(availableSpace.height-axisNameHeight/2,")"))}return textNode};var _rangeAdjustmentMap,longestWord={month:"September",quarter:"October",halfYearly:"July",year:9999,day:"September",hour:"24 AM",mintues:"60:60",seconds:":60",week:"Wed 31"},skip_ticks_tickIntervals=[[1,1,"milliseconds",src_millisecond.every(1),"seconds"],[1,1e3,"seconds",src_second.every(1),"seconds"],[5,5e3,"five seconds",src_second.every(5),"seconds"],[10,1e4,"ten seconds",src_second.every(10),"seconds"],[15,15e3,"fifteen seconds",src_second.every(15),"seconds"],[30,3e4,"thirty seconds",src_second.every(30),"seconds"],[1,6e4,"minute",src_minute.every(1),"minutes"],[5,3e5,"five minutes",src_minute.every(5),"minutes"],[10,6e5,"ten minutes",src_minute.every(10),"minutes"],[15,9e5,"fifteen minutes",src_minute.every(15),"minutes"],[30,18e5,"thirty minutes",src_minute.every(30),"minutes"],[1,36e5,"hour",src_hour.every(1),"hour"],[3,108e5,"three hours",src_hour.every(3),"hour"],[6,216e5,"six hours",src_hour.every(6),"hour"],[12,432e5,"twelve hours",src_hour.every(12),"hour"],[1,864e5,"daily",src_day.every(1),"day"],[1,6048e5,"weekly",sunday.every(1),"week"],[1,2592e6,"monthly",src_month.every(1),"week"],[3,7776e6,"quaterly",src_month.every(3),"quarter"],[6,15552e6,"half yearly",src_month.every(6),"halfYearly"],[1,31536e6,"yearly",src_year.every(1),"year"],[2,63072e6,"2 year",src_year.every(2),"year"],[3,94608e6,"3 year",src_year.every(3),"year"],[5,15768e7,"5 year",src_year.every(5),"year"],[10,31536e7,"decade",src_year.every(10),"year"],[100,31536e8,"century",src_year.every(100),"year"],[1e3,31536e9,"millenium",src_year.every(1e3),"year"]],getTickIntervalFnBasedOnNumberOfTicks=function getTickIntervalFnBasedOnNumberOfTicks(interval,count,context){for(var possibleTickLevelIndex=skip_ticks_tickIntervals.length-1,maxPossibleTicks=1,tickIntervalLevelInfo=null,i=skip_ticks_tickIntervals.length-1;i>=0;i--){var tickIntervalInfo=skip_ticks_tickIntervals[i],numOfPossibleTicks=Math.floor(interval/tickIntervalInfo[1]);numOfPossibleTicks<=count&&(possibleTickLevelIndex=i,maxPossibleTicks=numOfPossibleTicks)}return tickIntervalLevelInfo=skip_ticks_tickIntervals[possibleTickLevelIndex],function getActualTickInterval(context,noOfTicks){var minWidthBetweenTicks=context._minTickDistance.width,width=context.availableSpace().width;return Math.floor((width-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)}(context,maxPossibleTicks)=numOfTicksAccordingToMinDiff&&(actualNumberOfTicks=numOfTicksAccordingToMinDiff),getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval,actualNumberOfTicks,context)}(context,maxTicks));context.renderConfig({tickValues:ticks})},adjustHorizontalRange=function adjustHorizontalRange(range,diff){return range[0]+=diff,range[1]-=diff,range},adjustVerticalRange=function adjustVerticalRange(range,diff){return range[0]-=diff,range[1]+=diff,range},rangeAdjustmentMap=(space_setter_defineProperty(_rangeAdjustmentMap={},axis_orientation_TOP,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_BOTTOM,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_LEFT,adjustVerticalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_RIGHT,adjustVerticalRange),_rangeAdjustmentMap),setAxisRange=function setAxisRange(context,type,rangeBounds,offset){context.range(rangeBounds),offset&&context.renderConfig(space_setter_defineProperty({},"".concat(type,"Offset"),offset))},getAdjustedRange=function getAdjustedRange(minDiff,range,domain,config){var orientation=config.orientation,adjustRange=config.adjustRange,diff=function getAxisOffset(timeDiff,range,domain){var avWidth=Math.abs(range[1]-range[0]),bars=avWidth/(avWidth/(domain[1]-domain[0])*timeDiff);return(avWidth-avWidth/(bars+1)*bars)/2}(minDiff,range,domain);return adjustRange?rangeAdjustmentMap[orientation](range,diff):range},space_setter_spaceSetter=function spaceSetter(context,spaceConfig){var _ref,tickInterval,heightForTicks,config=context.config(),_context$availableSpa2=context.availableSpace(),availWidth=_context$availableSpa2.width,availHeight=_context$availableSpa2.height,padding=_context$availableSpa2.padding,top=padding.top,left=padding.left,bottom=padding.bottom,right=padding.right,isOffset=spaceConfig.isOffset,_context$renderConfig2=context.renderConfig(),showAxisName=_context$renderConfig2.showAxisName,labels=_context$renderConfig2.labels,rotation=labels.rotation,fixedBaseline=config.fixedBaseline,axisNamePadding=config.axisNamePadding,tickValues=config.tickValues,_context$getAxisDimen=context.getAxisDimensions(),tickDimensions=_context$getAxisDimen.tickDimensions,allTickDimensions=_context$getAxisDimen.allTickDimensions,axisNameDimensions=_context$getAxisDimen.axisNameDimensions,tickSize=_context$getAxisDimen.tickSize,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width,namePadding=showAxisName?axisNamePadding:0,labelConfig={smartTicks:!0,rotation:labels.rotation},minTickDistance=context._minTickDistance,minTickSpace=context._minTickSpace,minDiff=context._minDiff,domain=context.domain(),axisNameHeight=axisNameDimensions.height,minWidthBetweenTicks=minTickDistance.width,minTickWidth=Math.min(minTickSpace.width,tickDimWidth),minTickHeight=Math.min(minTickSpace.height,tickDimHeight);return space_setter_defineProperty(_ref={},TIME,{x:function x(){!tickValues&&context.applyTickSkipping();var noOfTicks=context.getTickValues().length;heightForTicks=availHeight-axisNameHeight-tickSize-namePadding,(tickInterval=(availWidth-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)axisNameHeight?(labelConfig.rotation=null,context.renderConfig({showInnerTicks:!0,showAxisName:!0})):(labelConfig.rotation=-90,context.renderConfig({showInnerTicks:!0,showAxisName:!1}))),availHeight0&&void 0!==arguments[0]?arguments[0]:0,width=arguments.length>1?arguments[1]:void 0,height=arguments.length>2?arguments[2]:void 0,rotatedHeight=height,rotatedWidth=width;if(rotation){var angle=(rotation||0)*Math.PI/180;rotatedWidth=Math.abs(height*Math.sin(angle))+Math.abs(width*Math.cos(angle)),rotatedHeight=Math.abs(width*Math.sin(angle))+Math.abs(height*Math.cos(angle))}return{width:rotatedWidth,height:rotatedHeight}},helper_setOffset=function setOffset(context){var x=0,y=0,logicalSpace=context.logicalSpace(),config=context.config(),orientation=config.orientation,xOffset=config.xOffset,yOffset=config.yOffset;orientation===axis_orientation_LEFT&&(x=void 0===xOffset?logicalSpace.width:xOffset),orientation===axis_orientation_TOP&&(y=void 0===yOffset?logicalSpace.height:yOffset),context.renderConfig({xOffset:x,yOffset:y})},getAxisComponentDimensions=function getAxisComponentDimensions(context){var axisTicks,largestTick="",largestTickDimensions={width:0,height:0},smartTick={},allTickDimensions=[],scale=context.scale(),_context$renderConfig=context.renderConfig(),tickValues=_context$renderConfig.tickValues,showAxisName=_context$renderConfig.showAxisName,name=context.config().name,labelManager=context.dependencies().labelManager,labelFunc=scale.ticks||scale.quantile||scale.domain;return labelManager.setStyle(context._tickLabelStyle),axisTicks=(axisTicks=tickValues||labelFunc()).map(function(originalLabel,i){var label=context.getFormattedText(originalLabel,i,axisTicks),tickDimensions=labelManager.getOriSize(label);return allTickDimensions.push(tickDimensions),tickDimensions.width>largestTickDimensions.width&&(largestTick=label,smartTick=context.smartTicks()?context.smartTicks()[i]:{},largestTickDimensions=tickDimensions,smartTick=smartTick||tickDimensions),label}),labelManager.setStyle(context._axisNameStyle),{axisNameDimensions:showAxisName?labelManager.getOriSize(name):{width:0,height:0},largestTick:largestTick,largestTickDimensions:largestTickDimensions,allTickDimensions:allTickDimensions,axisTicks:axisTicks,smartTick:smartTick,tickSize:context.getTickSize()}},getHorizontalAxisSpace=function getHorizontalAxisSpace(context,axisDimensions,range){var width,height,domain=context.domain(),minTickDistance=context._minTickDistance.width,tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config2=context.config(),axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width;if(width=range&&range.length?range[1]-range[0]:3*(tickDimWidth+minTickDistance),height=0,tickValues){var minTickDiff=context.getMinTickDifference(),_ref=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];width=(_ref[1]-_ref[0])/Math.abs(minTickDiff)*(tickDimWidth+context._minTickDistance.width)}return height=range&&range.length?tickDimHeight:Math.max(tickDimWidth,tickDimHeight),{width:width,height:height+=(showAxisName?axisDimHeight+axisNamePadding:0)+tickSize}},getVerticalAxisSpace=function getVerticalAxisSpace(context,axisDimensions){var height,width,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config3=context.config(),axisNamePadding=_context$config3.axisNamePadding,tickValues=_context$config3.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height;if(height=0,width=tickDimensions.width,tickValues){var minTickDiff=context.getMinTickDifference(),_ref2=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];height=(_ref2[1]-_ref2[0])/Math.abs(minTickDiff)*tickDimHeight}return{height:height,width:width+=(showAxisName?axisDimHeight:0)+tickSize+axisNamePadding}},helper_calculateBandSpace=function calculateBandSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,show=context.renderConfig().show,largestTickDimensions=axisDimensions.largestTickDimensions,axisTicks=axisDimensions.axisTicks,allTickDimensions=axisDimensions.allTickDimensions,largestDimHeight=largestTickDimensions.height,minTickWidth=context._minTickDistance.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa=getHorizontalAxisSpace(context,axisDimensions,range),_width=_getHorizontalAxisSpa.width,_height=_getHorizontalAxisSpa.height;return range&&range.length||(_width=allTickDimensions.reduce(function(t,n){return t+Math.min(n.width,n.height)+minTickWidth},0)),!1===show&&(_height=0,_width=0),{width:_width,height:_height}}var _getVerticalAxisSpace=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace.width,height=_getVerticalAxisSpace.height;return height&&0!==height||(height=axisTicks.length*(largestDimHeight+context._minTickDistance.height)),!1===show&&(width=0),{width:width,height:height}},helper_getValidDomain=function getValidDomain(context,domain){var userDom=context.config().domain;return userDom&&(domain=userDom),defaultValue(domain,[])},setContinousAxisDomain=function setContinousAxisDomain(context,domain){var nice=context.config().nice,scale=context.scale.bind(context);scale().domain(domain),nice&&scale().nice(),context._domain=scale().domain()},props_PROPS={availableSpace:{},axisDimensions:{},axisComponentDimensions:{},config:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._config||{}),mockedOldConfig=mergeRecursive({},oldConfig);(value=mergeRecursive(mockedOldConfig,value)).axisNamePadding=Math.max(value.axisNamePadding,0);var shouldAxesScaleUpdate=function hasAxesConfigChanged(){var obj=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},obj1=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},properties=arguments.length>2?arguments[2]:void 0;return!(!Object.keys(obj).length||!Object.keys(obj1).length)&&properties.some(function(key){return obj[key]!==obj1[key]})}(value,oldConfig,["interpolator","exponent","base","orientation"]),tickFormatter=context.sanitizeTickFormatter(value);return shouldAxesScaleUpdate&&(context._scale=context.createScale(value),context._axis=context.createAxis(value)),context._tickFormatter=function(ticks){return tickFormatter(ticks)},context.resetRenderConfig(value),value}},renderConfig:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._renderConfig||{});return value=mergeRecursive(oldConfig,value)}},logicalSpace:{},mount:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.logicalSpace(null),value}},smartTicks:{},tickSize:{},maxTickSpaces:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._maxTickSpaces||{});return value=mergeRecursive(oldConfig,value)}},valueParser:{defaultValue:function defaultValue(val){return val}}};function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function simple_axis_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function simple_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;this.availableSpace({width:width,height:height,padding:padding});var type=this.constructor.type();return labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?space_setter_spaceSetter(this,{isOffset:isOffset})[type].x():space_setter_spaceSetter(this,{isOffset:isOffset})[type].y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.setSmartAxisName(),this}},{key:"setSmartAxisName",value:function setSmartAxisName(){var _this$config2=this.config(),orientation=_this$config2.orientation,name=_this$config2.name,dimType=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?"width":"height",widthDim=this.availableSpace()[dimType],labelManager=this.dependencies().labelManager;return labelManager.setStyle(this._axisNameStyle),this.renderConfig({smartAxisName:function getSmartAxisName(name,width,labelManager){var oriSize=labelManager.getOriSize(name);return labelManager.useEllipsesOnOverflow(!0),labelManager.getSmartText(name,width,oriSize.height,!0)}(name,widthDim,labelManager)}),this}},{key:"setTickConfig",value:function setTickConfig(){return this}},{key:"getScaleValue",value:function getScaleValue(domainVal){if(null!==domainVal&&void 0!==domainVal)return this.scale()(domainVal)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return this.axisDimensions(function computeAxisDimensions(context){var tickDimensions={},labels=context.renderConfig().labels,smartTicks=labels.smartTicks,rotation=labels.rotation,_getAxisComponentDime=getAxisComponentDimensions(context),largestTickDimensions=_getAxisComponentDime.largestTickDimensions,axisTicks=_getAxisComponentDime.axisTicks,smartTick=_getAxisComponentDime.smartTick,axisNameDimensions=_getAxisComponentDime.axisNameDimensions,allTickDimensions=_getAxisComponentDime.allTickDimensions,tickSize=_getAxisComponentDime.tickSize,labelHeight=largestTickDimensions.height,labelWidth=largestTickDimensions.width;return 0===context.domain().length?null:(tickDimensions=getRotatedSpaces(rotation,(tickDimensions=smartTicks?smartTick:{width:labelWidth,height:labelHeight}).width,tickDimensions.height),0===tickSize&&(tickDimensions={width:0,height:0}),{allTickDimensions:allTickDimensions,tickSize:tickSize,tickDimensions:tickDimensions,axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks})}.apply(void 0,[this].concat(params))),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||this.logicalSpace(function calculateContinousSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,_context$renderConfig6=context.renderConfig(),show=_context$renderConfig6.show,showAxisName=_context$renderConfig6.showAxisName,axisNameDimensions=axisDimensions.axisNameDimensions;if(!1===show)return{width:0,height:0};var axisNameWidth=axisNameDimensions.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa2=getHorizontalAxisSpace(context,axisDimensions,range),_width2=_getHorizontalAxisSpa2.width,_height2=_getHorizontalAxisSpa2.height;return{width:Math.max(_width2,axisNameWidth),height:_height2}}var _getVerticalAxisSpace2=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace2.width,height=_getVerticalAxisSpace2.height;return{width:width,height:Math.max(height,showAxisName?axisNameWidth:0)}}(this)),helper_setOffset(this),this.logicalSpace()}},{key:"invert",value:function invert(value){return this.scale().invert(value)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){return[v1,v2]}},{key:"invertExtent",value:function invertExtent(v1,v2){return[this.invert(v1),this.invert(v2)]}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(tickValues){return tickValues}},{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:"render",value:function render(){return this.mount()&&(this.setTickConfig(),function renderAxis(axisInstance){var config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,mount=axisInstance.mount(),range=axisInstance.range(),axis=axisInstance.axis(),scale=axisInstance.scale(),tickLabelStyle=axisInstance._tickLabelStyle,axisTickFormatter=axisInstance._tickFormatter,orientation=config.orientation,axisNamePadding=config.axisNamePadding,className=config.className,id=config.id,classPrefix=config.classPrefix,show=renderConfig.show,xOffset=renderConfig.xOffset,yOffset=renderConfig.yOffset,showAxisName=renderConfig.showAxisName,labels=renderConfig.labels,smartAxisName=renderConfig.smartAxisName;if(show){var tickSize=axisInstance.getTickSize(),selectContainer=makeElement(renderer_utils_selectElement(mount),"g",[axisInstance],"".concat(className),{},function(key){return key.config().id});labelManager.setStyle(tickLabelStyle);var labelFunc=scale.ticks||scale.quantile||scale.domain,ticks=axis.tickValues()||labelFunc();axis.tickFormat(axisTickFormatter(ticks));var availableSpace=Math.abs(range[0]-range[1]),labelProps=axisInstance.axisComponentDimensions().largestTickDimensions;selectContainer.attr("transform","translate(".concat(xOffset,",").concat(yOffset,")")),axis_renderer_setFixedBaseline(axisInstance),!1===labels.smartTicks||0===tickSize?selectContainer.transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).call(axis):selectContainer.call(axis),selectContainer.selectAll(".tick").classed("".concat(classPrefix,"-ticks"),!0),selectContainer.selectAll(".tick line").classed("".concat(classPrefix,"-tick-lines"),!0),selectContainer.selectAll(".tick text").classed("".concat(classPrefix,"-ticks"),!0).classed("".concat(classPrefix,"-ticks-").concat(id),!0),axis_renderer_changeTickOrientation(selectContainer,axisInstance,tickSize);var textNode=makeElement(selectContainer,"text",[smartAxisName],"".concat(classPrefix,"-axis-name")).attr("text-anchor","middle").classed("".concat(classPrefix,"-axis-name-").concat(id),!0).text(function(d){return d.text});textNode.classed(HIDDEN,!showAxisName);var labelOffset=availableSpace/2,measures={labelProps:labelProps,tickSize:tickSize,axisNamePadding:axisNamePadding,axisNameHeight:smartAxisName.height,yOffset:yOffset,xOffset:xOffset,labelOffset:labelOffset,availableSpace:axisInstance.availableSpace()};axis_renderer_setAxisNamePos(textNode,orientation,measures)}}(this)),this}},{key:"remove",value:function remove(){return renderer_utils_selectElement(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this}},{key:"isReverse",value:function isReverse(){var range=this.range();return range[0]>range[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var scale=this.scale(),range=scale.range(),domain=scale.domain();return Math.abs(range[1]-range[0])/(domain[1]-domain[0])}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return cartesian_axis_default_config_defaultConfig}}]),SimpleAxis}();function linear_defineProperties(target,props){for(var i=0;iavailableSpace&&(numberOfValues=Math.floor(availableSpace/(labelDim+minTickDistance))),numberOfTicks=numberOfTicks||numberOfValues,numberOfValues=Math.min(numberOfTicks,Math.max(2,numberOfValues)),(tickValues=axis.scale().ticks(numberOfValues)).length>numberOfValues&&(tickValues=tickValues.filter(function(e,i){return i%2==0})),2===numberOfValues&&(tickValues=[(tickValues=axis.scale().ticks(10))[0],tickValues[tickValues.length-1]]),tickValues}(availableSpace,labelProps[orientation===axis_orientation_BOTTOM||orientation===axis_orientation_TOP?"width":"height"],axis,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return getSmallestDiff(this.renderConfig().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(tickText){var orientation=this.config().orientation,rotation=this.renderConfig().labels.rotation,axis=this.axis(),ticks=axis.tickValues(),smartTicks=this.smartTicks();if(smartTicks&&smartTicks.length){var _this$smartTicks$=this.smartTicks()[0],width=_this$smartTicks$.width,height=_this$smartTicks$.height;axis.tickTransform(function(d){if(d===ticks[0]){if(orientation===axis_orientation_LEFT||orientation===axis_orientation_RIGHT)return"translate(0, -".concat(height/3,"px)");if((orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM)&&!rotation)return"translate(".concat(width/2,"px, ",0,"px)")}return""})}return tickText}}],[{key:"type",value:function type(){return LINEAR}}]),ContinousAxis}();function band_axis_typeof(obj){return(band_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function band_axis_defineProperties(target,props){for(var i=0;irange[1],extent=this.invertExtent(v1,v2);return[scale(reverse?extent[extent.length-1]:extent[0]),scale(reverse?extent[0]:extent[extent.length-1])+scale.bandwidth()]}}],[{key:"type",value:function type(){return BAND}}]),BandAxis}();function time_axis_typeof(obj){return(time_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function time_axis_defineProperties(target,props){for(var i=0;i1?config.range:[DEFAULT_GRADIENT_COLOR].concat(props_toConsumableArray(config.range)));var oldConfig=mergeRecursive(defCon,context.config()),newConfig=mergeRecursive(oldConfig,config);return newConfig.range instanceof Array&&(newConfig.range=newConfig.range.map(function(e,i){return props_getActualHslColor(e,palette[i])}),newConfig.stops=config.stops||newConfig.range.length),newConfig.value=props_getActualHslColor(newConfig.value,newConfig.value),newConfig}},domain:{},scale:{},uniqueValues:{}},helper_treatNullMeasures=function treatNullMeasures(domainVal,scaledVal,minDomainScaledVal){return domainVal instanceof src_InvalidAwareTypes?minDomainScaledVal:scaledVal},helper_resolveAxisConfig=function resolveAxisConfig(propVal,defaultVal,context){switch(getObjProp(propVal,"constructor")){case Function:return propVal(defaultVal,context);case Array:return propVal;default:return defaultVal}};function color_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function color_strategy_toConsumableArray(arr){return function color_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);iMath.min(range.length,18))for(var interpolator=common_utils_piecewiseInterpolator()(function hslInterpolator(){return hslLong}(),range.map(function(e){return props_getHslString(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(domain.length){var scale=this.scale(),range=scale.range?scale.range():null,scaleInfo=this._colorStrategy.domainRange()(domain,this.config().stops,range);this.domain(scaleInfo.domain),scaleInfo.range&&this.scale().range(scaleInfo.range),this.uniqueValues(scaleInfo.uniqueVals),this.scale().domain(scaleInfo.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(color,transformationArr){var h=360*color[0],s=100*color[1],l=100*color[2],a=Math.min(defaultValue(color[3],0),1),newH=h+transformationArr[0],newS=s+transformationArr[1],newL=l+transformationArr[2],newA=Math.min(a+transformationArr[3]||0,1);return{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH/360,newS/100,newL/100,newA]}}},{key:"id",value:function id(){return this._id}},{key:"getHslArray",value:function getHslArray(color){return props_getActualHslColor(color)}}],[{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIG}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),defaults_DEFAULT_CONFIG={value:36,range:[36,1e3]};function size_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function size_strategy_toConsumableArray(arr){return function size_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:0,value=this.config().value,scale=this.scale(),domain=this.domain()||[1,1];return scale&&domain[0]!==domain[1]?this._sizeStrategy.range(domainVal,scale,this.domain(),this.uniqueValues()):value}},{key:"updateDomain",value:function updateDomain(domain){if(domain){var domainInfo=(0,this._sizeStrategy.domain)(domain,this.config().intervals);this.domain(domainInfo.domain),this.uniqueValues(domainInfo.uniqueVals),this.scale().domain(domainInfo.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 defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),shape_axis_defaults_DEFAULT_CONFIG={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},shape_axis_props_PROPS={config:{},domain:{},scale:{},uniqueValues:{},generator:{}};function shape_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[];return domain.length&&(this.uniqueValues(domain),this.domain(domain),this.scale().domain(domain),this.config().generator&&(this._generatedShapes=function shapeGenerator(domain,generatorFn){var generatedShapes={};return domain.forEach(function(value){generatedShapes[value]=generatorFn(value)}),generatedShapes}(domain,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 shape_axis_defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}(),polar_axis_props_PROPS={config:{sanitization:function sanitization(context,config){return mergeRecursive(context.config(),config)},preset:function preset(context,config){var range=config.range,domain=config.domain;range&&context.range(range),domain&&context.domain(domain)}},domain:{},range:{}};function angle_axis_slicedToArray(arr,i){return function angle_axis_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function angle_axis_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function angle_axis_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function angle_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function angle_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AngleAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._range=[0,360],this._angleFn=angle_axis_pie().value(function(d){return"string"==typeof d?1:d}).sortValues(null),this._angleValues={}}return function angle_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&angle_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&angle_axis_defineProperties(Constructor,staticProps),Constructor}(AngleAxis,[{key:"createScale",value:function createScale(strategy){var range=this.config().range;return scale_creator_createScale({type:strategy.scale,range:range})}},{key:"getScaleValue",value:function getScaleValue(domainVal){return this._angleValues[domainVal]}},{key:"padAngle",value:function padAngle(angle){this._angleFn=this._angleFn.padAngle(angle)}},{key:"domain",value:function domain(){for(var _len=arguments.length,domainVal=new Array(_len),_key=0;_key<_len;_key++)domainVal[_key]=arguments[_key];if(domainVal.length){var customDomain=this.config().domain,domain=domainVal[0].length?domainVal[0]:DEFAULT_ANGLE_DOMAIN;return this._domain=helper_resolveAxisConfig(customDomain,domain,this),createAngleValues(this),this}return this._domain}},{key:"range",value:function range(){if(arguments.length){var customRange=this.config().range;this._range=helper_resolveAxisConfig(customRange,arguments.length<=0?void 0:arguments[0],this);var domain=this.domain(),_this$_range=angle_axis_slicedToArray(this._range,2),startAngle=_this$_range[0],endAngle=_this$_range[1];return this._angleFn.startAngle(startAngle/180*Math.PI).endAngle(Math.PI*endAngle/180),domain&&domain.length&&createAngleValues(this),this}return this._range}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),AngleAxis}(),X="x",Y="y",MEASURE="measure",ROWS="rows",COLUMNS="columns",COL="col",ROW="row",enums_constants_COLOR="color",enums_constants_SHAPE="shape",enums_constants_SIZE="size",enums_constants_LINEAR="linear",constants_LEFT="left",constants_RIGHT="right",CELL="cell",X_AXES="xAxes",Y_AXES="yAxes",ENTRY_CELLS="entryCell",EXIT_CELLS="exitCell",enums_constants_RADIUS="radius",enums_constants_ANGLE="angle",ANGLE0="angle0",PRIMARY="Primary",SECONDARY="Secondary";function radius_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function radius_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RadiusAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._range=[],this._radiusFactor=1,this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._scale=this.createScale({scale:enums_constants_LINEAR})}return function radius_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&radius_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&radius_axis_defineProperties(Constructor,staticProps),Constructor}(RadiusAxis,[{key:"config",value:function config(){if(arguments.length){var config=mergeRecursive(this.config(),arguments.length<=0?void 0:arguments[0]);return this._config=config,this}return this._config}},{key:"createScale",value:function createScale(strategy){return scale_creator_createScale({type:strategy.scale,range:this.range()})}},{key:"domain",value:function domain(){if(arguments.length){var customDomain=this.config().domain,domain=helper_resolveAxisConfig(customDomain,arguments.length<=0?void 0:arguments[0],this);domain=sanitizeDomainWhenEqual(domain),this._scale.domain(domain),this._domain=domain,adjustDomain(this)}return this._domain}},{key:"getInnerRadius",value:function getInnerRadius(domainVal){return void 0===domainVal?this.range()[0]:this._scale(domainVal)}},{key:"getOuterRadius",value:function getOuterRadius(domainVal){return void 0===domainVal?this.range()[1]:this._scale(domainVal)*this._radiusFactor}},{key:"range",value:function range(){for(var _len=arguments.length,_range=new Array(_len),_key=0;_key<_len;_key++)_range[_key]=arguments[_key];if(_range.length){var _this$config2=this.config(),padding=_this$config2.padding,customRange=_this$config2.range,sanitizedRange=_range[0].map(function(v,i){return v+(i?-padding[i]:padding[i])}),rangeVal=helper_resolveAxisConfig(customRange,sanitizedRange,this);this._range=rangeVal,this._scale.range(rangeVal),adjustDomain(this)}return this._range}},{key:"setRadiusFactor",value:function setRadiusFactor(val){return this._radiusFactor=val,this}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:[0,1],minOuterRadius:10}}}]),RadiusAxis}();function data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DATA_TYPES_MEASURE="measure",DATA_TYPES_TEMPORAL="temporal",group_transform=(data_type_scale_map_defineProperty(_dataTypeScaleMap={},"dimension",BAND),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_MEASURE,LINEAR),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_TEMPORAL,TIME),function(schema,data,config){var groupBy=config.groupBy instanceof Array?config.groupBy:[config.groupBy],groupByIndices=groupBy.map(function(fieldName){return schema.findIndex(function(d){return d.name===fieldName})});if(void 0!==groupByIndices.find(function(d){return-1===d}))throw new Error("Groupby field ".concat(groupBy," not found in schema"));var groupedData=common_utils_nestCollection({keys:groupByIndices,data:data});return groupedData.forEach(function(d){var key=d.key;src_InvalidAwareTypes.isInvalid(key)&&(d.key=src_InvalidAwareTypes.getInvalidType(key))}),groupedData});var _transformMap;function transform_factory_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var transformMap=(transform_factory_defineProperty(_transformMap={},"identity",function identityTransform(schema,data,config){return data}),transform_factory_defineProperty(_transformMap,"group",group_transform),transform_factory_defineProperty(_transformMap,"stack",function(schema,data,config){var uniqueField=config.uniqueField,valueField=config.value,groupBy=config.groupBy,sort=config.sort||"descending",normalizedData=function normalizeData(data,schema,valueField,uniqueField,groupBy){var groupedData=group_transform(schema,data,{groupBy:uniqueField}),uniqueFieldIndex=schema.findIndex(function(d){return d.name===uniqueField}),valueFieldIndex=schema.findIndex(function(d){return d.name===valueField}),seriesKeyIndex=schema.findIndex(function(d){return d.name===groupBy}),seriesKeys=data.map(function(d){return d[seriesKeyIndex]}).filter(function(item,pos,arr){return arr.indexOf(item)===pos}).sort(),fieldNames=schema.reduce(function(acc,obj,i){return acc[i]=obj.name,acc},{});return{data:groupedData.map(function(arr){var tuples={},rowObj=arr.values.reduce(function(acc,row){return acc=row.reduce(function(obj,value,i){return i===seriesKeyIndex?(obj[value]=row[valueFieldIndex],tuples[value]=row):i!==valueFieldIndex&&(obj[fieldNames[i]]=value),obj},acc)},{});return rowObj._tuple=tuples,seriesKeys.forEach(function(seriesKey){if(void 0===rowObj[seriesKey]){rowObj[seriesKey]=0;var newArr=new Array(arr.values[0].length);newArr[uniqueFieldIndex]=arr.key,newArr[seriesKeyIndex]=seriesKey,rowObj._tuple[seriesKey]=newArr}}),rowObj}),keys:seriesKeys}}(data,schema,valueField,uniqueField,groupBy),keys=normalizedData.keys,map={},orderBy=config.orderBy,orderIndex=schema.findIndex(function(d){return d.name===orderBy}),groupByIndex=schema.findIndex(function(d){return d.name===groupBy});-1!==orderIndex&&(keys.forEach(function(key){var name=data.find(function(d){return d[groupByIndex]===key});map[key]=name[orderIndex]}),normalizedData.keys.sort(function(a,b){return map[a].localeCompare(map[b])}));var stackData=common_utils_stack({keys:normalizedData.keys,offset:config.offset||"diverging",order:sort,data:normalizedData.data});return stackData.forEach(function(seriesData){seriesData.forEach(function(dataObj){dataObj.data=dataObj.data._tuple[seriesData.key]})}),stackData}),_transformMap);var _encodingFieldInfRetr,_dataNormalizers,_domainCalculator,transform_factory=function transformFactory(type){var transform=transformMap[type];if("function"!=typeof transform)throw new Error("Invalid transform type supplied.");return transform};function helpers_toConsumableArray(arr){return function helpers_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=d[0]?(y=x0=d[1],x=y0=d[0]):(y=x0=d[0],x=y0=d[1]),(pointObj=xFieldType===dist_datamodel.FieldType.MEASURE?{x:x,x0:x0,y:tuple[yFieldIndex],y0:tuple[yFieldIndex]}:{x:tuple[xFieldIndex],x0:tuple[xFieldIndex],y:y,y0:y0}).source=tuple,pointObj.rowId=tuple[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=tuple[encodingFieldInf["".concat(enc,"FieldIndex")]]})):((pointObj={x:d[xFieldIndex],y:d[yFieldIndex],x0:d[x0FieldIndex],y0:d[y0FieldIndex]}).source=d,pointObj.rowId=d[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=d[encodingFieldInf["".concat(enc,"FieldIndex")]]}));return pointObj})}).filter(function(d){return d.length})}),_dataNormalizers),domainCalculator=(helpers_defineProperty(_domainCalculator={},POLAR,function(data,layerInst){var config=layerInst.config(),sort=config.sort,angleValues=data[0],radius0Field=getObjProp(config.encoding.radius0,"field");return sort&&(angleValues=angleValues.sort(function(a,b){return"asc"===sort?a.radius-b.radius:b.radius-a.radius})),{radius:getDomainFromData(data,[ENCODING.RADIUS,radius0Field?ENCODING.RADIUS0:ENCODING.RADIUS]),angle:angleValues.map(function(d){return d.angle}),angle0:angleValues.map(function(d){return d.angle0})}}),helpers_defineProperty(_domainCalculator,helpers_CARTESIAN,function(data,layerInst){var transformType=layerInst.transformType(),encodingFieldInf=layerInst.encodingFieldsInf(),xFieldSubType=encodingFieldInf.xFieldSubType,yFieldSubType=encodingFieldInf.yFieldSubType,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,x0Field=encodingFieldInf.x0Field,y0Field=encodingFieldInf.y0Field,domains={},yEnc=ENCODING.Y,xEnc=ENCODING.X;return xField&&(domains.x=getDomainFromData(data,x0Field||"stack"===transformType?[xEnc,ENCODING.X0]:[xEnc,xEnc],xFieldSubType)),yField&&(domains.y=getDomainFromData(data,y0Field||"stack"===transformType?[ENCODING.Y0,ENCODING.Y]:[yEnc,yEnc],yFieldSubType)),domains}),_domainCalculator),attachDataToVoronoi=function attachDataToVoronoi(voronoi,points){var _ref3;voronoi.data((_ref3=[]).concat.apply(_ref3,helpers_toConsumableArray(points)).filter(function(d){return void 0!==d.rowId}).map(function(d){var point=d.update;return{x:point.x,y:point.y,data:d}}))},helpers_updateStyle=function updateStyle(target,styles,remove){for(var key in styles)({}).hasOwnProperty.call(styles,key)&&target.style(key,remove?null:styles[key])},positionPoints=function positionPoints(context,points){var positioner=context.encodingTransform();return positioner?positioner(points,context,{smartLabel:context._dependencies.smartLabel}):points},helpers_getPlotMeasurement=function getPlotMeasurement(context,dimensionalValues){var fieldInfo=context.encodingFieldsInf(),axes=context.axes(),transformType=context.transformType(),config=context.config(),bandScale=context._bandScale;return["x","y"].map(function(type){var span=0,groupSpan=0,padding=0,offsetValues=[];if(fieldInfo["".concat(type,"FieldType")]===dist_datamodel.FieldType.DIMENSION){var actualGroupWidth,timeDiff=fieldInfo["".concat(type,"FieldSubType")]===dist_datamodel.DimensionSubtype.TEMPORAL?context.dataProps().timeDiffs[type]:0,axis=axes[type],pad=config["pad".concat(type.toUpperCase())],innerPadding=config.innerPadding,keys=dimensionalValues,scale=axis.scale();groupSpan=function getGroupSpan(axis,minDiff){var width=axis.getUnitWidth(),scale=axis.scale(),range=scale.range(),domain=scale.domain();return width||Math.abs(range[1]-range[0])/Math.abs(domain[1]-domain[0])*minDiff}(axis,timeDiff);var isAxisBandScale=axis.constructor.type()===helpers_BAND,axisPadding=axis.config().padding;if("group"===transformType){var groupPadding=isAxisBandScale?0:axisPadding*groupSpan/2;bandScale.range([groupPadding,groupSpan-groupPadding]).domain(keys).paddingInner(innerPadding),span=bandScale.bandwidth(),actualGroupWidth=groupSpan-(isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(key){return bandScale(key)-(isAxisBandScale?0:groupSpan/2)})}else if(void 0!==pad){var offset;if(isAxisBandScale){var step=scale.step();offset=scale.padding()*step,span=scale.bandwidth()+offset}else span=groupSpan;offsetValues=keys.map(function(){return isAxisBandScale?-offset/2:-span/2})}else actualGroupWidth=span=groupSpan-(padding=isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(){return isAxisBandScale?0:-span/2});groupSpan=actualGroupWidth,padding=isAxisBandScale?axisPadding*axis.scale().step():axisPadding*groupSpan}return{span:span,offsetValues:offsetValues,groupSpan:groupSpan,padding:padding}})},helpers_resolveInvalidTransformType=function resolveInvalidTransformType(context){return function transformResolverPredicates(encodingFieldInf,context,groupByField){var fieldsConfig=context.data().getFieldsConfig(),xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,dimensionField=["xField","yField"].find(function(type){return encodingFieldInf["".concat(type,"Type")]===dist_datamodel.FieldType.DIMENSION});return[!xField,!yField,!groupByField,getObjProp(fieldsConfig[groupByField],"def","type")===dist_datamodel.FieldType.MEASURE,xFieldType===dist_datamodel.FieldType.DIMENSION&&yFieldType===dist_datamodel.FieldType.DIMENSION,dimensionField&&encodingFieldInf[dimensionField]===groupByField]}(context.encodingFieldsInf(),context,context.config().transform.groupBy).some(function(value){return value})?"identity":null},helpers_getValidTransformForAggFn=function getValidTransformForAggFn(context){var resolvedInvalidTransformType=helpers_resolveInvalidTransformType(context);if(resolvedInvalidTransformType)return resolvedInvalidTransformType;var _context$encodingFiel=context.encodingFieldsInf(),xField=_context$encodingFiel.xField,yField=_context$encodingFiel.yField,xFieldType=_context$encodingFiel.xFieldType,yFieldType=_context$encodingFiel.yFieldType,groupByField=context.config().transform.groupBy,isCustomTransformTypeProvided=!!getObjProp(context._customConfig,"transform","type"),transformType=context.config().transform.type;if(!isCustomTransformTypeProvided&&groupByField&&xFieldType!==yFieldType){var measureField=xFieldType===dist_datamodel.FieldType.MEASURE?xField:yField;transformType="sum"===common_utils_retrieveNearestGroupByReducers(context.data(),measureField)[measureField]?"stack":"group"}return transformType},helpers_resolveEncodingValues=function resolveEncodingValues(data,i,dataArr,layerInst){var transformedValues={},values=data.values,encoding=layerInst.config().encoding;for(var key in values){var value=getObjProp(encoding[key],"value");value instanceof Function?transformedValues[key]=value(values,i,dataArr,layerInst):transformedValues[key]=values[key]}return transformedValues},getColorMetaInf=function getColorMetaInf(colorInf,colorAxis){return{originalColor:Object.keys(colorInf).reduce(function(acc,key){return colorInf[key]&&(acc[key]=colorAxis.getHslArray(colorInf[key])),acc},{}),stateColor:{},colorTransform:{}}},getCoordValue=function getCoordValue(radius,trig,angle,offset){return radius*Math[trig](angle)+offset},coordValueGetter=function coordValueGetter(radius,angle,xOffset,yOffset){return{x:getCoordValue(radius,"cos",angle,xOffset),y:getCoordValue(radius,"sin",angle,yOffset)}},toCartesianCoordinates=function toCartesianCoordinates(points,measurement){for(var rangePlot=arguments.length>2&&void 0!==arguments[2]&&arguments[2],xOffset=measurement.width/2,yOffset=measurement.height/2,i=0,len=points.length;i3&&void 0!==arguments[3]?arguments[3]:{};return function base_layer_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,BaseLayer),_this=function base_layer_possibleConstructorReturn(self,call){return!call||"object"!==base_layer_typeof(call)&&"function"!=typeof call?base_layer_assertThisInitialized(self):call}(this,base_layer_getPrototypeOf(BaseLayer).call(this)),generateGetterSetters(base_layer_assertThisInitialized(_this),props_props),_this.axes(axes),_this.alias(_this.constructor.formalName()+getUniqueId()),_this.dependencies(dependencies),_this._points=[],_this._cachedData=[],_this._id=getUniqueId(),_this._measurement={},_this._animationDonePromises=[],_this._graphicElems={},_this._customConfig=null,_this}return function base_layer_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&base_layer_setPrototypeOf(subClass,superClass)}(BaseLayer,simple_layer_SimpleLayer),function base_layer_createClass(Constructor,protoProps,staticProps){return protoProps&&base_layer_defineProperties(Constructor.prototype,protoProps),staticProps&&base_layer_defineProperties(Constructor,staticProps),Constructor}(BaseLayer,[{key:"store",value:function store(){if(arguments.length){var store=this._store=arguments.length<=0?void 0:arguments[0],namespace=this.metaInf().namespace;return store.addSubNamespace(namespace,BaseLayer.formalName(),this),store_transactor(this,localOptions,store,{subNamespace:namespace,namespace:"".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE)}),this}return this._store}},{key:"domain",value:function domain(){var prop="".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain"),store=this.store();if(arguments.length){var _this$metaInf2=this.metaInf(),parentNamespace=_this$metaInf2.parentNamespace,namespace=_this$metaInf2.namespace,domain=defaultValue(store.get(prop,parentNamespace),{});return domain[namespace]=arguments.length<=0?void 0:arguments[0],this.store().commit(prop,domain,parentNamespace),this}return this.store().get(prop,this.metaInf().namespace)}},{key:"encodingFieldsInf",value:function encodingFieldsInf(){return arguments.length?(this._encodingFieldsInf=arguments.length<=0?void 0:arguments[0],this):this._encodingFieldsInf}},{key:"encodingTransform",value:function encodingTransform(){return arguments.length?(this._encodingTransform=arguments.length<=0?void 0:arguments[0],this):this._encodingTransform}},{key:"alias",value:function alias(){return arguments.length?(this._alias=arguments.length<=0?void 0:arguments[0],this):this._alias||this.constructor.formalName()}},{key:"dependencies",value:function dependencies(){return arguments.length?(this._dependencies=arguments.length<=0?void 0:arguments[0],this):this._dependencies}},{key:"enableCaching",value:function enableCaching(){return this._cacheEnabled=!0,this}},{key:"clearCaching",value:function clearCaching(){return this._cacheEnabled=!1,this.data(this._cachedData[0])}},{key:"serialize",value:function serialize(){return this.config()}},{key:"id",value:function id(){return this._id}},{key:"getTransformedData",value:function getTransformedData(dataModel,config,transformType,encodingFieldsInf){return function transformData(dataModel,config,transformType,encodingFieldInf){var data=dataModel.getData({withUid:!0}),schema=data.schema,transform=config.transform,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,uniqueField=xFieldType===dist_datamodel.FieldType.MEASURE?yField:xField;return transform_factory(transformType)(schema,data.data,{groupBy:transform.groupBy,uniqueField:uniqueField,sort:transform.sort||"none",offset:transform.offset,orderBy:transform.orderBy,value:yFieldType===dist_datamodel.FieldType.MEASURE?yField:xField},data.uids)}(dataModel,config,transformType,encodingFieldsInf)}},{key:"calculateDomainFromData",value:function calculateDomainFromData(data){var domains={};return this.data().isEmpty()||(domains=domainCalculator[this.coord()](data,this)),domains}},{key:"getDataDomain",value:function getDataDomain(encodingType){var _this$metaInf3=this.metaInf(),parentNamespace=_this$metaInf3.parentNamespace,namespace=_this$metaInf3.namespace,domains=getObjProp(this.store().get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain"),parentNamespace),namespace);return void 0!==encodingType?domains[encodingType]||[]:domains}},{key:"getNormalizedData",value:function getNormalizedData(transformedData){return function getNormalizedData(transformedData,context){var transformType=context.transformType(),transformedDataArr="identity"===transformType?[transformedData]:transformedData,encodingFieldInf=context.encodingFieldsInf(),fieldsConfig=context.data().getFieldsConfig();return dataNormalizers[context.coord()](transformedDataArr,encodingFieldInf,fieldsConfig,transformType)}(transformedData,this)}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(interactionType,selectionSet,apply,styles){var interactionStyles=(this.config().interaction||{})[interactionType];(interactionStyles=styles||interactionStyles)&&helpers_applyInteractionStyle(this,selectionSet,interactionStyles,{apply:apply,interactionType:interactionType})}},{key:"disableUpdate",value:function disableUpdate(){return this._updateLock=!0,this}},{key:"enableUpdate",value:function enableUpdate(){return this._updateLock=!1,this}},{key:"resolveTransformType",value:function resolveTransformType(){this._transformType=function getValidTransform(context){return helpers_resolveInvalidTransformType(context)||context.config().transform.type}(this)}},{key:"transformType",value:function transformType(){return this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){var _this$metaInf4=this.metaInf(),namespace=_this$metaInf4.namespace,parentNamespace=_this$metaInf4.parentNamespace,store=this.store();store.removeSubNamespace(namespace,BaseLayer.formalName());var unitDom=store.get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".domain"))[parentNamespace];return unitDom&&delete unitDom[namespace],renderer_utils_selectElement(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(key,data){if(null===key)return this;var pointMap=this._pointMap;return!pointMap[key]&&(pointMap[key]=[]),pointMap[key].push(data),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(data){var schema=this.data().getSchema(),fieldsConfig=this.data().getFieldsConfig(),identifiers=[[],[]],_this$encodingFieldsI=this.encodingFieldsInf(),xFieldType=_this$encodingFieldsI.xFieldType,yFieldType=_this$encodingFieldsI.yFieldType,xField=_this$encodingFieldsI.xField,yField=_this$encodingFieldsI.yField,_map2=base_layer_slicedToArray([xFieldType,yFieldType].map(function(type){return type===dist_datamodel.FieldType.MEASURE}),2),xMeasure=_map2[0],yMeasure=_map2[1];if(schema.forEach(function(d,i){var name=d.name;fieldsConfig[name].def.type===dist_datamodel.FieldType.DIMENSION&&(identifiers[0].push(name),identifiers[1].push(data[i]))}),xMeasure&&yMeasure){var _identifiers$,_identifiers$2,xMeasureIndex=fieldsConfig[xField].index,yMeasureIndex=fieldsConfig[yField].index;(_identifiers$=identifiers[0]).push.apply(_identifiers$,[xField,yField]),(_identifiers$2=identifiers[1]).push.apply(_identifiers$2,[data[xMeasureIndex],data[yMeasureIndex]])}return identifiers}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!1}},{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(identifiers){var _ref,fieldNames,values,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},getAllAttrs=config.getAllAttrs,getBBox=config.getBBox;if(!this.data())return[];if(identifiers instanceof datamodel_default.a){var dataObj=identifiers.getData();fieldNames=dataObj.schema.map(function(d){return d.name}),values=dataObj.data}else fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length);var points=this._points,fieldsConfig=this.data().getFieldsConfig(),filteredPoints=(_ref=[]).concat.apply(_ref,base_layer_toConsumableArray(points)).filter(function(point){var source=point.source,rowId=point.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})});return getAllAttrs?filteredPoints:filteredPoints.map(function(d){var obj=clone(d);if(getBBox){var update=obj.update||obj;if(void 0!==obj.size){var sizeVal=2*Math.sqrt(obj.size/Math.PI);update.width=sizeVal,update.height=sizeVal,update.x-=sizeVal/2,update.y-=sizeVal/2}else void 0===update.width&&(update.width=2),void 0===update.height&&(update.height=2)}return obj.update||obj}).sort(function(a,b){return a.y-b.y})}},{key:"getTransformedDataFromIdentifiers",value:function getTransformedDataFromIdentifiers(identifiers){var measureIndex,enc,_identifiers$getData=identifiers.getData(),identifierData=_identifiers$getData.data,identifierSchema=_identifiers$getData.schema,normalizedData=this._normalizedData,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI2=this.encodingFieldsInf(),yField=_this$encodingFieldsI2.yField,xField=_this$encodingFieldsI2.xField,yFieldType=_this$encodingFieldsI2.yFieldType;_this$encodingFieldsI2.xFieldType===dist_datamodel.FieldType.MEASURE?(measureIndex=fieldsConfig[xField].index,enc="x"):yFieldType===dist_datamodel.FieldType.MEASURE&&(measureIndex=fieldsConfig[yField].index,enc="y");var transformedData=[];return normalizedData.forEach(function(dataArr){dataArr.forEach(function(dataObj){var tupleArr=dataObj.source;if(identifierSchema.every(function(obj,i){return-1!==identifierData.findIndex(function(d){return tupleArr[fieldsConfig[obj.name].index]===d[i]})})){var transformedVal=dataObj[enc],row=dataObj.source,tuple={};for(var key in fieldsConfig){var index=fieldsConfig[key].index;tuple[key]=row[index],index===measureIndex&&(tuple[key]=transformedVal)}transformedData.push(tuple)}})}),[transformedData,this.data().getSchema()]}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){for(var graphicElems=this._graphicElems,elems=[],i=0,len=set.length;i2&&void 0!==arguments[2]?arguments[2]:{},dataPoint=renderer_utils_selectElement(config.event.target).data()[0];if(isSimpleObject(dataPoint)){var source=dataPoint.source,rowId=dataPoint.rowId;return{id:this.getIdentifiersFromData(source,rowId),layerId:this.id()}}return null}},{key:"translatePoints",value:function translatePoints(data){var _this2=this,_this$axes=this.axes(),angle=_this$axes.angle,colorAxis=_this$axes.color,radiusAxis=_this$axes.radius,pieIndex={},prevData=this._points[0]||[],points=[],angleV={};return this._prevPieData={},prevData.forEach(function(e,index){_this2._prevPieData[e.rowId]=[e,index],pieIndex[e.index]=e}),data.forEach(function(d,i){var angles=angle.getScaleValue(d.angle);if(angles){!angleV[d.angle]&&(angleV[d.angle]=0);var _angles=angles[angleV[d.angle]++],startAngle=_angles.startAngle,endAngle=_angles.endAngle,uid=d.rowId,resolvedEncodings=helpers_resolveEncodingValues({values:{radius:radiusAxis.getOuterRadius(d.radius),radius0:radiusAxis.getInnerRadius(d.radius0),color:colorAxis.getColor(d.color),angle0:startAngle,angle:endAngle,startAngle:startAngle,endAngle:endAngle,startAngle0:startAngle,endAngle0:endAngle},data:d},i,data,_this2),color=resolvedEncodings.color;points.push({source:d.source,index:i,enter:{},update:{angle0:resolvedEncodings.angle0,angle:resolvedEncodings.angle,radius0:resolvedEncodings.radius0,radius:resolvedEncodings.radius},color:color,meta:getColorMetaInf({fill:color},colorAxis),rowId:uid,_previousInfo:_this2._prevPieData[uid]?_this2._prevPieData[uid][0]:function getPreviousPoint(prevData,currIndex,context){var prevArc=prevData[currIndex-1],nextArc=prevData[currIndex],_context$axes$angle$r2=arc_helper_slicedToArray(context.axes().angle.range(),2),startAngle=_context$axes$angle$r2[0],endAngle=_context$axes$angle$r2[1];return prevArc&&nextArc?{update:{angle0:getObjProp(prevArc,"update","angle"),angle:getObjProp(nextArc,"update","angle0")}}:nextArc?{update:{angle0:(startAngle-90)*Math.PI*2/360,angle:(startAngle-90)*Math.PI*2/360}}:{update:{angle0:(endAngle-90)*Math.PI*2/360,angle:(endAngle-90)*Math.PI*2/360}}}(pieIndex,i,_this2)})}}),points}},{key:"render",value:function render(container){var _this3=this,measurement=this.measurement(),_this$config=this.config(),classPrefix=_this$config.classPrefix,defClassName=_this$config.defClassName,cornerRadius=_this$config.cornerRadius,padAngle=_this$config.padAngle,padRadius=_this$config.padRadius,transition=_this$config.transition,qualClassName=getQualifiedClassName(defClassName,this.id(),classPrefix),path=this._arcFn=arc_arc().cornerRadius(cornerRadius).startAngle(function(d){return d.update.angle0+Math.PI/2}).endAngle(function(d){return d.update.angle+Math.PI/2}).padAngle(padAngle).padRadius(padRadius).outerRadius(function(d){return d.update.radius}).innerRadius(function(d){return d.update.radius0});this._points=this._normalizedData.map(function(arr){return _this3.translatePoints(arr)});var graphicElems=this._graphicElems={},g=makeElement(renderer_utils_selectElement(container),"g",this._points,"".concat(qualClassName[0],"-group")).classed("".concat(qualClassName[1],"-group"),!0).attr("transform","translate(".concat(measurement.width/2,",\n ").concat(measurement.height/2,")")),consecutiveExits=[],exitCounter=0;return makeElement(g,"g",function(d){return d},"".concat(qualClassName[0]),{update:function tween(elem){makeElement(elem,"path",function(d){return[d]},"".concat(qualClassName[0],"-path")).style("fill",function(d){return d.color}).each(function(d){graphicElems[d.rowId]=renderer_utils_selectElement(this)}).transition().duration(transition.duration).on("end",_this3.registerAnimationDoneHook()).attrTween("d",function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return function tweenPie(path,b){var datum=b[0];return function(t){return path(common_utils_interpolator()(datum._previousInfo,datum)(t))}}(path,params)}).attr("class",function(d,i){var individualClass=getIndividualClassName(d,i,_this3._points,_this3);return"".concat(qualClassName[0],"-path ").concat(qualClassName[1],"-path-").concat(d.index,"\n ").concat(individualClass)})},exit:function tweenExit(elem,d){var exitArr=consecutiveExits[exitCounter],oldExitCounter=exitCounter;exitArr?exitArr[exitArr.length-1].datum.index===d.index-1?exitArr.push({elem:elem,datum:d}):exitCounter++:exitArr=[{elem:elem,datum:d}],consecutiveExits[oldExitCounter]=exitArr}}).attr("class",function(d,i){return"".concat(qualClassName[0]," ").concat(qualClassName[1],"-").concat(i)}),function tweenExitPie(consecutiveExits,transition,path){consecutiveExits.length>0&&consecutiveExits.forEach(function(consecutiveExitArr){var startAngle=consecutiveExitArr[0].datum.update.angle0,endAngle=consecutiveExitArr[consecutiveExitArr.length-1].datum.update.angle,mid=2*Math.PI*startAngle/(2*Math.PI+startAngle-endAngle);consecutiveExitArr.forEach(function(e){var elem=e.elem,datum=e.datum;elem.each(function(){var gElem=renderer_utils_selectElement(this);gElem.selectAll("path").transition().duration(transition.duration).attrTween("d",function(){return function(t){return path(common_utils_interpolator()(datum,{update:{angle0:mid,angle:mid,radius:datum.radius,radius0:datum.radius0}})(t))}}).remove(),gElem.remove()})})})}(consecutiveExits,transition,path),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){if(!this.data())return[];var fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length),pieSlices=renderer_utils_selectElement(this.mount()).selectAll("path").data(),fieldsConfig=this.data().getFieldsConfig(),pieSliceInf=pieSlices.filter(function(tData){var source=tData.source,rowId=tData.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})})[0];if(pieSliceInf){var measurement=this.measurement(),centroid=this._arcFn.centroid(pieSliceInf);return[{x:centroid[0]+measurement.width/2,y:centroid[1]+measurement.height/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return arc_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),text_renderer=function drawText(container,data,config,layerInst){var selection=renderer_utils_selectElement(container).selectAll("g").data(data),smartLabel=layerInst._dependencies.smartLabel,graphicElems=layerInst._graphicElems,selectionMerge=selection.enter().append("g").each(function(dataObj){renderer_utils_setAttrs(this,dataObj.enter)}).merge(selection),style=renderer_utils_getSmartComputedStyle(renderer_utils_selectElement(container),config.className),fontSize=parseInt(style.fontSize,10);return smartLabel.setStyle(style),selectionMerge.each(function(dataObj){var element=renderer_utils_selectElement(this);graphicElems[dataObj.rowId]=element;var backgroundVal,update=dataObj.update,text=dataObj.text,color=dataObj.color,textanchor=dataObj.textanchor,textStyle=dataObj.style,background=dataObj.background;if(backgroundVal=background.value){var diff,backgroundPadding=background.padding,_smartLabel$getOriSiz=smartLabel.getOriSize(dataObj.text),width=_smartLabel$getOriSiz.width,height=_smartLabel$getOriSiz.height,backgroundEl=makeElement(element,"rect",[1]);diff="end"===textanchor?width:"start"===textanchor?0:width/2,renderer_utils_setAttrs(backgroundEl.node(),{x:update.x-diff-backgroundPadding/2,y:update.y-fontSize-backgroundPadding/2,width:width+backgroundPadding,height:height+backgroundPadding}),background&&renderer_utils_setStyles(backgroundEl,{background:backgroundVal})}var textEl=makeElement(element,"text",function(d){return[d]}).text(text),textNode=textEl.node();textStyle&&renderer_utils_setStyles(textNode,textStyle),color&&renderer_utils_setStyles(textNode,{fill:color}),dataObj.className&&textEl.classed(dataObj.className,!0),renderer_utils_setAttrs(textNode,update),textEl.attr("text-anchor",textanchor),textEl.attr("alignment-baseline",dataObj["alignment-baseline"]),textEl.attr("transform","rotate(".concat(dataObj.rotation," ").concat(update.x," ").concat(update.y,")"))}),selection.exit().remove(),selection},text_default_config_defaultConfig={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:{},size:{},radius:{},angle:{},text:{value:"",formatter:function formatter(val,i,data,context){return context.valueParser()(val)},background:{padding:10}},rotation:{value:0},"alignment-baseline":{value:"middle"}},states:{highlight:{className:"".concat("muze","-layer-text-highlight")},fadeout:{className:"".concat("muze","-layer-text-fadeout")},selected:{className:"".concat("muze","-layer-text-selected")}}};__webpack_require__(18);function text_typeof(obj){return(text_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function text_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var _this=this,config=this.config(),normalizedData=this._normalizedData,className=config.className,qualifiedClassName=getQualifiedClassName(config.defClassName,this.id(),config.classPrefix);return renderer_utils_selectElement(container).classed("".concat(qualifiedClassName.join(" ")," ").concat(className),!0),this._graphicElems={},renderer_utils_createElements({data:normalizedData,append:"g",selector:"g",container:container,each:function each(dataArr,group){var node=group.node(),points=_this.translatePoints(dataArr,{},_this);renderer_utils_setStyles(node,{"text-anchor":"middle"}),text_renderer(node,points,{className:qualifiedClassName[0]},_this)}}),this}}],[{key:"defaultConfig",value:function defaultConfig(){return text_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"text"}}]),TextLayer}(),point_renderer=function drawSymbols(params){var layer=params.layer,container=params.container,points=params.points,transition=params.transition,className=params.className,duration=transition.duration,effect=transition.effect,disabled=transition.disabled,mount=renderer_utils_selectElement(container),graphicElems=layer._graphicElems;return mount.attr("class",className),makeElement(mount,"g",points,null,{enter:function enter(group,d){var enter=d.enter;group.attr("transform","translate(".concat(enter.x,",").concat(enter.y,")"))},update:function update(group,d){!function createShape(d,groupElement){var shape=d.shape,size=d.size,update=d.update;if(shape instanceof Promise)shape.then(function(res){d.shape=res,createShape(d,groupElement)});else if(shape instanceof Element){var newShape=shape.cloneNode(!0);if("img"===newShape.nodeName.toLowerCase()){var src=newShape.src||newShape.href;(newShape=document.createElementNS("http://www.w3.org/2000/svg","image")).setAttribute("href",src)}var shapeElement=renderer_utils_selectElement(newShape);"path"===newShape.nodeName||"image"===newShape.nodeName?shapeElement.attr("transform","scale(".concat(size/100,")")):(shapeElement.attr("height",size),shapeElement.attr("width",size)),shapeElement.attr("x",-size/2),shapeElement.attr("y",-size/2),makeElement(groupElement,function(){return newShape},[1])}else if("string"==typeof shape){var pathStr;pathStr=function checkPath(str){return!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(str)&&/[\dz]$/i.test(str)&&str.length>4)}(shape)?shape:common_utils_getSymbol(shape).size(size)(update),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}else d.shape="circle",createShape(d,groupElement)}(d,group),graphicElems[d.rowId]=group;var update=d.update,style=d.style;objectIterator(style,function(key){return group.style(key,style[key])}),group.attr("class",className),group.classed(d.className,!0),disabled||(group=group.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),group.attr("transform","translate(".concat(update.x,",").concat(update.y,")"))},exit:function exit(exitGroup){disabled?exitGroup.remove():exitGroup.transition().ease(easeFns[effect]).duration(duration).on("end",function(){return exitGroup.remove()}).style("fill-opacity",0).style("stroke-opacity",0)}},params.keyFn)},point_default_config_defaultConfig={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"stroke",intensity:[0,0,0,1]}],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:{},stroke:{value:"hsla(0,0%,0%,0)"},fill:{},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]};__webpack_require__(19);function point_typeof(obj){return(point_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function point_toConsumableArray(arr){return function point_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},points=[],encoding=this.config().encoding,axes=this.axes(),x=encoding.x,y=encoding.y,xField=x.field,yField=y.field,sizeAxis=axes.size,shapeAxis=axes.shape,fieldsConfig=this.data().getFieldsConfig(),isXDim=fieldsConfig[xField]&&fieldsConfig[xField].def.type===dist_datamodel.FieldType.DIMENSION,isYDim=fieldsConfig[yField]&&fieldsConfig[yField].def.type===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=this.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,stroke=encoding.stroke.value,_loop=function _loop(i,len){var d=data[i],size=sizeAxis.getSize(d.size),shape=shapeAxis.getShape(d.shape),_map2=point_slicedToArray([ENCODING.X,ENCODING.Y].map(function(type){var value=null===d[type]?void 0:d[type],measure=type===ENCODING.X?measurement.width:measurement.height;return encoding[type].field?axes[type].getScaleValue(value):measure/2}),2),xPx=_map2[0],yPx=_map2[1];xPx+=offsetX,yPx+=offsetY;var color=colorAxis.getColor(d.color),resolvedEncodings=helpers_resolveEncodingValues({values:{x:xPx,y:yPx,color:color,shape:shape,size:size,data:d},data:d},i,data,_this2),style={fill:color=resolvedEncodings.color,stroke:stroke},pos={x:resolvedEncodings.x,y:resolvedEncodings.y};if(!isNaN(xPx)&&!isNaN(yPx)){var point={enter:pos,update:pos,shape:resolvedEncodings.shape,size:Math.abs(resolvedEncodings.size),meta:getColorMetaInf(style,colorAxis),style:style,source:d.source,rowId:d.rowId};point.className=getIndividualClassName(d,i,data,_this2),points.push(point),_this2.cachePoint(d[key],point)}},i=0,len=data.length;i=update.x&&x<=update.width+update.x&&y>=update.y&&y<=update.height+update.y){pointFound=point;break}pointFound=null}var values=pointFound&&pointFound.source;return values&&(identifiers=this.getIdentifiersFromData(values,pointFound.rowId)),pointFound?{dimensions:[pointFound.update],id:identifiers,layerId:this.id()}:pointFound}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!0}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return bar_default_config_defaultConfig}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){var config=base_layer_BaseLayer.defaultPolicy(conf,userConf),colorField=config.encoding.color.field,transform=config.transform;return colorField&&(transform.groupBy=colorField),config}}]),BarLayer}(),tick_default_config_defaultConfig={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},interpolate:"linear",encoding:{color:{},x:{},y:{},x0:{},y0:{},radius:{},radius0:{},angle:{},angle0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"".concat("muze","-layer-tick-highlight")},fadeout:{className:"".concat("muze","-layer-tick-fadeout")},selected:{className:"".concat("muze","-layer-tick-selected")}}},tick_renderer_line=Symbols.line,tick_renderer=function(params){var points=params.points,container=params.container,keyFn=params.keyFn,className=params.className,interpolate=params.interpolate,layer=params.layer,mount=renderer_utils_selectElement(container),ticks=mount.selectAll("path").data(points,keyFn),ticksEnter=ticks.enter().append("path"),graphicElems=layer._graphicElems;return mount.attr("class",className||""),ticksEnter.each(function(d){var selection=renderer_utils_selectElement(this),enter=d.enter||{};Object.entries(enter).forEach(function(attr){return!isNaN(attr[1])&&selection.attr(attr[0],attr[1])})}),ticks.exit().remove(),ticks.merge(ticksEnter).each(function(d){var selection=renderer_utils_selectElement(this);graphicElems[d.rowId]=selection;var update=d.update,updateStyle=d.style||{},x0=void 0!==update.x0?update.x0:update.x,y0=void 0!==update.y0?update.y0:update.y,curveInterpolatorFn=pathInterpolators[interpolate],linepath=tick_renderer_line().curve(curveInterpolatorFn).x(function(e){return e[0]}).y(function(e){return e[1]});d.className&&selection.classed(d.className,!0),selection.attr("d",linepath([[update.x,update.y],[x0,y0]])),Object.entries(updateStyle).forEach(function(styleObj){return selection.style(styleObj[0],styleObj[1])})})};__webpack_require__(21);function tick_typeof(obj){return(tick_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function tick_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];for(var layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],radiusAxis=axes.radius,angleAxis=axes.angle,angle0Axis=axes.angle0,measurement=layerInst.measurement(),colorAxis=axes.color,angleV={},angle0V={},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{},layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],_getAxesScales=helpers_getAxesScales(axes),xAxis=_getAxesScales.xAxis,yAxis=_getAxesScales.yAxis,_layerInst$encodingFi=layerInst.encodingFieldsInf(),xField=_layerInst$encodingFi.xField,yField=_layerInst$encodingFi.yField,x0Field=_layerInst$encodingFi.x0Field,y0Field=_layerInst$encodingFi.y0Field,xFieldType=_layerInst$encodingFi.xFieldType,yFieldType=_layerInst$encodingFi.yFieldType,isXDim=xFieldType===dist_datamodel.FieldType.DIMENSION,isYDim=yFieldType===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_config$span=config.span,xSpan=_config$span.x,ySpan=_config$span.y,i=0,len=data.length;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];var layerRegistry=factoryObj._layerRegistry,instances=(layerDef=layerDef instanceof Array?layerDef:[layerDef]).map(function(layerObj){var layerConstructor=layerRegistry[layerObj.mark];return layerConstructor.create.apply(layerConstructor,params)});return 1===instances.length?instances[0]:instances},getLayerClass:function getLayerClass(mark){return factoryObj._layerRegistry[mark]},composeLayers:function composeLayers(layerType,layerDefs){compositeLayers[layerType]=layerDefs},sanitizeLayerConfig:function sanitizeLayerConfig(layerDef){var newConf=mergeRecursive({},layerDef);return sanitizeEncoding(newConf.encoding),newConf}};return factoryObj}();function defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _CONFIG$ROWS$COLUMNS$,DEFAULT_LAYERS=(defaults_defineProperty(_DEFAULT_LAYERS={},layer_types_AREA_LAYER,area_AreaLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_ARC_LAYER,arc_ArcLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_LINE_LAYER,line_LineLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TEXT_LAYER,text_TextLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_POINT_LAYER,point_PointLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TICK_LAYER,tick_TickLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BAR_LAYER,bar_BarLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BASE_LAYER,base_layer_BaseLayer),_DEFAULT_LAYERS),muze_package=__webpack_require__(6);function visual_group_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options=(visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$={},"config",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,ROWS,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,COLUMNS,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_COLOR,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SHAPE,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SIZE,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"detail",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"layers",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"transform",{}),_CONFIG$ROWS$COLUMNS$);function simple_group_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{},innerRadius=config.innerRadius,outerRadius=config.outerRadius;return[innerRadius||0,outerRadius||Math.min(height,width)/2]}(context.width(),context.height()))})},helper_isXandYMeasures=function isXandYMeasures(context){var _context$fields=context.fields(),_map2=src_helper_slicedToArray([_context$fields.x,_context$fields.y].map(function(fields){return fields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE})}),2),xMeasures=_map2[0],yMeasures=_map2[1];return xMeasures&&yMeasures},getKey=function getKey(arr,row){for(var key=row[arr[0]],i=1,len=arr.length;i=0?axisInf[key]:axisArr.length-1;axes[key]&&(axesObj[key]=defaultValue(axes[key][axisIndex]))}}),Object.keys(axesObj).length&&layer.axes(axesObj)})}(axesVal,layers,layerAxisIndexVal),context._lifeCycleManager.notify({client:layers,action:"updated",formalName:"layer"}))}}];function src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var src_props_PROPS=(src_props_defineProperty(_PROPS={},"facetByFields",{}),src_props_defineProperty(_PROPS,"retinalFields",{}),src_props_defineProperty(_PROPS,"parentAlias",{}),src_props_defineProperty(_PROPS,"cachedData",{}),src_props_defineProperty(_PROPS,"detailFields",{}),src_props_defineProperty(_PROPS,"axes",{defaultValue:{x:[],y:[]}}),src_props_defineProperty(_PROPS,"fields",{defaultValue:{x:[],y:[]},sanitization:function sanitization(context,value){return mergeRecursive({x:[],y:[]},value)}}),src_props_defineProperty(_PROPS,"metaInf",{}),src_props_defineProperty(_PROPS,"registry",{}),src_props_defineProperty(_PROPS,"parentContainerInf",{}),src_props_defineProperty(_PROPS,"valueParser",{defaultValue:function defaultValue(val){return val}}),src_props_defineProperty(_PROPS,"coord",{}),_PROPS);function payload_generator_toConsumableArray(arr){return function payload_generator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},payload=config.payload,selectionSet=config.selectionSet,propagationFieldInf=config.propagationFields[action]||{},propagationFields=propagationFieldInf.fields||[],append=propagationFieldInf.append,criteria=payload.criteria,context=instance.context,dataModel=context.cachedData()[0],sourceId=context.id(),sideEfffects=instance.sideEffects(),behaviourEffectMap=instance._behaviourEffectMap,mergedModel=selectionSet.mergedEnter.model,fieldsConfig=dataModel.getFieldsConfig();payload.sourceUnit=sourceId,payload.action=action,payload.sourceCanvas=context.parentAlias();var propagationBehaviour=instance._propagationBehaviourMap[action]||action,propFields=[];null===criteria?propagationData=null:isSimpleObject(criteria)?(propFields=Object.keys(criteria||{}),propagationData=mergedModel?mergedModel.project(propFields):null):(propFields=criteria[0],propagationData=mergedModel?mergedModel.project(propFields):null);var facetByFields=context.facetByFields();if(null!==propagationData&&propagationFields.length){var fields=propagationData.getData().schema.map(function(d){return d.name});propagationData=function getModelWithFacetData(dm,data){var dataObj=dm.getData(),schema1=dataObj.schema,data1=dataObj.data,jsonData=[],derivedSchema=data[0].map(function(d){return{name:"".concat(d),type:dist_datamodel.FieldType.DIMENSION,subtype:d.subtype()}}),dataAtFirstPos=data[1];return data1.forEach(function(d){var tuple={};schema1.forEach(function(obj,i){tuple[obj.name]=d[i]}),derivedSchema.forEach(function(obj,i){tuple[obj.name]=dataAtFirstPos[i]}),jsonData.push(tuple)}),new datamodel_default.a(jsonData,[].concat(data_propagator_toConsumableArray(schema1),data_propagator_toConsumableArray(derivedSchema)))}(propagationData,facetByFields),propFields=append?[].concat(data_propagator_toConsumableArray(fields),data_propagator_toConsumableArray(propagationFields)):propagationFields,propagationData=propagationData.project(propFields)}var propagateInterpolatedValues=!1;propFields.length&&propFields.every(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.MEASURE})&&(propagateInterpolatedValues=!0);var groupId=context.parentAlias();payload.action=action;var behaviourInstance=instance._actions.behavioural[propagationBehaviour],isMutableAction=!!behaviourInstance&&behaviourInstance.constructor.mutates(),filterFn=function filterFn(entry,propagationConf){var effects=behaviourEffectMap[entry.config.action],mutates=!entry.config.groupId||effects.some(function(d){return sideEfffects[d.name||d].constructor.mutates()});return entry.config.groupId!==propagationConf.groupId&&mutates},sourceBehaviour=instance._actions.behavioural[action],mutates=!!sourceBehaviour&&sourceBehaviour.constructor.mutates(),propConfig={payload:payload,action:action,criteria:propagationData,isMutableAction:mutates,propagateInterpolatedValues:propagateInterpolatedValues,groupId:groupId,sourceId:mutates?groupId:sourceId,filterFn:filterFn,enabled:function enabled(propConf,firebolt){return action===propagationBehaviour||propConf.payload.sourceCanvas===firebolt.context.parentAlias()}};dataModel.propagate(propagationData,propConfig,!0),action!==propagationBehaviour&&(propConfig={payload:payload,sourceId:isMutableAction?groupId:sourceId,criteria:propagationData,isMutableAction:isMutableAction,propagateInterpolatedValues:propagateInterpolatedValues,action:propagationBehaviour,groupId:groupId,applyOnSource:action===propagationBehaviour,enabled:function enabled(propConf,firebolt){return propConf.payload.sourceCanvas!==firebolt.context.parentAlias()},filterFn:filterFn},dataModel.propagate(propagationData,propConfig,!0,{filterImmutableAction:function filterImmutableAction(actionInf,propInf){return actionInf.groupId!==propInf.groupId}}))};function src_firebolt_typeof(obj){return(src_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function src_firebolt_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},points=[],parsedIdentifiers=identifiers;if(null===identifiers)return[];var layers=this.layers(),len=layers.length;isSimpleObject(identifiers)&&(parsedIdentifiers=[Object.keys(identifiers)],parsedIdentifiers=[].concat(visual_unit_toConsumableArray(parsedIdentifiers),visual_unit_toConsumableArray(function transposeArray(arr){return arr[0].map(function(col,i){return arr.map(function(row){return row[i]})})}(Object.values(identifiers)))));for(var i=0;i0&&(dimensionArr[0]=[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),dimensionArr[1]=[]),{fields:dimensionArr.map(function(list,i){return 1===i?measureArr[i].concat(dimensionArr[i]):dimensionArr[i].concat(measureArr[i])}),dimensions:[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),measures:[].concat(field_sanitizer_toConsumableArray(measureArr[0]),field_sanitizer_toConsumableArray(measureArr[1])),temporal:[].concat(field_sanitizer_toConsumableArray(temporalArr[0]),field_sanitizer_toConsumableArray(temporalArr[1])),categorical:[].concat(field_sanitizer_toConsumableArray(categoricalArr[0]),field_sanitizer_toConsumableArray(categoricalArr[1]))}}(norFields,fields)}),2),rowsInfo=_map2[0],columnsInfo=_map2[1],rows=rowsInfo.fields,rowDimensions=rowsInfo.dimensions,rowMeasures=rowsInfo.measures,rowTemporalFields=rowsInfo.temporal,rowCategoricalFields=rowsInfo.categorical,columns=columnsInfo.fields,columnDimensions=columnsInfo.dimensions,columnMeasures=columnsInfo.measures;return{rows:rows,rowDimensions:rowDimensions,rowMeasures:rowMeasures,rowTemporalFields:rowTemporalFields,rowCategoricalFields:rowCategoricalFields,columns:columns,columnTemporalFields:columnsInfo.temporal,columnCategoricalFields:columnsInfo.categorical,columnDimensions:columnDimensions,columnMeasures:columnMeasures}};function visual_encoder_slicedToArray(arr,i){return function visual_encoder_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function visual_encoder_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function visual_encoder_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function visual_encoder_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},fields=arguments.length>1?arguments[1]:void 0,_getHeaderAxisFrom2=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(ROW,fields.rows,axisFrom),2),rowHeader=_getHeaderAxisFrom2[0],rowAxis=_getHeaderAxisFrom2[1],_getHeaderAxisFrom4=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom("column",fields.columns,axisFrom),2),colHeader=_getHeaderAxisFrom4[0],colAxis=_getHeaderAxisFrom4[1];return this.axisFrom({row:rowAxis,column:colAxis}),this.headerFrom({row:rowHeader,column:colHeader}),this}}]),VisualEncoder}(),scaleMaps={linear:continous_axis_ContinousAxis,band:band_axis_BandAxis,temporal:time_axis_TimeAxis,size:size_axis_SizeAxis,color:color_axis_ColorAxis,shape:shape_axis_ShapeAxis},data_type_scale_map_dataTypeScaleMap={dimension:scale_type_namespaceObject.BAND,categorical:scale_type_namespaceObject.BAND,temporal:scale_type_namespaceObject.TIME,measure:scale_type_namespaceObject.LINEAR,continuous:scale_type_namespaceObject.LINEAR};function encoder_helper_toConsumableArray(arr){return function encoder_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?axesCreators.position="both":axesCreators.position=_this.axisFrom()[type],geomCellAxes[axis]=encoder_helper_generateAxisFromMap(axis,axisFields[i],axesCreators,{groupAxes:axis===X?xAxes:yAxes,valueParser:resolver.valueParser()},indices,facetFields)}),geomCell.axes(geomCellAxes),geomCellAxes}},{key:"unionUnitDomains",value:function unionUnitDomains(context){for(var store=context.store(),resolver=context.resolver(),units=resolver.units(),domains={0:{},1:{}},config=context.config(),fieldsObj={0:{},1:{}},_loop=function _loop(rIdx,len){for(var unitsArr=units[rIdx],_loop2=function _loop2(cIdx,len2){var unit=unitsArr[cIdx],axisFields=unit.fields(),encodingDomains=unit.getDataDomain();["x","y"].forEach(function(axisType,axisTypeIndex){axisFields[axisType].forEach(function(field,axisIndex){var key=axisTypeIndex?"".concat(rIdx,"0").concat(axisIndex):"0".concat(cIdx).concat(axisIndex),dom=encodingDomains[axisType],typeOfField=field.subtype();fieldsObj[axisTypeIndex][key]=field,dom&&0!==Object.keys(dom).length&&(domains[axisTypeIndex][key]=unionDomain([domains[axisTypeIndex]&&domains[axisTypeIndex][key]||[],dom["".concat(field)]],typeOfField))})})},cIdx=0,len2=unitsArr.length;cIdx1&&typeOfAxis===scale_type_namespaceObject.LINEAR&&axes[0].config().alignZeroLine)axes.forEach(function(axis,i){key=axisType?"".concat(idx,"0").concat(i):"0".concat(idx).concat(i),domain=domains[axisType][key],min[i]=domain[0],max[i]=domain[1]}),adjustedDomain=function getAdjustedDomain(max,min){var y1ratio=max[0]/(max[0]-min[0]),y2ratio=max[1]/(max[1]-min[1]),allSameSign=!1;return min[0]>0&&min[1]>0&&min[1]>0&&max[1]>0&&(allSameSign=!0,min[0]=0,min[1]=0),min[0]<0&&min[1]<0&&min[1]<0&&max[1]<0&&(allSameSign=!0,max[0]=0,max[1]=0),allSameSign||y1ratio===y2ratio||(y1ratiocounter)for(var _i=counter;_i-1&&(projections=[[_facet,_facet]],primaryFacets.splice(_existIndex,1)),secondaryFacets.splice(0,1)}else{var axisFromIndex=primaryFacets.length-1,facet=primaryFacets[axisFromIndex];projections=[[facet]];var existIndex=getIndex(secondaryFacets,facet);existIndex>-1&&(projections=[[facet,facet]],secondaryFacets.splice(existIndex,1)),primaryFacets.splice(axisFromIndex,1)}return{facets:facets=(facets=[].concat(primaryFacets,secondaryFacets)).filter(function(el,index,self){return index===self.findIndex(function(t){return t.toString()===el.toString()})}),projections:projections}}},{key:"fieldSanitizer",value:function fieldSanitizer(datamodel,config){return cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,datamodel,config)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(dataModels,encoding){var groupedModel=dataModels.groupedModel,domains={};for(var key in encoding)if({}.hasOwnProperty.call(encoding,key)){var encodingObj=encoding[key],field=encodingObj.field;if(!encodingObj.domain&&field){var domain=retriveDomainFromData(groupedModel,field);domains[field]=domain}}return domains}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer,i){var def=src_layer_factory.sanitizeLayerConfig(layer);def.order=i,serializedLayers.push(def)}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),layerConfig.push(config)}),layerConfig}},{key:"getLayerConfig",value:function getLayerConfig(fields,userLayerConfig,retinalConfig){var layerConfig=[],columnFields=fields.columnFields,rowFields=fields.rowFields;return columnFields.forEach(function(colField){var colFieldName=colField.toString();rowFields.forEach(function(rowField){var configs=[],rowFieldName=rowField.toString(),encoding={x:{field:colFieldName},y:{field:rowFieldName}},rowFieldType=rowField.subtype(),mark=function getDefaultMark(colFieldType,rowFieldType){return"categorical"===colFieldType||"categorical"===rowFieldType?"bar":"temporal"===colFieldType||"temporal"===rowFieldType?"line":"point"}(colField.subtype(),rowFieldType),defConfigs=[{mark:mark,def:{mark:mark,encoding:encoding}}],layerConfigs=function getLayerConfFromFields(colFields,rowFields,userLayerConfig){return userLayerConfig.filter(function(conf){var _ref,_ref2,_ref3,userConf=conf instanceof Array?conf:[conf],encodingArr=(_ref=[]).concat.apply(_ref,encoder_helper_toConsumableArray(userConf.map(function(d){return d.encoding}).filter(function(d){return void 0!==d})));if(!encodingArr.length)return!0;var xFields=(_ref2=[]).concat.apply(_ref2,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.x&&d.x.field,d.x0&&d.x0.field]}))).filter(function(d){return void 0!==d&&null!==d}),yFields=(_ref3=[]).concat.apply(_ref3,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.y&&d.y.field,d.y0&&d.y0.field]}))).filter(function(d){return void 0!==d&&null!==d});if(!xFields.length&&!yFields.length)return!0;var colFieldExist=!!xFields.length&&xFields.every(function(d){return-1!==colFields.indexOf(d)}),rowFieldExist=!!yFields.length&&yFields.every(function(d){return-1!==rowFields.indexOf(d)});return xFields.length&&yFields.length?colFieldExist&&rowFieldExist:colFieldExist||rowFieldExist})}(colField.getMembers(),rowField.getMembers(),userLayerConfig||[]);configs=layerConfigs.length?layerConfigs.map(function(layerConf){var mergedLayerConf=mergeRecursive(mergeRecursive({},defConfigs[0].def),layerConf),serializedLayerConfig=src_layer_factory.getSerializedConf(mergedLayerConf.mark,mergedLayerConf);return{mark:mergedLayerConf.mark,order:mergedLayerConf.order,def:serializedLayerConfig}}):defConfigs,layerConfig.push.apply(layerConfig,cartesian_encoder_toConsumableArray(configs))})}),this.sanitizeLayerConfig(retinalConfig,layerConfig)}}],[{key:"type",value:function type(){return cartesian_encoder_CARTESIAN}}]),CartesianEncoder}();function polar_encoder_typeof(obj){return(polar_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function polar_encoder_toConsumableArray(arr){return function polar_encoder_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);icounter)for(var _i=counter;_i0&&(config=mergeRecursive(config,userLayerConfig[0])),layerConfig.push(config)}),0===layerConfig.length&&(layerConfig=userLayerConfig);var sanitizedConfig=this.sanitizeLayerConfig(retinalConfig,layerConfig);return this.layers(sanitizedConfig),sanitizedConfig}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer){var def=src_layer_factory.getSerializedConf(layer.mark,layer);serializedLayers.push({mark:layer.mark,def:def})}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),def.forEach(function(conf){var encoding=conf.encoding||(conf.encoding={});!encoding.angle&&(encoding.angle={});var angleField=getObjProp(encoding.angle,"field"),angle0Field=getObjProp(encoding.angle0,"field");angleField||Object.assign(encoding.angle,{field:encodingConfigs.color&&encodingConfigs.color.field}),angle0Field||(!encoding.angle0&&(encoding.angle0={}),Object.assign(encoding.angle0,{field:encoding.angle.field}))}),layerConfig.push(config)}),layerConfig}}],[{key:"type",value:function type(){return polar_encoder_POLAR}}]),PolarEncoder}();function retinal_encoder_typeof(obj){return(retinal_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function retinal_encoder_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},axisType=axesCreators.axisType,fieldsConfig=axesCreators.fieldsConfig,field=fieldProps.field,axis=[],Cls=scaleMaps[axisType];return fieldProps.type=fieldProps.type?fieldProps.type:group_utils_getAxisType(fieldsConfig,field||null),axis.push(new Cls(fieldProps)),axis}({axisType:axisType,fieldsConfig:fieldsConfig},config[axisType])}),newAxes}},{key:"setCommonDomain",value:function setCommonDomain(context){var domains=context.domains,axes=context.axes,encoding=context.encoding;return Object.entries(encoding).forEach(function(enc){if(enc[1]&&enc[1].field){var encType=enc[0],field=enc[1].field;field&&axes[encType].forEach(function(axis){var domain=domains[field];!enc[1].domain&&axis.updateDomain(domain)})}}),axes}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),group_utils_this=void 0;function group_utils_slicedToArray(arr,i){return function group_utils_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function group_utils_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function group_utils_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function group_utils_toConsumableArray(arr){return function group_utils_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];return"".concat(axisName,"-axis-").concat(params.join("-"))},group_utils_headerCreator=function headerCreator(fields,fieldHeaders,TextCell,_ref2){var classPrefix=_ref2.classPrefix,labelManager=_ref2.labelManager;return fields.length>0?fields[0].map(function(cell,i){return new TextCell({type:"header",className:"".concat(classPrefix,"-grid-headers")},{labelManager:labelManager}).source(function getHeaderText(headers,index,rowLength){var header="";if(index===rowLength-1&&headers.length>rowLength){for(var i=index;i1||right.length>1)&&(borders.top=!0,borders.bottom=!0),borders}(leftRows,rightRows),showColBorders=function getColumnsBorders(top,bottom){var borders={left:!1,right:!1};return(top.length||bottom.length)&&(top[0]&&top[0].length>1||bottom[0]&&bottom[0].length>1)&&(borders.left=!0,borders.right=!0),borders}(topColumns,bottomColumns),showValueBorders=function getValueBorders(rows,columns){var borders={top:!0,left:!0,bottom:!0,right:!0},borderTypeRow=[constants_LEFT,constants_RIGHT],borderTypeCol=["top","bottom"];return rows.forEach(function(e,i){e[0]&&e[0].length?borders[borderTypeRow[i]]=!0:borders[borderTypeRow[i]]=!1}),columns.forEach(function(e,i){e.length?borders[borderTypeCol[i]]=!0:borders[borderTypeCol[i]]=!1}),borders}([leftRows,rightRows],[topColumns,bottomColumns]),valueMatrix.length>1&&(showValueBorders.top=!0,showValueBorders.bottom=!0),valueMatrix.length&&valueMatrix[0].length>1&&(showValueBorders.left=!0,showValueBorders.right=!0),{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}},group_utils_sortFacetFields=function sortFacetFields(facets,keys,config){var schema=[],sortInfo=[],sortConfig=config.sort;return facets.forEach(function(facet){var name="".concat(facet),facetSortConfig=sortConfig[name];facetSortConfig?sortInfo.push([name,facetSortConfig]):sortInfo.push([name,null]),schema.push(facet.getSchemaDef())}),new datamodel_default.a([[]].concat(group_utils_toConsumableArray(keys)),schema).getData({sort:sortInfo}).data};function matrix_model_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function matrix_model_objectSpread(target){for(var i=1;i0?formattedColKeys[0].map(function(col,i){return formattedColKeys.map(function(row){return row[i]})}):formattedColKeys}};function cell_creator_slicedToArray(arr,i){return function cell_creator_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function cell_creator_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function cell_creator_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cell_creator_toConsumableArray(arr){return function cell_creator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?rowProjections.length:1):(keys=columnKeys,length=colProjections.length>0?colProjections.length:1),keys=keys.map(function(arr){return arr.map(function(val){return resolver.valueParser()(val)})}),section.length&&headerFrom===type&&axis&&keys.length){var hContext={axis:axis,length:length,type:type},headers=[];index<2?(hContext.keys=keys,hContext.facet=facet.rows,headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)):(hContext.facet=facet.columns,hContext.keys=keys[0].map(function(key,i){return keys.map(function(e){return e[i]})}),headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)),selectionObj["".concat(type,"Headers")]=headers}else selectionObj["".concat(type,"Headers")]=null}),selectionObj},cell_creator_getAxisFields=function getAxisFields(projections){var fieldHolder=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return projections.reduce(function(acc,item){return[].concat(cell_creator_toConsumableArray(acc),cell_creator_toConsumableArray(item.reduce(function(ac,field){return field instanceof simple_var_SimpleVariable?[].concat(cell_creator_toConsumableArray(ac),[field.oneVar()]):ac},[])))},fieldHolder)},cell_creator_transformDataModel=function transformDataModel(dataModel,config,resolver){var groupedModel,fieldsConfig=dataModel.getFieldsConfig(),resolvedData=resolver.data(),groupBy=config.groupBy,suppliedLayers=config.suppliedLayers,facetsAndProjections=config.facetsAndProjections;if(resolvedData instanceof datamodel_default.a&&resolvedData.dispose(),groupedModel=dataModel.project(dataModel.getSchema().map(function(d){return d.name})),resolver.data(groupedModel),!groupBy.disabled){var allFields=function extractFields(facetsAndProjections,layerFields){var _ref6,fields=Object.values(facetsAndProjections).map(function(arr){var _ref4,_ref5,flattenArray=(_ref4=[]).concat.apply(_ref4,group_utils_toConsumableArray(arr));return(_ref5=[]).concat.apply(_ref5,group_utils_toConsumableArray(flattenArray.map(function(field){return field instanceof variable_Variable?field.getMembers():field})))});return(_ref6=[]).concat.apply(_ref6,group_utils_toConsumableArray(fields).concat(group_utils_toConsumableArray(layerFields)))}(facetsAndProjections,function getFieldsFromSuppliedLayers(suppliedLayerConfig,fieldsConfig){var _ref3,fields=[],encodingArr=suppliedLayerConfig.map(function(conf){return conf.encoding||{}});return fields=(fields=[].concat(group_utils_toConsumableArray(fields),[(_ref3=[]).concat.apply(_ref3,group_utils_toConsumableArray(encodingArr.map(function(enc){return Object.values(enc).map(function(d){return d.field})})))])).filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION})}(suppliedLayers,groupedModel.getFieldsConfig())),dimensions=allFields.filter(function(field){return getObjProp(fieldsConfig,field,"def","type")===dist_datamodel.FieldType.DIMENSION}),aggregationFns=groupBy.measures,measureNames=Object.keys(groupedModel.getFieldspace().getMeasure()),nearestAggFns=common_utils_retrieveNearestGroupByReducers.apply(void 0,[groupedModel].concat(cell_creator_toConsumableArray(measureNames))),resolvedAggFns=mergeRecursive(nearestAggFns,aggregationFns);groupedModel=groupedModel.groupBy(dimensions.length?dimensions:[""],resolvedAggFns).project(allFields)}return groupedModel=function sortDmTemporalFields(resolver,datamodel){var axisFields=[],projections=resolver.projections();axisFields=cell_creator_getAxisFields(projections.rowProjections,cell_creator_getAxisFields(projections.colProjections));var fieldConfig=datamodel.getFieldsConfig(),temporalFields=axisFields.reduce(function(acc,field){return"temporal"===fieldConfig[field].def.subtype?[].concat(cell_creator_toConsumableArray(acc),[[field]]):acc},[]);return temporalFields.length?datamodel.sort(temporalFields,{saveChild:!0}):datamodel}(resolver,groupedModel)},cell_creator_computeMatrices=function computeMatrices(context,config){var resolver=context.resolver,datamodel=context.datamodel,componentRegistry=context.componentRegistry,encoders=context.encoders,globalConfig=config.globalConfig,selection=config.selection,transform=config.transform,groupBy=globalConfig.autoGroupBy,labelManager=resolver.dependencies().smartlabel,fieldMap=datamodel.getFieldsConfig(),layerConfig=resolver.layerConfig(),registry=resolver.registry(),normalizedRows=resolver.horizontalAxis().fields,normalizedColumns=resolver.verticalAxis().fields,otherEncodings=resolver.optionalProjections(config,layerConfig),facetsAndProjections=resolver.getAllFields(),matrixGnContext={normalizedColumns:normalizedColumns,normalizedRows:normalizedRows,facetsAndProjections:facetsAndProjections,layers:layerConfig,fieldMap:fieldMap,otherEncodings:otherEncodings,encoders:encoders,facet:globalConfig.facet||{},axisFrom:globalConfig.axisFrom||{},selection:selection,resolver:resolver},cells={GeomCell:resolver.getCellDef(registry.GeomCell),AxisCell:resolver.getCellDef(registry.AxisCell),BlankCell:resolver.getCellDef(registry.BlankCell),TextCell:resolver.getCellDef(registry.TextCell)},isRowSizeEqual=group_utils_isDistributionEqual(normalizedRows),isColumnSizeEqual=group_utils_isDistributionEqual(normalizedColumns);resolver.colCells({}),resolver.rowCells({}),resolver.datamodelTransform(transform||{}),resolver.resetSimpleAxes();var newCacheMap={exitCellMap:resolver.cacheMaps().entryCellMap,entryCellMap:new Map};resolver.cacheMaps(newCacheMap);var valueCellContext={config:globalConfig,suppliedLayers:encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),resolver:resolver,cell:cells.GeomCell,encoder:encoders.simpleEncoder,newCacheMap:newCacheMap,detailFields:config.detail,retinalConfig:{color:config.color,size:config.size,shape:config.shape}},groupedModel=cell_creator_transformDataModel(datamodel,{facetsAndProjections:facetsAndProjections,suppliedLayers:valueCellContext.suppliedLayers,groupBy:groupBy},resolver),cellCreator=resolver.valueCellsCreator(valueCellContext),valueMatrixInfo=getMatrixModel(groupedModel,facetsAndProjections,cellCreator,globalConfig);!function removeExitCells(resolver){var _ref7,exitCells=resolver.cacheMaps().exitCellMap,store=resolver.store(),qualifiedStateProps=(_ref7=[]).concat.apply(_ref7,group_utils_toConsumableArray(visual_unit_VisualUnit.getQualifiedStateProps()).concat(group_utils_toConsumableArray(base_layer_BaseLayer.getQualifiedStateProps())));store.lockCommits(qualifiedStateProps),exitCells.forEach(function(placeholder){placeholder.remove()}),store.unlockCommits(qualifiedStateProps)}(resolver),resolver.cacheMaps().exitCellMap.clear(),resolver.valueMatrix(valueMatrixInfo.matrix);var _mutateAxesFromMap=function mutateAxesFromMap(cacheMaps,axes){var xAxes=null,yAxes=null,xAxesMap=cacheMaps.xAxesMap,yAxesMap=cacheMaps.yAxesMap,xAxisSet=axes.x,yAxisSet=axes.y;return xAxisSet&&xAxisSet.forEach(function(axisId){var xAxis=xAxesMap.get(axisId);(xAxes=xAxes||[]).push(xAxis)}),yAxisSet&&yAxisSet.forEach(function(axisId){var yAxis=yAxesMap.get(axisId);(yAxes=yAxes||[]).push(yAxis)}),{xAxes:xAxes,yAxes:yAxes}}(resolver.cacheMaps(),resolver.axes()),xAxes=_mutateAxesFromMap.xAxes,yAxes=_mutateAxesFromMap.yAxes;resolver.axes({x:xAxes,y:yAxes}),resolver.createUnits(componentRegistry,config);var _generateMatrices=function generateMatrices(context,matrices,cells,labelManager){var unitHeight=context.unitHeight,unitWidth=context.unitWidth,facetsAndProjections=context.facetsAndProjections,normalizedRows=context.normalizedRows,normalizedColumns=context.normalizedColumns,selection=context.selection,axisFrom=context.axisFrom,facet=context.facet,encoders=context.encoders,resolver=context.resolver,selectionObj=cell_creator_generatePlaceholders({fields:{rows:normalizedRows,columns:normalizedColumns},matrices:matrices,facetsAndProjections:facetsAndProjections,selection:selection,axisFrom:axisFrom,facet:facet,encoders:encoders,resolver:resolver},cells,labelManager),columnsPrimary=selectionObj.columnsPrimary,columnsSecondary=selectionObj.columnsSecondary,rowsPrimary=selectionObj.rowsPrimary,rowsSecondary=selectionObj.rowsSecondary,leftHeaders=selectionObj.leftHeaders,topHeaders=selectionObj.topHeaders,bottomHeaders=selectionObj.bottomHeaders,rightHeaders=selectionObj.rightHeaders,_map2=cell_creator_slicedToArray([rowsPrimary,rowsSecondary,columnsPrimary,columnsSecondary].map(function(d){return d?d.getObjects():[]}),4),rowPrime=_map2[0],rowSec=_map2[1],colPrime=_map2[2],colSec=_map2[3],_map4=cell_creator_slicedToArray([leftHeaders,rightHeaders].map(function(e){return e?e.getObjects().map(function(f){return f.getObjects()}):[]}),2),leftFacets=_map4[0],rightFacets=_map4[1],rowPriority=rowSec.length?1:-1;rowPrime.length&&rowPriority++;var colPriority=colSec.length?1:-1;colPrime.length&&colPriority++;var leftMatrix=leftFacets.length?leftFacets.map(function(d,i){return rowPrime[i]=rowPrime[i]?[rowPrime[i]]:[],[].concat(cell_creator_toConsumableArray(d),cell_creator_toConsumableArray(rowPrime[i]))}):rowPrime?rowPrime.map(function(d){return[d]}):[],rightMatrix=rowSec.length?rowSec.map(function(d,i){return[d].concat(cell_creator_toConsumableArray(rightFacets[i]||[]))}):rightFacets.length?rightFacets.map(function(d){return cell_creator_toConsumableArray(d)}):[],topMatrix=[];topHeaders&&topHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){topMatrix[i]=topMatrix[i]||[],topMatrix[i].push(x)})});colPrime.length&&topMatrix.push(colPrime);var bottomMatrix=[];colSec.length&&bottomMatrix.push(colSec);var currentBottomLength=bottomMatrix.length;bottomHeaders&&bottomHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){bottomMatrix[i+currentBottomLength]=bottomMatrix[i+currentBottomLength]||[],bottomMatrix[i+currentBottomLength].push(x)})});if(!leftMatrix.length&&!rightMatrix.length){var cell=new cells.BlankCell;cell.setAvailableSpace(unitWidth,unitHeight),leftMatrix=[[cell]]}if(!(topMatrix.length||bottomMatrix.length&&bottomMatrix[0].length)){var _cell=new cells.BlankCell;_cell.setAvailableSpace(unitWidth,unitHeight),bottomMatrix=[[_cell]]}return{rows:[leftMatrix,rightMatrix],columns:[topMatrix,bottomMatrix],selectionObj:selectionObj,colPriority:colPriority,rowPriority:rowPriority}}(matrixGnContext,{valuesMatrix:valueMatrixInfo,axesMatrix:resolver.axes()},cells,labelManager),rows=_generateMatrices.rows,columns=_generateMatrices.columns,selectionObj=_generateMatrices.selectionObj,rowPriority=_generateMatrices.rowPriority,colPriority=_generateMatrices.colPriority;return resolver.rowMatrix(rows),resolver.columnMatrix(columns),{rows:resolver.rowMatrix(),columns:resolver.columnMatrix(),values:resolver.valueMatrix(),isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,priority:{row:rowPriority,col:colPriority},selection:selectionObj,dataModels:{groupedModel:groupedModel,parentModel:datamodel}}},RESOLVER_PROPS={dependencies:{},units:{},datamodelTransform:{},layerConfig:{},matrixLayers:{},colCells:{},rowCells:{},rowMatrix:{},columnMatrix:{},valueMatrix:{},encoder:{},valueParser:{},data:{}};function matrix_resolver_slicedToArray(arr,i){return function matrix_resolver_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function matrix_resolver_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function matrix_resolver_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function matrix_resolver_toConsumableArray(arr){return function matrix_resolver_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?leftRows[0].map(blankCellCreator):[],right:rightRows.length>0?rightRows[0].map(blankCellCreator):[]},_map2=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return topCols.map(function(col,i){return i===topCols.length-1?headers[type]:footers[type]})}),2),topLeft=_map2[0],topRight=_map2[1];if(0===topCols.length){var _map4=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return bottomCols.map(function(col,i){return 0===i?headers[type]:footers[type]})}),2);bottomLeft=_map4[0],bottomRight=_map4[1]}else bottomLeft=bottomCols.map(function(){return leftRows.length>0?leftRows[0].map(blankCellCreator):[]}),bottomRight=bottomCols.map(function(){return rightRows.length>0?rightRows[0].map(blankCellCreator):[]});return lifeCycleManager.notify({client:[topLeft,topRight,bottomLeft,bottomRight],action:"initialized",formalName:"facet-headers"}),{topLeft:topLeft,topRight:topRight,bottomLeft:bottomLeft,bottomRight:bottomRight}}},{key:"getMatrices",value:function getMatrices(datamodel,config,componentRegistry,encoders){return cell_creator_computeMatrices({datamodel:datamodel,componentRegistry:componentRegistry,encoders:encoders,resolver:this},config)}},{key:"store",value:function store(){return arguments.length?(this._store=arguments.length<=0?void 0:arguments[0],this):this._store}},{key:"clear",value:function clear(){var cacheMaps=this._cacheMaps;for(var key in cacheMaps)cacheMaps[key].clear()}}]),MatrixResolver}();function value_matrix_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{},context=firebolt.context,type=context.constructor.type(),payload=config.payload,data=context.data(),metaData=context.metaData(),fieldType=metaData.getData().schema[0].type,propPayload={},sourceId=context._id;propPayload.action=action_behaviour_map_propagationBehaviourMap[action]||action,propPayload.sideEffects=propagationSideEffects[action],propPayload.sourceCanvas=context.canvasAlias();var isMutableAction=firebolt._actions.behavioural[propPayload.action].constructor.mutates();if(null===payload.criteria)propagationData=null;else{var entrySet=selectionSet.mergedEnter,values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.rawVal});if("step"===type||"discrete"===type&&"measure"===fieldType){var field=Object.keys(payload.criteria||{})[0];propagationData=(values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.range})).length?metaData.select(function(fields){for(var check=!1,i=0;i=values[i][0]&&fields[field].internalValue<=values[i][1]);i++);return check},{saveChild:!1}):null}else"gradient"===type?propagationData=getDataModelFromRange(metaData,payload.criteria):values.length?propagationData=function assembleModelFromIdentifiers(model,identifiers){var data,schema=[],fieldMap=model.getFieldsConfig();return identifiers.length?function(){for(var fields=identifiers[0],len=fields.length,i=0;i=drawingInfMeasure+offset?[axisScale.invert(drawingInfMeasure+offset-selectionBoxMeasure),axisScale.invert(drawingInfMeasure+offset)]:subjectStartPoint-offset1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-fadeout"),!0),classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)},brighten:function brighten(set){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-brighten"),!0),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-brighten"),!1)}}};function legend_highlighter_typeof(obj){return(legend_highlighter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_highlighter_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[options.strategy||this._strategy])(selectionSet,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),legend_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(context,value){var measurement=mergeRecursive(context._measurement,value);return["padding","border","margin"].forEach(function(space){measurement[space]=Math.min(measurement[space]>0?measurement[space]:0,.1*measurement.maxWidth,.1*measurement.maxHeight)}),measurement}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.resetLogicalSpace(),context.store().commit("range",value),value}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(context,value){return mergeRecursive(context._title||{},value)}},labelManager:{},minTickDistance:{},valueParser:{defaultValue:function defaultValue(val){return val}}},ALIGN_HORIZONTAL="horizontal",ALIGN_VERTICAL="vertical",DEFAULT_MEASUREMENT={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},LEGEND_TITLE={text:"",orientation:function orientation(pos){return"left"===pos||"right"===pos?"left":"center"}},legend_defaults_DEFAULT_CONFIG={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(val,i,data,context){return context.valueParser()(val)}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},defaults_ICON_MAP=function ICON_MAP(icon){return icon&&"string"==typeof icon?common_utils_getSymbol(icon):icon};function legend_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legend_helper_getScaleInfo=function getScaleInfo(scale){var scaleType=scale.constructor.type();return{scaleType:scaleType,domain:scale.uniqueValues(),steps:scale.config().stops||1,scaleFn:SCALE_FUNCTIONS[scaleType]}},legend_helper_getInterpolatedArrayData=function getInterpolatedArrayData(domainForLegend,scaleParams){var requiredWidth,requiredHeight,upperBound=domainForLegend[domainForLegend.length-1],minTickDiff=Math.ceil(domainForLegend[1]-domainForLegend[0]),maxTickDiff=Math.ceil(upperBound-domainForLegend[0]),alignment=scaleParams.alignment,smartLabelCalc=scaleParams.smartLabel,availableSpace=scaleParams.measures,minimumTickSize=scaleParams.minTickDistance,_smartLabelCalc$getOr=smartLabelCalc.getOriSize(upperBound),tickDimHeight=_smartLabelCalc$getOr.height,tickDimWidth=_smartLabelCalc$getOr.width;return Number.isInteger(upperBound)||(upperBound=upperBound.toFixed(2)),minTickDiff=minTickDiff<1?1:minTickDiff,requiredWidth=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*(tickDimWidth+minimumTickSize.width),requiredWidth-=Math.abs(maxTickDiff),requiredHeight=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*tickDimHeight,requiredHeight-=Math.abs(maxTickDiff),domainForLegend=function getcomputedArray(computationhelper,requiredMeasure,availableMeasure,domainForLegend){var currentTickValue,nextTickValue,upperBound=domainForLegend[domainForLegend.length-1],param=computationhelper.measureParam,smartLabelCalc=computationhelper.smartLabelCalc,pixelPerTick=availableMeasure[param]/upperBound;if(availableMeasure[param]>=requiredMeasure[param])return domainForLegend;currentTickValue=smartLabelCalc.getOriSize(domainForLegend[0])[param];for(var i=1;i0?titleSpace.height+effPadding:0,titleWidth=titleSpace.width+effPadding,labelSpaces=this.getLabelSpaces(effPadding,align),_computeItemSpaces=function computeItemSpaces(config,measures,data){var totalHeight=0,totalWidth=0,maxItemSpaces={width:0,height:0},effPadding=measures.effPadding,titleWidth=measures.titleWidth,labelSpaces=measures.labelSpaces,titleHeight=measures.titleHeight,maxWidth=measures.maxWidth,item=config.item,align=config.align,icon=item.icon,textOrientation=item.text.orientation,itemSpaces=[],iconSpaces=[],maxIconWidth=0;return labelSpaces.forEach(function(labelSpace,i){var itemSpace={width:0,height:0},iconSpace={width:0,height:0},datum=data[i]||{};"left"===textOrientation||"right"===textOrientation?(labelSpace.width+=effPadding,iconSpace.width=(datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),itemSpace.width=labelSpace.width+maxIconWidth,labelSpace.height=Math.max(labelSpace.height,icon.height)+effPadding,iconSpace.height=labelSpace.height,itemSpace.height=labelSpace.height):(labelSpace.width=Math.max(labelSpace.width,datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,iconSpace.width=labelSpace.width,itemSpace.width=labelSpace.width,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),labelSpace.height+=effPadding,iconSpace.height=icon.height+effPadding,itemSpace.height=labelSpace.height+iconSpace.height),"horizontal"===align?totalHeight=Math.max(totalHeight,itemSpace.height):(totalHeight+=itemSpace.height,totalWidth=Math.max(totalWidth,itemSpace.width,titleWidth)),maxItemSpaces={width:Math.max(itemSpace.width,maxItemSpaces.width),height:Math.max(itemSpace.height,maxItemSpaces.height)},itemSpaces.push(itemSpace),iconSpaces.push(iconSpace)}),itemSpaces.forEach(function(itemSpace,i){if("horizontal"===align)itemSpace.height=totalHeight,iconSpaces[i].width=maxIconWidth,"left"===textOrientation||"right"===textOrientation?(labelSpaces[i].height=totalHeight,iconSpaces[i].height=totalHeight,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth):(labelSpaces[i].width=maxIconWidth,itemSpaces[i].width=maxIconWidth,labelSpaces[i].width=maxIconWidth),totalWidth=Math.max(totalWidth+itemSpaces[i].width);else if(itemSpace.width=Math.max(totalWidth,maxWidth),"top"===textOrientation||"bottom"===textOrientation)labelSpaces[i].width=totalWidth,iconSpaces[i].width=totalWidth,maxIconWidth=totalWidth;else{var labelWidth=labelSpaces[i].width,newLabelWidth=maxItemSpaces.width-maxIconWidth;iconSpaces[i].width=maxIconWidth,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth,labelSpaces[i].width=Math.max(labelWidth,newLabelWidth),totalWidth=Math.max(totalWidth,itemSpace.width)}}),totalWidth=Math.ceil(Math.max(totalWidth,titleWidth))+effPadding,totalHeight+=titleHeight+effPadding,{totalHeight:totalHeight=Math.ceil(totalHeight),totalWidth:totalWidth,itemSpaces:itemSpaces,iconSpaces:iconSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth}}(this.config(),{effPadding:effPadding,titleWidth:titleWidth,labelSpaces:labelSpaces,titleHeight:titleHeight,maxWidth:maxWidth,maxHeight:maxHeight},this.data()),totalHeight=_computeItemSpaces.totalHeight,totalWidth=_computeItemSpaces.totalWidth,itemSpaces=_computeItemSpaces.itemSpaces,iconSpaces=_computeItemSpaces.iconSpaces,maxItemSpaces=_computeItemSpaces.maxItemSpaces,maxIconWidth=_computeItemSpaces.maxIconWidth;return this.measurement({width:Math.max(totalWidth,width)+effMargin+effBorder,height:Math.max(totalHeight,height)+effMargin+effBorder,labelSpaces:labelSpaces,iconSpaces:iconSpaces,itemSpaces:itemSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth,titleSpaces:{width:Math.min(maxWidth,this.measurement().width)-effMargin-effBorder,height:titleHeight}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(renderer_utils_getSmartComputedStyle(renderer_utils_selectElement("body"),"".concat(this.config().classPrefix,"-legend-title"))),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(container){var _this$measurement2=this.measurement(),titleSpaces=_this$measurement2.titleSpaces,border=_this$measurement2.border,padding=_this$measurement2.padding,width=_this$measurement2.width,maxWidth=_this$measurement2.maxWidth,_this$config3=this.config(),borderStyle=_this$config3.borderStyle,borderColor=_this$config3.borderColor;return function titleCreator(container,title,measurement,config){var titleWidth=Math.min(measurement.maxWidth,measurement.width),titleContainer=makeElement(container,"table",[1],"".concat(config.classPrefix,"-legend-title")).style("width","".concat(titleWidth,"px")).style("height","".concat(measurement.height,"px")).style("border-bottom","".concat(measurement.border,"px ").concat(config.borderStyle," ").concat(config.borderColor)).style("text-align",title.orientation instanceof Function?title.orientation(config.position):title.orientation);return makeElement(titleContainer,"td",[1],"".concat(config.classPrefix,"-legend-title-text")).style("width","".concat(titleWidth,"px")).style("max-width","".concat(titleWidth,"px")).style("height","100%").style("line-height",1).style("padding","".concat(measurement.padding,"px")).text(title.text).style("overflow-x","scroll").node()}(container,this.title(),{height:titleSpaces.height,width:width,maxWidth:maxWidth,border:border,padding:padding,borderStyle:borderStyle,borderColor:borderColor},this.config())}},{key:"render",value:function render(){var marginPosition,firebolt=this.firebolt(),_this$config4=this.config(),classPrefix=_this$config4.classPrefix,borderStyle=_this$config4.borderStyle,borderColor=_this$config4.borderColor,position=_this$config4.position,_this$measurement3=this.measurement(),maxWidth=_this$measurement3.maxWidth,maxHeight=_this$measurement3.maxHeight,width=_this$measurement3.width,height=_this$measurement3.height,margin=_this$measurement3.margin,border=_this$measurement3.border,legendContainer=makeElement(renderer_utils_selectElement(this.mount()),"div",[1],"".concat(classPrefix,"-legend-box"));switch(position){case"top":marginPosition="margin-".concat("bottom");break;case"left":marginPosition="margin-".concat("right");break;case"bottom":marginPosition="margin-".concat("top");break;default:marginPosition="margin-".concat("left")}return legendContainer.classed("".concat(classPrefix,"-legend-box-").concat(this._id),!0),legendContainer.style("float","left"),legendContainer.style("width","".concat(Math.min(maxWidth,width)-2*margin,"px")).style("height","".concat(Math.min(maxHeight,height)-2*margin,"px")).style("".concat(marginPosition),"".concat(margin,"px")).style("border","".concat(border,"px ").concat(borderStyle," ").concat(borderColor)),this.legendContainer(legendContainer.node()),this.renderTitle(legendContainer),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){var fieldName=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},fieldName,data.range):[[fieldName],[data.rawVal]]}}],[{key:"create",value:function create(dependencies){return new SimpleLegend(dependencies)}},{key:"defaultConfig",value:function defaultConfig(){return legend_defaults_DEFAULT_CONFIG}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENT}}]),SimpleLegend}();function position_config_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legendOrientation=(position_config_defineProperty(_legendOrientation={},"horizontal",{datasets:function datasets(data){return{row:[1],column:data}},itemContainerMeasures:function itemContainerMeasures(measurement){var itemSpaces=measurement.itemSpaces,width=measurement.width;return{row:{width:"".concat(width,"px"),padding:"".concat(0,"px")},column:{width:function width(d,i){return"".concat(itemSpaces[i].width,"px")},padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces;return{iconHeight:measurement.height,iconWidth:maxItemSpaces.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(_legendOrientation,"vertical",{datasets:function datasets(data){return{row:data,column:function column(d){return[d]}}},itemContainerMeasures:function itemContainerMeasures(measurement,config){var width=measurement.width,padding=config.padding;return{row:{width:"".concat(width,"px"),padding:"".concat(padding,"px")},column:{width:"".concat(width,"px"),padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces,width=measurement.width;return{iconHeight:maxItemSpaces.height,iconWidth:width,stepPadding:{horizontal:!1,vertical:!0}}}}),_legendOrientation),positionConfig=(position_config_defineProperty(_positionConfig={},"left",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"right",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"top",legendOrientation.horizontal),position_config_defineProperty(_positionConfig,"bottom",legendOrientation.horizontal),_positionConfig),alignmentMap=(position_config_defineProperty(_alignmentMap={},"left","end"),position_config_defineProperty(_alignmentMap,"right","start"),position_config_defineProperty(_alignmentMap,"top","center"),position_config_defineProperty(_alignmentMap,"bottom","center"),_alignmentMap),itemStack=(position_config_defineProperty(_itemStack={},"left",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"right",["shape",VALUE]),position_config_defineProperty(_itemStack,"top",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"bottom",["shape",VALUE]),_itemStack),renderer_createLegendSkeleton=function createLegendSkeleton(context,container,classPrefix,data){var gradWidth,gradHeight,maxGradHeight,maxGradWidth,measurement=context.measurement(),margin=measurement.margin,border=measurement.border,titleSpaces=measurement.titleSpaces,width=measurement.width,height=measurement.height,maxWidth=measurement.maxWidth,maxHeight=measurement.maxHeight;gradHeight=height-(titleSpaces.height+2*margin+2*border),gradWidth=width-(2*margin+2*border),maxGradHeight=maxHeight-(titleSpaces.height+2*margin+2*border),maxGradWidth=maxWidth-(2*margin+2*border);var legendBody=makeElement(container,"div",[1],"".concat(classPrefix,"-legend-body"));return legendBody.select(".".concat(classPrefix,"-legend-overflow")).remove(),maxGradWidth&&maxGradWidth4)}(shape)?shape:defaults_ICON_MAP(shape).size(size)(),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}return d[1]="circle",createShape(d,elem,"circle")}(datum,makeElement(svg,"g",[datum[1]],"".concat(classPrefix,"-legend-icon")),datum[3]?"circle":"square",iconWidth,iconHeight).attr("transform","translate(".concat(maxIconWidth/2-padding," ").concat(iconHeight/2,")")).attr("fill",datum[2]||color):makeElement(svg,"rect",[datum[1]],"".concat(classPrefix,"-legend-icon")).attr("x",0).attr("y",0).attr("width",maxIconWidth).attr("height",iconHeight).attr("fill",datum[2]||color)};function discrete_legend_typeof(obj){return(discrete_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function discrete_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function discrete_legend_toConsumableArray(arr){return function discrete_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainForLegend.push(domain[1]),domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b}),domainForLegend=legend_helper_getInterpolatedArrayData(domainForLegend,scaleParams)):domainForLegend=legend_helper_getInterpolatedData(domain,steps-1,scaleParams),(domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=domainForLegend[i];return gradient_legend_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](Math.floor(ele))),gradient_legend_defineProperty(_ref,"value",+value.toFixed(2)),gradient_legend_defineProperty(_ref,"id",i),_ref}).filter(function(d){return null!==d.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(effPadding){this.config({item:{text:{orientation:this.config().position}}});var axis=function createAxis(context){var data=context.data(),align=context.config().align,AxisCell=context._cells.AxisCell,newAxis=new continous_axis_ContinousAxis({id:"legend-".concat(context._id),orientation:align===ALIGN_VERTICAL?"right":"bottom",style:context._computedStyle,nice:!1,showAxisName:!1,tickValues:data.map(function(d){return d.value}),fixedBaseline:!1,labels:{rotation:null}},{labelManager:context._labelManager});return newAxis.domain(getGradientDomain(data)),newAxis.range([1,1]),(new AxisCell).source(newAxis).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),axisSpace=axis.getLogicalSpace(),space={width:axisSpace.width-effPadding,height:axisSpace.height-effPadding},axisDomainLength=axis.source().domain().length,labelSpaces=new Array(axisDomainLength).fill(space);return this.axis(axis),labelSpaces}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var firebolt=this.firebolt(),legendContainer=gradient_legend_get(gradient_legend_getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(context,container){var gradHeight,gradWidth,_context$config2=context.config(),align=_context$config2.align,classPrefix=_context$config2.classPrefix,item=_context$config2.item,data=context.data(),_createLegendSkeleton=gradient_helper_createLegendSkeleton(container,classPrefix,data),legendContainer=_createLegendSkeleton.legendContainer,legendGradSvg=_createLegendSkeleton.legendGradSvg,legendGradCont=_createLegendSkeleton.legendGradCont,linearGradient=_createLegendSkeleton.linearGradient,legendRect=_createLegendSkeleton.legendRect,labelDim=context.axis().source().getAxisDimensions().tickDimensions,_context$measurement=context.measurement(),padding=_context$measurement.padding,margin=_context$measurement.margin,border=_context$measurement.border,titleSpaces=_context$measurement.titleSpaces,maxItemSpaces=_context$measurement.maxItemSpaces,maxHeight=_context$measurement.maxHeight,maxWidth=_context$measurement.maxWidth,height=_context$measurement.height,width=_context$measurement.width,gradientDimensions={};gradHeight=Math.floor(Math.min(height,maxHeight)-(titleSpaces.height+2*margin+2*border)),gradWidth=Math.floor(Math.min(width,maxWidth)-(2*margin+2*border)),align===ALIGN_HORIZONTAL?(gradientDimensions.height=item.icon.height,gradientDimensions.width=gradWidth-2*padding-labelDim.width/2,linearGradient.attr("x2","100%").attr("y1","0%"),legendGradCont.attr("transform","translate( ".concat(labelDim.width/2," 0)")),gradient_helper_renderAxis(context,legendContainer,gradHeight-item.icon.height-padding,gradWidth-2*padding-1),applyStyle(legendContainer,{height:"".concat(maxItemSpaces.height+border+padding,"px"),width:"".concat(Math.min(width,maxWidth),"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height),legendRect.attr("width",gradientDimensions.width-labelDim.width/2)):(gradientDimensions.height=gradHeight-2*padding-labelDim.height/2,gradientDimensions.width=item.icon.width,linearGradient.attr("x2","0%").attr("y1","100%"),legendGradCont.attr("transform","translate(0 ".concat(labelDim.height/2,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-2*padding-1,gradWidth-item.icon.width-2*padding),applyStyle(legendContainer,{height:"".concat(Math.min(height,maxHeight),"px"),width:"".concat(maxWidth,"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height-labelDim.height/2),legendRect.attr("width",gradientDimensions.width)),applyStyle(legendGradSvg,{height:"".concat(gradientDimensions.height,"px"),width:"".concat(gradientDimensions.width,"px")}),applyStyle(legendRect,{fill:"url(#linear-gradient)"}),legendGradSvg.attr("height",gradientDimensions.height),legendGradSvg.attr("width",gradientDimensions.width),context.measurement({gradientDimensions:gradientDimensions}),context._legendGradientSvg=legendGradSvg}(this,legendContainer),legendContainer.selectAll("div").style("float","left"),firebolt.mapActionsAndBehaviour(),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){return[[this.fieldName()],[data.value]]}}],[{key:"create",value:function create(dependencies){return new GradientLegend(dependencies)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}();function step_legend_typeof(obj){return(step_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function step_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function step_legend_toConsumableArray(arr){return function step_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&(domainBounds.upper=["".concat(formatter.bounds.upper," ").concat(steps[steps.length-1])])):domainLeg=legend_helper_getInterpolatedData(domain,steps,scaleParams),domainLeg=(domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=null;return i0&&void 0!==arguments[0]?arguments[0]:{},registrableComponents=this._registrableComponents,mergedPolicy=mergeRecursive(mergeRecursive({},function defaultPolicy(registrableComponents){var aliases=registrableComponents.map(function(comp){return comp.alias()});return{behaviours:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}}}}(registrableComponents)),policy);return registrableComponents.forEach(function(canvas){canvas.firebolt().crossInteractionPolicy(mergedPolicy)}),this}}]),ActionModel}()),TITLE_CONFIG={position:"top",align:"left",padding:4,className:"".concat("muze","-title-container")},SUB_TITLE_CONFIG={position:"top",align:"left",padding:16,maxLines:2,className:"".concat("muze","-subtitle-container")},MESSAGE_CONFIG={className:"".concat("muze","-message-container")};function local_options_typeof(obj){return(local_options_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function local_options_slicedToArray(arr,i){return function local_options_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function local_options_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function local_options_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function canvas_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options_localOptions=(canvas_local_options_defineProperty(_localOptions={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"layers",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),_localOptions),canvasOptions=(canvas_local_options_defineProperty(_canvasOptions={},"title",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref){var _ref2=local_options_slicedToArray(_ref,2),arg1=_ref2[0],arg2=_ref2[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref3){var _ref4=local_options_slicedToArray(_ref3,2),title=_ref4[0],titleConfig=_ref4[1],t=title;"string"!=typeof title&&title||(t=function t(){return title});var defConfig=mergeRecursive({},TITLE_CONFIG);return[t,mergeRecursive(defConfig,titleConfig)]}}}),canvas_local_options_defineProperty(_canvasOptions,"subtitle",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref5){var _ref6=local_options_slicedToArray(_ref5,2),arg1=_ref6[0],arg2=_ref6[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref7){var _ref8=local_options_slicedToArray(_ref7,2),subtitle=_ref8[0],subtitleConfig=_ref8[1],sub=subtitle;"string"!=typeof subtitle&&subtitle||(sub=function sub(){return subtitle});var defConfig=mergeRecursive({},SUB_TITLE_CONFIG);return[sub,mergeRecursive(defConfig,subtitleConfig)]}}}),_canvasOptions);function layoutComponent_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isGridComponent=arguments.length>3&&void 0!==arguments[3]&&arguments[3],cut="",componentRatioWidth=1,leftHeight=0,leftWidth=0;if(!component)return{first:definitionModel,second:definitionModel};var _component$getLogical=component.getLogicalSpace(),componentHeight=_component$getLogical.height,componentWidth=_component$getLogical.width,position=component.position();"top"===position||"bottom"===position?(cut="h",componentRatioWidth=componentHeight/definitionModel.remainingHeight(),leftHeight=definitionModel.remainingHeight()-componentHeight,leftWidth=definitionModel.remainingWidth()):(cut="v",componentRatioWidth=componentWidth/definitionModel.remainingWidth(),leftWidth=definitionModel.remainingWidth()-componentWidth,leftHeight=definitionModel.remainingHeight()),leftOvercomponentRationWidth=1-componentRatioWidth,definitionModel.cut(cut);var firstLaneConfig={host:component.name(),cut:null,ratioWeight:componentRatioWidth,preferred:!isGridComponent&&isPreferred,lanes:[]},firstLane=new DefinitionModel(firstLaneConfig);firstLane.remainingHeight(componentHeight),firstLane.remainingWidth(componentWidth);var secondLane=new DefinitionModel({host:null,cut:null,ratioWeight:leftOvercomponentRationWidth,preferred:!isGridComponent&&!isPreferred,lanes:[]});return secondLane.remainingHeight(leftHeight),secondLane.remainingWidth(leftWidth),isPreferred?definitionModel.lanes([firstLane]):"top"===position||"left"===position?definitionModel.lanes([firstLane,secondLane]):definitionModel.lanes([secondLane,firstLane]),{first:firstLane,second:secondLane}}function tree_toConsumableArray(arr){return function tree_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?matrix[0]:matrix[1];return isTransposed?(joinedMatrix=matrix[0].length>0?utils_toConsumableArray(matrix[0]):[],joinedMatrix=matrix[1].length>0?[].concat(utils_toConsumableArray(joinedMatrix),utils_toConsumableArray(matrix[1])):joinedMatrix):joinedMatrix=joinedMatrix.map(function(row,rowIndex){var rowData=[];return matrix[0].length>0&&(rowData=utils_toConsumableArray(matrix[0][rowIndex])),matrix[1].length>0&&(rowData=[].concat(utils_toConsumableArray(rowData),utils_toConsumableArray(matrix[1][rowIndex]))),rowData}),joinedMatrix},utils_computeLogicalSpace=function computeLogicalSpace(){var item=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},config=arguments.length>1?arguments[1]:void 0,maxMeasures=arguments.length>2?arguments[2]:void 0,_config$isTransposed=config.isTransposed,isTransposed=void 0!==_config$isTransposed&&_config$isTransposed,unitMeasures=config.unitMeasures,_getMeasureInfo=function getMeasureInfo(isTransposed){return isTransposed?{firstMeasure:enums_constants_HEIGHT,secondMeasure:"width"}:{firstMeasure:"width",secondMeasure:enums_constants_HEIGHT}}(isTransposed),firstMeasure=_getMeasureInfo.firstMeasure,secondMeasure=_getMeasureInfo.secondMeasure,values=item.values,minMeasures=function getMinMeasures(isTransposed,unitMeasures){return isTransposed?{height:0,width:unitMeasures.width}:{height:unitMeasures.height,width:0}}(isTransposed,unitMeasures);if(values[0].key){var _logicalSpace,logicalSpace=(utils_defineProperty(_logicalSpace={},firstMeasure,0),utils_defineProperty(_logicalSpace,secondMeasure,0),_logicalSpace);return values.forEach(function(valueItem){var space=computeLogicalSpace(valueItem,config,maxMeasures);logicalSpace[firstMeasure]=Math.max(logicalSpace[firstMeasure],space[firstMeasure],minMeasures[firstMeasure]),logicalSpace[secondMeasure]+=+space[secondMeasure]}),item.space=logicalSpace,logicalSpace}return function getLogicalSpace(item,measures,minMeasures){var _ref,maxMeasure=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],firstMeasure=measures.firstMeasure,secondMeasure=measures.secondMeasure,firstMeasureValue=0,secondMeasureValue=0;return item.values.forEach(function(valueArray){var _item$space,fMeasure=0,sMeasure=0;valueArray.forEach(function(placeholder,colIndex){placeholder.setAvailableSpace();var space=placeholder.getLogicalSpace(),minSecondMeasure=placeholder.getMinMeasures(minMeasures[secondMeasure]);sMeasure=Math.max(sMeasure,+space[secondMeasure],minSecondMeasure),maxMeasure[colIndex]=Math.max(maxMeasure[colIndex]||0,space[firstMeasure]),fMeasure+=+maxMeasure[colIndex]}),secondMeasureValue+=sMeasure,firstMeasureValue=Math.max(firstMeasureValue,fMeasure),item.space=(utils_defineProperty(_item$space={},secondMeasure,Math.ceil(secondMeasureValue)),utils_defineProperty(_item$space,firstMeasure,Math.ceil(firstMeasureValue)),_item$space)}),utils_defineProperty(_ref={},secondMeasure,secondMeasureValue),utils_defineProperty(_ref,firstMeasure,firstMeasureValue),_ref}(item,{firstMeasure:firstMeasure,secondMeasure:secondMeasure},minMeasures,maxMeasures)},createMatrixEachLevel=function createMatrixEachLevel(item,isTransposed){if(item.values[0].key){var arr=[];return item.values.forEach(function(child){isTransposed?createMatrixEachLevel(child,isTransposed).forEach(function(e,i){var _arr$i;arr[i]=arr[i]||[],(_arr$i=arr[i]).push.apply(_arr$i,utils_toConsumableArray(e))}):arr.push.apply(arr,utils_toConsumableArray(createMatrixEachLevel(child,isTransposed)))}),item.matrix=arr,arr}return item.matrix=isTransposed?item.values[0].map(function(col,colIndex){return item.values.map(function(row){return row[colIndex]})}):item.values,item.matrix},extraCellsRemover=function extraCellsRemover(arr,beg,end){return arr.slice(beg,-end)},visual_matrix_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},visual_matrix_default_config_defaultConfig={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]};function visual_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=matrix[0]||[],this._secondaryMatrix=matrix[1]||[],this._maxMeasures=[],this._availableSpace={},generateGetterSetters(this,visual_matrix_props_PROPS);var defCon=Object.assign({},this.constructor.defaultConfig());this.config(mergeRecursive(defCon,config)),this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],this.config())}return function visual_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&visual_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&visual_matrix_defineProperties(Constructor,staticProps),Constructor}(VisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"computeViewableSpaces",value:function computeViewableSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"removeExtraCells",value:function removeExtraCells(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getPriorityDistribution",value:function getPriorityDistribution(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"calculateDepth",value:function calculateDepth(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeSpaces",value:function redistributeSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeViewSpaces",value:function redistributeViewSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getCellDimensions",value:function getCellDimensions(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{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 _createTree2=function createTree(context){var matrixTree={},lastLevelKey=0,facet="primary",nestFn=utils_nest(),keys=[],layoutMatrix=context._layoutMatrix,primaryMatrix=context.primaryMatrix(),secondaryMatrix=context.secondaryMatrix(),_context$config=context.config(),isTransposed=_context$config.isTransposed,breakPage=_context$config.breakPage;if(isTransposed){if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var _i2=0;_i20){for(var primaryMatrixLength=primaryMatrix.length,_i3=secondaryMatrix.length-1;_i3>0;_i3--)keys.push(_i3+primaryMatrixLength);keys.push(primaryMatrixLength),"primary"===facet&&(lastLevelKey=primaryMatrixLength)}var newMatrix;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),newMatrix=layoutMatrix[0].map(function(col,colIndex){return layoutMatrix.map(function(row){return row[colIndex]})}),matrixTree=nestFn.entries(newMatrix)}else{if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var i=0;i0){for(var keyLength=primaryMatrix.length>0?primaryMatrix[0].length:0,_i=secondaryMatrix[0].length-1;_i>0;_i--)keys.push(_i+keyLength);keys.push(keyLength),"primary"===facet&&(lastLevelKey=keyLength)}else lastLevelKey=primaryMatrix.length>0?primaryMatrix[0].length-1:0;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),matrixTree=nestFn.entries(layoutMatrix)}return{tree:matrixTree,lastLevelKey:lastLevelKey}}(this),tree=_createTree2.tree,lastLevelKey=_createTree2.lastLevelKey;return this._lastLevelKey=lastLevelKey,tree}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(width,height){this.availableSpace({width:width,height:height});var tree=this.tree(),heightMeasures=this.populateMaxMeasures(enums_constants_HEIGHT,tree),widthMeasures=this.populateMaxMeasures("width",tree),depth=this.calculateDepth(widthMeasures,heightMeasures);return this.viewableMatrix=this.createViewPortMatrix(depth),this.viewableMeasures=this.redistributeSpaces(width,height),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(type,matrixTree){var _this=this,depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,measures=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(measures[depth]=Math.max(measures[depth]||0,matrixTree.space[type]),matrixTree.values){var childDepth=depth+1;matrixTree.values.forEach(function(child){child.space&&(measures=_this.populateMaxMeasures(type,child,childDepth,measures))})}return measures}},{key:"getViewableSpaces",value:function getViewableSpaces(){return this.viewableMeasures}},{key:"getViewableMatrices",value:function getViewableMatrices(){return this.viewableMatrix}},{key:"createViewPortMatrix",value:function createViewPortMatrix(depth){var arr=[];return function createMatrixInstances(){var arr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],depth=arguments.length>1?arguments[1]:void 0,matrixInfo=arguments.length>2?arguments[2]:void 0,layout=arguments.length>3?arguments[3]:void 0,breakPointer=layout._breakPointer,isTransposed=layout.config().isTransposed,tree=matrixInfo.tree,layoutMatrix=matrixInfo.layoutMatrix;if(0===depth){var brokenMatrix=function breakMatrix(matrix,isTransposed,breakPointer){var primaryMatrix=[],secondaryMatrix=[];return isTransposed?matrix.forEach(function(row,rowIndex){rowIndex>=breakPointer?secondaryMatrix.push(row):primaryMatrix.push(row)}):matrix.forEach(function(row,rowIndex){row.forEach(function(column,columnIndex){columnIndex>=breakPointer?(secondaryMatrix[rowIndex]=secondaryMatrix[rowIndex]||[],secondaryMatrix[rowIndex].push(column)):(primaryMatrix[rowIndex]=primaryMatrix[rowIndex]||[],primaryMatrix[rowIndex].push(column))})}),[primaryMatrix,secondaryMatrix]}(tree.matrix,isTransposed,breakPointer);return arr.push({matrix:tree.matrix,primaryMatrix:brokenMatrix[0],secondaryMatrix:brokenMatrix[1],space:tree.space}),arr}var nextLevel=depth-1;return tree.values.forEach(function(e){createMatrixInstances(arr,nextLevel,{tree:e,layoutMatrix:layoutMatrix},layout)}),arr}(arr,depth,this.removeExtraCells(),this),arr}}],[{key:"defaultConfig",value:function defaultConfig(){return visual_matrix_default_config_defaultConfig}}]),VisualMatrix}();function row_matrix_typeof(obj){return(row_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function row_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function row_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RowVisualMatrix),(_this=row_matrix_possibleConstructorReturn(this,row_matrix_getPrototypeOf(RowVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length>0?matrix[0][0].length:0,_this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],_this.config()),_this._tree={key:ROW_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function row_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&row_matrix_setPrototypeOf(subClass,superClass)}(RowVisualMatrix,visual_matrix_VisualMatrix),function row_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&row_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&row_matrix_defineProperties(Constructor,staticProps),Constructor}(RowVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!1),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),widths=_this2$getCellDimensi.widths,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=[height,height],columnMeasures=widths;return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=extraCellsRemover(tree.matrix,begCellLen,endCellLen),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var remainingAvailWidth,remainingWidth,cWidths=[],conditions=[],maxPrioritySpace=0,matrix=measures.matrix,availableWidth=measures.width,maxWidths=measures.maxMeasures,currentWidth=measures.maxWidth,height=measures.height,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length?this.primaryMatrix()[0].length:0,dist=[];remainingAvailWidth=availableWidth,remainingWidth=currentWidth,(conditions=2===priority?[primaryMatrixLength-1,primaryMatrixLength]:0===priority?[primaryMatrixLength-1]:[primaryMatrixLength]).forEach(function(i){dist[i]=maxWidths[i],maxPrioritySpace+=maxWidths[i],remainingAvailWidth-=dist[i],remainingWidth-=dist[i]}),matrix[0].forEach(function(e,i){-1===conditions.indexOf(i)&&(dist[i]=remainingAvailWidth*(maxWidths[i]/remainingWidth))}),matrix.forEach(function(row){return row.forEach(function(col,cIdx){-1===conditions.indexOf(cIdx)?(col.setAvailableSpace(dist[cIdx],height),cWidths[cIdx]=Math.max(cWidths[cIdx]||0,Math.floor(col.getLogicalSpace().width))):cWidths[cIdx]=0})});var prioritySpace=availableWidth-cWidths.reduce(function(t,n){return t+n});return prioritySpace<0?cWidths=cWidths.map(function(){return 0}):conditions.forEach(function(i){cWidths[i]=Math.floor(prioritySpace*(dist[i]/maxPrioritySpace||1))}),cWidths}},{key:"calculateDepth",value:function calculateDepth(widthMeasures,heightMeasures){var i,height=this.availableSpace().height;for(i=0;i0?logicalWidths:maxMeasures.map(function(){return 0}),rHeights=function getDistributedHeight(context){var heightWithoutGutter,distSum=0,gutterSum=0,isTransposed=context.isTransposed,distribution=context.distribution,availableHeight=context.availableHeight,height=context.height,isDistributionEqual=context.isDistributionEqual,gutter=context.gutter,matrix=context.matrix,cIdx=context.cIdx;distribution&&void 0!==distribution[0]&&(distSum=distribution.reduce(function(t,n){return t+=n})),gutter&&void 0!==gutter[0]&&(gutterSum=gutter.reduce(function(t,n){return t+=n})),heightWithoutGutter=availableHeight-Math.floor(availableHeight*gutterSum);var colLen=matrix.length;return matrix.map(function(row,rIdx){var space=row[cIdx].getLogicalSpace().height,distHeight=space+space/height*(heightWithoutGutter-height);return isTransposed||(distribution.length>0&&colLen===distribution.length?distHeight=heightWithoutGutter*distribution[rIdx]/distSum:(isDistributionEqual||0===context.height)&&(distHeight=heightWithoutGutter/colLen)),Math.floor(distHeight)})}({matrix:matrix,cIdx:this._lastLevelKey,height:mHeight,availableHeight:height,isDistributionEqual:isDistributionEqual,distribution:distribution,isTransposed:isTransposed,gutter:gutter}),maxWidths.length>0&&(cWidths=cWidths.map(function(e,i){return Math.max(e,maxWidths[0][i]||0)})),maxWidths.push(cWidths);for(var x=0;x=breakPointer&&(columnWidths[1][cIdx-breakPointer]=colWidth,widths[1]=(widths[1]||0)+colWidth),cIdx===_this4._lastLevelKey&&(rowHeights[0][rIdx]=colHeight,rowHeights[1][rIdx]=colHeight)})}),{heights:[0,0],widths:widths,rowHeights:rowHeights,columnWidths:columnWidths}}}]),RowVisualMatrix}();function column_matrix_typeof(obj){return(column_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function column_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function column_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ColumnVisualMatrix),(_this=column_matrix_possibleConstructorReturn(this,column_matrix_getPrototypeOf(ColumnVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length,_this._tree={key:COLUMN_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function column_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&column_matrix_setPrototypeOf(subClass,superClass)}(ColumnVisualMatrix,visual_matrix_VisualMatrix),function column_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&column_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&column_matrix_defineProperties(Constructor,staticProps),Constructor}(ColumnVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!0),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height,width=measures.width;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i,height:height},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),heights=_this2$getCellDimensi.heights,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=heights,columnMeasures=[width,width];return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=tree.matrix.map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var height=measures.height,maxHeights=measures.maxHeights,remainingHeight=height,heightDist=[],conditions=[],divider=2,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length;return 2===priority?(conditions=[primaryMatrixLength-1,primaryMatrixLength],divider=2):(conditions=0===priority?[primaryMatrixLength-1]:[primaryMatrixLength],divider=1),maxHeights.forEach(function(heights,index){-1===conditions.indexOf(index)&&(heightDist[index]=heights,remainingHeight-=heights)}),remainingHeight<0?heightDist=heightDist.map(function(){return 0}):conditions.forEach(function(condition){heightDist[condition]=Math.min(maxHeights[condition],remainingHeight/divider)}),heightDist}},{key:"calculateDepth",value:function calculateDepth(widthMeasures){var j,width=this.availableSpace().width;for(j=0;j0)distWidth=availableWidth*distribution[colIndex]/distSum;else if(isDistributionEqual||0===width){var rowLen=row.length;distWidth=availableWidth/rowLen}return Math.floor(distWidth)})}({row:matrix[this._lastLevelKey],width:mWidth,availableWidth:width},this.config());matrix.forEach(function(row,rIdx){return row.forEach(function(col,cIdx){var oldLogicalSpace=col.getLogicalSpace();col.setAvailableSpace(cWidths[cIdx]-borderWidth,oldLogicalSpace.height),rHeights[rIdx]=Math.max(rHeights[rIdx]||0,Math.floor(col.getLogicalSpace().height))})}),maxHeights.length>0&&(rHeights=rHeights.map(function(e,i){return Math.max(e,maxHeights[0][i])})),maxHeights.push(rHeights);for(var x=0;x=breakPointer&&(rowHeights[1][rIdx-breakPointer]=colHeight,heights[1]=(heights[1]||0)+colHeight),rIdx===_this4._lastLevelKey&&(columnWidths[0][cIdx]=colWidth,columnWidths[1][cIdx]=colWidth)})}),{heights:heights,widths:[0,0],rowHeights:rowHeights,columnWidths:columnWidths}}}]),ColumnVisualMatrix}();function layout_helper_toConsumableArray(arr){return function layout_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);imaxMeasure&&layout.scrollInfo(computations_defineProperty({},scrollType,!0)),Math.max(maxMeasure,actualMeasure)}}(layout,paginationDetailsMap[matrixType],relatedMaxMeasure,buffer)},computations_getMatrixHeightDetails=function getMatrixHeightDetails(layout,columnMatrixWidth){var height=layout.measurement().height,buffer=layout.config().buffer,_getHeightRequiredByC=function getHeightRequiredByColMatrix(layout,columnMatrixWidth){var height=layout.measurement().height,columnMatrix=layout.columnMatrix(),maxColumnMatrixHeight=Math.min(columnMatrix.getLogicalSpace().height,height/2);columnMatrix.setAvailableSpace(columnMatrixWidth,maxColumnMatrixHeight);var columnViewSpace=columnMatrix.getViewableSpaces()[layout.config().columnPointer];return{columnMatrixHeight:columnViewSpace.height.primary+columnViewSpace.height.secondary,maxColumnMatrixHeight:maxColumnMatrixHeight}}(layout,columnMatrixWidth),columnMatrixHeight=_getHeightRequiredByC.columnMatrixHeight,maxColumnMatrixHeight=_getHeightRequiredByC.maxColumnMatrixHeight,maxHeightAvailableForRowMatrix=height-Math.min(maxColumnMatrixHeight,columnMatrixHeight);return{columnMatrixHeight:columnMatrixHeight,maxColumnMatrixHeight:maxColumnMatrixHeight,rowMatrixHeight:paginationMeasureGetter(layout,"row",maxHeightAvailableForRowMatrix,buffer),maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix}},bufferCondition={isScroll:!0,pagination:"scroll"},computations_getActualBufferFromConfig=function getActualBufferFromConfig(layout){var buffer=layout.config().buffer,_map2=computations_slicedToArray([enums_constants_HORIZONTAL,enums_constants_VERTICAL].map(function(type){return function getBufferFromCondition(layout,type){var scrollInfo=layout.scrollInfo(),currentBufferType={pagination:layout.config().pagination,isScroll:scrollInfo[type]};return Object.keys(bufferCondition).every(function(e){return bufferCondition[e]===currentBufferType[e]})}(layout,type)?buffer:0}),2);return{horizontalBuffer:_map2[0],verticalBuffer:_map2[1]}},computations_computeLayoutMeasurements=function computeLayoutMeasurements(layout){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_getMatrixWidthDetail=function getMatrixWidthDetails(layout){var rowMatrix=layout.rowMatrix(),width=layout.measurement().width,_layout$config3=layout.config(),border=_layout$config3.border,buffer=_layout$config3.buffer,borderWidth=border.width,rowMatrixWidth=getMatrixMeasurement(rowMatrix,"width"),maxRowMatrixWidth=Math.min(rowMatrixWidth+buffer,width/2),maxWidthAvailableForColumnMatrix=width-maxRowMatrixWidth-borderWidth;return{rowMatrixWidth:rowMatrixWidth,maxRowMatrixWidth:maxRowMatrixWidth,columnMatrixWidth:paginationMeasureGetter(layout,"column",maxWidthAvailableForColumnMatrix,0),maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}}(layout),rowMatrixWidth=_getMatrixWidthDetail.rowMatrixWidth,maxRowMatrixWidth=_getMatrixWidthDetail.maxRowMatrixWidth,maxWidthAvailableForColumnMatrix=_getMatrixWidthDetail.maxWidthAvailableForColumnMatrix,columnMatrixWidth=_getMatrixWidthDetail.columnMatrixWidth,_getMatrixHeightDetai=computations_getMatrixHeightDetails(layout,columnMatrixWidth),columnMatrixHeight=_getMatrixHeightDetai.columnMatrixHeight,rowMatrixHeight=_getMatrixHeightDetai.rowMatrixHeight,maxHeightAvailableForRowMatrix=_getMatrixHeightDetai.maxHeightAvailableForRowMatrix,_getActualBufferFromC=computations_getActualBufferFromConfig(layout),horizontalBuffer=_getActualBufferFromC.horizontalBuffer,verticalBuffer=_getActualBufferFromC.verticalBuffer;rowMatrix.setAvailableSpace(maxRowMatrixWidth-verticalBuffer,rowMatrixHeight-horizontalBuffer);var rowViewableSpaces=rowMatrix.getViewableSpaces(),columnViewableSpaces=columnMatrix.getViewableSpaces();return setViewSpaces(layout,"row",rowViewableSpaces),setViewSpaces(layout,"column",columnViewableSpaces),function setValueMatrixMeasurements(layout,rowViewableSpaces,columnViewableSpaces){var _ref,_ref2,_ref3,_ref4,_ref5,centerMatrix=layout.centerMatrix(),border=layout.config().border,matrices=layout.matrices(),top=matrices.top,bottom=matrices.bottom,borderWidth=border.width,rowHeights=(_ref=[]).concat.apply(_ref,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.rowHeights.primary}))),rowWidthsPrimary=(_ref2=[]).concat.apply(_ref2,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.primary}))),rowWidthsSecondary=(_ref3=[]).concat.apply(_ref3,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.secondary}))),columnWidths=(_ref4=[]).concat.apply(_ref4,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.columnWidths.primary}))),columnHeightsPrimary=columnViewableSpaces[0].rowHeights.primary,columnHeightsSecondary=(_ref5=[]).concat.apply(_ref5,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.rowHeights.secondary})));centerMatrix.forEach(function(matrix,rIdx){matrix.forEach(function(placeholder,cIdx){placeholder.setAvailableSpace(columnWidths[cIdx]-borderWidth,rowHeights[rIdx]-borderWidth)})}),computations_setAvailableSpace(top[0],rowWidthsPrimary,columnHeightsPrimary),computations_setAvailableSpace(top[2],rowWidthsSecondary,columnHeightsPrimary),computations_setAvailableSpace(bottom[0],rowWidthsPrimary,columnHeightsSecondary),computations_setAvailableSpace(bottom[2],rowWidthsSecondary,columnHeightsSecondary)}(layout,rowViewableSpaces,columnViewableSpaces),{rowMatrixHeight:rowMatrixHeight-horizontalBuffer,rowMatrixWidth:rowMatrixWidth-verticalBuffer,maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix-horizontalBuffer,columnMatrixHeight:columnMatrixHeight,columnMatrixWidth:columnMatrixWidth,maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}},measureSum=function measureSum(measureArr){return measureArr.reduce(function(total,measure){return total+measure},0)};function layout_typeof(obj){return(layout_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function layout_defineProperties(target,props){for(var i=0;i0&&(leftMatrix=[].concat(layout_helper_toConsumableArray(topLeft),layout_helper_toConsumableArray(leftRows),layout_helper_toConsumableArray(bottomLeft))),rightRows.length>0&&(rightMatrix=[].concat(layout_helper_toConsumableArray(topRight),layout_helper_toConsumableArray(rightRows),layout_helper_toConsumableArray(bottomRight))),topColumns.length>0&&topColumns[0].length>0&&(topMatrix=topColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(topLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(topRight[i]))})),bottomColumns.length>0&&bottomColumns[0].length>0&&(bottomMatrix=bottomColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(bottomLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(bottomRight[i]))})),context.rowMatrix(new row_matrix_RowVisualMatrix([leftMatrix,rightMatrix],{isDistributionEqual:isRowSizeEqual,distribution:distribution.rows,gutter:gutterSpace.rows,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.row,breakPage:breakPage.rows.map(function(e){return e+Math.max(topLeft.length,topRight.length)}),extraCellLengths:[topLeft.length,bottomLeft.length]})),begColCells=topLeft.length>0?topLeft[0].length:bottomLeft.length>0?bottomLeft[0].length:0,endColCells=topRight.length>0?topRight[0].length:bottomRight.length>0?bottomRight[0].length:0,context.columnMatrix(new column_matrix_ColumnVisualMatrix([topMatrix,bottomMatrix],{isDistributionEqual:isColumnSizeEqual,distribution:distribution.columns,gutter:gutterSpace.columns,isTransposed:!0,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.col,breakPage:breakPage.columns,extraCellLengths:[begColCells,endColCells]})),context.centerMatrix(valueMatrix),matrices}(this,_matrices),this):layout_get(layout_getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,_matrices)}},{key:"triggerReflow",value:function triggerReflow(){this.scrollInfo({horizontal:!1,vertical:!1});var _computeLayoutMeasure=computations_computeLayoutMeasurements(this),maxHeightAvailableForRowMatrix=_computeLayoutMeasure.maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix=_computeLayoutMeasure.maxWidthAvailableForColumnMatrix;return this.setViewInformation(maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix),this}},{key:"gotoPage",value:function gotoPage(type,pageNumber){var pageType=type.toLowerCase(),totalPages=this.viewInfo().viewMatricesInfo["".concat(pageType,"Pages")],pointer=Math.min(Math.max(1,pageNumber),totalPages);return this.config(function layout_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(pageType,"Pointer"),pointer-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(type){var viewMatricesInfo=this.viewInfo().viewMatricesInfo,pageType=type.toLowerCase();return{totalPages:viewMatricesInfo["".concat(pageType,"Pages")],currentPage:this.config()["".concat(pageType,"Pointer")]+1}}},{key:"viewInfo",value:function viewInfo(){return arguments.length?(this._viewInfo=arguments.length<=0?void 0:arguments[0],this):this._viewInfo}},{key:"scrollInfo",value:function scrollInfo(){return arguments.length?(this._scrollInfo=mergeRecursive(this._scrollInfo,arguments.length<=0?void 0:arguments[0]),this):this._scrollInfo}},{key:"setViewInformation",value:function setViewInformation(maxRowHeight,maxColWidth){var _this$config2=this.config(),rowPointer=_this$config2.rowPointer,columnPointer=_this$config2.columnPointer,border=_this$config2.border,viewMatricesInfo=function getViewMatrices(layout,rowPointer,columnPointer){for(var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),centerMatrix=layout.centerMatrix(),matrices=layout.matrices(),rowMatrices=rowMatrix.getViewableMatrices(),columnMatrices=columnMatrix.getViewableMatrices(),centralMatrixPointer={row:0,column:0},i=rowPointer-1;i>=0;i--){var length=Math.max(rowMatrices[i].primaryMatrix.length,rowMatrices[i].secondaryMatrix.length);centralMatrixPointer.row+=length}for(var _i=columnPointer-1;_i>=0;_i--){var matrix=columnMatrices[_i],primaryMatrix=matrix.primaryMatrix,secondaryMatrix=matrix.secondaryMatrix,_length=Math.max(primaryMatrix[0]?primaryMatrix[0].length:0,secondaryMatrix[0]?secondaryMatrix[0].length:0);centralMatrixPointer.column+=_length}matrices.top[1]=columnMatrices[columnPointer].primaryMatrix,matrices.bottom[1]=columnMatrices[columnPointer].secondaryMatrix,matrices.center[0]=rowMatrices[rowPointer].primaryMatrix,matrices.center[2]=rowMatrices[rowPointer].secondaryMatrix;var rowMatrixLen=Math.max(matrices.center[0].length,matrices.center[2].length),columnMatrixLen=Math.max(matrices.top[1][0]?matrices.top[1][0].length:0,matrices.bottom[1][0]?matrices.bottom[1][0].length:0);return matrices.center[1]=centerMatrix.slice(centralMatrixPointer.row,centralMatrixPointer.row+rowMatrixLen).map(function(matrix){return matrix.slice(centralMatrixPointer.column,centralMatrixPointer.column+columnMatrixLen)}),{matrices:matrices,rowPages:rowMatrices.length,columnPages:columnMatrices.length}}(this,rowPointer,columnPointer),layoutDimensions=function getViewMeasurements(layout,maxRowHeight,maxColWidth){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_layout$config=layout.config(),columnPointer=_layout$config.columnPointer,rowPointer=_layout$config.rowPointer,rowSpaces=rowMatrix.getViewableSpaces()[rowPointer],colSpaces=columnMatrix.getViewableSpaces()[columnPointer],rowHeights=rowSpaces.rowHeights,rowMatrixWidth=rowSpaces.width,columnWidths=colSpaces.columnWidths,columnMatrixHeight=colSpaces.height,leftWidth=rowMatrixWidth.primary,rightWidth=rowMatrixWidth.secondary,topHeight=columnMatrixHeight.primary,bottomHeight=columnMatrixHeight.secondary,centerHeight=measureSum(rowHeights.primary),centerWidth=measureSum(columnWidths.primary),viewWidth=[leftWidth,Math.min(centerWidth,maxColWidth),rightWidth],viewHeight=[topHeight,Math.min(centerHeight,maxRowHeight),bottomHeight];return{viewWidth:viewWidth,viewHeight:viewHeight,actualCenterMeasures:{height:centerHeight,width:centerWidth},totalMeasures:{width:measureSum(viewWidth),height:measureSum(viewHeight)},unitHeights:rowHeights,unitWidths:columnWidths}}(this,maxRowHeight,maxColWidth);return layoutDimensions.border=border,this.viewInfo({viewMatricesInfo:viewMatricesInfo,layoutDimensions:layoutDimensions}),this}}],[{key:"defaultViewInfo",value:function defaultViewInfo(){return Object.assign({},{layoutDimensions:{border:this.defaultConfig().border,viewHeight:[0,0,0],viewWidth:[0,0,0]},viewMatricesInfo:{columnPages:0,rowPages:0,matrices:{top:[],center:[],bottom:[]}}})}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENTS}},{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIGURATION}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}();function border_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _matrixSpanGeneratorM,_spanApplierMap,borderMap=(border_helper_defineProperty(_borderMap={},"".concat("top","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("right"),null),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("left"),"row"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("middle"),"center"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("right"),"row"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("right"),null),_borderMap),border_helper_specificBorderApplier=function specificBorderApplier(borderTypes,showBorders,cells,borderInfo){var color=borderInfo.color,width=borderInfo.width,style=borderInfo.style,borderStyle="".concat(width,"px ").concat(style);borderTypes.forEach(function(borderType){!function applySpecificBorder(cells,color,type,style){cells.style("border-".concat(type),"".concat(style," ").concat(color))}(cells,showBorders[borderType]?color:"rgba(0,0,0,0)",borderType,borderStyle)})},border_helper_applyBorders=function applyBorders(cells,border,row,column){var borderApplierFn=function borderApplier(cells,borderInfo){var showRowBorders=borderInfo.showRowBorders,showColBorders=borderInfo.showColBorders,showValueBorders=borderInfo.showValueBorders;return{row:function row(){return border_helper_specificBorderApplier(["top","bottom"],showRowBorders,cells,borderInfo)},column:function column(){return border_helper_specificBorderApplier(["left","right"],showColBorders,cells,borderInfo)},center:function center(){return border_helper_specificBorderApplier(["left","right","top","bottom"],showValueBorders,cells,borderInfo)}}}(cells,border),borderMapVal=borderMap["".concat(ROW_MATRIX_INDEX[VIEW_INDEX[row]],"-").concat(COLUMN_MATRIX_INDEX[column])];borderMapVal&&borderApplierFn[borderMapVal]()};function span_maker_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var orderMaker=function orderMaker(arr){return Array.from(Array(arr.length).keys())},nestByStack=function nestByStack(stack,updateArr){var optionalParams=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},order=optionalParams.order,keyFn=optionalParams.keyFn,arr=updateArr.slice(),currStack=stack.slice(),prevStack=currStack.slice();if(order=order||Array.from(Array(arr.length).keys()),keyFn=keyFn||function(v){return v},0===currStack.length){var _newArr=[];return order.forEach(function(e){_newArr.push(arr[e])}),{prevStack:prevStack,currStack:arr,arr:_newArr}}for(var arrVal="",stackVal="",newArr=[],i=order.length-1;i>=0;i--){var currElemIndex=order[i];if((arrVal+=keyFn(arr[currElemIndex]))===(stackVal+=keyFn(currStack[currElemIndex])))newArr[currElemIndex]=null;else{stackVal="";for(var j=i;j0&&void 0!==arguments[0]?arguments[0]:1,placeholder=arguments.length>1?arguments[1]:void 0,config=arguments.length>2?arguments[2]:void 0,index=arguments.length>3?arguments[3]:void 0,height=placeholder.availHeight(),width=placeholder.availWidth(),borderWidth=config.border.width,unitWidths=config.dimensions.unitWidths,col=index.col;return span_maker_defineProperty(_ref={},"rowSpan",function(){placeholder.setAvailableSpace(width,height*span),1===span&&renderer_utils_selectElement(this).style("height","".concat(height*span+borderWidth,"px"))}),span_maker_defineProperty(_ref,"colSpan",function(){var primaryUnitWidth=unitWidths.primary[col];if(span>1){for(var cumulativeWidth=0,i=col;i0&&void 0!==arguments[0]?arguments[0]:0}},{key:"type",get:function get(){return"simple"}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),SimpleCell}();function enums_defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var visual_cell_src_props_PROPS,enums_defaults_DEFAULT_CONFIG=(enums_defaults_defineProperty(_DEFAULT_CONFIG={},"margin",(enums_defaults_defineProperty(_CONSTANTS$MARGIN={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$MARGIN)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"spaceFixer",2),enums_defaults_defineProperty(_DEFAULT_CONFIG,"isOffset",!1),enums_defaults_defineProperty(_DEFAULT_CONFIG,"verticalAlign",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"textAlign","center"),enums_defaults_defineProperty(_DEFAULT_CONFIG,"show",!0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"maxLines",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"minCharacters",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"rotation",null),_DEFAULT_CONFIG);function visual_cell_src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_PROPS={mount:{},availHeight:{},availWidth:{},config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config,value)}},logicalSpace:{},minSpacing:{},source:{}},packages_visual_cell_src_props_PROPS=(visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS={},GEOM,mergeRecursive({data:{},caption:{},config:{},axes:{},facetByFields:{},fields:{},transform:{},layerDef:{},detailFields:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_TEXT,mergeRecursive({smartText:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_AXIS,DEFAULT_PROPS),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,BLANK,DEFAULT_PROPS),visual_cell_src_props_PROPS);function axis_cell_typeof(obj){return(axis_cell_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function axis_cell_defineProperties(target,props){for(var i=0;i(availWidth||0)&&maxLines&&(space.height=space.oriTextHeight*maxLines),availWidth&&availWidth":">",'"':""","'":"'","/":"/"};return"".concat(str).replace(/[&<>"'/]/g,function(match){return htmlEscapes[match]})}(rawContent()):rawContent()},createHeading=function createHeading(config,type,labelManager,prevCell){return config?function headerCreator(config,cellType,labelManager,prevCell){var margin={},content=config.content,classPrefix=config.classPrefix,maxLines=config.maxLines,cell=prevCell||new src_text_cell({type:"title"===cellType?"header":"text",className:"".concat(classPrefix,"-").concat(cellType,"-cell")},{labelManager:labelManager}).config({maxLines:maxLines}).minSpacing({width:0,height:0});return cell.source(content),cell._minTickDiff={height:0,width:0},margin=config.position===src_constants_TOP?{top:0,bottom:config.padding}:{top:config.padding,bottom:0},cell.config({margin:margin}),{height:cell.getLogicalSpace().height,cell:cell}}(config,type,labelManager,prevCell):""},legend_maker_legendInitializer=function legendInitializer(legendConfig,canvas,measurement,prevLegends){var legends=[],height=measurement.height,width=measurement.width,headerHeight=measurement.headerHeight,position=legendConfig.position,align=legendConfig.align,legendInfo=function legendCreator(canvas){var LegendCls,dataset=[],axes=canvas.getRetinalAxes();return Object.entries(axes).forEach(function(axisInfo){var scale=axisInfo[1][0],scaleType=axisInfo[0],scaleProps=canvas[scaleType]();if(scaleProps.field&&scale){var _scale$config=scale.config(),type=_scale$config.type,step=_scale$config.step,stepMapper="boolean"==typeof step&&step;LegendCls=LEGEND_TYPE_MAP["".concat(type,"-").concat(stepMapper,"-").concat(scaleType)],dataset.push({scale:scale,canvas:canvas,fieldName:scaleProps.field,title:retrieveFieldDisplayName(canvas.data(),scaleProps.field),LegendCls:LegendCls,scaleType:scaleType})}}),dataset}(canvas),invalidValues=canvas.config().invalidValues,parser=getValueParser(invalidValues);return legendInfo.forEach(function(dataInfo,index){var legendMeasures={},LegendCls=dataInfo.LegendCls,scale=dataInfo.scale,fieldName=dataInfo.fieldName,titleText=dataInfo.title,scaleType=dataInfo.scaleType,config=legendConfig[scaleType]||{},title=config.title||{};if(title.text=title.text||titleText,config.show){config.position=position,config.align=align;var legend=getObjProp(prevLegends[scaleType],index);legend||(legend=LegendCls.create({labelManager:canvas._dependencies.smartlabel,cells:{AxisCell:axis_cell,TextCell:src_text_cell}})),legendMeasures.maxHeight="vertical"===align?height-headerHeight:.2*height,legendMeasures.maxWidth="horizontal"===align?width:.2*width,legendMeasures.width=Math.min(legendMeasures.maxWidth,config.width),legendMeasures.height=Math.min(legendMeasures.maxHeight,config.height),[PADDING,BORDER,MARGIN].forEach(function(e){legendMeasures[e]=config[e]});var metaData=legend.metaData();metaData instanceof datamodel_default.a&&metaData.dispose(),legend.scale(scale).valueParser(parser).title(title).fieldName(fieldName).config(config).metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName])).measurement(legendMeasures).canvasAlias(canvas.alias()).setLegendMeasures(),legends.push({canvas:canvas,legend:legend,scaleType:scaleType})}}),legends};function muze_chart_component_typeof(obj){return(muze_chart_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function muze_chart_component_defineProperties(target,props){for(var i=0;icurrHeight?(sections++,currWidth=0,currHeight=legHeight):sections<0&§ions++,sectionComponents[sections]=sectionComponents[sections]||[],currHeight-=Math.min(leg.measurement().height,currHeight),currWidth=Math.max(Math.min(leg.measurement().width,leg.measurement().maxWidth),currWidth),sectionComponents[sections].push({legend:leg,legendHeight:legHeight,legendWidth:currWidth})});var mount=makeElement(legendMount,["div"],sectionComponents,"".concat(classPrefix,"-legend-section"));mount.classed("".concat(classPrefix,"-legend-vertical-section"),!0).style("width",function(d){return"".concat(d[0].legendWidth,"px")}),makeElement(mount,["div"],function(d){return d},"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legendWidth,"px")})}else{var _mount=makeElement(legendMount,"div",[1],"".concat(classPrefix,"-legend-section"));_mount.classed("".concat(classPrefix,"-legend-horizontal-section"),!0),_mount.classed("".concat(classPrefix,"-legend-section-",0),!0).style("width","".concat(legWidth,"px")),makeElement(_mount,"div",this.components,"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legend.measurement().width,"px")})}}},{key:"draw",value:function draw(container){this.renderLegend(container||document.getElementById(this.renderAt()))}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.boundBox(params.config.measurement.legendSpace),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.components=params.component,this.params=params,this.target(params.config.target),this.position(params.config.position);var _defaultAlignmentHelp=function defaultAlignmentHelper(position){var alignment=null,alignWith="".concat(ROW_MATRIX_INDEX[1],"-").concat(COLUMN_MATRIX_INDEX[1]);switch(position){case src_constants_TOP:case src_constants_BOTTOM:alignment=HORIZONTAL_CENTER;break;case src_constants_LEFT:case src_constants_RIGHT:alignment=VERTICAL_CENTER;break;default:alignment=VERTICAL_CENTER}return{alignment:alignment,alignWith:alignWith}}(params.config.position),alignWith=_defaultAlignmentHelp.alignWith,alignment=_defaultAlignmentHelp.alignment;this.className(params.config.className),this.alignWith(params.config.alignWith||alignWith),this.alignment(params.config.alignment||alignment)}}]),LegendComponent}(),helper_d3Drag=(__webpack_require__(25),renderer_utils_getD3Drag()),arrowSizeMap={left:"width",right:"width",top:"height",bottom:"height"},getUnitPositions=function getUnitPositions(unitMeasures,totalLength,viewLength){var currentLen=0;return(unitMeasures.primary&&unitMeasures.primary.length?unitMeasures.primary:unitMeasures.secondary).map(function(e){var unitPosition=100*currentLen/(totalLength-viewLength);return currentLen+=e,unitPosition})},helper_createScrollBarArrow=function createScrollBarArrow(mount,type,config){var classPrefix=config.classPrefix,thickness=config.thickness,arrow=makeElement(mount,"div",[type],"".concat(classPrefix,"-scroll-arrow-").concat(type));return arrow.classed("".concat(classPrefix,"-scroll-arrow"),!0),arrow.style(arrowSizeMap[type],"".concat(thickness,"px")),makeElement(arrow,"div",[1],"".concat(classPrefix,"-scroll-arrow-chevron")).attr("id","".concat(classPrefix,"-scroll-arrow-chevron-").concat(type)),arrow},helper_createScrollBarRect=function createScrollBarRect(mount,config){var classPrefix=config.classPrefix,rect=makeElement(mount,"div",[1],"".concat(classPrefix,"-scroll-rect"));return{rect:rect,mover:makeElement(rect,"div",[1],"".concat(classPrefix,"-scroll-mover"))}},applyScrollMouseDownAction=function applyScrollMouseDownAction(moverRect,scrollMaker,speed){var mover=moverRect.mover,rect=moverRect.rect,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y;scrollMaker.changeMoverPosition({x:x-rectX+speed,y:y-rectY+speed})},helper_registerListenerOnArrow=function registerListenerOnArrow(scrollMaker,moverRect,arrowType,speed){var timer="",arrow=scrollMaker._components[arrowType],isTouchDevice=hasTouch();arrow.on(isTouchDevice?"touchstart":"mousedown",function(){renderer_utils_getEvent().preventDefault(),timer=setInterval(function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)},100)}).on(isTouchDevice?"touchend":"mouseup",function(){renderer_utils_getEvent().preventDefault(),clearInterval(timer)}).on("click",function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)})},helper_registerListeners=function registerListeners(scrollMaker){var moverRect=scrollMaker._components.moverRect,speed=scrollMaker.config().speed;helper_registerListenerOnArrow(scrollMaker,moverRect,"prevArrow",-speed),function applyMoverDrag(scrollMaker,moverRect){var startPos={},moverStartPos=0,rectStartPos=0,endPos={},mover=moverRect.mover,rect=moverRect.rect;mover.call(helper_d3Drag().on("start",function(){var event=renderer_utils_getEvent();moverStartPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect(),startPos={x:event.x,y:event.y}}).on("drag",function(){var event=renderer_utils_getEvent(),window=getWindow(),distanceMoved_x=(endPos={x:event.x,y:event.y}).x-startPos.x,distanceMoved_y=endPos.y-startPos.y,actualPosition={x:moverStartPos.x+distanceMoved_x-rectStartPos.x+window.pageXOffset,y:moverStartPos.y+distanceMoved_y-rectStartPos.y+window.pageYOffset};scrollMaker.changeMoverPosition(actualPosition)}))}(scrollMaker,moverRect),function applyRectClick(scrollMaker,moverRect){moverRect.rect.on("click",function(){var event=renderer_utils_getEvent();scrollMaker.emptyScrollAreaClick(event)})}(scrollMaker,moverRect),helper_registerListenerOnArrow(scrollMaker,moverRect,"nextArrow",speed)},scroll_bar_maker_props_PROPS={config:{sanitization:function sanitization(context,value){return value=mergeRecursive(context._config,value)}},manager:{},unitPositions:{},logicalSpace:{}};function scroll_maker_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=horizontal_scroll_maker_get(horizontal_scroll_maker_getPrototypeOf(HorizontalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,config,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"left",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"right",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitWidths=_this$logicalSpace.unitWidths,scrollBarWithouArrowLength=width-2*height;rect.style("width","".concat(dimensions.width-2*height,"px")),rect.style("height","".concat(100,"%")),mover.style("width","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style("height","".concat(100,"%")),mover.style(src_constants_LEFT,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitWidths,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.xrectStartPos.width?rectStartPos.width-moverPos.width:newPosition.x,mover.style(src_constants_LEFT,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:0,x:moverPos.x-rectStartPos.x-delta}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.width)/100;return this.changeMoverPosition({y:0,x:movement}),this}}],[{key:"type",value:function type(){return"horizontal"}}]),HorizontalScrollMaker}(),vertical:function(_ScrollMaker){function VerticalScrollMaker(){return function vertical_scroll_maker_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VerticalScrollMaker),vertical_scroll_maker_possibleConstructorReturn(this,vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker).apply(this,arguments))}return function vertical_scroll_maker_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&vertical_scroll_maker_setPrototypeOf(subClass,superClass)}(VerticalScrollMaker,scroll_maker_ScrollMaker),function vertical_scroll_maker_createClass(Constructor,protoProps,staticProps){return protoProps&&vertical_scroll_maker_defineProperties(Constructor.prototype,protoProps),staticProps&&vertical_scroll_maker_defineProperties(Constructor,staticProps),Constructor}(VerticalScrollMaker,[{key:"createScroll",value:function createScroll(mountPoint){var dimensions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=vertical_scroll_maker_get(vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"top",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"bottom",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitHeights=_this$logicalSpace.unitHeights,scrollBarWithouArrowLength=height-2*width;rect.style("height","".concat(scrollBarWithouArrowLength,"px")),rect.style("width","".concat(100,"%")),mover.style("width","".concat(100,"%")),mover.style("height","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style(src_constants_TOP,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitHeights,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.yrectStartPos.height?rectStartPos.height-moverPos.height:newPosition.y,mover.style(src_constants_TOP,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:moverPos.y-rectStartPos.y-delta,x:0}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.height)/100;return this.changeMoverPosition({x:0,y:movement}),this}}],[{key:"type",value:function type(){return"vertical"}}]),VerticalScrollMaker}()},ScrollComponent=function(_MuzeComponent){function ScrollComponent(params){var _this;!function scroll_component_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ScrollComponent);var ScrollMaker=scrollMakerMap[params.config.type];return params.component=new ScrollMaker,params.component.config(params.config.scrollBarComponentConfig),params.component.logicalSpace(params.dimensions),(_this=scroll_component_possibleConstructorReturn(this,scroll_component_getPrototypeOf(ScrollComponent).call(this,params.name,params.component.getLogicalSpace(),0))).setParams(params),_this}return function scroll_component_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&scroll_component_setPrototypeOf(subClass,superClass)}(ScrollComponent,MuzeComponent),function scroll_component_createClass(Constructor,protoProps,staticProps){return protoProps&&scroll_component_defineProperties(Constructor.prototype,protoProps),staticProps&&scroll_component_defineProperties(Constructor,staticProps),Constructor}(ScrollComponent,[{key:"manager",value:function manager(){return arguments.length?(this.component.manager(arguments.length<=0?void 0:arguments[0]),this):this.component.manager()}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){return this.component.scrollDeltaTo(delta),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){return this.component.scrollTo(scrollPercentage),this}},{key:"scrollToUnitIndex",value:function scrollToUnitIndex(unitIndex){var unitPositions=this.component.unitPositions(),sanitizedUnitIndex=Math.min(Math.max(0,unitIndex),unitPositions.length-1);return this.component.scrollTo(unitPositions[sanitizedUnitIndex]),this}},{key:"getScrollPositionsForUnits",value:function getScrollPositionsForUnits(){return this.component.unitPositions()}},{key:"draw",value:function draw(container){return this.component.createScroll(container||document.getElementById(this.renderAt())),this}},{key:"attachScrollAction",value:function attachScrollAction(externalAction){return this.component.attachScrollAction(externalAction),this}},{key:"detachScrollAction",value:function detachScrollAction(){return this.component.detachScrollAction(),this}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.component.config(params.config.scrollBarComponentConfig),this.component.logicalSpace(params.dimensions),this.boundBox(this.component.getLogicalSpace()),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.component=params.component||this.component,this.params=params,this.target(params.config.target),this.position(params.config.position),this.className(params.config.className),this.alignWith(params.config.alignWith),this.alignment(params.config.alignment)}},{key:"remove",value:function remove(){this.component.remove()}}]),ScrollComponent}();function matrix_component_typeof(obj){return(matrix_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function matrix_component_defineProperties(target,props){for(var i=0;iMath.abs(wheelDeltaY)&&scrollBarManager.preventBrowserScroll("horizontal",event).triggerScrollBarAction("horizontal",wheelDeltaX/30),0!==wheelDeltaY&&Math.abs(wheelDeltaX)0?heightAttr:height,minHeight),availableWidthForCanvas=Math.max(widthAttr>0?widthAttr:width,minWidth),_createHeaders=function createHeaders(context,canvasHeight,canvasWidth){var headerHeight=0,headers={},subtitle=context.subtitle(),isSubtitle=title_maker_resolveTitleSubTitleContent(subtitle[0]);return canvasHeight>=200&&canvasWidth>=200&&["title","subtitle"].forEach(function(type){var headerOptions=context[type](),content=title_maker_resolveTitleSubTitleContent(headerOptions[0]);if(content){var config=headerOptions[1];config.width=context.width(),config.height=context.height(),config.classPrefix=context.config().classPrefix,config.content=content,config.padding="title"!==type||isSubtitle.length?config.padding:subtitle[1].padding;var _createHeading=createHeading(config,type,context.dependencies().smartlabel,context["".concat(type,"Cell")]),height=_createHeading.height,cell=_createHeading.cell;headers["".concat(type,"Cell")]=cell,context._composition[type]=cell,headerHeight+=height}}),{headerHeight:headerHeight,headers:headers}}(context,availableHeightForCanvas,availableWidthForCanvas),headers=_createHeaders.headers,headerHeight=_createHeaders.headerHeight,legends=function createLegend(context,headerHeight,height,width){var measurement={height:height,width:width,headerHeight:headerHeight},legend=context.config().legend,show=legend.show,position=legend.position;legend.classPrefix=context.config().classPrefix;var align=position===src_constants_LEFT||position===src_constants_RIGHT?"vertical":"horizontal";return legend.show=show?"vertical"===align&&width>200||"horizontal"===align&&height>200:show,legend.align=align,legend_maker_legendInitializer(legend,context,measurement,context.composition().legend||{})}(context,headerHeight,availableHeightForCanvas,availableWidthForCanvas);context._composition.legend={},legends.forEach(function(e){context._composition.legend[e.scaleType]=e.legend});var legendSpace=function getLegendSpace(legends,legendConfig,availableHeight,availableWidth){var legendSpace={width:0,height:0};return legends.map(function(legendInfo){return legendInfo.legend.measurement()}).forEach(function(space){var height,width;width=Math.min(space.width,space.maxWidth),height=Math.min(space.height,space.maxHeight),"horizontal"===legendConfig.align?legendSpace.width+width>availableWidth?(legendSpace.width=availableWidth,legendSpace.height+=height):(legendSpace.width+=width,legendSpace.height=Math.max(legendSpace.height,height)):legendSpace.height+height>availableHeight?(legendSpace.height=height,legendSpace.width+=width):(legendSpace.height+=height,legendSpace.width=Math.max(legendSpace.width,width))}),"horizontal"===legendConfig.align&&(legendSpace.width=availableWidth),legendSpace}(legends,legend,availableHeightForCanvas,availableWidthForCanvas),legendWidth=legendPosition===src_constants_LEFT||legendPosition===src_constants_RIGHT?legendSpace.width:0,legendHeight=legendPosition===src_constants_TOP||legendPosition===src_constants_BOTTOM?legendSpace.height:0,components={headers:headers,legends:legends,canvases:[context],rows:rows,columns:columns,values:values,cornerMatrices:visGroup.cornerMatrices()},measurement={mountSpace:{height:height,width:width},headerHeight:headerHeight,legendSpace:legendSpace,canvasWidth:availableWidthForCanvas,canvasHeight:availableHeightForCanvas,width:availableWidthForCanvas-legendWidth,height:availableHeightForCanvas-headerHeight-legendHeight,minUnitHeight:context.minUnitHeight(),minUnitWidth:context.minUnitWidth()};return{layoutConfig:layoutConfig=mergeRecursive(layoutConfig,{classPrefix:classPrefix,showHeaders:showHeaders,border:mergeRecursive(visGroup.metaData().border,context.config().border),layoutArrangement:layoutArrangement,legend:legend,buffer:scrollBar.thickness,pagination:pagination,title:titleConfig,subtitle:subtitleConfig,isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,mount:mount,priority:priority}),components:components,measurement:measurement}},componentIndexes={title:0,subtitle:1,legend:2,verticalScrollBar:3,horizontalScrollBar:4,grid:5,message:6},componentNames={0:"title",1:"subtitle",2:"legend",3:"verticalScrollBar",4:"horizontalScrollBar",5:"grid",6:"message"},layout_maker_renderLayout=function renderLayout(canvas,renderDetails){var layoutManager=canvas._layoutManager,gridLayout=canvas.layout(),grid=componentIndexes.grid,compWrappers=component_wrapper_maker_componentWrapperMaker(canvas,gridLayout,renderDetails),componentWrappers=Object.keys(componentIndexes).map(function(e){return compWrappers[e]});componentWrappers[grid]&&function createScrollManager(componentWrappers,canvas){var verticalScrollBar=componentIndexes.verticalScrollBar,grid=componentIndexes.grid,horizontalScrollWrapper=componentWrappers[componentIndexes.horizontalScrollBar],verticalScrollWrapper=componentWrappers[verticalScrollBar],gridWrapper=componentWrappers[grid],scrollBarManager=new ScrollManager,scrollBarComponents={};verticalScrollWrapper&&(scrollBarComponents.vertical=verticalScrollWrapper),horizontalScrollWrapper&&(scrollBarComponents.horizontal=horizontalScrollWrapper),scrollBarManager.scrollBarComponents(scrollBarComponents).attachedComponents({grid:gridWrapper}),canvas.composition().hScrollBar=horizontalScrollWrapper,canvas.composition().vScrollBar=verticalScrollWrapper,[horizontalScrollWrapper,verticalScrollWrapper].forEach(function(wrapper){wrapper&&wrapper.manager(scrollBarManager)}),gridWrapper.scrollBarManager(scrollBarManager)}(componentWrappers,canvas),componentWrappers.forEach(function(componentWrapper,index){if(!componentWrapper){var deleteElementName=componentNames[index];layoutManager.removeComponent(deleteElementName)}}),layoutManager.registerComponents(componentWrappers).compute(),function attachListeners(componentWrappers){componentWrappers.forEach(function(componentWrapper){componentWrapper&&componentWrapper.attachListener()})}(componentWrappers)};function group_firebolt_typeof(obj){return(group_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function group_firebolt_defineProperties(target,props){for(var i=0;ia.getFullYear()&&(t=""+(i-1)+r),d(t).getFullYear()},formatter:function formatter(e){var t=d(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:"Y",index:0,extract:function extract(){return"(\\d{4})"},parser:h.defaultNumberParser(),formatter:function formatter(e){return d(e).getFullYear().toString()}}}},h.getTokenFormalNames=function(){var e=h.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},h.tokenResolver=function(){var e=h.getTokenDefinitions(),t=function t(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[i+1],-1!==r.indexOf(o)&&a.push({index:i,token:o});return a},h.formatAs=function(e,t){var n,r=d(e),a=h.findTokens(t),i=h.getTokenDefinitions(),o=String(t),u=h.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=a.length;l=0;d--)(f=i[d].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(d=0;d0&&e.split(",").forEach(function(e){var n=e.split("-"),r=+n[0],a=+(n[1]||n[0]);if(a>=r)for(var i=r;i<=a;i+=1)t(i)})}var R=function(){function e(e,t){for(var n=0;n3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:U.CROSS,i=[],o=[],u=n||H,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,d=c.name+"."+f.name,p=Y(c,f);if(l===s)throw new Error("DataModels must have different alias names");return c.fields.forEach(function(e){var t=_({},e.schema());-1===p.indexOf(t.name)||r||(t.name=c.name+"."+t.name),i.push(t)}),f.fields.forEach(function(e){var t=_({},e.schema());-1!==p.indexOf(t.name)?r||(t.name=f.name+"."+t.name,i.push(t)):i.push(t)}),T(e._rowDiffset,function(n){var d=!1,h=void 0;T(t._rowDiffset,function(v){var m=[],y={};y[l]={},y[s]={},c.fields.forEach(function(e){m.push(e.partialField.data[n]),y[l][e.name()]={rawValue:e.partialField.data[n],formattedValue:e.formattedData()[n]}}),f.fields.forEach(function(e){-1!==p.indexOf(e.schema().name)&&r||m.push(e.partialField.data[v]),y[s][e.name()]={rawValue:e.partialField.data[v],formattedValue:e.formattedData()[v]}});var g=At(y[l]),b=At(y[s]);if(u(g,b,function(){return e.detachedRoot()},function(){return t.detachedRoot()},{})){var w={};m.forEach(function(e,t){w[i[t].name]=e}),d&&U.CROSS!==a?o[h]=w:(o.push(w),d=!0,h=n)}else if((a===U.LEFTOUTER||a===U.RIGHTOUTER)&&!d){var O={},_=c.fields.length-1;m.forEach(function(e,t){O[i[t].name]=t<=_?e:null}),d=!0,h=n,o.push(O)}})}),new on(o,i,{name:d})}function J(e,t){var n=""+e,r=""+t;return nr?1:0}function z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J;return e.length>1&&function e(t,n,r,a){if(r===n)return t;var i=n+Math.floor((r-n)/2);return e(t,n,i,a),e(t,i+1,r,a),function(e,t,n,r,a){for(var i=e,o=[],u=t;u<=r;u+=1)o[u]=i[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(i[l]=o[f],f+=1):f>r?(i[l]=o[c],c+=1):a(o[c],o[f])<=0?(i[l]=o[c],c+=1):(i[l]=o[f],f+=1)}(t,n,i,r,a),t}(e,0,e.length-1,t),e}var K=function K(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function W(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt?1:-1}:function(e,t){return(e=""+e)==(t=""+t)?0:e>t?-1:1}}return n}(e.type,n)}function q(e,t){var n=new Map,r=[];return e.forEach(function(e){var a=e[t];n.has(a)?r[n.get(a)][1].push(e):(r.push([a,[e]]),n.set(a,r.length-1))}),r}function Z(e,t,n){var r={label:e[0]};return t.reduce(function(t,r,a){return t[r]=e[1].map(function(e){return e[n[a].index]}),t},r),r}function $(e,t,n){for(var r=void 0,a=void 0,i=void 0,o=n.length-1;o>=0;o--)r=n[o][0],a=n[o][1],(i=Ht(t,r))&&("function"==typeof a?z(e,function(e,t){return a(e[i.index],t[i.index])}):E(a)?function(){var n=q(e,i.index),r=a[a.length-1],o=a.slice(0,a.length-1),u=o.map(function(e){return Ht(t,e)});n.forEach(function(e){e.push(Z(e,o,u))}),z(n,function(e,t){var n=e[2],a=t[2];return r(n,a)}),e.length=0,n.forEach(function(t){e.push.apply(e,W(t[1]))})}():function(){var t=X(i,a);z(e,function(e,n){return t(e[i.index],n[i.index])})}())}var Q,ee=function e(t,n,r,a){if(0===t.length)return n;var i=t[0],o=new Map;n.reduce(function(e,t){var n=t[i.index];return e.has(n)?e.get(n).push(t):e.set(n,[t]),e},o);var u=!0,c=!1,f=void 0;try{for(var l,s=o[Symbol.iterator]();!(u=(l=s.next()).done);u=!0){var d=l.value,p=K(d,2),h=p[0],v=p[1],m=e(t.slice(1),v,r,a);o.set(h,m),Array.isArray(m)&&$(m,r,a)}}catch(e){c=!0,f=e}finally{try{!u&&s.return&&s.return()}finally{if(c)throw f}}return o};function ne(e,t,n,r,a){var i={schema:[],data:[],uids:[]},o=(a=Object.assign({},{addUid:!1,columnWise:!1},a)).addUid,u=r&&r.length>0,c=[];if(n.split(",").forEach(function(t){for(var n=0;nn&&(n=a))}),[t,n]}}]),t}(),He=function(){function e(e,t){for(var n=0;n=i?c=!0:(r=e.charCodeAt(o++))===ut?f=!0:r===ct&&(f=!0,e.charCodeAt(o)===ut&&++o),e.slice(a+1,t-1).replace(/""/g,'"')}for(;o9999?"+"+st(t,6):st(t,4))+"-"+st(e.getUTCMonth()+1,2)+"-"+st(e.getUTCDate(),2)+(i?"T"+st(n,2)+":"+st(r,2)+":"+st(a,2)+"."+st(i,3)+"Z":a?"T"+st(n,2)+":"+st(r,2)+":"+st(a,2)+"Z":r||n?"T"+st(n,2)+":"+st(r,2)+"Z":"")}(e):t.test(e+="")?'"'+e.replace(/"/g,'""')+'"':e}return{parse:function parse(e,t){var n,a,i=r(e,function(e,r){if(n)return n(e,r-1);a=e,n=t?function(e,t){var n=ft(e);return function(r,a){return t(n(r),a,e)}}(e,t):ft(e)});return i.columns=a||[],i},parseRows:r,format:function format(t,n){return null==n&&(n=lt(t)),[n.map(o).join(e)].concat(a(t,n)).join("\n")},formatBody:function formatBody(e,t){return null==t&&(t=lt(e)),a(e,t).join("\n")},formatRows:function formatRows(e){return e.map(i).join("\n")}}},ht=pt(","),vt=(ht.parse,ht.parseRows,ht.format,ht.formatBody,ht.formatRows,pt("\t"));vt.parse,vt.parseRows,vt.format,vt.formatBody,vt.formatRows;var gt,mt=function mt(e,t,n){n=Object.assign({},{firstRowHeader:!0,fieldSeparator:","},n);var r=pt(n.fieldSeparator);return rt(r.parseRows(e),t,n)},yt=function yt(e,t){if(!Array.isArray(t))throw new Error("Schema missing or is in an unsupported format");var n={},r=0,a=void 0,i=[],o=v(i),u=t.map(function(e){return e.name});return e.forEach(function(e){var t=[];u.forEach(function(i){i in n?a=n[i]:(n[i]=r++,a=r-1),t[a]=e[i]}),o.apply(void 0,t)}),[Object.keys(n),i]},bt=function bt(e,t,n){var r={FlatJSON:yt,DSVStr:mt,DSVArr:rt},a=D(e);if(!a)throw new Error("Couldn't detect the data format");return r[a](e,t,n)},wt=function wt(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")};function Ot(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function _t(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t2&&void 0!==arguments[2]?arguments[2]:{},a=arguments[3];t===L.COMPOSE?(e._derivation.length=0,(n=e._derivation).push.apply(n,_t(a))):e._derivation.push({op:t,meta:r,criteria:a})})(t,n,arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},arguments[4]),function Dt(e,t){var n;(n=t._ancestorDerivation).push.apply(n,_t(e._ancestorDerivation).concat(_t(e._derivation)))}(e,t)},Nt=(Ot(gt={},l.NORMAL,{diffIndex:["rowDiffset"],calcDiff:[!0,!1]}),Ot(gt,l.INVERSE,{diffIndex:["rejectRowDiffset"],calcDiff:[!1,!0]}),Ot(gt,l.ALL,{diffIndex:["rowDiffset","rejectRowDiffset"],calcDiff:[!0,!0]}),gt),kt=function kt(e,t,n){if(-1!==n&&t===n+1){var r=e.length-1;e[r]=e[r].split("-")[0]+"-"+t}else e.push(""+t)},Tt=function Tt(e,t,n){var r=[],a=[],i=wt(Nt[n].calcDiff,2),o=i[0],u=i[1];return T(e,function(e){var n=t(e);n&&o&&kt(r,e,-1),!n&&u&&kt(a,e,-1)}),{rowDiffset:r.join(","),rejectRowDiffset:a.join(",")}},Ct=function Ct(e,t,n,r,a){var i={},o=function o(){return r.detachedRoot()},u=n.mode,c=e._rowDiffset,f=e.getPartialFieldspace().fields,l=f.map(function(e){return e.formattedData()}),s=f.map(function(e){return e.data()});return a(c,function(e){return t(Et(f,l,s,e),e,o,i)},u)},It=function It(e,t,n){for(var r=n(e,t,0),a=1,i=e.length;a2&&void 0!==arguments[2]?arguments[2]:{},r=[],a=n.operation||"and",i=n.filterByMeasure||!1,o=function Mt(e){var t=e.clone(!1),n=e.getPartialFieldspace();return t._colIdentifier=n.fields.map(function(e){return e.name()}).join(","),n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,t.__calculateFieldspace().calculateFieldsConfig(),t}(e),u=o.getFieldsConfig();return r=t.length?t.map(function(e){return n=void 0,r=(t=e).getData(),a=t.getFieldsConfig(),o=Object.keys(t.getFieldspace().getDimension()).filter(function(e){return e in u}),c=o.length,f=o.map(function(e){return a[e].index}),l=Object.keys(t.getFieldspace().getMeasure()).filter(function(e){return e in u}),s=t.getFieldspace().fieldsObj(),d=r.data,p=l.reduce(function(e,t){return e[t]=s[t].domain(),e},{}),h={},n=function n(e,t,_n){return t[e[_n]]},c&&d.forEach(function(e){var t=It(f,e,n);h[t]=1}),n=function n(e,t,_n2){return t[e[_n2]].internalValue},d.length?function(e){var t=!c||h[It(o,e,n)];return i?l.every(function(t){return e[t].internalValue>=p[t][0]&&e[t].internalValue<=p[t][1]})&&t:t}:function(){return!1};var t,n,r,a,o,c,f,l,s,d,p,h}):[function(){return!1}],"and"===a?o.select(function(e){return r.every(function(t){return t(e)})},{saveChild:!1}):o.select(function(e){return r.some(function(t){return t(e)})},{saveChild:!1})},xt=function xt(e,t,n,r,a){e._rowDiffset=t,e.__calculateFieldspace().calculateFieldsConfig(),Ft(n,e,L.SELECT,{config:r},a)},Lt=function Lt(e,t,n,r){var a=e.clone(n.saveChild),i=t;return n.mode===l.INVERSE&&(i=r.filter(function(e){return-1===t.indexOf(e)})),a._colIdentifier=i.join(","),a.__calculateFieldspace().calculateFieldsConfig(),Ft(e,a,L.PROJECT,{projField:t,config:n,actualProjField:i},null),a},Vt=function Vt(e){if((e=_({},e)).type||(e.type=f.DIMENSION),!e.subtype)switch(e.type){case f.MEASURE:e.subtype=c.CONTINUOUS;break;default:case f.DIMENSION:e.subtype=u.CATEGORICAL}return e},Bt=function Bt(e){return e.map(function(e){return function(e){var t=[c.CONTINUOUS],n=[u.CATEGORICAL,u.BINNED,u.TEMPORAL,u.GEO],r=e.type,a=e.subtype,i=e.name;switch(r){case f.DIMENSION:if(-1===n.indexOf(a))throw new Error("DataModel doesn't support dimension field subtype "+a+" used for "+i+" field");break;case f.MEASURE:if(-1===t.indexOf(a))throw new Error("DataModel doesn't support measure field subtype "+a+" used for "+i+" field");break;default:throw new Error("DataModel doesn't support field type "+r+" used for "+i+" field")}}(e=Vt(e)),e})},Yt=function Yt(e,t,n,r){n=Bt(n),r=Object.assign(Object.assign({},nt),r);var i=a[r.dataFormat];if(!i||"function"!=typeof i)throw new Error("No converter function found for "+r.dataFormat+" format");var u=i(t,n,r),c=wt(u,2),f=c[0],l=c[1];!function(e,t){n.forEach(function(e){var n=e.as;if(n){var r=t.indexOf(e.name);t[r]=n,e.name=n,delete e.as}})}(0,f);var s=tt(l,n,f),d=F.createNamespace(s,r.name);e._partialFieldspace=d,e._rowDiffset=l.length&&l[0].length?"0-"+(l[0].length-1):"";var p=[],h=d.fields,v=h.map(function(e){return e.data()}),m=h.map(function(e){return e.formattedData()});return T(e._rowDiffset,function(e){p[e]=Et(h,m,v,e)}),d._cachedValueObjects=p,e._colIdentifier=n.map(function(e){return e.name}).join(),e._dataFormat=r.dataFormat===o.AUTO?D(t):r.dataFormat,e},Ht=function Ht(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a.nonTraversingModel,o=a.excludeModels||[];t!==i&&((!o.length||-1===o.indexOf(t))&&t.handlePropagation(n,r),t._children.forEach(function(t){var i=Gt(n,t);e(t,i,r,a)}))},Xt=function Xt(e,t,n,r){var a=void 0,i=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}],a=[];else{var s,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),(a=v.filter(function(t){return t!==e}).map(function(e){return e.config.criteria})).length&&l.push({criteria:a,models:e.model,path:function Wt(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t}(e.model)}))})}a=(s=[]).concat.apply(s,[].concat(_t(p),[e])).filter(function(e){return null!==e}),l.push({criteria:a,excludeModels:[].concat(h,_t(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(i=Pt(g,a,{filterByMeasure:f}),Jt(g,i,y)),l.forEach(function(e){var t=Pt(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n1?(a=e.clone(r.saveChild),xt(a,u[c[1]],e,n,t),[o,a]):o}(this,e,t,{saveChild:t.saveChild})}},{key:"isEmpty",value:function value(){return!this._rowDiffset.length||!this._colIdentifier.length}},{key:"clone",value:function value(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=new this.constructor(this);return e?t.setParent(this):t.setParent(null),t}},{key:"project",value:function value(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),a=Object.keys(r),i=t.mode,o=$t(e,a,r);return i===l.ALL?[Lt(this,o,{mode:l.NORMAL,saveChild:t.saveChild},a),Lt(this,o,{mode:l.INVERSE,saveChild:t.saveChild},a)]:Lt(this,o,t,a)}},{key:"getFieldsConfig",value:function value(){return this._fieldConfig}},{key:"calculateFieldsConfig",value:function value(){return this._fieldConfig=this._fieldspace.fields.reduce(function(e,t,n){return e[t.name()]={index:n,def:t.schema()},e},{}),this}},{key:"dispose",value:function value(){this._parent&&this._parent.removeChild(this),this._parent=null,this._children.forEach(function(e){e._parent=null}),this._children=[]}},{key:"removeChild",value:function value(e){var t=this._children.findIndex(function(t){return t===e});-1===t||this._children.splice(t,1)}},{key:"setParent",value:function value(e){this._parent&&this._parent.removeChild(this),this._parent=e,e&&e._children.push(this)}},{key:"getParent",value:function value(){return this._parent}},{key:"getChildren",value:function value(){return this._children}},{key:"getDerivations",value:function value(){return this._derivation}},{key:"getAncestorDerivations",value:function value(){return this._ancestorDerivation}}]),e}(),nn=function nn(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},rn=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=function Ae(e,t,n,r){var a=function(e,t){var n=[],r=e.getFieldspace().getDimension();return Object.entries(r).forEach(function(e){var r=Ee(e,1)[0];t&&t.length?-1!==t.indexOf(r)&&n.push(r):n.push(r)}),n}(e,t),i=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={},r=e.getFieldspace().getMeasure(),a=_e.defaultReducer();return Object.keys(r).forEach(function(e){"string"!=typeof t[e]&&(t[e]=r[e].defAggFn());var i=_e.resolve(t[e]);i?n[e]=i:(n[e]=a,t[e]=ge)}),n}(e,n),o=e.getFieldspace(),u=o.fieldsObj(),c=o.name,l=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach(function(e){var t=Ee(e,2),n=t[0],r=t[1];if(-1!==a.indexOf(n)||i[n])switch(d.push(_({},r.schema())),r.schema().type){case f.MEASURE:s.push(n);break;default:case f.DIMENSION:l.push(n)}});var m=0;T(e._rowDiffset,function(e){var t="";l.forEach(function(n){t=t+"-"+u[n].partialField.data[e]}),void 0===p[t]?(p[t]=m,h.push({}),l.forEach(function(t){h[m][t]=u[t].partialField.data[e]}),s.forEach(function(t){h[m][t]=[u[t].partialField.data[e]]}),m+=1):s.forEach(function(n){h[p[t]][n].push(u[n].partialField.data[e])})});var y={},g=function g(){return e.detachedRoot()};return h.forEach(function(e){var t=e;s.forEach(function(n){t[n]=i[n](e[n],g,y)})}),r?(r.__calculateFieldspace(),v=r):v=new yn(h,d,{name:c}),v}.apply(void 0,[this,e,t]);return Ft(this,i,L.GROUPBY,{fieldsArr:e,groupByString:r,defaultReducer:_e.defaultReducer()},t),n.saveChild?i.setParent(this):i.setParent(null),i}},{key:"sort",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{saveChild:!1},n=this.getData({order:"row",sort:e}),a=[n.schema.map(function(e){return e.name})].concat(n.data),i=new this.constructor(a,n.schema,{dataFormat:"DSVArr"});return Ft(this,i,L.SORT,t,e),t.saveChild?i.setParent(this):i.setParent(null),i}},{key:"serialize",value:function value(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:","},t);var n=this.getFieldspace().fields,r=n.map(function(e){return e.formattedData()}),a=r[0].length,i=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(i=[],u=0;u=0&&(n.fields[o]=e)}else n.fields.push(e),r.forEach(function(t,n){t[e.name()]=new k(a[n],i[n],e)});return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function value(e,t,n){var r=this;e=Vt(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var a=this.getFieldsConfig(),i=t.slice(0,t.length-1),o=t[t.length-1];if(a[e.name]&&!n.replaceVar)throw new Error(e.name+" field already exists in datamodel");var u=i.map(function(e){var t=a[e];if(!t)throw new Error(e+" is not a valid column name.");return t.index}),c=this.clone(n.saveChild),f=c.getFieldspace().fields,l=u.map(function(e){return f[e]}),s={},d=function d(){return r.detachedRoot()},p=[];T(c._rowDiffset,function(e){var t=l.map(function(t){return t.partialField.data[e]});p[e]=o.apply(void 0,an(t).concat([e,d,s]))});var h=tt([p],[e],[e.name]),v=nn(h,1)[0];return c.addField(v),Ft(this,c,L.CAL_VAR,{config:e,fields:i},o),c}},{key:"propagate",value:function value(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=t.isMutableAction,i=t.sourceId,o=t.payload,u=function Kt(e){for(;e._parent;)e=e._parent;return e}(this),c=u._propagationNameSpace,l={groupByModel:function zt(e){for(;e._parent&&e._derivation.find(function(e){return e.op!==L.GROUPBY});)e=e._parent;return e}(this),model:u};return n&&function Zt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,a=t.isMutableAction,i=t.criteria,o=t.action+"-"+t.sourceId;r=a?e.mutableActions:e.immutableActions,null===i?delete r[o]:r[o]={model:n,config:t}}(c,t,this),Xt(e,l,{propagationNameSpace:c,sourceId:i},Object.assign({payload:o},t)),a&&function qt(e,t,n){var r=e.immutableActions;for(var a in r){var i=r[a].config,o=n.config.sourceId,u=!n.propConfig.filterImmutableAction||n.propConfig.filterImmutableAction(i,n.config);if(i.sourceId!==o&&u){var c=i.criteria;Xt(c,t,{propagationNameSpace:e,propagateToSource:!1,sourceId:o},i)}}}(c,l,{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,t){var n=this.getFieldsConfig();if(!n[e])throw new Error("Field "+e+" doesn't exist");var r=t.name||e+"_binned";if(n[r])throw new Error("Field "+r+" already exists");var a=function(e,t,n){var r=n.buckets,a=n.binsCount,i=n.binSize,o=n.start,u=n.end,f=function I(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}(e.domain(),2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var d=[],p=0;p=(i=e[a=n+Math.floor((r-n)/2)]).start&&t=i.end?n=a+1:t2&&void 0!==arguments[2]?arguments[2]:function(e){return e},r=arguments[3],a=r.saveChild,i=e.getFieldspace().fieldsObj(),o=Ct(e.clone(a),n,r,e,function(){for(var e=arguments.length,n=Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments[2],r={mode:l.NORMAL,saveChild:!0},a=this.getFieldsConfig(),i=Object.keys(a),o=[[t]];return n=Object.assign({},r,n),(e=e.length?e:[[]]).forEach(function(e,n){o[n]=$t([].concat(an(e),an(t)),i,a)}),function Ut(e,t,n,r){return t.map(function(t){return Lt(e,t,n,r)})}(this,o,n,i)}}],[{key:"configureInvalidAwareTypes",value:function value(e){return M.invalidAwareVals(e)}},{key:"Reducers",get:function get(){return _e}}]),t}(),un=ye.sum,cn=ye.avg,fn=ye.min,ln=ye.max,sn=ye.first,dn=ye.last,pn=ye.count,hn=ye.std,vn={compose:function compose(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0},r=e,a=void 0,i=[];return t.forEach(function(e){r=e(r),i.push.apply(i,function B(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t/gi),smartlabel},SmartLabelManager.store={},SmartLabelManager.prototype._calCharDimWithCache=function(text,calculateDifference,length){if(!this._init)return!1;var size,csArr,tw,twi,cachedStyle,asymmetricDifference,maxAdvancedCacheLimit=this.options.maxCacheLimit,container=this._container,style=this.style||{},cache=this._advancedCache||(this._advancedCache={}),advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]),cacheName=text+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||""),cacheInitName=text+"init"+(style.fontSize||"")+(style.fontFamily||"")+(style.fontWeight||"")+(style.fontStyle||"");return htmlSplCharSpace[text]&&(text=htmlSplCharSpace[text]),calculateDifference?void 0===(asymmetricDifference=cache[cacheInitName])&&(container.innerHTML=text.repeat?text.repeat(length):Array(length+1).join(text),tw=container.offsetWidth,container.innerHTML=text,twi=container.offsetWidth,asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1),advancedCacheKey.push(cacheInitName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()]):asymmetricDifference=0,(cachedStyle=cache[cacheName])?(csArr=cachedStyle.split(","),{width:parseFloat(csArr[0],10),height:parseFloat(csArr[1],10)}):(container.innerHTML=text,size={height:container.offsetHeight,width:container.offsetWidth+asymmetricDifference},cache[cacheName]=size.width+","+size.height,advancedCacheKey.push(cacheName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()],size)},SmartLabelManager.prototype._getWidthFn=function(){var contObj=this._containerObj,container=this._container,svgText=contObj.svgText;return svgText?function(str){var bbox,width;return svgText.textContent=str,(width=(bbox=svgText.getBBox()).width-SVG_BBOX_CORRECTION)<1&&(width=bbox.width),width}:function(str){return container.innerHTML=str,container.offsetWidth}},SmartLabelManager.prototype.setStyle=function(style){return this._init?style!==this.style||this._styleNotSet?(style||(style=this.style),slLib.setLineHeight(style),this.style=style,this._containerObj=sCont=this._containerManager.get(style),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,this):void 0:this;var sCont},SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){return this._init?(this._showNoEllipses=!useEllipses,this):this},SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag=!1,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?"":"...",lineHeight=this._lineHeight,context=this._context,container=this._container,sCont=this._containerObj,ellipsesWidth=sCont.ellipsesWidth,dotWidth=sCont.dotWidth,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,fastTrim=function fastTrim(str){for(var ws=/\s/,i=(str=str.replace(/^\s\s*/,"")).length;ws.test(str.charAt(i-=1)););return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:!1};if(getWidth=this._getWidthFn(),maxHeight===lineHeight&&(maxHeight*=1.2),container){if(!documentSupport.isBrowserLess){if((hasHTMLTag=slLib.xmlTagRegEx.test(text))?(container.innerHTML=text,smartLabel.oriTextWidth=oriWidth=container.offsetWidth,smartLabel.oriTextHeight=oriHeight=container.offsetHeight):(tmpText=text.replace(slLib.ltgtRegex,function(match){return"<"===match?"<":">"}),getOriSizeImproveObj=this.getOriSize(tmpText,!0),smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width,smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height),oriHeight<=maxHeight&&oriWidth<=maxWidth)return smartLabel.width=smartLabel.oriTextWidth=oriWidth,smartLabel.height=smartLabel.oriTextHeight=oriHeight,smartLabel;if(lineHeight>maxHeight)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=0,smartLabel.height=smartLabel.oriTextHeight=0,smartLabel}if(text=fastTrim(text).replace(/(\s+)/g," "),maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth,!hasHTMLTag){if(len=(oriTextArr=text.split("")).length,trimStr="",tempArr=[],tempChar=oriTextArr[0],this._cache[tempChar]?minWidth=this._cache[tempChar].width:(minWidth=getWidth(tempChar),this._cache[tempChar]={width:minWidth}),maxWidthWithEll>minWidth)i=(tempArr=text.substr(0,slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split("")).length;else{if(minWidth>maxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;ellipsesStr&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr=""))}if(strWidth=getWidth(tempArr.join("")),strHeight=this._lineHeight,noWrap){for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth))return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=getWidth(smartLabel.text),smartLabel.height=this._lineHeight,smartLabel;return smartLabel.text=tempArr.join(""),smartLabel.width=strWidth,smartLabel.height=this._lineHeight,smartLabel}for(;imaxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth)){if(lastSpace=text.substr(0,tempArr.length).lastIndexOf(" "),lastDash=text.substr(0,tempArr.length).lastIndexOf("-"),lastSpace>lastIndexBroken?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastSpace,1,"
"),lastIndexBroken=lastSpace,newCharIndex=lastSpace+1):lastDash>lastIndexBroken?(lastDash===tempArr.length-1?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"
-")):(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"-
")),lastIndexBroken=lastDash,newCharIndex=lastDash+1):(tempArr.splice(tempArr.length-1,1,"
"+oriTextArr[i]),lastLineBreak=tempArr.length-2,strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join("")),lastIndexBroken=lastLineBreak,newCharIndex=i),(strHeight+=this._lineHeight)>maxHeight)return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=maxWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel;maxStrWidth=max(maxStrWidth,strWidth),trimStr=null,nearestChar=slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this),strWidth=getWidth(text.substr(newCharIndex,nearestChar||1)),tempArr.length)/g,'$1'),container.innerHTML=text,x=0,y=(spanArr=container[documentSupport.childRetriverFn](documentSupport.childRetriverString)).length;xmaxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;if(minWidth>maxWidthWithEll&&!this._showNoEllipses&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr="")),initialLeft=characterArr[0].elem.offsetLeft,initialTop=characterArr[0].elem.offsetTop,noWrap)for(;imaxWidthWithEll&&(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),container.offsetWidth>maxWidth&&(removeFromIndex=i,i=len));else for(;imaxWidthWithEll?(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),elemRightMostPoint>maxWidth&&(lastSpace=characterArr[i].spaceIdx,lastDash=characterArr[i].dashIdx,lastSpace>lastIndexBroken?(characterArr[lastSpace].elem.innerHTML="
",lastIndexBroken=lastSpace):lastDash>lastIndexBroken?(characterArr[lastDash].elem.innerHTML=lastDash===i?"
-":"-
",lastIndexBroken=lastDash):elem.parentNode.insertBefore(lastBR=doc.createElement("br"),elem),elem.offsetHeight+elem.offsetTop>maxHeight?(lastBR?lastBR.parentNode.removeChild(lastBR):lastIndexBroken===lastDash?characterArr[lastDash].elem.innerHTML="-":characterArr[lastSpace].elem.innerHTML=" ",removeFromIndex=i,i=len):removeFromIndexForEllipses=null)):elemLowestPoint>maxHeight&&(removeFromIndex=i,i=len);if(removeFromIndex=removeFromIndexForEllipses;i-=1)(elem=characterArr[i].elem).parentNode.removeChild(elem);for(;i>=0;i-=1)elem=characterArr[i].elem,slLib.classNameBrReg.test(elem.className)?elem.parentNode.removeChild(elem):i=0}return smartLabel.text=container.innerHTML.replace(slLib.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),smartLabel.isTruncated&&(smartLabel.text+=ellipsesStr,smartLabel.tooltext=toolText),smartLabel.height=container.offsetHeight,smartLabel.width=container.offsetWidth,smartLabel}return smartLabel.error=new Error("Body Tag Missing!"),smartLabel},SmartLabelManager.prototype.getOriSize=function(text,detailedCalculationFlag){if(!this._init)return!1;var textArr,letter,lSize,i,l,cumulativeSize=0,height=0,indiSizeStore={};if(!detailedCalculationFlag)return this._calCharDimWithCache(text);for(i=0,l=(textArr=text.split("")).length;i]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+classNameWithTag+"[^\\>]{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 childRetriverFn,childRetriverString,noClassTesting;return doc.getElementsByClassName?(childRetriverFn="getElementsByClassName",childRetriverString=classNameWithTag,noClassTesting=!0):(childRetriverFn="getElementsByTagName",childRetriverString="span",noClassTesting=!1),{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(userAgent),isWebKit:new RegExp(" AppleWebKit/").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild)return containerParent.appendChild(container=doc.createElement("DIV")),container.className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),container}else if((body=doc.getElementsByTagName("body")[0])&&body.appendChild)return(container=doc.createElement("DIV")).className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),1,body.appendChild(container),container},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length)return 0;var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;if(difference=maxWidth,charLen=ceil(maxWidth/avgWidth),oriWidthtext.length&&(difference=maxWidth-oriWidth,charLen=text.length);difference>0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}for(;difference<0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}return charLen},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize=styleObj.fontSize||"12px";return styleObj.lineHeight=styleObj.lineHeight||styleObj["line-height"]||1.2*parseInt(fSize,10)+"px",styleObj}}}};exports.default=lib,module.exports=exports.default},function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(e,t){"object"==_typeof(exports)&&"object"==_typeof(module)?module.exports=t():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=t)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==_typeof(e)&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";r.r(t);var n=function(){function e(e,t){for(var r=0;r2?(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 value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"next",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(n,P(e)),o}},{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,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 value(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;i5?maxContainers:5)<20?maxContainers:20,this.maxContainers=maxContainers,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=parentContainer,isBrowserLess&&((svg=doc.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),svg.setAttributeNS("http://www.w3.org/2000/svg","height","0"),svg.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=svg,this.rootNode.appendChild(svg))}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr="";for(key in slLib.supportedStyle)void 0!==style[key]&&(keyStr+=slLib.supportedStyle[key]+":"+style[key]+";");if(!keyStr)return!1;if(containerObj=containers[keyStr])this.first!==containerObj&&(containerObj.prev&&(containerObj.prev.next=containerObj.next),containerObj.next&&(containerObj.next.prev=containerObj.prev),containerObj.next=this.first,containerObj.next.prev=containerObj,this.last===containerObj&&(this.last=containerObj.prev),containerObj.prev=null,this.first=containerObj);else{if(len>=max)for(diff=len-max+1;diff--;)this.removeContainer(this.last);containerObj=this.addContainer(keyStr)}return containerObj},ContainerManager.prototype.addContainer=function(keyStr){var node,container;return this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}},container.next=this.first,container.next&&(container.next.prev=container),this.first=container,this.last||(this.last=container),this.length+=1,node=container.node=doc.createElement("div"),this.rootNode.appendChild(node),documentSupport.isIE&&!documentSupport.hasSVG?node.style.setAttribute("cssText",keyStr):node.setAttribute("style",keyStr),node.setAttribute("aria-hidden","true"),node.setAttribute("role","presentation"),node.style.display="inline-block",node.innerHTML=slLib.testStrAvg,container.lineHeight=node.offsetHeight,container.avgCharWidth=node.offsetWidth/3,documentSupport.isBrowserLess?((node=container.svgText=doc.createElementNS("http://www.w3.org/2000/svg","text")).setAttribute("style",keyStr),this.svgRoot.appendChild(node),node.textContent=slLib.testStrAvg,container.lineHeight=node.getBBox().height,container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3,node.textContent="...",container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION,node.textContent=".",container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION):(node.innerHTML="...",container.ellipsesWidth=node.offsetWidth,node.innerHTML=".",container.dotWidth=node.offsetWidth,node.innerHTML=""),container},ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;keyStr&&this.length&&cObj&&(this.length-=1,cObj.prev&&(cObj.prev.next=cObj.next),cObj.next&&(cObj.next.prev=cObj.prev),this.first===cObj&&(this.first=cObj.next),this.last===cObj&&(this.last=cObj.prev),cObj.node.parentNode.removeChild(cObj.node),delete this.containers[keyStr])},ContainerManager.prototype.dispose=function(){var key,containers=this.containers;for(key in this.maxContainers=null,containers)this.removeContainer(containers[key]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null},module.exports=ContainerManager},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,exports,__webpack_require__){},function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var scales_namespaceObject={};__webpack_require__.r(scales_namespaceObject),__webpack_require__.d(scales_namespaceObject,"scaleLinear",function(){return linear_linear}),__webpack_require__.d(scales_namespaceObject,"scaleThreshold",function(){return threshold_threshold}),__webpack_require__.d(scales_namespaceObject,"scaleLog",function(){return log}),__webpack_require__.d(scales_namespaceObject,"scalePow",function(){return pow}),__webpack_require__.d(scales_namespaceObject,"scaleIdentity",function(){return identity_identity}),__webpack_require__.d(scales_namespaceObject,"scaleOrdinal",function(){return ordinal}),__webpack_require__.d(scales_namespaceObject,"scaleSequential",function(){return sequential}),__webpack_require__.d(scales_namespaceObject,"scaleQuantize",function(){return quantize_quantize}),__webpack_require__.d(scales_namespaceObject,"scaleQuantile",function(){return quantile_quantile}),__webpack_require__.d(scales_namespaceObject,"schemeCategory10",function(){return category10}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20",function(){return category20}),__webpack_require__.d(scales_namespaceObject,"schemeCategory20b",function(){return category20b}),__webpack_require__.d(scales_namespaceObject,"scaleBand",function(){return band}),__webpack_require__.d(scales_namespaceObject,"scaleTime",function(){return src_time});var color_schemes_namespaceObject={};__webpack_require__.r(color_schemes_namespaceObject),__webpack_require__.d(color_schemes_namespaceObject,"schemeDark2",function(){return Dark2}),__webpack_require__.d(color_schemes_namespaceObject,"schemePaired",function(){return Paired}),__webpack_require__.d(color_schemes_namespaceObject,"schemeAccent",function(){return Accent}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel1",function(){return Pastel1}),__webpack_require__.d(color_schemes_namespaceObject,"schemePastel2",function(){return Pastel2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet1",function(){return Set1}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet2",function(){return Set2}),__webpack_require__.d(color_schemes_namespaceObject,"schemeSet3",function(){return Set3}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBlues",function(){return Blues_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemeBrBG",function(){return BrBG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePRGn",function(){return PRGn_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"schemePiYG",function(){return PiYG_scheme}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBrBG",function(){return BrBG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePRGn",function(){return PRGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePiYG",function(){return PiYG}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuOr",function(){return PuOr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdBu",function(){return RdBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdGy",function(){return RdGy}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlBu",function(){return RdYlBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdYlGn",function(){return RdYlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateSpectral",function(){return Spectral}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBlues",function(){return Blues}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreens",function(){return Greens}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGreys",function(){return Greys}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOranges",function(){return Oranges}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePurples",function(){return Purples}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateReds",function(){return Reds}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateViridis",function(){return sequential_multi_viridis}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateInferno",function(){return viridis_inferno}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateMagma",function(){return viridis_magma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePlasma",function(){return viridis_plasma}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateWarm",function(){return rainbow_warm}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCool",function(){return rainbow_cool}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateCubehelixDefault",function(){return sequential_multi_cubehelix}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuGn",function(){return BuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateBuPu",function(){return BuPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateGnBu",function(){return GnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateOrRd",function(){return OrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBuGn",function(){return PuBuGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuBu",function(){return PuBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolatePuRd",function(){return PuRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRdPu",function(){return RdPu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGnBu",function(){return YlGnBu}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlGn",function(){return YlGn}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrBr",function(){return YlOrBr}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateYlOrRd",function(){return YlOrRd}),__webpack_require__.d(color_schemes_namespaceObject,"interpolateRainbow",function(){return sequential_multi_rainbow});var namespace_namespaceObject={};__webpack_require__.r(namespace_namespaceObject),__webpack_require__.d(namespace_namespaceObject,"UNIT_GLOBAL_NAMESPACE",function(){return UNIT_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"UNIT_LOCAL_NAMESPACE",function(){return UNIT_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_LOCAL_NAMESPACE",function(){return LAYER_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"LAYER_GLOBAL_NAMESPACE",function(){return LAYER_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_GLOBAL_NAMESPACE",function(){return GROUP_GLOBAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"GROUP_LOCAL_NAMESPACE",function(){return GROUP_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_LOCAL_NAMESPACE",function(){return CANVAS_LOCAL_NAMESPACE}),__webpack_require__.d(namespace_namespaceObject,"CANVAS_GLOBAL_NAMESPACE",function(){return CANVAS_GLOBAL_NAMESPACE});var actions_namespaceObject={};__webpack_require__.r(actions_namespaceObject),__webpack_require__.d(actions_namespaceObject,"DRAG",function(){return DRAG}),__webpack_require__.d(actions_namespaceObject,"HOVER",function(){return HOVER}),__webpack_require__.d(actions_namespaceObject,"SELECTIONDRAG",function(){return SELECTIONDRAG}),__webpack_require__.d(actions_namespaceObject,"CLICK",function(){return CLICK}),__webpack_require__.d(actions_namespaceObject,"LONGTOUCH",function(){return LONGTOUCH}),__webpack_require__.d(actions_namespaceObject,"TOUCHDRAG",function(){return TOUCHDRAG}),__webpack_require__.d(actions_namespaceObject,"ALL_ACTIONS",function(){return ALL_ACTIONS});var enums_selection_namespaceObject={};__webpack_require__.r(enums_selection_namespaceObject),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_ENTRY",function(){return SELECTION_NEW_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NEW_EXIT",function(){return SELECTION_NEW_EXIT}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_NULL",function(){return SELECTION_NULL}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_ENTRY",function(){return SELECTION_OLD_ENTRY}),__webpack_require__.d(enums_selection_namespaceObject,"SELECTION_OLD_EXIT",function(){return SELECTION_OLD_EXIT});var behaviours_namespaceObject={};__webpack_require__.r(behaviours_namespaceObject),__webpack_require__.d(behaviours_namespaceObject,"BRUSH",function(){return BRUSH}),__webpack_require__.d(behaviours_namespaceObject,"HIGHLIGHT",function(){return HIGHLIGHT}),__webpack_require__.d(behaviours_namespaceObject,"TOOLTIP",function(){return behaviours_TOOLTIP}),__webpack_require__.d(behaviours_namespaceObject,"FILTER",function(){return FILTER}),__webpack_require__.d(behaviours_namespaceObject,"SELECT",function(){return SELECT});var behavioural_namespaceObject={};__webpack_require__.r(behavioural_namespaceObject),__webpack_require__.d(behavioural_namespaceObject,"HighlightBeahviour",function(){return highlight_HighlightBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"BrushBehaviour",function(){return brush_BrushBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"FilterBehaviour",function(){return filter_FilterBehaviour}),__webpack_require__.d(behavioural_namespaceObject,"SelectBehaviour",function(){return select_SelectBehaviour});var side_effects_namespaceObject={};__webpack_require__.r(side_effects_namespaceObject),__webpack_require__.d(side_effects_namespaceObject,"ANCHORS",function(){return side_effects_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"BRUSH_ANCHORS",function(){return side_effects_BRUSH_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"PERSISTENT_ANCHORS",function(){return side_effects_PERSISTENT_ANCHORS}),__webpack_require__.d(side_effects_namespaceObject,"FILTER",function(){return side_effects_FILTER}),__webpack_require__.d(side_effects_namespaceObject,"HIGHLIGHTER",function(){return side_effects_HIGHLIGHTER}),__webpack_require__.d(side_effects_namespaceObject,"CROSSLINE",function(){return CROSSLINE}),__webpack_require__.d(side_effects_namespaceObject,"TOOLTIP",function(){return side_effects_TOOLTIP});var src_side_effects_namespaceObject={};__webpack_require__.r(src_side_effects_namespaceObject),__webpack_require__.d(src_side_effects_namespaceObject,"SelectionBox",function(){return selection_box}),__webpack_require__.d(src_side_effects_namespaceObject,"Tooltip",function(){return side_effects_tooltip_Tooltip}),__webpack_require__.d(src_side_effects_namespaceObject,"Crossline",function(){return crossline_Crossline}),__webpack_require__.d(src_side_effects_namespaceObject,"PlotHighlighter",function(){return plot_highlighter_PlotHighlighter}),__webpack_require__.d(src_side_effects_namespaceObject,"FilterEffect",function(){return FilterEffect}),__webpack_require__.d(src_side_effects_namespaceObject,"PersistentAnchors",function(){return persistent_anchors_PersistentAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"BrushAnchors",function(){return brush_anchors_BrushAnchors}),__webpack_require__.d(src_side_effects_namespaceObject,"AnchorEffect",function(){return anchors_AnchorEffect});var axis_orientation_namespaceObject={};__webpack_require__.r(axis_orientation_namespaceObject),__webpack_require__.d(axis_orientation_namespaceObject,"BOTTOM",function(){return axis_orientation_BOTTOM}),__webpack_require__.d(axis_orientation_namespaceObject,"TOP",function(){return axis_orientation_TOP}),__webpack_require__.d(axis_orientation_namespaceObject,"LEFT",function(){return axis_orientation_LEFT}),__webpack_require__.d(axis_orientation_namespaceObject,"RIGHT",function(){return axis_orientation_RIGHT}),__webpack_require__.d(axis_orientation_namespaceObject,"axisOrientationMap",function(){return axisOrientationMap});var scale_type_namespaceObject={};__webpack_require__.r(scale_type_namespaceObject),__webpack_require__.d(scale_type_namespaceObject,"LINEAR",function(){return LINEAR}),__webpack_require__.d(scale_type_namespaceObject,"BAND",function(){return BAND}),__webpack_require__.d(scale_type_namespaceObject,"TIME",function(){return TIME}),__webpack_require__.d(scale_type_namespaceObject,"COLOR",function(){return scale_type_COLOR}),__webpack_require__.d(scale_type_namespaceObject,"ORDINAL",function(){return ORDINAL}),__webpack_require__.d(scale_type_namespaceObject,"QUANTIZE",function(){return QUANTIZE}),__webpack_require__.d(scale_type_namespaceObject,"QUANTILE",function(){return QUANTILE}),__webpack_require__.d(scale_type_namespaceObject,"LOG",function(){return LOG}),__webpack_require__.d(scale_type_namespaceObject,"POW",function(){return POW}),__webpack_require__.d(scale_type_namespaceObject,"IDENTITY",function(){return scale_type_IDENTITY}),__webpack_require__.d(scale_type_namespaceObject,"SEQUENTIAL",function(){return SEQUENTIAL}),__webpack_require__.d(scale_type_namespaceObject,"THRESHOLD",function(){return THRESHOLD});var layer_types_namespaceObject={};__webpack_require__.r(layer_types_namespaceObject),__webpack_require__.d(layer_types_namespaceObject,"AREA_LAYER",function(){return layer_types_AREA_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"ARC_LAYER",function(){return layer_types_ARC_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"LINE_LAYER",function(){return layer_types_LINE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TEXT_LAYER",function(){return layer_types_TEXT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"POINT_LAYER",function(){return layer_types_POINT_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BAR_LAYER",function(){return layer_types_BAR_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"TICK_LAYER",function(){return layer_types_TICK_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"SIMPLE_LAYER",function(){return layer_types_SIMPLE_LAYER}),__webpack_require__.d(layer_types_namespaceObject,"BASE_LAYER",function(){return layer_types_BASE_LAYER});var firebolt_behavioural_namespaceObject={};__webpack_require__.r(firebolt_behavioural_namespaceObject),__webpack_require__.d(firebolt_behavioural_namespaceObject,"SelectBehaviour",function(){return behavioural_select_SelectBehaviour});var firebolt_side_effects_namespaceObject={};__webpack_require__.r(firebolt_side_effects_namespaceObject),__webpack_require__.d(firebolt_side_effects_namespaceObject,"SelectionBox",function(){return side_effects_selection_box}),__webpack_require__.d(firebolt_side_effects_namespaceObject,"LegendHighlighter",function(){return legend_highlighter_LegendHighlighter});var operators_namespaceObject={};__webpack_require__.r(operators_namespaceObject),__webpack_require__.d(operators_namespaceObject,"share",function(){return operators_share}),__webpack_require__.d(operators_namespaceObject,"html",function(){return operators_html});var dist_datamodel=__webpack_require__(0),datamodel_default=__webpack_require__.n(dist_datamodel),ascending=function(a,b){return ab?1:a>=b?0:NaN},bisector=function(compare){return 1===compare.length&&(compare=function ascendingComparator(f){return function(d,x){return ascending(f(d),x)}}(compare)),{left:function left(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)<0?lo=mid+1:hi=mid}return lo},right:function right(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)>0?hi=mid:lo=mid+1}return lo}}};var ascendingBisect=bisector(ascending),bisectRight=ascendingBisect.right,bisect=(ascendingBisect.left,bisectRight);var number=function(x){return null===x?NaN:+x},array_array=Array.prototype,src_range=(array_array.slice,array_array.map,function(start,stop,step){start=+start,stop=+stop,step=(n=arguments.length)<2?(stop=start,start=0,1):n<3?1:+step;for(var i=-1,n=0|Math.max(0,Math.ceil((stop-start)/step)),range=new Array(n);++i0)return[start];if((reverse=stop0)for(start=Math.ceil(start/step),stop=Math.floor(stop/step),ticks=new Array(n=Math.ceil(stop-start+1));++i=0?(error>=e10?10:error>=e5?5:error>=e2?2:1)*Math.pow(10,power):-Math.pow(10,-power)/(error>=e10?10:error>=e5?5:error>=e2?2:1)}function tickStep(start,stop,count){var step0=Math.abs(stop-start)/Math.max(0,count),step1=Math.pow(10,Math.floor(Math.log(step0)/Math.LN10)),error=step0/step1;return error>=e10?step1*=10:error>=e5?step1*=5:error>=e2&&(step1*=2),stop=1)return+valueof(values[n-1],n-1,values);var n,i=(n-1)*p,i0=Math.floor(i),value0=+valueof(values[i0],i0,values);return value0+(+valueof(values[i0+1],i0+1,values)-value0)*(i-i0)}};function map_Map(){}function map_map(object,f){var map=new map_Map;if(object instanceof map_Map)object.each(function(value,key){map.set(key,value)});else if(Array.isArray(object)){var o,i=-1,n=object.length;if(null==f)for(;++i=keys.length)return null!=_sortValues&&array.sort(_sortValues),null!=_rollup?_rollup(array):array;for(var keyValue,value,values,i=-1,n=array.length,key=keys[depth++],valuesByKey=src_map(),result=createResult();++ikeys.length)return map;var array,sortKey=_sortKeys[depth-1];return null!=_rollup&&depth>=keys.length?array=map.entries():(array=[],map.each(function(v,k){array.push({key:k,values:_entries(v,depth)})})),null!=sortKey?array.sort(function(a,b){return sortKey(a.key,b.key)}):array}(apply(array,0,createMap,setMap),0)},key:function key(d){return keys.push(d),nest},sortKeys:function sortKeys(order){return _sortKeys[keys.length-1]=order,nest},sortValues:function sortValues(order){return _sortValues=order,nest},rollup:function rollup(f){return _rollup=f,nest}}};function createObject(){return{}}function setObject(object,key,value){object[key]=value}function createMap(){return src_map()}function setMap(map,key,value){map.set(key,value)}function set_Set(){}var proto=src_map.prototype;function set_set(object,f){var set=new set_Set;if(object instanceof set_Set)object.each(function(value){set.add(value)});else if(object){var i=-1,n=object.length;if(null==f)for(;++i1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo)),hiIndex=getClosestIndexOf(values,hi),b=lo===hi?a:Math.max(a,hiIndex-1),reverse&&(t=a,a=n-b,b=n-t),a>b?void 0:domain().slice(a,b+1)},scale.invert=function(r0,r1){var a,t,lo=+r0,hi=arguments.length>1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo,"left")),domain()[reverse?n-a:a]},rescale()}function getClosestIndexOf(arr,value,side){for(var highVal,mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1:high}var define=function(constructor,factory,prototype){constructor.prototype=factory.prototype=prototype,prototype.constructor=constructor};function extend(parent,definition){var prototype=Object.create(parent.prototype);for(var key in definition)prototype[key]=definition[key];return prototype}function Color(){}var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex3=/^#([0-9a-f]{3})$/,reHex6=/^#([0-9a-f]{6})$/,reRgbInteger=new RegExp("^rgb\\("+[reI,reI,reI]+"\\)$"),reRgbPercent=new RegExp("^rgb\\("+[reP,reP,reP]+"\\)$"),reRgbaInteger=new RegExp("^rgba\\("+[reI,reI,reI,reN]+"\\)$"),reRgbaPercent=new RegExp("^rgba\\("+[reP,reP,reP,reN]+"\\)$"),reHslPercent=new RegExp("^hsl\\("+[reN,reP,reP]+"\\)$"),reHslaPercent=new RegExp("^hsla\\("+[reN,reP,reP,reN]+"\\)$"),named={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_formatHex(){return this.rgb().formatHex()}function color_formatRgb(){return this.rgb().formatRgb()}function color_color(format){var m;return format=(format+"").trim().toLowerCase(),(m=reHex3.exec(format))?new Rgb((m=parseInt(m[1],16))>>8&15|m>>4&240,m>>4&15|240&m,(15&m)<<4|15&m,1):(m=reHex6.exec(format))?rgbn(parseInt(m[1],16)):(m=reRgbInteger.exec(format))?new Rgb(m[1],m[2],m[3],1):(m=reRgbPercent.exec(format))?new Rgb(255*m[1]/100,255*m[2]/100,255*m[3]/100,1):(m=reRgbaInteger.exec(format))?rgba(m[1],m[2],m[3],m[4]):(m=reRgbaPercent.exec(format))?rgba(255*m[1]/100,255*m[2]/100,255*m[3]/100,m[4]):(m=reHslPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,1):(m=reHslaPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,m[4]):named.hasOwnProperty(format)?rgbn(named[format]):"transparent"===format?new Rgb(NaN,NaN,NaN,0):null}function rgbn(n){return new Rgb(n>>16&255,n>>8&255,255&n,1)}function rgba(r,g,b,a){return a<=0&&(r=g=b=NaN),new Rgb(r,g,b,a)}function rgbConvert(o){return o instanceof Color||(o=color_color(o)),o?new Rgb((o=o.rgb()).r,o.g,o.b,o.opacity):new Rgb}function color_rgb(r,g,b,opacity){return 1===arguments.length?rgbConvert(r):new Rgb(r,g,b,null==opacity?1:opacity)}function Rgb(r,g,b,opacity){this.r=+r,this.g=+g,this.b=+b,this.opacity=+opacity}function rgb_formatHex(){return"#"+hex(this.r)+hex(this.g)+hex(this.b)}function rgb_formatRgb(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"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===a?")":", "+a+")")}function hex(value){return((value=Math.max(0,Math.min(255,Math.round(value)||0)))<16?"0":"")+value.toString(16)}function hsla(h,s,l,a){return a<=0?h=s=l=NaN:l<=0||l>=1?h=s=NaN:s<=0&&(h=NaN),new Hsl(h,s,l,a)}function hslConvert(o){if(o instanceof Hsl)return new Hsl(o.h,o.s,o.l,o.opacity);if(o instanceof Color||(o=color_color(o)),!o)return new Hsl;if(o instanceof Hsl)return o;var r=(o=o.rgb()).r/255,g=o.g/255,b=o.b/255,min=Math.min(r,g,b),max=Math.max(r,g,b),h=NaN,s=max-min,l=(max+min)/2;return s?(h=r===max?(g-b)/s+6*(g0&&l<1?0:h,new Hsl(h,s,l,o.opacity)}function hsl(h,s,l,opacity){return 1===arguments.length?hslConvert(h):new Hsl(h,s,l,null==opacity?1:opacity)}function Hsl(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function hsl2rgb(h,m1,m2){return 255*(h<60?m1+(m2-m1)*h/60:h<180?m2:h<240?m1+(m2-m1)*(240-h)/60:m1)}define(Color,color_color,{copy:function copy(channels){return Object.assign(new this.constructor,this,channels)},displayable:function displayable(){return this.rgb().displayable()},hex:color_formatHex,formatHex:color_formatHex,formatHsl:function color_formatHsl(){return hslConvert(this).formatHsl()},formatRgb:color_formatRgb,toString:color_formatRgb}),define(Rgb,color_rgb,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},rgb:function rgb(){return this},displayable:function displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:rgb_formatHex,formatHex:rgb_formatHex,formatRgb:rgb_formatRgb,toString:rgb_formatRgb})),define(Hsl,hsl,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=this.h%360+360*(this.h<0),s=isNaN(h)||isNaN(this.s)?0:this.s,l=this.l,m2=l+(l<.5?l:1-l)*s,m1=2*l-m2;return new Rgb(hsl2rgb(h>=240?h-240:h+120,m1,m2),hsl2rgb(h,m1,m2),hsl2rgb(h<120?h+240:h-120,m1,m2),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},formatHsl:function formatHsl(){var a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===a?")":", "+a+")")}}));var deg2rad=Math.PI/180,rad2deg=180/Math.PI,Xn=.96422,Yn=1,Zn=.82521,lab_t0=4/29,lab_t1=6/29,t2=3*lab_t1*lab_t1,t3=lab_t1*lab_t1*lab_t1;function labConvert(o){if(o instanceof Lab)return new Lab(o.l,o.a,o.b,o.opacity);if(o instanceof Hcl)return hcl2lab(o);o instanceof Rgb||(o=rgbConvert(o));var x,z,r=rgb2lrgb(o.r),g=rgb2lrgb(o.g),b=rgb2lrgb(o.b),y=xyz2lab((.2225045*r+.7168786*g+.0606169*b)/Yn);return r===g&&g===b?x=z=y:(x=xyz2lab((.4360747*r+.3850649*g+.1430804*b)/Xn),z=xyz2lab((.0139322*r+.0971045*g+.7141733*b)/Zn)),new Lab(116*y-16,500*(x-y),200*(y-z),o.opacity)}function lab(l,a,b,opacity){return 1===arguments.length?labConvert(l):new Lab(l,a,b,null==opacity?1:opacity)}function Lab(l,a,b,opacity){this.l=+l,this.a=+a,this.b=+b,this.opacity=+opacity}function xyz2lab(t){return t>t3?Math.pow(t,1/3):t/t2+lab_t0}function lab2xyz(t){return t>lab_t1?t*t*t:t2*(t-lab_t0)}function lrgb2rgb(x){return 255*(x<=.0031308?12.92*x:1.055*Math.pow(x,1/2.4)-.055)}function rgb2lrgb(x){return(x/=255)<=.04045?x/12.92:Math.pow((x+.055)/1.055,2.4)}function hclConvert(o){if(o instanceof Hcl)return new Hcl(o.h,o.c,o.l,o.opacity);if(o instanceof Lab||(o=labConvert(o)),0===o.a&&0===o.b)return new Hcl(NaN,0180||d<-180?d-360*Math.round(d/360):d):src_constant(isNaN(a)?b:a)}function gamma(y){return 1==(y=+y)?nogamma:function(a,b){return b-a?function exponential(a,b,y){return a=Math.pow(a,y),b=Math.pow(b,y)-a,y=1/y,function(t){return Math.pow(a+t*b,y)}}(a,b,y):src_constant(isNaN(a)?b:a)}}function nogamma(a,b){var d=b-a;return d?linear(a,d):src_constant(isNaN(a)?b:a)}var src_rgb=function rgbGamma(y){var color=gamma(y);function rgb(start,end){var r=color((start=color_rgb(start)).r,(end=color_rgb(end)).r),g=color(start.g,end.g),b=color(start.b,end.b),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.r=r(t),start.g=g(t),start.b=b(t),start.opacity=opacity(t),start+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(spline){return function(colors){var i,color,n=colors.length,r=new Array(n),g=new Array(n),b=new Array(n);for(i=0;i=1?(t=1,n-1):Math.floor(t*n),v1=values[i],v2=values[i+1],v0=i>0?values[i-1]:2*v1-v2,v3=ibi&&(bs=b.slice(bi,bs),s[i]?s[i]+=bs:s[++i]=bs),(am=am[0])===(bm=bm[0])?s[i]?s[i]+=bm:s[++i]=bm:(s[++i]=null,q.push({i:i,x:src_number(am,bm)})),bi=reB.lastIndex;return bi180?b+=360:b-a>180&&(a+=360),q.push({i:s.push(pop(s)+"rotate(",null,degParen)-2,x:src_number(a,b)})):b&&s.push(pop(s)+"rotate("+b+degParen)}(a.rotate,b.rotate,s,q),function skewX(a,b,s,q){a!==b?q.push({i:s.push(pop(s)+"skewX(",null,degParen)-2,x:src_number(a,b)}):b&&s.push(pop(s)+"skewX("+b+degParen)}(a.skewX,b.skewX,s,q),function scale(xa,ya,xb,yb,s,q){if(xa!==xb||ya!==yb){var i=s.push(pop(s)+"scale(",null,",",null,")");q.push({i:i-4,x:src_number(xa,xb)},{i:i-2,x:src_number(ya,yb)})}else 1===xb&&1===yb||s.push(pop(s)+"scale("+xb+","+yb+")")}(a.scaleX,a.scaleY,b.scaleX,b.scaleY,s,q),a=b=null,function(t){for(var o,i=-1,n=q.length;++i2?polymap:bimap,output=input=null,scale}function scale(x){return(output||(output=piecewise(domain,range,clamp?function deinterpolateClamp(deinterpolate){return function(a,b){var d=deinterpolate(a=+a,b=+b);return function(x){return x<=a?0:x>=b?1:d(x)}}}(deinterpolate):deinterpolate,interpolate)))(+x)}return scale.invert=function(y){return(input||(input=piecewise(range,domain,deinterpolateLinear,clamp?function reinterpolateClamp(reinterpolate){return function(a,b){var r=reinterpolate(a=+a,b=+b);return function(t){return t<=0?a:t>=1?b:r(t)}}}(reinterpolate):reinterpolate)))(+y)},scale.domain=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),rescale()):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),rescale()):range.slice()},scale.rangeRound=function(_){return range=array_slice.call(_),interpolate=src_round,rescale()},scale.clamp=function(_){return arguments.length?(clamp=!!_,rescale()):clamp},scale.interpolate=function(_){return arguments.length?(interpolate=_,rescale()):interpolate},rescale()}var formatDecimal=function(x,p){if((i=(x=p?x.toExponential(p-1):x.toExponential()).indexOf("e"))<0)return null;var i,coefficient=x.slice(0,i);return[coefficient.length>1?coefficient[0]+coefficient.slice(2):coefficient,+x.slice(i+1)]},src_exponent=function(x){return(x=formatDecimal(Math.abs(x)))?x[1]:NaN},re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(specifier){if(!(match=re.exec(specifier)))throw new Error("invalid format: "+specifier);var match;return new FormatSpecifier({fill:match[1],align:match[2],sign:match[3],symbol:match[4],zero:match[5],width:match[6],comma:match[7],precision:match[8]&&match[8].slice(1),trim:match[9],type:match[10]})}function FormatSpecifier(specifier){this.fill=void 0===specifier.fill?" ":specifier.fill+"",this.align=void 0===specifier.align?">":specifier.align+"",this.sign=void 0===specifier.sign?"-":specifier.sign+"",this.symbol=void 0===specifier.symbol?"":specifier.symbol+"",this.zero=!!specifier.zero,this.width=void 0===specifier.width?void 0:+specifier.width,this.comma=!!specifier.comma,this.precision=void 0===specifier.precision?void 0:+specifier.precision,this.trim=!!specifier.trim,this.type=void 0===specifier.type?"":specifier.type+""}formatSpecifier.prototype=FormatSpecifier.prototype,FormatSpecifier.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var prefixExponent,defaultLocale_locale,defaultLocale_format,defaultLocale_formatPrefix,formatTrim=function(s){out:for(var i1,n=s.length,i=1,i0=-1;i0){if(!+s[i])break out;i0=0}}return i0>0?s.slice(0,i0)+s.slice(i1+1):s},formatRounded=function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1];return exponent<0?"0."+new Array(-exponent).join("0")+coefficient:coefficient.length>exponent+1?coefficient.slice(0,exponent+1)+"."+coefficient.slice(exponent+1):coefficient+new Array(exponent-coefficient.length+2).join("0")},formatTypes={"%":function _(x,p){return(100*x).toFixed(p)},b:function b(x){return Math.round(x).toString(2)},c:function c(x){return x+""},d:function d(x){return Math.round(x).toString(10)},e:function e(x,p){return x.toExponential(p)},f:function f(x,p){return x.toFixed(p)},g:function g(x,p){return x.toPrecision(p)},o:function o(x){return Math.round(x).toString(8)},p:function p(x,_p){return formatRounded(100*x,_p)},r:formatRounded,s:function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1],i=exponent-(prefixExponent=3*Math.max(-8,Math.min(8,Math.floor(exponent/3))))+1,n=coefficient.length;return i===n?coefficient:i>n?coefficient+new Array(i-n+1).join("0"):i>0?coefficient.slice(0,i)+"."+coefficient.slice(i):"0."+new Array(1-i).join("0")+formatDecimal(x,Math.max(0,p+i-1))[0]},X:function X(x){return Math.round(x).toString(16).toUpperCase()},x:function x(_x){return Math.round(_x).toString(16)}},src_identity=function(x){return x},locale_map=Array.prototype.map,prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],src_locale=function(locale){var group=void 0===locale.grouping||void 0===locale.thousands?src_identity:function(grouping,thousands){return function(value,width){for(var i=value.length,t=[],j=0,g=grouping[0],length=0;i>0&&g>0&&(length+g+1>width&&(g=Math.max(1,width-length)),t.push(value.substring(i-=g,i+g)),!((length+=g+1)>width));)g=grouping[j=(j+1)%grouping.length];return t.reverse().join(thousands)}}(locale_map.call(locale.grouping,Number),locale.thousands+""),currencyPrefix=void 0===locale.currency?"":locale.currency[0]+"",currencySuffix=void 0===locale.currency?"":locale.currency[1]+"",decimal=void 0===locale.decimal?".":locale.decimal+"",numerals=void 0===locale.numerals?src_identity:function(numerals){return function(value){return value.replace(/[0-9]/g,function(i){return numerals[+i]})}}(locale_map.call(locale.numerals,String)),percent=void 0===locale.percent?"%":locale.percent+"",minus=void 0===locale.minus?"-":locale.minus+"",nan=void 0===locale.nan?"NaN":locale.nan+"";function newFormat(specifier){var fill=(specifier=formatSpecifier(specifier)).fill,align=specifier.align,sign=specifier.sign,symbol=specifier.symbol,zero=specifier.zero,width=specifier.width,comma=specifier.comma,precision=specifier.precision,trim=specifier.trim,type=specifier.type;"n"===type?(comma=!0,type="g"):formatTypes[type]||(void 0===precision&&(precision=12),trim=!0,type="g"),(zero||"0"===fill&&"="===align)&&(zero=!0,fill="0",align="=");var prefix="$"===symbol?currencyPrefix:"#"===symbol&&/[boxX]/.test(type)?"0"+type.toLowerCase():"",suffix="$"===symbol?currencySuffix:/[%p]/.test(type)?percent:"",formatType=formatTypes[type],maybeSuffix=/[defgprs%]/.test(type);function format(value){var i,n,c,valuePrefix=prefix,valueSuffix=suffix;if("c"===type)valueSuffix=formatType(value)+valueSuffix,value="";else{var valueNegative=(value=+value)<0;if(value=isNaN(value)?nan:formatType(Math.abs(value),precision),trim&&(value=formatTrim(value)),valueNegative&&0==+value&&(valueNegative=!1),valuePrefix=(valueNegative?"("===sign?sign:minus:"-"===sign||"("===sign?"":sign)+valuePrefix,valueSuffix=("s"===type?prefixes[8+prefixExponent/3]:"")+valueSuffix+(valueNegative&&"("===sign?")":""),maybeSuffix)for(i=-1,n=value.length;++i(c=value.charCodeAt(i))||c>57){valueSuffix=(46===c?decimal+value.slice(i+1):value.slice(i))+valueSuffix,value=value.slice(0,i);break}}comma&&!zero&&(value=group(value,1/0));var length=valuePrefix.length+value.length+valueSuffix.length,padding=length>1)+valuePrefix+value+valueSuffix+padding.slice(length);break;default:value=padding+valuePrefix+value+valueSuffix}return numerals(value)}return precision=void 0===precision?6:/[gprs]/.test(type)?Math.max(1,Math.min(21,precision)):Math.max(0,Math.min(20,precision)),format.toString=function(){return specifier+""},format}return{format:newFormat,formatPrefix:function formatPrefix(specifier,value){var f=newFormat(((specifier=formatSpecifier(specifier)).type="f",specifier)),e=3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3))),k=Math.pow(10,-e),prefix=prefixes[8+e/3];return function(value){return f(k*value)+prefix}}}};!function defaultLocale(definition){return defaultLocale_locale=src_locale(definition),defaultLocale_format=defaultLocale_locale.format,defaultLocale_formatPrefix=defaultLocale_locale.formatPrefix,defaultLocale_locale}({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var src_tickFormat=function(domain,count,specifier){var precision,start=domain[0],stop=domain[domain.length-1],step=tickStep(start,stop,null==count?10:count);switch((specifier=formatSpecifier(null==specifier?",f":specifier)).type){case"s":var value=Math.max(Math.abs(start),Math.abs(stop));return null!=specifier.precision||isNaN(precision=function(step,value){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3)))-src_exponent(Math.abs(step)))}(step,value))||(specifier.precision=precision),defaultLocale_formatPrefix(specifier,value);case"":case"e":case"g":case"p":case"r":null!=specifier.precision||isNaN(precision=function(step,max){return step=Math.abs(step),max=Math.abs(max)-step,Math.max(0,src_exponent(max)-src_exponent(step))+1}(step,Math.max(Math.abs(start),Math.abs(stop))))||(specifier.precision=precision-("e"===specifier.type));break;case"f":case"%":null!=specifier.precision||isNaN(precision=function(step){return Math.max(0,-src_exponent(Math.abs(step)))}(step))||(specifier.precision=precision-2*("%"===specifier.type))}return defaultLocale_format(specifier)};function linearish(scale){var domain=scale.domain;return scale.ticks=function(count){var d=domain();return src_ticks(d[0],d[d.length-1],null==count?10:count)},scale.tickFormat=function(count,specifier){return src_tickFormat(domain(),count,specifier)},scale.nice=function(count){null==count&&(count=10);var step,d=domain(),i0=0,i1=d.length-1,start=d[i0],stop=d[i1];return stop0?step=tickIncrement(start=Math.floor(start/step)*step,stop=Math.ceil(stop/step)*step,count):step<0&&(step=tickIncrement(start=Math.ceil(start*step)/step,stop=Math.floor(stop*step)/step,count)),step>0?(d[i0]=Math.floor(start/step)*step,d[i1]=Math.ceil(stop/step)*step,domain(d)):step<0&&(d[i0]=Math.ceil(start*step)/step,d[i1]=Math.floor(stop*step)/step,domain(d)),scale},scale}function linear_linear(){var scale=continuous(deinterpolateLinear,src_number);return scale.copy=function(){return copy(scale,linear_linear())},linearish(scale)}function identity_identity(){var domain=[0,1];function scale(x){return+x}return scale.invert=scale,scale.domain=scale.range=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),scale):domain.slice()},scale.copy=function(){return identity_identity().domain(domain)},linearish(scale)}var nice=function(domain,interval){var t,i0=0,i1=(domain=domain.slice()).length-1,x0=domain[i0],x1=domain[i1];return x10){for(;iv)break;z.push(t)}}else for(;i=1;--k)if(!((t=p*k)v)break;z.push(t)}}else z=src_ticks(i,j,Math.min(j-i,n)).map(pows);return r?z.reverse():z},scale.tickFormat=function(count,specifier){if(null==specifier&&(specifier=10===base?".0e":","),"function"!=typeof specifier&&(specifier=defaultLocale_format(specifier)),count===1/0)return specifier;null==count&&(count=10);var k=Math.max(1,base*count/scale.ticks().length);return function(d){var i=d/pows(Math.round(logs(d)));return i*base0?thresholds[i-1]:domain[0],i=n?[domain[n-1],x1]:[domain[i-1],domain[i]]},scale.copy=function(){return quantize_quantize().domain([x0,x1]).range(range)},linearish(scale)}function threshold_threshold(){var domain=[.5],range=[0,1],n=1;function scale(x){if(x<=x)return range[bisect(domain,x,0,n)]}return scale.domain=function(_){return arguments.length?(domain=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):range.slice()},scale.invertExtent=function(y){var i=range.indexOf(y);return[domain[i-1],domain[i]]},scale.copy=function(){return threshold_threshold().domain(domain).range(range)},scale}var interval_t0=new Date,interval_t1=new Date;function newInterval(floori,offseti,count,field){function interval(date){return floori(date=new Date(+date)),date}return interval.floor=interval,interval.ceil=function(date){return floori(date=new Date(date-1)),offseti(date,1),floori(date),date},interval.round=function(date){var d0=interval(date),d1=interval.ceil(date);return date-d00))return range;do{range.push(previous=new Date(+start)),offseti(start,step),floori(start)}while(previous=date)for(;floori(date),!test(date);)date.setTime(date-1)},function(date,step){if(date>=date)if(step<0)for(;++step<=0;)for(;offseti(date,-1),!test(date););else for(;--step>=0;)for(;offseti(date,1),!test(date););})},count&&(interval.count=function(start,end){return interval_t0.setTime(+start),interval_t1.setTime(+end),floori(interval_t0),floori(interval_t1),Math.floor(count(interval_t0,interval_t1))},interval.every=function(step){return step=Math.floor(step),isFinite(step)&&step>0?step>1?interval.filter(field?function(d){return field(d)%step==0}:function(d){return interval.count(0,d)%step==0}):interval:null}),interval}var millisecond_millisecond=newInterval(function(){},function(date,step){date.setTime(+date+step)},function(start,end){return end-start});millisecond_millisecond.every=function(k){return k=Math.floor(k),isFinite(k)&&k>0?k>1?newInterval(function(date){date.setTime(Math.floor(date/k)*k)},function(date,step){date.setTime(+date+step*k)},function(start,end){return(end-start)/k}):millisecond_millisecond:null};var src_millisecond=millisecond_millisecond,durationMinute=(millisecond_millisecond.range,6e4),durationWeek=6048e5,second_second=newInterval(function(date){date.setTime(date-date.getMilliseconds())},function(date,step){date.setTime(+date+1e3*step)},function(start,end){return(end-start)/1e3},function(date){return date.getUTCSeconds()}),src_second=second_second,minute_minute=(second_second.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds())},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getMinutes()})),src_minute=minute_minute,hour_hour=(minute_minute.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds()-date.getMinutes()*durationMinute)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getHours()})),src_hour=hour_hour,day_day=(hour_hour.range,newInterval(function(date){date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/864e5},function(date){return date.getDate()-1})),src_day=day_day;day_day.range;function weekday(i){return newInterval(function(date){date.setDate(date.getDate()-(date.getDay()+7-i)%7),date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+7*step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/durationWeek})}var sunday=weekday(0),monday=weekday(1),tuesday=weekday(2),wednesday=weekday(3),thursday=weekday(4),friday=weekday(5),saturday=weekday(6),month_month=(sunday.range,monday.range,tuesday.range,wednesday.range,thursday.range,friday.range,saturday.range,newInterval(function(date){date.setDate(1),date.setHours(0,0,0,0)},function(date,step){date.setMonth(date.getMonth()+step)},function(start,end){return end.getMonth()-start.getMonth()+12*(end.getFullYear()-start.getFullYear())},function(date){return date.getMonth()})),src_month=month_month,year_year=(month_month.range,newInterval(function(date){date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step)},function(start,end){return end.getFullYear()-start.getFullYear()},function(date){return date.getFullYear()}));year_year.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setFullYear(Math.floor(date.getFullYear()/k)*k),date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step*k)}):null};var src_year=year_year,utcMinute=(year_year.range,newInterval(function(date){date.setUTCSeconds(0,0)},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getUTCMinutes()})),utcHour=(utcMinute.range,newInterval(function(date){date.setUTCMinutes(0,0,0)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getUTCHours()})),utcDay=(utcHour.range,newInterval(function(date){date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+step)},function(start,end){return(end-start)/864e5},function(date){return date.getUTCDate()-1})),src_utcDay=utcDay;utcDay.range;function utcWeekday(i){return newInterval(function(date){date.setUTCDate(date.getUTCDate()-(date.getUTCDay()+7-i)%7),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+7*step)},function(start,end){return(end-start)/durationWeek})}var utcSunday=utcWeekday(0),utcMonday=utcWeekday(1),utcTuesday=utcWeekday(2),utcWednesday=utcWeekday(3),utcThursday=utcWeekday(4),utcFriday=utcWeekday(5),utcSaturday=utcWeekday(6),utcMonth=(utcSunday.range,utcMonday.range,utcTuesday.range,utcWednesday.range,utcThursday.range,utcFriday.range,utcSaturday.range,newInterval(function(date){date.setUTCDate(1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCMonth(date.getUTCMonth()+step)},function(start,end){return end.getUTCMonth()-start.getUTCMonth()+12*(end.getUTCFullYear()-start.getUTCFullYear())},function(date){return date.getUTCMonth()})),utcYear=(utcMonth.range,newInterval(function(date){date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step)},function(start,end){return end.getUTCFullYear()-start.getUTCFullYear()},function(date){return date.getUTCFullYear()}));utcYear.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setUTCFullYear(Math.floor(date.getUTCFullYear()/k)*k),date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step*k)}):null};var src_utcYear=utcYear;utcYear.range;function localDate(d){if(0<=d.y&&d.y<100){var date=new Date(-1,d.m,d.d,d.H,d.M,d.S,d.L);return date.setFullYear(d.y),date}return new Date(d.y,d.m,d.d,d.H,d.M,d.S,d.L)}function utcDate(d){if(0<=d.y&&d.y<100){var date=new Date(Date.UTC(-1,d.m,d.d,d.H,d.M,d.S,d.L));return date.setUTCFullYear(d.y),date}return new Date(Date.UTC(d.y,d.m,d.d,d.H,d.M,d.S,d.L))}function newYear(y){return{y:y,m:0,d:1,H:0,M:0,S:0,L:0}}var src_defaultLocale_locale,timeFormat,utcFormat,utcParse,pads={"-":"",_:" ",0:"0"},numberRe=/^\s*\d+/,percentRe=/^%/,requoteRe=/[\\^$*+?|[\]().{}]/g;function locale_pad(value,fill,width){var sign=value<0?"-":"",string=(sign?-value:value)+"",length=string.length;return sign+(length68?1900:2e3),i+n[0].length):-1}function parseZone(d,string,i){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i,i+6));return n?(d.Z=n[1]?0:-(n[2]+(n[3]||"00")),i+n[0].length):-1}function parseMonthNumber(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.m=n[0]-1,i+n[0].length):-1}function parseDayOfMonth(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.d=+n[0],i+n[0].length):-1}function parseDayOfYear(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.m=0,d.d=+n[0],i+n[0].length):-1}function parseHour24(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.H=+n[0],i+n[0].length):-1}function parseMinutes(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.M=+n[0],i+n[0].length):-1}function parseSeconds(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.S=+n[0],i+n[0].length):-1}function parseMilliseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.L=+n[0],i+n[0].length):-1}function parseMicroseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+6));return n?(d.L=Math.floor(n[0]/1e3),i+n[0].length):-1}function parseLiteralPercent(d,string,i){var n=percentRe.exec(string.slice(i,i+1));return n?i+n[0].length:-1}function parseUnixTimestamp(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=+n[0],i+n[0].length):-1}function parseUnixTimestampSeconds(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=1e3*+n[0],i+n[0].length):-1}function formatDayOfMonth(d,p){return locale_pad(d.getDate(),p,2)}function formatHour24(d,p){return locale_pad(d.getHours(),p,2)}function formatHour12(d,p){return locale_pad(d.getHours()%12||12,p,2)}function formatDayOfYear(d,p){return locale_pad(1+src_day.count(src_year(d),d),p,3)}function formatMilliseconds(d,p){return locale_pad(d.getMilliseconds(),p,3)}function formatMicroseconds(d,p){return formatMilliseconds(d,p)+"000"}function formatMonthNumber(d,p){return locale_pad(d.getMonth()+1,p,2)}function formatMinutes(d,p){return locale_pad(d.getMinutes(),p,2)}function formatSeconds(d,p){return locale_pad(d.getSeconds(),p,2)}function formatWeekdayNumberMonday(d){var day=d.getDay();return 0===day?7:day}function formatWeekNumberSunday(d,p){return locale_pad(sunday.count(src_year(d),d),p,2)}function formatWeekNumberISO(d,p){var day=d.getDay();return d=day>=4||0===day?thursday(d):thursday.ceil(d),locale_pad(thursday.count(src_year(d),d)+(4===src_year(d).getDay()),p,2)}function formatWeekdayNumberSunday(d){return d.getDay()}function formatWeekNumberMonday(d,p){return locale_pad(monday.count(src_year(d),d),p,2)}function locale_formatYear(d,p){return locale_pad(d.getFullYear()%100,p,2)}function formatFullYear(d,p){return locale_pad(d.getFullYear()%1e4,p,4)}function formatZone(d){var z=d.getTimezoneOffset();return(z>0?"-":(z*=-1,"+"))+locale_pad(z/60|0,"0",2)+locale_pad(z%60,"0",2)}function formatUTCDayOfMonth(d,p){return locale_pad(d.getUTCDate(),p,2)}function formatUTCHour24(d,p){return locale_pad(d.getUTCHours(),p,2)}function formatUTCHour12(d,p){return locale_pad(d.getUTCHours()%12||12,p,2)}function formatUTCDayOfYear(d,p){return locale_pad(1+src_utcDay.count(src_utcYear(d),d),p,3)}function formatUTCMilliseconds(d,p){return locale_pad(d.getUTCMilliseconds(),p,3)}function formatUTCMicroseconds(d,p){return formatUTCMilliseconds(d,p)+"000"}function formatUTCMonthNumber(d,p){return locale_pad(d.getUTCMonth()+1,p,2)}function formatUTCMinutes(d,p){return locale_pad(d.getUTCMinutes(),p,2)}function formatUTCSeconds(d,p){return locale_pad(d.getUTCSeconds(),p,2)}function formatUTCWeekdayNumberMonday(d){var dow=d.getUTCDay();return 0===dow?7:dow}function formatUTCWeekNumberSunday(d,p){return locale_pad(utcSunday.count(src_utcYear(d),d),p,2)}function formatUTCWeekNumberISO(d,p){var day=d.getUTCDay();return d=day>=4||0===day?utcThursday(d):utcThursday.ceil(d),locale_pad(utcThursday.count(src_utcYear(d),d)+(4===src_utcYear(d).getUTCDay()),p,2)}function formatUTCWeekdayNumberSunday(d){return d.getUTCDay()}function formatUTCWeekNumberMonday(d,p){return locale_pad(utcMonday.count(src_utcYear(d),d),p,2)}function formatUTCYear(d,p){return locale_pad(d.getUTCFullYear()%100,p,2)}function formatUTCFullYear(d,p){return locale_pad(d.getUTCFullYear()%1e4,p,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(d){return+d}function formatUnixTimestampSeconds(d){return Math.floor(+d/1e3)}!function defaultLocale_defaultLocale(definition){return src_defaultLocale_locale=function formatLocale(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_weekdays=locale.days,locale_shortWeekdays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths,periodRe=formatRe(locale_periods),periodLookup=formatLookup(locale_periods),weekdayRe=formatRe(locale_weekdays),weekdayLookup=formatLookup(locale_weekdays),shortWeekdayRe=formatRe(locale_shortWeekdays),shortWeekdayLookup=formatLookup(locale_shortWeekdays),monthRe=formatRe(locale_months),monthLookup=formatLookup(locale_months),shortMonthRe=formatRe(locale_shortMonths),shortMonthLookup=formatLookup(locale_shortMonths),formats={a:function formatShortWeekday(d){return locale_shortWeekdays[d.getDay()]},A:function formatWeekday(d){return locale_weekdays[d.getDay()]},b:function formatShortMonth(d){return locale_shortMonths[d.getMonth()]},B:function formatMonth(d){return locale_months[d.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(d){return locale_periods[+(d.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},utcFormats={a:function formatUTCShortWeekday(d){return locale_shortWeekdays[d.getUTCDay()]},A:function formatUTCWeekday(d){return locale_weekdays[d.getUTCDay()]},b:function formatUTCShortMonth(d){return locale_shortMonths[d.getUTCMonth()]},B:function formatUTCMonth(d){return locale_months[d.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(d){return locale_periods[+(d.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},parses={a:function parseShortWeekday(d,string,i){var n=shortWeekdayRe.exec(string.slice(i));return n?(d.w=shortWeekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},A:function parseWeekday(d,string,i){var n=weekdayRe.exec(string.slice(i));return n?(d.w=weekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},b:function parseShortMonth(d,string,i){var n=shortMonthRe.exec(string.slice(i));return n?(d.m=shortMonthLookup[n[0].toLowerCase()],i+n[0].length):-1},B:function parseMonth(d,string,i){var n=monthRe.exec(string.slice(i));return n?(d.m=monthLookup[n[0].toLowerCase()],i+n[0].length):-1},c:function parseLocaleDateTime(d,string,i){return parseSpecifier(d,locale_dateTime,string,i)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(d,string,i){var n=periodRe.exec(string.slice(i));return n?(d.p=periodLookup[n[0].toLowerCase()],i+n[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(d,string,i){return parseSpecifier(d,locale_date,string,i)},X:function parseLocaleTime(d,string,i){return parseSpecifier(d,locale_time,string,i)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(specifier,formats){return function(date){var c,pad,format,string=[],i=-1,j=0,n=specifier.length;for(date instanceof Date||(date=new Date(+date));++i53)return null;"w"in d||(d.w=1),"Z"in d?(week=(day=(week=utcDate(newYear(d.y))).getUTCDay())>4||0===day?utcMonday.ceil(week):utcMonday(week),week=src_utcDay.offset(week,7*(d.V-1)),d.y=week.getUTCFullYear(),d.m=week.getUTCMonth(),d.d=week.getUTCDate()+(d.w+6)%7):(week=(day=(week=newDate(newYear(d.y))).getDay())>4||0===day?monday.ceil(week):monday(week),week=src_day.offset(week,7*(d.V-1)),d.y=week.getFullYear(),d.m=week.getMonth(),d.d=week.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),day="Z"in d?utcDate(newYear(d.y)).getUTCDay():newDate(newYear(d.y)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(day+5)%7:d.w+7*d.U-(day+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,utcDate(d)):newDate(d)}}function parseSpecifier(d,specifier,string,j){for(var c,parse,i=0,n=specifier.length,m=string.length;i=m)return-1;if(37===(c=specifier.charCodeAt(i++))){if(c=specifier.charAt(i++),!(parse=parses[c in pads?specifier.charAt(i++):c])||(j=parse(d,string,j))<0)return-1}else if(c!=string.charCodeAt(j++))return-1}return j}return formats.x=newFormat(locale_date,formats),formats.X=newFormat(locale_time,formats),formats.c=newFormat(locale_dateTime,formats),utcFormats.x=newFormat(locale_date,utcFormats),utcFormats.X=newFormat(locale_time,utcFormats),utcFormats.c=newFormat(locale_dateTime,utcFormats),{format:function format(specifier){var f=newFormat(specifier+="",formats);return f.toString=function(){return specifier},f},parse:function parse(specifier){var p=newParse(specifier+="",localDate);return p.toString=function(){return specifier},p},utcFormat:function utcFormat(specifier){var f=newFormat(specifier+="",utcFormats);return f.toString=function(){return specifier},f},utcParse:function utcParse(specifier){var p=newParse(specifier,utcDate);return p.toString=function(){return specifier},p}}}(definition),timeFormat=src_defaultLocale_locale.format,src_defaultLocale_locale.parse,utcFormat=src_defaultLocale_locale.utcFormat,utcParse=src_defaultLocale_locale.utcParse,src_defaultLocale_locale}({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||utcFormat("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||utcParse("%Y-%m-%dT%H:%M:%S.%LZ");var time_durationSecond=1e3,time_durationMinute=60*time_durationSecond,time_durationHour=60*time_durationMinute,time_durationDay=24*time_durationHour,time_durationWeek=7*time_durationDay,durationMonth=30*time_durationDay,durationYear=365*time_durationDay;function time_date(t){return new Date(t)}function time_number(t){return t instanceof Date?+t:+new Date(+t)}function calendar(year,month,week,day,hour,minute,second,millisecond,format){var scale=continuous(deinterpolateLinear,src_number),invert=scale.invert,domain=scale.domain,formatMillisecond=format(".%L"),formatSecond=format(":%S"),formatMinute=format("%I:%M"),formatHour=format("%I %p"),formatDay=format("%a %d"),formatWeek=format("%b %d"),formatMonth=format("%B"),formatYear=format("%Y"),tickIntervals=[[second,1,time_durationSecond],[second,5,5*time_durationSecond],[second,15,15*time_durationSecond],[second,30,30*time_durationSecond],[minute,1,time_durationMinute],[minute,5,5*time_durationMinute],[minute,15,15*time_durationMinute],[minute,30,30*time_durationMinute],[hour,1,time_durationHour],[hour,3,3*time_durationHour],[hour,6,6*time_durationHour],[hour,12,12*time_durationHour],[day,1,time_durationDay],[day,2,2*time_durationDay],[week,1,time_durationWeek],[month,1,durationMonth],[month,3,3*durationMonth],[year,1,durationYear]];function tickFormat(date){return(second(date)1)&&(t-=Math.floor(t));var ts=Math.abs(t-.5);return rainbow_c.h=360*t-100,rainbow_c.s=1.5-1.5*ts,rainbow_c.l=.8-.9*ts,rainbow_c+""},sequential_multi_cubehelix=cubehelixLong(cubehelix_cubehelix(300,.5,0),cubehelix_cubehelix(-240,.5,1)),BuGn=src_ramp(new Array(3).concat("e5f5f999d8c92ca25f","edf8fbb2e2e266c2a4238b45","edf8fbb2e2e266c2a42ca25f006d2c","edf8fbccece699d8c966c2a42ca25f006d2c","edf8fbccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824","f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b").map(d3_scale_chromatic_src_colors)),BuPu=src_ramp(new Array(3).concat("e0ecf49ebcda8856a7","edf8fbb3cde38c96c688419d","edf8fbb3cde38c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68856a7810f7c","edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b","f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b").map(d3_scale_chromatic_src_colors)),GnBu=src_ramp(new Array(3).concat("e0f3dba8ddb543a2ca","f0f9e8bae4bc7bccc42b8cbe","f0f9e8bae4bc7bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc443a2ca0868ac","f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e","f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081").map(d3_scale_chromatic_src_colors)),OrRd=src_ramp(new Array(3).concat("fee8c8fdbb84e34a33","fef0d9fdcc8afc8d59d7301f","fef0d9fdcc8afc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59e34a33b30000","fef0d9fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000","fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000").map(d3_scale_chromatic_src_colors)),PuBuGn=src_ramp(new Array(3).concat("ece2f0a6bddb1c9099","f6eff7bdc9e167a9cf02818a","f6eff7bdc9e167a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf1c9099016c59","f6eff7d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450","fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636").map(d3_scale_chromatic_src_colors)),PuBu=src_ramp(new Array(3).concat("ece7f2a6bddb2b8cbe","f1eef6bdc9e174a9cf0570b0","f1eef6bdc9e174a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d","f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b","fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858").map(d3_scale_chromatic_src_colors)),PuRd=src_ramp(new Array(3).concat("e7e1efc994c7dd1c77","f1eef6d7b5d8df65b0ce1256","f1eef6d7b5d8df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0dd1c77980043","f1eef6d4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f","f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f").map(d3_scale_chromatic_src_colors)),RdPu=src_ramp(new Array(3).concat("fde0ddfa9fb5c51b8a","feebe2fbb4b9f768a1ae017e","feebe2fbb4b9f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1c51b8a7a0177","feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177","fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a").map(d3_scale_chromatic_src_colors)),YlGnBu=src_ramp(new Array(3).concat("edf8b17fcdbb2c7fb8","ffffcca1dab441b6c4225ea8","ffffcca1dab441b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c42c7fb8253494","ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84","ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58").map(d3_scale_chromatic_src_colors)),YlGn=src_ramp(new Array(3).concat("f7fcb9addd8e31a354","ffffccc2e69978c679238443","ffffccc2e69978c67931a354006837","ffffccd9f0a3addd8e78c67931a354006837","ffffccd9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32","ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529").map(d3_scale_chromatic_src_colors)),YlOrBr=src_ramp(new Array(3).concat("fff7bcfec44fd95f0e","ffffd4fed98efe9929cc4c02","ffffd4fed98efe9929d95f0e993404","ffffd4fee391fec44ffe9929d95f0e993404","ffffd4fee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04","ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506").map(d3_scale_chromatic_src_colors)),YlOrRd=src_ramp(new Array(3).concat("ffeda0feb24cf03b20","ffffb2fecc5cfd8d3ce31a1c","ffffb2fecc5cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cf03b20bd0026","ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026","ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026").map(d3_scale_chromatic_src_colors)),UNIT_GLOBAL_NAMESPACE="app.units",UNIT_LOCAL_NAMESPACE="local.units",LAYER_LOCAL_NAMESPACE="local.layers",LAYER_GLOBAL_NAMESPACE="app.layers",GROUP_GLOBAL_NAMESPACE="app.group",GROUP_LOCAL_NAMESPACE="local.group",CANVAS_LOCAL_NAMESPACE="local.canvas",CANVAS_GLOBAL_NAMESPACE="app.canvas",reserved_fields={ROW_ID:"__id__"},common_props={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onLayerDraw",MATRIX_CREATED:"matrixCreated"},COORD_TYPES_POLAR="polar",COORD_TYPES_CARTESIAN="cartesian",DATA_TYPE_FUNCTION="function",DATA_TYPE_STRING="string",src_array_slice=Array.prototype.slice,d3_axis_src_identity=function(x){return x},axis_top=1,axis_right=2,axis_bottom=3,axis_left=4,epsilon=1e-6;function translateX(x){return"translate("+(x+.5)+",0)"}function translateY(y){return"translate(0,"+(y+.5)+")"}function entering(){return!this.__axis}function axis_axis(orient,scale){var tickArguments=[],tickValues=null,tickFormat=null,tickTransform=null,tickSizeInner=6,tickSizeOuter=6,tickPadding=3,k=orient===axis_top||orient===axis_left?-1:1,x=orient===axis_left||orient===axis_right?"x":"y",transform=orient===axis_top||orient===axis_bottom?translateX:translateY;function axis(context){var values=null==tickValues?scale.ticks?scale.ticks.apply(scale,tickArguments):scale.domain():tickValues,format=null==tickFormat?scale.tickFormat?scale.tickFormat.apply(scale,tickArguments):d3_axis_src_identity:tickFormat,spacing=Math.max(tickSizeInner,0)+tickPadding,range=scale.range(),range0=+range[0]+.5,range1=+range[range.length-1]+.5,position=(scale.bandwidth?function axis_center(scale){var offset=Math.max(0,scale.bandwidth()-1)/2;return scale.round()&&(offset=Math.round(offset)),function(d){return+scale(d)+offset}}:function axis_number(scale){return function(d){return+scale(d)}})(scale.copy()),selection=context.selection?context.selection():context,path=selection.selectAll(".domain").data([null]),tick=selection.selectAll(".tick").data(values,scale).order(),tickExit=tick.exit(),tickEnter=tick.enter().append("g").attr("class","tick"),line=tick.select("line"),text=tick.select("text");path=path.merge(path.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),tick=tick.merge(tickEnter),line=line.merge(tickEnter.append("line").attr("stroke","#000").attr(x+"2",k*tickSizeInner)),text=text.merge(tickEnter.append("text").attr("fill","#000").attr(x,k*spacing).attr("dy",orient===axis_top?"0em":orient===axis_bottom?"0.71em":"0.32em")).style("transform",tickTransform),context!==selection&&(path=path.transition(context),tick=tick.transition(context),line=line.transition(context),text=text.transition(context),tickExit=tickExit.transition(context).attr("opacity",epsilon).attr("transform",function(d){return isFinite(d=position(d))?transform(d):this.getAttribute("transform")}),tickEnter.attr("opacity",epsilon).attr("transform",function(d){var p=this.parentNode.__axis;return transform(p&&isFinite(p=p(d))?p:position(d))})),tickExit.remove(),path.attr("d",orient===axis_left||orient==axis_right?"M"+k*tickSizeOuter+","+range0+"H0.5V"+range1+"H"+k*tickSizeOuter:"M"+range0+","+k*tickSizeOuter+"V0.5H"+range1+"V"+k*tickSizeOuter),tick.attr("opacity",1).attr("transform",function(d){return transform(position(d))}),line.attr(x+"2",k*tickSizeInner),text.attr(x,k*spacing).text(format),selection.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",orient===axis_right?"start":orient===axis_left?"end":"middle"),selection.each(function(){this.__axis=position})}return axis.scale=function(_){return arguments.length?(scale=_,axis):scale},axis.tickTransform=function(_){return arguments.length?(tickTransform=_,axis):tickTransform},axis.ticks=function(){return tickArguments=src_array_slice.call(arguments),axis},axis.tickArguments=function(_){return arguments.length?(tickArguments=null==_?[]:src_array_slice.call(_),axis):tickArguments.slice()},axis.tickValues=function(_){return arguments.length?(tickValues=null==_?null:src_array_slice.call(_),axis):tickValues&&tickValues.slice()},axis.tickFormat=function(_){return arguments.length?(tickFormat=_,axis):tickFormat},axis.tickSize=function(_){return arguments.length?(tickSizeInner=tickSizeOuter=+_,axis):tickSizeInner},axis.tickSizeInner=function(_){return arguments.length?(tickSizeInner=+_,axis):tickSizeInner},axis.tickSizeOuter=function(_){return arguments.length?(tickSizeOuter=+_,axis):tickSizeOuter},axis.tickPadding=function(_){return arguments.length?(tickPadding=+_,axis):tickPadding},axis}var pi=Math.PI,tau=2*pi,tauEpsilon=tau-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(x,y){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(x,y){this._+="L"+(this._x1=+x)+","+(this._y1=+y)},quadraticCurveTo:function quadraticCurveTo(x1,y1,x,y){this._+="Q"+ +x1+","+ +y1+","+(this._x1=+x)+","+(this._y1=+y)},bezierCurveTo:function bezierCurveTo(x1,y1,x2,y2,x,y){this._+="C"+ +x1+","+ +y1+","+ +x2+","+ +y2+","+(this._x1=+x)+","+(this._y1=+y)},arcTo:function arcTo(x1,y1,x2,y2,r){x1=+x1,y1=+y1,x2=+x2,y2=+y2,r=+r;var x0=this._x1,y0=this._y1,x21=x2-x1,y21=y2-y1,x01=x0-x1,y01=y0-y1,l01_2=x01*x01+y01*y01;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=x1)+","+(this._y1=y1);else if(l01_2>1e-6)if(Math.abs(y01*x21-y21*x01)>1e-6&&r){var x20=x2-x0,y20=y2-y0,l21_2=x21*x21+y21*y21,l20_2=x20*x20+y20*y20,l21=Math.sqrt(l21_2),l01=Math.sqrt(l01_2),l=r*Math.tan((pi-Math.acos((l21_2+l01_2-l20_2)/(2*l21*l01)))/2),t01=l/l01,t21=l/l21;Math.abs(t01-1)>1e-6&&(this._+="L"+(x1+t01*x01)+","+(y1+t01*y01)),this._+="A"+r+","+r+",0,0,"+ +(y01*x20>x01*y20)+","+(this._x1=x1+t21*x21)+","+(this._y1=y1+t21*y21)}else this._+="L"+(this._x1=x1)+","+(this._y1=y1);else;},arc:function arc(x,y,r,a0,a1,ccw){x=+x,y=+y,ccw=!!ccw;var dx=(r=+r)*Math.cos(a0),dy=r*Math.sin(a0),x0=x+dx,y0=y+dy,cw=1^ccw,da=ccw?a0-a1:a1-a0;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+x0+","+y0:(Math.abs(this._x1-x0)>1e-6||Math.abs(this._y1-y0)>1e-6)&&(this._+="L"+x0+","+y0),r&&(da<0&&(da=da%tau+tau),da>tauEpsilon?this._+="A"+r+","+r+",0,1,"+cw+","+(x-dx)+","+(y-dy)+"A"+r+","+r+",0,1,"+cw+","+(this._x1=x0)+","+(this._y1=y0):da>1e-6&&(this._+="A"+r+","+r+",0,"+ +(da>=pi)+","+cw+","+(this._x1=x+r*Math.cos(a1))+","+(this._y1=y+r*Math.sin(a1))))},rect:function rect(x,y,w,h){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)+"h"+ +w+"v"+ +h+"h"+-w+"Z"},toString:function toString(){return this._}};var src_path=path_path,d3_shape_src_constant=function(x){return function constant(){return x}},abs=Math.abs,atan2=Math.atan2,cos=Math.cos,math_max=Math.max,math_min=Math.min,sin=Math.sin,math_sqrt=Math.sqrt,math_epsilon=1e-12,math_pi=Math.PI,halfPi=math_pi/2,math_tau=2*math_pi;function asin(x){return x>=1?halfPi:x<=-1?-halfPi:Math.asin(x)}function arcInnerRadius(d){return d.innerRadius}function arcOuterRadius(d){return d.outerRadius}function arcStartAngle(d){return d.startAngle}function arcEndAngle(d){return d.endAngle}function arcPadAngle(d){return d&&d.padAngle}function cornerTangents(x0,y0,x1,y1,r1,rc,cw){var x01=x0-x1,y01=y0-y1,lo=(cw?rc:-rc)/math_sqrt(x01*x01+y01*y01),ox=lo*y01,oy=-lo*x01,x11=x0+ox,y11=y0+oy,x10=x1+ox,y10=y1+oy,x00=(x11+x10)/2,y00=(y11+y10)/2,dx=x10-x11,dy=y10-y11,d2=dx*dx+dy*dy,r=r1-rc,D=x11*y10-x10*y11,d=(dy<0?-1:1)*math_sqrt(math_max(0,r*r*d2-D*D)),cx0=(D*dy-dx*d)/d2,cy0=(-D*dx-dy*d)/d2,cx1=(D*dy+dx*d)/d2,cy1=(-D*dx+dy*d)/d2,dx0=cx0-x00,dy0=cy0-y00,dx1=cx1-x00,dy1=cy1-y00;return dx0*dx0+dy0*dy0>dx1*dx1+dy1*dy1&&(cx0=cx1,cy0=cy1),{cx:cx0,cy:cy0,x01:-ox,y01:-oy,x11:cx0*(r1/r-1),y11:cy0*(r1/r-1)}}function Linear(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:this._context.lineTo(x,y)}}};var curve_linear=function(context){return new Linear(context)};function point_x(p){return p[0]}function point_y(p){return p[1]}var src_line=function(){var x=point_x,y=point_y,defined=d3_shape_src_constant(!0),context=null,curve=curve_linear,output=null;function line(data){var i,d,buffer,n=data.length,defined0=!1;for(null==context&&(output=curve(buffer=src_path())),i=0;i<=n;++i)!(i=j;--k)output.point(x0z[k],y0z[k]);output.lineEnd(),output.areaEnd()}defined0&&(x0z[i]=+x0(d,i,data),y0z[i]=+y0(d,i,data),output.point(x1?+x1(d,i,data):x0z[i],y1?+y1(d,i,data):y0z[i]))}if(buffer)return output=null,buffer+""||null}function arealine(){return src_line().defined(defined).curve(curve).context(context)}return area.x=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),x1=null,area):x0},area.x0=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),area):x0},area.x1=function(_){return arguments.length?(x1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):x1},area.y=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),y1=null,area):y0},area.y0=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),area):y0},area.y1=function(_){return arguments.length?(y1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):y1},area.lineX0=area.lineY0=function(){return arealine().x(x0).y(y0)},area.lineY1=function(){return arealine().x(x0).y(y1)},area.lineX1=function(){return arealine().x(x1).y(y0)},area.defined=function(_){return arguments.length?(defined="function"==typeof _?_:d3_shape_src_constant(!!_),area):defined},area.curve=function(_){return arguments.length?(curve=_,null!=context&&(output=curve(context)),area):curve},area.context=function(_){return arguments.length?(null==_?context=output=null:output=curve(context=_),area):context},area},src_descending=function(a,b){return ba?1:b>=a?0:NaN},d3_shape_src_identity=function(d){return d};curveRadial(curve_linear);function Radial(curve){this._curve=curve}function curveRadial(curve){function radial(context){return new Radial(curve(context))}return radial._curve=curve,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(a,r){this._curve.point(r*Math.sin(a),r*-Math.cos(a))}};var d3_shape_src_array_slice=Array.prototype.slice;var symbol_circle={draw:function draw(context,size){var r=Math.sqrt(size/math_pi);context.moveTo(r,0),context.arc(0,0,r,0,math_tau)}},symbol_cross={draw:function draw(context,size){var r=Math.sqrt(size/5)/2;context.moveTo(-3*r,-r),context.lineTo(-r,-r),context.lineTo(-r,-3*r),context.lineTo(r,-3*r),context.lineTo(r,-r),context.lineTo(3*r,-r),context.lineTo(3*r,r),context.lineTo(r,r),context.lineTo(r,3*r),context.lineTo(-r,3*r),context.lineTo(-r,r),context.lineTo(-3*r,r),context.closePath()}},tan30=Math.sqrt(1/3),tan30_2=2*tan30,diamond={draw:function draw(context,size){var y=Math.sqrt(size/tan30_2),x=y*tan30;context.moveTo(0,-y),context.lineTo(x,0),context.lineTo(0,y),context.lineTo(-x,0),context.closePath()}},kr=Math.sin(math_pi/10)/Math.sin(7*math_pi/10),kx=Math.sin(math_tau/10)*kr,ky=-Math.cos(math_tau/10)*kr,star={draw:function draw(context,size){var r=Math.sqrt(.8908130915292852*size),x=kx*r,y=ky*r;context.moveTo(0,-r),context.lineTo(x,y);for(var i=1;i<5;++i){var a=math_tau*i/5,c=Math.cos(a),s=Math.sin(a);context.lineTo(s*r,-c*r),context.lineTo(c*x-s*y,s*x+c*y)}context.closePath()}},square={draw:function draw(context,size){var w=Math.sqrt(size),x=-w/2;context.rect(x,x,w,w)}},sqrt3=Math.sqrt(3),triangle={draw:function draw(context,size){var y=-Math.sqrt(size/(3*sqrt3));context.moveTo(0,2*y),context.lineTo(-sqrt3*y,-y),context.lineTo(sqrt3*y,-y),context.closePath()}},wye_s=Math.sqrt(3)/2,wye_k=1/Math.sqrt(12),wye_a=3*(wye_k/2+1),wye={draw:function draw(context,size){var r=Math.sqrt(size/wye_a),x0=r/2,y0=r*wye_k,x1=x0,y1=r*wye_k+r,x2=-x1,y2=y1;context.moveTo(x0,y0),context.lineTo(x1,y1),context.lineTo(x2,y2),context.lineTo(-.5*x0-wye_s*y0,wye_s*x0+-.5*y0),context.lineTo(-.5*x1-wye_s*y1,wye_s*x1+-.5*y1),context.lineTo(-.5*x2-wye_s*y2,wye_s*x2+-.5*y2),context.lineTo(-.5*x0+wye_s*y0,-.5*y0-wye_s*x0),context.lineTo(-.5*x1+wye_s*y1,-.5*y1-wye_s*x1),context.lineTo(-.5*x2+wye_s*y2,-.5*y2-wye_s*x2),context.closePath()}},noop=function(){};function _point(that,x,y){that._context.bezierCurveTo((2*that._x0+that._x1)/3,(2*that._y0+that._y1)/3,(that._x0+2*that._x1)/3,(that._y0+2*that._y1)/3,(that._x0+4*that._x1+x)/6,(that._y0+4*that._y1+y)/6)}function Basis(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);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,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisClosed(context){this._context=context}BasisClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x2=x,this._y2=y;break;case 1:this._point=2,this._x3=x,this._y3=y;break;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;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisOpen(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1;break;case 1:this._point=2;break;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;case 3:this._point=4;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function Bundle(context,beta){this._basis=new Basis(context),this._beta=beta}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var x=this._x,y=this._y,j=x.length-1;if(j>0)for(var t,x0=x[0],y0=y[0],dx=x[j]-x0,dy=y[j]-y0,i=-1;++i<=j;)t=i/j,this._basis.point(this._beta*x[i]+(1-this._beta)*(x0+t*dx),this._beta*y[i]+(1-this._beta)*(y0+t*dy));this._x=this._y=null,this._basis.lineEnd()},point:function point(x,y){this._x.push(+x),this._y.push(+y)}};(function custom(beta){function bundle(context){return 1===beta?new Basis(context):new Bundle(context,beta)}return bundle.beta=function(beta){return custom(+beta)},bundle})(.85);function cardinal_point(that,x,y){that._context.bezierCurveTo(that._x1+that._k*(that._x2-that._x0),that._y1+that._k*(that._y2-that._y0),that._x2+that._k*(that._x1-x),that._y2+that._k*(that._y1-y),that._x2,that._y2)}function Cardinal(context,tension){this._context=context,this._k=(1-tension)/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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2,this._x1=x,this._y1=y;break;case 2:this._point=3;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new Cardinal(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalClosed(context,tension){this._context=context,this._k=(1-tension)/6}CardinalClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalClosed(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalOpen(context,tension){this._context=context,this._k=(1-tension)/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(x,y){switch(x=+x,y=+y,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,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalOpen(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function catmullRom_point(that,x,y){var x1=that._x1,y1=that._y1,x2=that._x2,y2=that._y2;if(that._l01_a>math_epsilon){var a=2*that._l01_2a+3*that._l01_a*that._l12_a+that._l12_2a,n=3*that._l01_a*(that._l01_a+that._l12_a);x1=(x1*a-that._x0*that._l12_2a+that._x2*that._l01_2a)/n,y1=(y1*a-that._y0*that._l12_2a+that._y2*that._l01_2a)/n}if(that._l23_a>math_epsilon){var b=2*that._l23_2a+3*that._l23_a*that._l12_a+that._l12_2a,m=3*that._l23_a*(that._l23_a+that._l12_a);x2=(x2*b+that._x1*that._l23_2a-x*that._l12_2a)/m,y2=(y2*b+that._y1*that._l23_2a-y*that._l12_2a)/m}that._context.bezierCurveTo(x1,y1,x2,y2,that._x2,that._y2)}function CatmullRom(context,alpha){this._context=context,this._alpha=alpha}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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};var curve_catmullRom=function custom(alpha){function catmullRom(context){return alpha?new CatmullRom(context,alpha):new Cardinal(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom}(.5);function CatmullRomClosed(context,alpha){this._context=context,this._alpha=alpha}CatmullRomClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:catmullRom_point(this,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomClosed(context,alpha):new CardinalClosed(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function CatmullRomOpen(context,alpha){this._context=context,this._alpha=alpha}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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,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,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomOpen(context,alpha):new CardinalOpen(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function LinearClosed(context){this._context=context}LinearClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(x,y){x=+x,y=+y,this._point?this._context.lineTo(x,y):(this._point=1,this._context.moveTo(x,y))}};function monotone_sign(x){return x<0?-1:1}function slope3(that,x2,y2){var h0=that._x1-that._x0,h1=x2-that._x1,s0=(that._y1-that._y0)/(h0||h1<0&&-0),s1=(y2-that._y1)/(h1||h0<0&&-0),p=(s0*h1+s1*h0)/(h0+h1);return(monotone_sign(s0)+monotone_sign(s1))*Math.min(Math.abs(s0),Math.abs(s1),.5*Math.abs(p))||0}function slope2(that,t){var h=that._x1-that._x0;return h?(3*(that._y1-that._y0)/h-t)/2:t}function monotone_point(that,t0,t1){var x0=that._x0,y0=that._y0,x1=that._x1,y1=that._y1,dx=(x1-x0)/3;that._context.bezierCurveTo(x0+dx,y0+dx*t0,x1-dx,y1-dx*t1,x1,y1)}function MonotoneX(context){this._context=context}function MonotoneY(context){this._context=new ReflectContext(context)}function ReflectContext(context){this._context=context}function Natural(context){this._context=context}function controlPoints(x){var i,m,n=x.length-1,a=new Array(n),b=new Array(n),r=new Array(n);for(a[0]=0,b[0]=2,r[0]=x[0]+2*x[1],i=1;i=0;--i)a[i]=(r[i]-a[i+1])/b[i];for(b[n-1]=(x[n]+a[n-1])/2,i=0;i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,y),this._context.lineTo(x,y);else{var x1=this._x*(1-this._t)+x*this._t;this._context.lineTo(x1,this._y),this._context.lineTo(x1,y)}}this._x=x,this._y=y}};var curve_step=function(context){return new Step(context,.5)};function stepBefore(context){return new Step(context,0)}function stepAfter(context){return new Step(context,1)}var none=function(series,order){if((n=series.length)>1)for(var j,s0,n,i=1,s1=series[order[0]],m=s1.length;i=0;)o[n]=n;return o};function stackValue(d,key){return d[key]}var order_ascending=function(series){var sums=series.map(ascending_sum);return order_none(series).sort(function(a,b){return sums[a]-sums[b]})};function ascending_sum(series){for(var v,s=0,i=-1,n=series.length;++i0)){if(r/=dx,dx<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=x1-ax,dx||!(r<0)){if(r/=dx,dx<0){if(r>t1)return;r>t0&&(t0=r)}else if(dx>0){if(r0)){if(r/=dy,dy<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=y1-ay,dy||!(r<0)){if(r/=dy,dy<0){if(r>t1)return;r>t0&&(t0=r)}else if(dy>0){if(r0||t1<1)||(t0>0&&(edge[0]=[ax+t0*dx,ay+t0*dy]),t1<1&&(edge[1]=[ax+t1*dx,ay+t1*dy]),!0)}}}}}function connectEdge(edge,x0,y0,x1,y1){var v1=edge[1];if(v1)return!0;var fm,fb,v0=edge[0],left=edge.left,right=edge.right,lx=left[0],ly=left[1],rx=right[0],ry=right[1],fx=(lx+rx)/2,fy=(ly+ry)/2;if(ry===ly){if(fx=x1)return;if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[fx,y0];v1=[fx,y1]}else{if(v0){if(v0[1]1)if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[(y0-fb)/fm,y0];v1=[(y1-fb)/fm,y1]}else{if(v0){if(v0[1]=x1)return}else v0=[x0,fm*x0+fb];v1=[x1,fm*x1+fb]}else{if(v0){if(v0[0]=-Diagram_epsilon2)){var ha=ax*ax+ay*ay,hc=cx*cx+cy*cy,x=(cy*ha-ay*hc)/d,y=(ax*hc-cx*ha)/d,circle=circlePool.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};circle.arc=arc,circle.site=cSite,circle.x=x+bx,circle.y=(circle.cy=y+by)+Math.sqrt(x*x+y*y),arc.circle=circle;for(var before=null,node=circles._;node;)if(circle.yDiagram_epsilon)node=node.L;else{if(!((dxr=x-rightBreakPoint(node,directrix))>Diagram_epsilon)){dxl>-Diagram_epsilon?(lArc=node.P,rArc=node):dxr>-Diagram_epsilon?(lArc=node,rArc=node.N):lArc=rArc=node;break}if(!node.R){lArc=node;break}node=node.R}!function createCell(site){return Diagram_cells[site.index]={site:site,halfedges:[]}}(site);var newArc=createBeach(site);if(beaches.insert(lArc,newArc),lArc||rArc){if(lArc===rArc)return detachCircle(lArc),rArc=createBeach(lArc.site),beaches.insert(newArc,rArc),newArc.edge=rArc.edge=createEdge(lArc.site,newArc.site),attachCircle(lArc),void attachCircle(rArc);if(rArc){detachCircle(lArc),detachCircle(rArc);var lSite=lArc.site,ax=lSite[0],ay=lSite[1],bx=site[0]-ax,by=site[1]-ay,rSite=rArc.site,cx=rSite[0]-ax,cy=rSite[1]-ay,d=2*(bx*cy-by*cx),hb=bx*bx+by*by,hc=cx*cx+cy*cy,vertex=[(cy*hb-by*hc)/d+ax,(bx*hc-cx*hb)/d+ay];setEdgeEnd(rArc.edge,lSite,rSite,vertex),newArc.edge=createEdge(lSite,site,null,vertex),rArc.edge=createEdge(site,rSite,null,vertex),attachCircle(lArc),attachCircle(rArc)}else newArc.edge=createEdge(lArc.site,newArc.site)}}function leftBreakPoint(arc,directrix){var site=arc.site,rfocx=site[0],rfocy=site[1],pby2=rfocy-directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return-1/0;var lfocx=(site=lArc.site)[0],lfocy=site[1],plby2=lfocy-directrix;if(!plby2)return lfocx;var hl=lfocx-rfocx,aby2=1/pby2-1/plby2,b=hl/plby2;return aby2?(-b+Math.sqrt(b*b-2*aby2*(hl*hl/(-2*plby2)-lfocy+plby2/2+rfocy-pby2/2)))/aby2+rfocx:(rfocx+lfocx)/2}function rightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return leftBreakPoint(rArc,directrix);var site=arc.site;return site[1]===directrix?site[0]:1/0}var beaches,Diagram_cells,circles,Diagram_edges,Diagram_epsilon=1e-6,Diagram_epsilon2=1e-12;function triangleArea(a,b,c){return(a[0]-c[0])*(b[1]-a[1])-(a[0]-b[0])*(c[1]-a[1])}function lexicographic(a,b){return b[1]-a[1]||b[0]-a[0]}function Diagram(sites,extent){var x,y,circle,site=sites.sort(lexicographic).pop();for(Diagram_edges=[],Diagram_cells=new Array(sites.length),beaches=new src_RedBlackTree,circles=new src_RedBlackTree;;)if(circle=firstCircle,site&&(!circle||site[1]Diagram_epsilon||Math.abs(edge[0][1]-edge[1][1])>Diagram_epsilon)||delete Diagram_edges[i]}(x0,y0,x1,y1),function clipCells(x0,y0,x1,y1){var iCell,cell,site,iHalfedge,halfedges,nHalfedges,start,startX,startY,end,endX,endY,nCells=Diagram_cells.length,cover=!0;for(iCell=0;iCellDiagram_epsilon||Math.abs(endY-startY)>Diagram_epsilon)&&(halfedges.splice(iHalfedge,0,Diagram_edges.push(createBorderEdge(site,end,Math.abs(endX-x0)Diagram_epsilon?[x0,Math.abs(startX-x0)Diagram_epsilon?[Math.abs(startY-y1)Diagram_epsilon?[x1,Math.abs(startX-x1)Diagram_epsilon?[Math.abs(startY-y0)=n)return null;var dx=x-cell.site[0],dy=y-cell.site[1],d2=dx*dx+dy*dy;do{cell=that.cells[i0=i1],i1=null,cell.halfedges.forEach(function(e){var edge=that.edges[e],v=edge.left;if(v!==cell.site&&v||(v=edge.right)){var vx=x-v[0],vy=y-v[1],v2=vx*vx+vy*vy;v20?0:domain[0],domain[1]=domain[1]>0?domain[1]:0),domain},unionDomain=function unionDomain(domains,fieldType){var _ref2,domain=[];(domains=domains.filter(function(dom){return dom&&dom.length})).length&&(domain=fieldType===CATEGORICAL?(_ref2=[]).concat.apply(_ref2,common_utils_toConsumableArray(domains)):[Math.min.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[0]}))),Math.max.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[1]})))]);return domain},symbolFns={circle:symbol_circle,cross:symbol_cross,diamond:diamond,square:square,star:star,wye:wye,triangle:triangle},easeFns={cubic:cubicInOut,bounce:bounceOut,linear:function src_linear_linear(t){return+t},elastic:elasticOut,back:backInOut,poly:polyInOut,circle:function circleInOut(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}},common_utils_getClosestIndexOf=function getClosestIndexOf(arr,value,side){for(var mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1},getNearestValue=function getNearestValue(data,key){var filterData=data.filter(function(d){return"number"==typeof d});return filterData[common_utils_getClosestIndexOf(filterData,key)]},getWindow=function getWindow(){return window},getQualifiedClassName=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(cls,id,prefix){return cls=cls.replace(/^\.*/,""),["".concat(prefix,"-").concat(cls),"".concat(prefix,"-").concat(cls,"-").concat(id)]}),defaultValue=function defaultValue(param,value){return void 0===param||"object"===common_utils_typeof(param)&&!param?value:param},objectIterator=function objectIterator(obj,fn){for(var key in obj)Object.hasOwnProperty.call(obj,key)&&fn(key,obj)},common_utils_Voronoi=function(){function Voronoi(){var data=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];!function common_utils_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Voronoi),this._voronoi=src_voronoi().x(function(d){return d.x}).y(function(d){return d.y}),this.data(data)}return function common_utils_createClass(Constructor,protoProps,staticProps){return protoProps&&common_utils_defineProperties(Constructor.prototype,protoProps),staticProps&&common_utils_defineProperties(Constructor,staticProps),Constructor}(Voronoi,[{key:"data",value:function data(_data){return _data&&(this._voronoiFn=this._voronoi(_data)),this}},{key:"find",value:function find(x,y,radius){return this._voronoiFn.find(x,y,radius)}}]),Voronoi}(),getObjProp=function getObjProp(obj){if(void 0===obj||null===obj)return obj;for(var retObj=obj,_len=arguments.length,fields=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)fields[_key-1]=arguments[_key];for(var i=0,len=fields.length;i=0;i--)if(arr1[i]!==arr2[i])return!1;return!0}(oldVal,newVal):"Object"===type?Object.is(oldVal,newVal):oldVal===newVal}},ERROR_MSG={INTERFACE_IMPL:"Method not implemented"},mergeRecursive=function mergeRecursive(source,sink){for(var prop in sink)isSimpleObject(source[prop])&&isSimpleObject(sink[prop])?mergeRecursive(source[prop],sink[prop]):sink[prop]instanceof Object&&sink[prop].constructor===Object?(source[prop]={},mergeRecursive(source[prop],sink[prop])):source[prop]=sink[prop];return source},common_utils_createSelection=function createSelection(sel,appendObj,data,idFn){var selection=sel||function dataSelect(idFn){return new DataSystem_selection(idFn)}(idFn),mergedSelection=(selection=selection.data(data)).enter().append(appendObj).merge(selection),exitSelection=selection.exit();return exitSelection.getObjects().forEach(function(inst){return inst.remove()}),exitSelection.remove(),mergedSelection},common_utils_interpolator=function interpolator(){return src_value},common_utils_numberInterpolator=function numberInterpolator(){return src_number},common_utils_piecewiseInterpolator=function piecewiseInterpolator(){return piecewise_piecewise};var rgbToHsv=function rgbToHsv(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r=+r,g=+g,b=+b,a=+a,r/=255,g/=255,b/=255;var h,s,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;switch(s=l>.5?d/(2-max-min):d/(max+min),max){case r:h=(g-b)/d+(g=range[0]&&val<=range[1]})},{saveChild:!1,mode:mode})},common_utils_getDataModelFromIdentifiers=function getDataModelFromIdentifiers(dataModel,identifiers,mode){var filteredDataModel;if(identifiers instanceof Array){var fieldsConfig=dataModel.getFieldsConfig(),dataArr=identifiers.slice(1,identifiers.length);if(identifiers instanceof Function)filteredDataModel=identifiers(dataModel,{},!1);else if(identifiers instanceof Array&&identifiers[0].length){var filteredSchema=identifiers[0].filter(function(d){return d in fieldsConfig});filteredDataModel=dataModel.select(function(fields){var include=!0;return filteredSchema.forEach(function(propField,idx){var value=fields[propField].internalValue,index=dataArr.findIndex(function(d){return d[idx]===value});include=include&&-1!==index}),include},{saveChild:!1,mode:mode})}else filteredDataModel=dataModel.select(function(){return!1},{saveChild:!1,mode:mode})}else filteredDataModel=getDataModelFromRange(dataModel,identifiers,mode);return filteredDataModel},isValidValue=function isValidValue(value){return!isNaN(value)&&value!==-1/0&&value!==1/0},toArray=function toArray(arr){return arr instanceof Array?arr:[arr]},common_utils_getSymbol=function getSymbol(type){return function(){var type=d3_shape_src_constant(symbol_circle),size=d3_shape_src_constant(64),context=null;function symbol(){var buffer;if(context||(context=buffer=src_path()),type.apply(this,arguments).draw(context,+size.apply(this,arguments)),buffer)return context=null,buffer+""||null}return symbol.type=function(_){return arguments.length?(type="function"==typeof _?_:d3_shape_src_constant(_),symbol):type},symbol.size=function(_){return arguments.length?(size="function"==typeof _?_:d3_shape_src_constant(+_),symbol):size},symbol.context=function(_){return arguments.length?(context=null==_?null:_,symbol):context},symbol}().type(symbolFns[type])},stackOrders=(_defineProperty(_stackOrders={},"none",order_none),_defineProperty(_stackOrders,"ascending",order_ascending),_defineProperty(_stackOrders,"descending",function(series){return order_ascending(series).reverse()}),_stackOrders),stackOffsets=(_defineProperty(_stackOffsets={},"diverging",function(series,order){if((n=series.length)>0)for(var i,d,dy,yp,yn,n,j=0,m=series[order[0]].length;j=0?(d[0]=yp,d[1]=yp+=dy):dy<0?(d[1]=yn,d[0]=yn+=dy):d[0]=yp}),_defineProperty(_stackOffsets,"none",none),_defineProperty(_stackOffsets,"expand",function(series,order){if((n=series.length)>0){for(var i,n,y,j=0,m=series[0].length;j0&&(m=(s0=series[order[0]]).length)>0){for(var s0,m,n,y=0,j=1;j0&&(sum+=v);for(null!=sortValues?index.sort(function(i,j){return sortValues(arcs[i],arcs[j])}):null!=sort&&index.sort(function(i,j){return sort(data[i],data[j])}),i=0,k=sum?(da-n*pa)/sum:0;i0?v*k:0)+pa,arcs[j]={data:data[j],index:i,value:v,startAngle:a0,endAngle:a1,padAngle:p};return arcs}return pie.value=function(_){return arguments.length?(value="function"==typeof _?_:d3_shape_src_constant(+_),pie):value},pie.sortValues=function(_){return arguments.length?(sortValues=_,sort=null,pie):sortValues},pie.sort=function(_){return arguments.length?(sort=_,sortValues=null,pie):sort},pie.startAngle=function(_){return arguments.length?(startAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):startAngle},pie.endAngle=function(_){return arguments.length?(endAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):endAngle},pie.padAngle=function(_){return arguments.length?(padAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):padAngle},pie},arc:function(){var innerRadius=arcInnerRadius,outerRadius=arcOuterRadius,cornerRadius=d3_shape_src_constant(0),padRadius=null,startAngle=arcStartAngle,endAngle=arcEndAngle,padAngle=arcPadAngle,context=null;function arc(){var buffer,r,r0=+innerRadius.apply(this,arguments),r1=+outerRadius.apply(this,arguments),a0=startAngle.apply(this,arguments)-halfPi,a1=endAngle.apply(this,arguments)-halfPi,da=abs(a1-a0),cw=a1>a0;if(context||(context=buffer=src_path()),r1math_epsilon)if(da>math_tau-math_epsilon)context.moveTo(r1*cos(a0),r1*sin(a0)),context.arc(0,0,r1,a0,a1,!cw),r0>math_epsilon&&(context.moveTo(r0*cos(a1),r0*sin(a1)),context.arc(0,0,r0,a1,a0,cw));else{var t0,t1,a01=a0,a11=a1,a00=a0,a10=a1,da0=da,da1=da,ap=padAngle.apply(this,arguments)/2,rp=ap>math_epsilon&&(padRadius?+padRadius.apply(this,arguments):math_sqrt(r0*r0+r1*r1)),rc=math_min(abs(r1-r0)/2,+cornerRadius.apply(this,arguments)),rc0=rc,rc1=rc;if(rp>math_epsilon){var p0=asin(rp/r0*sin(ap)),p1=asin(rp/r1*sin(ap));(da0-=2*p0)>math_epsilon?(a00+=p0*=cw?1:-1,a10-=p0):(da0=0,a00=a10=(a0+a1)/2),(da1-=2*p1)>math_epsilon?(a01+=p1*=cw?1:-1,a11-=p1):(da1=0,a01=a11=(a0+a1)/2)}var x01=r1*cos(a01),y01=r1*sin(a01),x10=r0*cos(a10),y10=r0*sin(a10);if(rc>math_epsilon){var oc,x11=r1*cos(a11),y11=r1*sin(a11),x00=r0*cos(a00),y00=r0*sin(a00);if(da1?0:x<-1?math_pi:Math.acos(x)}((ax*bx+ay*by)/(math_sqrt(ax*ax+ay*ay)*math_sqrt(bx*bx+by*by)))/2),lc=math_sqrt(oc[0]*oc[0]+oc[1]*oc[1]);rc0=math_min(rc,(r0-lc)/(kc-1)),rc1=math_min(rc,(r1-lc)/(kc+1))}}da1>math_epsilon?rc1>math_epsilon?(t0=cornerTangents(x00,y00,x01,y01,r1,rc1,cw),t1=cornerTangents(x11,y11,x10,y10,r1,rc1,cw),context.moveTo(t0.cx+t0.x01,t0.cy+t0.y01),rc1math_epsilon&&da0>math_epsilon?rc0>math_epsilon?(t0=cornerTangents(x10,y10,x11,y11,r0,-rc0,cw),t1=cornerTangents(x01,y01,x00,y00,r0,-rc0,cw),context.lineTo(t0.cx+t0.x01,t0.cy+t0.y01),rc01?_len3-1:0),_key3=1;_key3<_len3;_key3++)measureFieldNames[_key3-1]=arguments[_key3];var filteredReducers={};if(dataModel instanceof datamodel_default.a){var derivations=[].concat(common_utils_toConsumableArray(dataModel.getDerivations().reverse()),common_utils_toConsumableArray(dataModel.getAncestorDerivations().reverse())),nearestReducers=defaultValue(getObjProp(derivations.find(function(derv){return derv.op===dist_datamodel.DM_DERIVATIVES.GROUPBY}),"criteria"),{}),measures=dataModel.getFieldspace().getMeasure();(measureFieldNames=measureFieldNames.length?measureFieldNames:Object.keys(measures)).forEach(function(measureName){if(nearestReducers[measureName])filteredReducers[measureName]=nearestReducers[measureName];else{var measureField=measures[measureName];measureField&&(filteredReducers[measureName]=measureField.defAggFn())}})}return filteredReducers},retrieveFieldDisplayName=function retrieveFieldDisplayName(dm,fieldName){return dm.getFieldspace().fieldsObj()[fieldName].displayName()},sortOrderMap=(_defineProperty(_sortOrderMap={},"asc",function(firstVal,secondVal){return firstVal.localeCompare(secondVal)}),_defineProperty(_sortOrderMap,"desc",function(firstVal,secondVal){return secondVal.localeCompare(firstVal)}),_sortOrderMap),common_utils_intersect=function intersect(arr1,arr2){var _accessors=_slicedToArray(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[function(v){return v},function(v){return v}],2),fn1=_accessors[0],fn2=_accessors[1],set=new Set(arr2.map(function(v){return fn2(v)}));return arr1.filter(function(value){return set.has(fn1(value))})},xhtml="http://www.w3.org/1999/xhtml",src_namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},src_namespace=function(name){var prefix=name+="",i=prefix.indexOf(":");return i>=0&&"xmlns"!==(prefix=name.slice(0,i))&&(name=name.slice(i+1)),src_namespaces.hasOwnProperty(prefix)?{space:src_namespaces[prefix],local:name}:name};var creator=function(name){var fullname=src_namespace(name);return(fullname.local?function creatorFixed(fullname){return function(){return this.ownerDocument.createElementNS(fullname.space,fullname.local)}}:function creatorInherit(name){return function(){var document=this.ownerDocument,uri=this.namespaceURI;return uri===xhtml&&document.documentElement.namespaceURI===xhtml?document.createElement(name):document.createElementNS(uri,name)}})(fullname)};function selector_none(){}var src_selector=function(selector){return null==selector?selector_none:function(){return this.querySelector(selector)}};function selectorAll_empty(){return[]}var selectorAll=function(selector){return null==selector?selectorAll_empty:function(){return this.querySelectorAll(selector)}},matcher=function(selector){return function(){return this.matches(selector)}},sparse=function(update){return new Array(update.length)};function EnterNode(parent,datum){this.ownerDocument=parent.ownerDocument,this.namespaceURI=parent.namespaceURI,this._next=null,this._parent=parent,this.__data__=datum}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(child){return this._parent.insertBefore(child,this._next)},insertBefore:function insertBefore(child,next){return this._parent.insertBefore(child,next)},querySelector:function querySelector(selector){return this._parent.querySelector(selector)},querySelectorAll:function querySelectorAll(selector){return this._parent.querySelectorAll(selector)}};var keyPrefix="$";function bindIndex(parent,group,enter,update,exit,data){for(var node,i=0,groupLength=group.length,dataLength=data.length;ib?1:a>=b?0:NaN}var src_window=function(node){return node.ownerDocument&&node.ownerDocument.defaultView||node.document&&node||node.defaultView};function styleValue(node,name){return node.style.getPropertyValue(name)||src_window(node).getComputedStyle(node,null).getPropertyValue(name)}function classArray(string){return string.trim().split(/^|\s+/)}function classList(node){return node.classList||new ClassList(node)}function ClassList(node){this._node=node,this._names=classArray(node.getAttribute("class")||"")}function classedAdd(node,names){for(var list=classList(node),i=-1,n=names.length;++i=0&&(this._names.splice(i,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(name){return this._names.indexOf(name)>=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 parent=this.parentNode;parent&&parent.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 filterEvents={},on_event=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(filterEvents={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(listener,index,group){return listener=contextListener(listener,index,group),function(event){var related=event.relatedTarget;related&&(related===this||8&related.compareDocumentPosition(this))||listener.call(this,event)}}function contextListener(listener,index,group){return function(event1){var event0=on_event;on_event=event1;try{listener.call(this,this.__data__,index,group)}finally{on_event=event0}}}function onRemove(typename){return function(){var on=this.__on;if(on){for(var o,j=0,i=-1,m=on.length;j=i1&&(i1=i0+1);!(next=updateGroup[i1])&&++i1=0;)(node=group[i])&&(next&&4^node.compareDocumentPosition(next)&&next.parentNode.insertBefore(node,next),next=node);return this},sort:function(compare){function compareNode(a,b){return a&&b?compare(a.__data__,b.__data__):!a-!b}compare||(compare=sort_ascending);for(var groups=this._groups,m=groups.length,sortgroups=new Array(m),j=0;j1?this.each((null==value?function styleRemove(name){return function(){this.style.removeProperty(name)}}:"function"==typeof value?function styleFunction(name,value,priority){return function(){var v=value.apply(this,arguments);null==v?this.style.removeProperty(name):this.style.setProperty(name,v,priority)}}:function styleConstant(name,value,priority){return function(){this.style.setProperty(name,value,priority)}})(name,value,null==priority?"":priority)):styleValue(this.node(),name)},property:function(name,value){return arguments.length>1?this.each((null==value?function propertyRemove(name){return function(){delete this[name]}}:"function"==typeof value?function propertyFunction(name,value){return function(){var v=value.apply(this,arguments);null==v?delete this[name]:this[name]=v}}:function propertyConstant(name,value){return function(){this[name]=value}})(name,value)):this.node()[name]},classed:function(name,value){var names=classArray(name+"");if(arguments.length<2){for(var list=classList(this.node()),i=-1,n=names.length;++i=0&&(name=t.slice(i+1),t=t.slice(0,i)),{type:t,name:name}})}(typename+""),n=typenames.length;if(!(arguments.length<2)){for(on=value?onAdd:onRemove,null==capture&&(capture=!1),i=0;i=0&&(name=t.slice(i+1),t=t.slice(0,i)),t&&!types.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:name}})}(typename+"",_),i=-1,n=T.length;if(!(arguments.length<2)){if(null!=callback&&"function"!=typeof callback)throw new Error("invalid callback: "+callback);for(;++i0)for(var n,t,args=new Array(n),i=0;iclickDistance2}gestures.mouse("drag")}function mouseupped(){src_select(on_event.view).on("mousemove.drag mouseup.drag",null),function yesdrag(view,noclick){var root=view.document.documentElement,selection=src_select(view).on("dragstart.drag",null);noclick&&(selection.on("click.drag",noevent,!0),setTimeout(function(){selection.on("click.drag",null)},0)),"onselectstart"in root?selection.on("selectstart.drag",null):(root.style.MozUserSelect=root.__noselect,delete root.__noselect)}(on_event.view,mousemoving),noevent(),gestures.mouse("end")}function touchstarted(){if(filter.apply(this,arguments)){var i,gesture,touches=on_event.changedTouches,c=container.apply(this,arguments),n=touches.length;for(i=0;i=0&&t._call.call(null,e),t=t._next;--timer_frame}()}finally{timer_frame=0,function nap(){var t0,t2,t1=taskHead,time=1/0;for(;t1;)t1._call?(time>t1._time&&(time=t1._time),t0=t1,t1=t1._next):(t2=t1._next,t1._next=null,t1=t0?t0._next=t2:taskHead=t2);taskTail=t0,sleep(time)}(),clockNow=0}}function poke(){var now=clock.now(),delay=now-clockLast;delay>pokeDelay&&(clockSkew-=delay,clockLast=now)}function sleep(time){timer_frame||(timeout&&(timeout=clearTimeout(timeout)),time-clockNow>24?(time<1/0&&(timeout=setTimeout(wake,time-clock.now()-clockSkew)),timer_interval&&(timer_interval=clearInterval(timer_interval))):(timer_interval||(clockLast=clock.now(),timer_interval=setInterval(poke,pokeDelay)),timer_frame=1,setFrame(wake)))}Timer.prototype=timer_timer.prototype={constructor:Timer,restart:function restart(callback,delay,time){if("function"!=typeof callback)throw new TypeError("callback is not a function");time=(null==time?now():+time)+(null==delay?0:+delay),this._next||taskTail===this||(taskTail?taskTail._next=this:taskHead=this,taskTail=this),this._call=callback,this._time=time,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var src_timeout=function(callback,delay,time){var t=new Timer;return delay=null==delay?0:+delay,t.restart(function(elapsed){t.stop(),callback(elapsed+delay)},delay,time),t},emptyOn=src_dispatch("start","end","cancel","interrupt"),emptyTween=[],CREATED=0,SCHEDULED=1,STARTING=2,STARTED=3,RUNNING=4,ENDING=5,ENDED=6,transition_schedule=function(node,name,id,index,group,timing){var schedules=node.__transition;if(schedules){if(id in schedules)return}else node.__transition={};!function schedule_create(node,id,self){var tween,schedules=node.__transition;function start(elapsed){var i,j,n,o;if(self.state!==SCHEDULED)return stop();for(i in schedules)if((o=schedules[i]).name===self.name){if(o.state===STARTED)return src_timeout(start);o.state===RUNNING?(o.state=ENDED,o.timer.stop(),o.on.call("interrupt",node,node.__data__,o.index,o.group),delete schedules[i]):+iCREATED)throw new Error("too late; already scheduled");return schedule}function schedule_set(node,id){var schedule=schedule_get(node,id);if(schedule.state>STARTED)throw new Error("too late; already running");return schedule}function schedule_get(node,id){var schedule=node.__transition;if(!schedule||!(schedule=schedule[id]))throw new Error("transition not found");return schedule}function tweenValue(transition,name,value){var id=transition._id;return transition.each(function(){var schedule=schedule_set(this,id);(schedule.value||(schedule.value={}))[name]=value.apply(this,arguments)}),function(node){return schedule_get(node,id).value[name]}}var transition_interpolate=function(a,b){var c;return("number"==typeof b?src_number:b instanceof color_color?src_rgb:(c=color_color(b))?(b=c,src_rgb):src_string)(a,b)};var transition_selection_Selection=src_selection.prototype.constructor;function style_styleRemove(name){return function(){this.style.removeProperty(name)}}var transition_id=0;function Transition(groups,parents,name,id){this._groups=groups,this._parents=parents,this._name=name,this._id=id}function newId(){return++transition_id}var selection_prototype=src_selection.prototype;Transition.prototype=function src_transition_transition(name){return src_selection().transition(name)}.prototype={constructor:Transition,select:function(select){var name=this._name,id=this._id;"function"!=typeof select&&(select=src_selector(select));for(var groups=this._groups,m=groups.length,subgroups=new Array(m),j=0;j=0&&(t=t.slice(0,i)),!t||"start"===t})}(name)?init:schedule_set;return function(){var schedule=sit(this,id),on=schedule.on;on!==on0&&(on1=(on0=on).copy()).on(name,listener),schedule.on=on1}}(id,name,listener))},attr:function(name,value){var fullname=src_namespace(name),i="transform"===fullname?interpolateTransformSvg:transition_interpolate;return this.attrTween(name,"function"==typeof value?(fullname.local?function attr_attrFunctionNS(fullname,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttributeNS(fullname.space,fullname.local))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0,string1,value1=value(this);if(null!=value1)return(string0=this.getAttribute(name))===(string1=value1+"")?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1));this.removeAttribute(name)}})(fullname,i,tweenValue(this,"attr."+name,value)):null==value?(fullname.local?function attr_attrRemoveNS(fullname){return function(){this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrRemove(name){return function(){this.removeAttribute(name)}})(fullname):(fullname.local?function attr_attrConstantNS(fullname,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttributeNS(fullname.space,fullname.local);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}:function attr_attrConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=this.getAttribute(name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}})(fullname,i,value))},attrTween:function(name,value){var key="attr."+name;if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;var fullname=src_namespace(name);return this.tween(key,(fullname.local?function attrTweenNS(fullname,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolateNS(fullname,i){return function(t){this.setAttributeNS(fullname.space,fullname.local,i(t))}}(fullname,i)),t0}return tween._value=value,tween}:function attrTween(name,value){var t0,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t0=(i0=i)&&function attrInterpolate(name,i){return function(t){this.setAttribute(name,i(t))}}(name,i)),t0}return tween._value=value,tween})(fullname,value))},style:function(name,value,priority){var i="transform"==(name+="")?interpolateTransformCss:transition_interpolate;return null==value?this.styleTween(name,function styleNull(name,interpolate){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),string1=(this.style.removeProperty(name),styleValue(this,name));return string0===string1?null:string0===string00&&string1===string10?interpolate0:interpolate0=interpolate(string00=string0,string10=string1)}}(name,i)).on("end.style."+name,style_styleRemove(name)):"function"==typeof value?this.styleTween(name,function style_styleFunction(name,interpolate,value){var string00,string10,interpolate0;return function(){var string0=styleValue(this,name),value1=value(this),string1=value1+"";return null==value1&&(this.style.removeProperty(name),string1=value1=styleValue(this,name)),string0===string1?null:string0===string00&&string1===string10?interpolate0:(string10=string1,interpolate0=interpolate(string00=string0,value1))}}(name,i,tweenValue(this,"style."+name,value))).each(function styleMaybeRemove(id,name){var on0,on1,listener0,remove,key="style."+name,event="end."+key;return function(){var schedule=schedule_set(this,id),on=schedule.on,listener=null==schedule.value[key]?remove||(remove=style_styleRemove(name)):void 0;on===on0&&listener0===listener||(on1=(on0=on).copy()).on(event,listener0=listener),schedule.on=on1}}(this._id,name)):this.styleTween(name,function style_styleConstant(name,interpolate,value1){var string00,interpolate0,string1=value1+"";return function(){var string0=styleValue(this,name);return string0===string1?null:string0===string00?interpolate0:interpolate0=interpolate(string00=string0,value1)}}(name,i,value),priority).on("end.style."+name,null)},styleTween:function(name,value,priority){var key="style."+(name+="");if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function styleTween(name,value,priority){var t,i0;function tween(){var i=value.apply(this,arguments);return i!==i0&&(t=(i0=i)&&function styleInterpolate(name,i,priority){return function(t){this.style.setProperty(name,i(t),priority)}}(name,i,priority)),t}return tween._value=value,tween}(name,value,null==priority?"":priority))},text:function(value){return this.tween("text","function"==typeof value?function text_textFunction(value){return function(){var value1=value(this);this.textContent=null==value1?"":value1}}(tweenValue(this,"text",value)):function text_textConstant(value){return function(){this.textContent=value}}(null==value?"":value+""))},remove:function(){return this.on("end.remove",function removeFunction(id){return function(){var parent=this.parentNode;for(var i in this.__transition)if(+i!==id)return;parent&&parent.removeChild(this)}}(this._id))},tween:function(name,value){var id=this._id;if(name+="",arguments.length<2){for(var t,tween=schedule_get(this.node(),id).tween,i=0,n=tween.length;iSTARTING&&schedule.state4&&void 0!==arguments[4]?arguments[4]:{},keyFn=arguments.length>5?arguments[5]:void 0;(parent instanceof HTMLElement||parent instanceof SVGElement)&&(parent=renderer_utils_selectElement(parent));var filter,selectorVal=selector?selector[0]:null,selectorType=null,actualSelector=null,element=null,enterSel=null,mergeSel=null;selectorVal?"#"===selectorVal?(selectorType="id",actualSelector=selector):(selectorType="class",actualSelector="."===selector[0]?selector:".".concat(selector)):(actualSelector=elemType,filter=!0),element=parent.selectAll(actualSelector),filter&&(element=element.filter(function(){return this.parentNode===parent.node()})),enterSel=(element=element.data(data,keyFn)).enter().append(elemType||"div"),callbacks.enter&&enterSel.each(function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];callbacks.enter.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),mergeSel=enterSel.merge(element),callbacks.update&&mergeSel.each(function(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];callbacks.update.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),"class"===selectorType?mergeSel.classed("."===selectorVal?selector.substring(1,selector.length):selector,!0):"id"===selectorType&&mergeSel.attr("id",selector.substring(1,selector.length));var exitSel=element.exit();return callbacks.exit?exitSel.each(function(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];callbacks.exit.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}):exitSel.remove(),mergeSel},applyStyle=function applyStyle(elem,styleObj){return Object.entries(styleObj).forEach(function(d){elem.style(d[0],d[1])},void 0),elem},setElementAttrs=function setElementAttrs(element,attrs){for(var key in attrs)({}).hasOwnProperty.call(attrs,key)&&element.attr(key,attrs[key])},renderer_utils_setAttrs=function setAttrs(element,attrs,className){return element instanceof src_selection||(element=renderer_utils_selectElement(element)),void 0!==className?element.selectAll(".".concat(className)).each(function(){setElementAttrs(src_select(this),attrs)}):setElementAttrs(element,attrs),element},renderer_utils_setStyles=function setStyles(element,styles){for(var key in element instanceof src_selection||(element=renderer_utils_selectElement(element)),styles)({}).hasOwnProperty.call(styles,key)&&element.style(key,styles[key]);return element},renderer_utils_createElements=function createElements(params){var data,sel,container=src_select(params.container);"number"==typeof(data=params.data)&&(data=Array(data).fill().map(function(d,i){return i})),sel=container.selectAll(params.selector).data(data),(sel=container.selectAll(params.selector).filter(function(){return this.parentNode===container.node()}).data(params.data)).enter().append(params.append).merge(sel).each(function(d,i){params.each(d,src_select(this),i)}).attr("class",params.className||""),sel.exit().remove()},renderer_utils_getClientPoint=function getClientPoint(){var pos=src_point.apply(void 0,arguments);return{x:pos[0],y:pos[1]}},renderer_utils_getEvent=function getEvent(){return on_event},renderer_utils_getD3Drag=function getD3Drag(){return src_drag},renderer_utils_getSmartComputedStyle=function getSmartComputedStyle(group,css){var textEl,mandatoryStyle={"fill-opacity":0},className="string"==typeof css?css:css instanceof Array?css.join(" "):void 0;textEl=group.node()instanceof HTMLElement?group.append("div").html("W"):group.append("text").text("W"),className?textEl.attr("class",className):"object"===renderer_utils_typeof(css)&&(delete css["fill-opacity"],mergeRecursive(mandatoryStyle,css)),textEl.style(mandatoryStyle);var computedStyle=window.getComputedStyle(textEl.node()),styleForSmartLabel={fontSize:computedStyle.fontSize,fontFamily:computedStyle.fontFamily,fontWeight:computedStyle.fontWeight,fontStyle:computedStyle.fontStyle};return textEl.remove(),styleForSmartLabel},hasTouch=function hasTouch(){return"ontouchstart"in document.documentElement},hyperdis=__webpack_require__(5),hyperdis_default=__webpack_require__.n(hyperdis);function store_slicedToArray(arr,i){return function store_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function store_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function store_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function store_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:function(){return{}};return props.forEach(function(prop){obj[prop]||(obj[prop]=val()),obj=obj[prop]}),obj},fetchPropValues=function fetchPropValues(propNames,params,deps){return params.map(function(param,i){var prop=propNames[i];return param.map(function(val){return void 0===val||null===val?val:val[deps[prop]]})})},setContexts=function setContexts(contexts,propObj,contextMap){var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,_iterator=propObj.keys()[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0){var key=_step.value;contexts[key]={context:contextMap[key],deps:propObj.get(key).depProps}}}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{_iteratorNormalCompletion||null==_iterator.return||_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}return contexts},store_registerListener=function registerListener(context,type){for(var _len=arguments.length,options=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)options[_key-2]=arguments[_key];var propList=options[0],callBack=options[1],instantCall=options[2],_options$=options[3],namespaceInf=void 0===_options$?{}:_options$,props=propList;Array.isArray(propList)||(props=[propList]);var ns=namespaceInf.namespace,callbackFn=function(propNames,namespaceVal){return function(){var commits=context._savedCommits,propListenerMap=context._propListenerMap;if(!propNames.some(function(prop){return getObjProp(propListenerMap,prop,"disabled")})){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];if(namespaceVal){var listenersObj=context._registeredListeners[namespaceVal],contextMap=context._contextMap[namespaceVal],contextsObj={};for(var key in propNames.forEach(function(prop){var commitsObj=defaultValue(getObjProp(commits,prop,type),{}),listeners=listenersObj[prop].subNamespaces,propDeps=propListenerMap[prop][type];for(var nm in commitsObj){var fnInf=defaultValue(propDeps[nm],{fns:0}),fns=fnInf.fns;fns>0&&(setContexts(contextsObj,listeners[nm],contextMap),fns--),fns<=0&&delete commitsObj[nm],fnInf.fns=fns}}),contextsObj){var obj=contextsObj[key];callBack.apply(void 0,[obj.context].concat(store_toConsumableArray(fetchPropValues(propNames,params,obj.deps))))}}else callBack.apply(void 0,params)}}}(props,ns),fn=context.model[type](props,callbackFn,instantCall);ns&&function registerPropInMaps(store,props,namespaceInf,type){var registeredListeners=store._registeredListeners,propListenerMap=store._propListenerMap,subNamespace=namespaceInf.subNamespace,ns=namespaceInf.namespace;initProp(registeredListeners,[ns]),props.forEach(function(prop){var subNamespaces=defaultValue(getObjProp(registeredListeners,ns,prop,"subNamespace"),[]),fns=defaultValue(getObjProp(propListenerMap,prop,type,"fns"),0);fns++,subNamespace&&subNamespaces.push(subNamespace),registeredListeners[ns][prop]={subNamespace:subNamespaces,allProps:props,subNamespaces:{}},initProp(propListenerMap,[prop,type]),propListenerMap[prop][type]={fns:fns,_fnCount:fns}})}(context,props,namespaceInf,type),function addListenerToNamespace(namespaceInf,fn,context){var key=namespaceInf.key,namespace=namespaceInf.id,listeners=context._listeners;if(namespace){!listeners.get(namespace)&&listeners.set(namespace,new Map);var namespaceListeners=listeners.get(namespace);key||(key=namespaceListeners.size),namespaceListeners.set(key,fn)}else key=key||listeners.size,listeners.set(key,fn)}(namespaceInf,fn,context)},store_createMap=function createMap(){return new Map},listenerTypes=["next","on"],removePropValue=function removePropValue(context,map,propInf){var sns=propInf.subNamespace,prop=propInf.prop,propObj=propInf.propListenerMap[prop];if(listenerTypes.forEach(function(type){type in propObj&&delete propObj[type][sns]}),map.has(sns)){var value=context.get(prop);value instanceof Object&&sns in value&&delete value[sns],map.delete(sns)}},store_Store=function(){function Store(config){!function store_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Store),this.model=hyperdis_default.a.create(config),this._listeners=new Map,this._registeredListeners={},this._contextMap={},this._commits={},this._savedCommits={},this._queuedProps={},this._propListenerMap={},this._locked=!1}return function store_createClass(Constructor,protoProps,staticProps){return protoProps&&store_defineProperties(Constructor.prototype,protoProps),staticProps&&store_defineProperties(Constructor,staticProps),Constructor}(Store,[{key:"lockModel",value:function lockModel(){return this.model.lock(),this._locked=!0,this}},{key:"unlockModel",value:function unlockModel(){return this._locked=!1,this.model.unlock(),this}},{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"lockCommits",value:function lockCommits(props){var _this=this;return props.forEach(function(prop){_this._commits[prop]={locked:!0,queue:[]}}),this}},{key:"unlockCommits",value:function unlockCommits(props){var _this2=this,commitsObj=this._commits;return this.lockModel(),props.forEach(function(prop){commitsObj[prop].locked=!1;var queuedProps={},queue=commitsObj[prop].queue;queue.forEach(function(params){var _params=store_slicedToArray(params,3),propName=_params[0],value=_params[1],namespace=_params[2];if(namespace){var propObj=initProp(queuedProps,[propName,namespace]);Object.assign(propObj,value)}}),queue.forEach(function(params){var _params2=store_slicedToArray(params,3),propName=_params2[0],value=_params2[1],namespace=_params2[2];_this2.commit(propName,propName in queuedProps?queuedProps[propName][namespace]:value,namespace)}),delete commitsObj[prop]}),this.unlockModel(),this}},{key:"addSubNamespace",value:function addSubNamespace(sns,namespace,context){var listeners=this._registeredListeners[namespace],propListenerMap=this._propListenerMap;initProp(this._contextMap,[namespace]),this._contextMap[namespace][sns]=context;var _loop=function _loop(key){var obj=listeners[key],propObj=propListenerMap[key],propFns=listenerTypes.reduce(function(acc,type){var val=defaultValue(getObjProp(propObj,type,"fns"),0);return val&&(acc[type]=val),acc},{}),allProps=obj.allProps,subNamespaces=obj.subNamespaces,subNamespace=obj.subNamespace;(subNamespace.length?subNamespace:[sns]).forEach(function(ns){var nsObj=ns instanceof Function?ns(context):ns,names=function retrieveNamespaces(names,key){return names instanceof Object?[names[key]]:names instanceof Array?names:[names]}(nsObj,key),depProps=allProps.reduce(function(acc,prop){return acc[prop]=ns instanceof Function?nsObj[prop]:ns,acc},{});names.forEach(function(nm){for(var type in initProp(subNamespaces,[nm],store_createMap).set(sns,{depProps:depProps}),propFns){initProp(propObj,[type,nm]);var fns=propFns[type];propObj[type][nm]={fns:fns,_fnCount:fns}}})})};for(var key in listeners)_loop(key);return this}},{key:"commit",value:function commit(propName,value,namespace){var disableListener=arguments.length>3&&void 0!==arguments[3]&&arguments[3],sanitizedVal=value,commits=this._commits,savedCommits=this._savedCommits,locked=getObjProp(commits,propName,"locked"),propListenerMap=this._propListenerMap[propName]||{};if(propListenerMap.disabled=disableListener,locked)return commits[propName].queue.push([propName,value,namespace]),this;if(namespace){if(this._locked){var queuedProps=initProp(this._queuedProps,[propName]);queuedProps[namespace]=value,sanitizedVal=queuedProps}else(sanitizedVal=defaultValue(this.get(propName),{}))[namespace]=value;listenerTypes.forEach(function(type){initProp(savedCommits,[propName,type]),savedCommits[propName][type][namespace]=!0,getObjProp(propListenerMap,type,namespace)&&(propListenerMap[type][namespace].fns=propListenerMap[type][namespace]._fnCount)})}return this.model.prop(propName,sanitizedVal),this}},{key:"registerChangeListener",value:function registerChangeListener(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];return store_registerListener.apply(void 0,[this,"next"].concat(params)),this}},{key:"registerImmediateListener",value:function registerImmediateListener(){for(var _len4=arguments.length,params=new Array(_len4),_key4=0;_key4<_len4;_key4++)params[_key4]=arguments[_key4];store_registerListener.apply(void 0,[this,"on"].concat(params))}},{key:"get",value:function get(propName,subNamespace){var value=this.model.prop(propName);return subNamespace?value&&value[subNamespace]:value}},{key:"computed",value:function computed(propName,callBack){return this.model.calculatedProp(propName,callBack)}},{key:"append",value:function append(){var _this$model;return(_this$model=this.model).append.apply(_this$model,arguments),this}},{key:"unsubscribeAll",value:function unsubscribeAll(){return Object.values(this._listeners).forEach(function(fn){return fn()}),this}},{key:"unsubscribe",value:function unsubscribe(){var namespaceInf=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},id=namespaceInf.id,key=namespaceInf.key,listenersMap=this._listeners,listeners=listenersMap.get(id);if(key){var fn=listenersMap.get(key);fn&&fn()}else{var _iteratorNormalCompletion2=!0,_didIteratorError2=!1,_iteratorError2=void 0;try{for(var _step2,_iterator2=listeners.values()[Symbol.iterator]();!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=!0){(0,_step2.value)()}}catch(err){_didIteratorError2=!0,_iteratorError2=err}finally{try{_iteratorNormalCompletion2||null==_iterator2.return||_iterator2.return()}finally{if(_didIteratorError2)throw _iteratorError2}}listenersMap.set(id,[])}return this}},{key:"removeSubNamespace",value:function removeSubNamespace(subNamespace,namespace){var listenerMap=this._registeredListeners,contextMap=this._contextMap,propListenerMap=this._propListenerMap,listenersObj=listenerMap[namespace];for(var prop in listenersObj){var subNamespaces=listenersObj[prop].subNamespaces,propInf={subNamespace:subNamespace,prop:prop,propListenerMap:propListenerMap};if(subNamespaces[subNamespace])removePropValue(this,subNamespaces[subNamespace],propInf),delete subNamespaces[subNamespace];else for(var ns in subNamespaces){var snsMap=subNamespaces[ns];removePropValue(this,snsMap,propInf),snsMap.size||delete subNamespaces[ns]}}return delete contextMap[namespace][subNamespace],this}}]),Store}(),store_transactor=function transactor(holder,options,model){var conf,namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},store=model instanceof store_Store?model:new store_Store({}),stateProps={},namespace=namespaceInf.namespace,subNamespace=namespaceInf.subNamespace;for(var prop in options)if({}.hasOwnProperty.call(options,prop)){conf=options[prop];var nameSpaceProp=namespace?"".concat(namespace,".").concat(prop):prop;if(subNamespace){var value=defaultValue(store.get(nameSpaceProp),{});value[subNamespace]=conf.value,stateProps[nameSpaceProp]=value}else stateProps[prop]=conf.value;holder[prop]=function(context,meta,nsProp){return function(){for(var _len5=arguments.length,params=new Array(_len5),_key5=0;_key5<_len5;_key5++)params[_key5]=arguments[_key5];if(params.length){var _ref$takesMultiplePar=(meta||{}).takesMultipleParams,takesMultipleParams=void 0!==_ref$takesMultiplePar&&_ref$takesMultiplePar,val=takesMultipleParams?params:params[0];if(meta){var values,prevVal=context.get(nsProp,subNamespace),sanitization=meta.sanitization,typeCheck=meta.typeCheck,typeExpected=meta.typeExpected;if("function"==typeof sanitization&&(val=sanitization(val,prevVal,holder)),"function"==typeof typeCheck)typeCheck(val)&&(values=val);else"string"==typeof typeCheck&&"constructor"===typeCheck?val&&val.constructor.name===typeExpected&&(values=val):values=val;var preset=meta.preset,oldValues=toArray(context.get(nsProp,subNamespace));preset&&preset(values,holder),takesMultipleParams&&oldValues.forEach(function(value,i){void 0===values[i]&&(values[i]=value)}),values&&context.commit(nsProp,values,subNamespace)}else context.commit(nsProp,val,subNamespace);return holder}return context.get(nsProp,subNamespace)}}(store,conf.meta,nameSpaceProp,Array.isArray(conf.value))}if(subNamespace)for(var key in stateProps)store.commit(key,stateProps[key][subNamespace],subNamespace);else void 0===namespace?store.append(stateProps):store.append(namespace,stateProps);return[holder,store]},SmartlabelManager=__webpack_require__(3),SmartlabelManager_default=__webpack_require__.n(SmartlabelManager),events=["initialized","beforeupdate","updated","beforedraw","drawn","beforeremove","removed","animationend"],EVENT_LIST=[];["canvas","unit","layer","axis","facet-headers","legend","caption"].forEach(function(composition){events.forEach(function(event){EVENT_LIST.push("".concat(composition,".").concat(event))})});var event_list=EVENT_LIST;function lifecycle_manager_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=lifeCycles,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(eventName){var _this4=this;setTimeout(function(){_this4._notifiers[eventName]=lifecycle_manager_resolver,_this4._promises.set(eventName,_this4._makeNotifierPromise(eventName))},0)}}]),LifeCycleManager}(),src_InvalidAwareTypes=datamodel_default.a.InvalidAwareTypes,DRAG="drag",HOVER="hover",SELECTIONDRAG="selectiondrag",CLICK="click",LONGTOUCH="longtouch",TOUCHDRAG="touchdrag",ALL_ACTIONS="*",SELECTION_NEW_ENTRY=1,SELECTION_NEW_EXIT=-1,SELECTION_NULL=0,SELECTION_OLD_ENTRY=2,SELECTION_OLD_EXIT=-2;function selection_set_defineProperties(target,props){for(var i=0;i0?(set[key]===SELECTION_OLD_ENTRY&&retObj.entrySet[0].push(key),set[key]===SELECTION_NEW_ENTRY&&retObj.entrySet[1].push(key)):set[key]<0&&(set[key]===SELECTION_OLD_EXIT&&retObj.exitSet[0].push(key),set[key]===SELECTION_NEW_EXIT&&retObj.exitSet[1].push(key)),retObj.completeSet.push(key);return["entrySet","exitSet"].forEach(function(type){retObj[type]=retObj[type].map(function(e){return e.map(Number)})}),retObj.completeSet=retObj.completeSet.map(Number),retObj}},{key:"reset",value:function reset(ids){var set=this._set;if(ids)ids.forEach(function(i){set[i]=SELECTION_NULL});else{var lockedSel=this._lockedSelection;for(var key in set)key in lockedSel||(set[key]=SELECTION_NULL)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var set=this._set,addSet=[];for(var key in set)set[key]===SELECTION_NEW_ENTRY&&addSet.push(key);return addSet}},{key:"getExistingEntrySet",value:function getExistingEntrySet(addSet){var set=this._set;return addSet.filter(function(d){return set[d]===SELECTION_NEW_ENTRY||set[d]===SELECTION_OLD_ENTRY})}},{key:"getExistingExitSet",value:function getExistingExitSet(removeSet){var set=this._set;return removeSet.filter(function(d){return set[d]===SELECTION_NEW_EXIT||set[d]===SELECTION_OLD_EXIT})}},{key:"getOldEntry",value:function getOldEntry(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_ENTRY&&updateSet.push(key);return updateSet}},{key:"getOldExit",value:function getOldExit(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_EXIT&&updateSet.push(key);return updateSet}},{key:"getExitSet",value:function getExitSet(){var set=this._set,removeSet=[];for(var key in set)set[key]===SELECTION_NEW_EXIT&&removeSet.push(key);return removeSet}},{key:"getCompleteSet",value:function getCompleteSet(){var set=this._set,completeSet=[];for(var key in set)completeSet.push(key);return completeSet}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var set=this._set;for(var key in set)set[key]===SELECTION_NEW_ENTRY?set[key]=SELECTION_NEW_EXIT:set[key]===SELECTION_NEW_EXIT?set[key]=SELECTION_NEW_ENTRY:set[key]===SELECTION_OLD_ENTRY?set[key]=SELECTION_OLD_EXIT:set[key]=SELECTION_OLD_ENTRY;return this}}]),SelectionSet}();function helper_toConsumableArray(arr){return function helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},sideEffectStore=this.sideEffects(),sideEffect=sideEffectStore[name],disable=!1;options.filter&&options.filter(sideEffect)&&(disable=!0),!disable&&sideEffectStore[name].apply(selectionSet,payload,options)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(map){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,map||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(behaviour,payload){var propagationInfo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},propagate=void 0===propagationInfo.propagate||propagationInfo.propagate,action=this._actions.behavioural[behaviour],sideEffects=function getSideEffects(behaviour,behaviourEffectMap){var sideEffects=[];for(var key in behaviourEffectMap){var behaviours=key.split(",");behaviours.some(function(d){return d===behaviour})&&sideEffects.push({effects:behaviourEffectMap[key],behaviours:behaviours})}return sideEffects}(behaviour,this._behaviourEffectMap);if(this._propagationInf=propagationInfo,action){var selectionSet=action.dispatch(payload),propagationSelectionSet=this.getPropagationSelectionSet(selectionSet);this._entryExitSet[behaviour]=propagationSelectionSet;var shouldApplySideEffects=this.shouldApplySideEffects(propagate);if(propagate&&this.propagate(behaviour,payload,selectionSet.find(function(d){return d.sourceSelectionSet}),sideEffects),shouldApplySideEffects){var applicableSideEffects=this.getApplicableSideEffects(sideEffects,payload,propagationInfo);this.applySideEffects(applicableSideEffects,propagationSelectionSet,payload)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(selectionSet){return selectionSet.find(function(d){return!d.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(behaviour,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",behaviourConditions=this._sourceBehaviours[behaviour]||(this._sourceBehaviours[behaviour]={});return value instanceof Function?behaviourConditions[key]=value:behaviourConditions[key]=function(){return value},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(sideEffect,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",sideEffectConditions=this._sourceSideEffects[sideEffect]||(this._sourceSideEffects[sideEffect]={});value instanceof Function?sideEffectConditions[key]=value:sideEffectConditions[key]=function(){return value}}},{key:"removeSideEffectPolicy",value:function removeSideEffectPolicy(sideEffect,key){return delete this._sourceSideEffects[sideEffect][key],this}},{key:"removeBehaviourPolicy",value:function removeBehaviourPolicy(behaviour,key){return delete this._sourceBehaviours[behaviour][key],this}},{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(fn){return changeSideEffectAvailability(this,fn,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(fn){return changeSideEffectAvailability(this,fn,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(behaviour,physicalAction){var actionBehaviourMap=this._actionBehaviourMap;for(var key in actionBehaviourMap)if(key===physicalAction){var behaviourMap=actionBehaviourMap[key];behaviourMap.behaviours=behaviourMap.behaviours.filter(function(d){return d!==behaviour}),this.mapActionsAndBehaviour(key)}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(sideEffect,behaviour){var behaviourEffectMap=this._behaviourEffectMap;return behaviourEffectMap[behaviour]=behaviourEffectMap[behaviour].filter(function(d){return(d.name||d)!==sideEffect}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects){return sideEffects}},{key:"attachPropagationListener",value:function attachPropagationListener(dataModel){return dataModel.unsubscribe("propagation"),dataModel.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var _this2=this;return function(propValue){var payload=propValue.payload,action=payload.action;_this2.dispatchBehaviour(action,payload,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(uniqueIds,behaviouralActions){var behaviours=behaviouralActions||this._actions.behavioural,selectionSet=this._selectionSet,volatileSelectionSet=this._volatileSelectionSet;for(var key in behaviours)({}).hasOwnProperty.call(behaviours,key)&&(selectionSet[key]=new src_selection_set(uniqueIds),volatileSelectionSet[key]=new src_selection_set(uniqueIds,!0),this._entryExitSet[key]=null);return this._volatileSelectionSet=volatileSelectionSet,this.selectionSet(selectionSet),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 sideEffectDefinitions=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(context,sideEffects){var sideEffectsMap=context._sideEffects;return(sideEffects=sideEffects instanceof Array?sideEffects:Object.values(sideEffects)).forEach(function(SideEffect){var formalName=SideEffect.formalName(),sideEffectInstance=sideEffectsMap[formalName];sideEffectsMap[formalName]=sideEffectInstance||new SideEffect(context)}),sideEffectsMap}(this,sideEffectDefinitions)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(actions){var initedActions=function initializePhysicalActions(context,actions){var physicalActions={};for(var name in actions)({}).hasOwnProperty.call(name,actions)||(physicalActions[name]=actions[name](context));return physicalActions}(this,actions);return Object.assign(this._actions.physical,initedActions),this}},{key:"propagateWith",value:function propagateWith(action,fields){var append=arguments.length>2&&void 0!==arguments[2]&&arguments[2],behaviouralActions=this._actions.behavioural;if(action===ALL_ACTIONS)for(var key in behaviouralActions)this._propagationFields[key]={fields:fields,append:append};else this._propagationFields[action]={fields:fields,append:append};return this}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(phyAction){var initedPhysicalActions=this._actions.physical,map=this._actionBehaviourMap;for(var action in map)if(!{}.hasOwnProperty.call(action,map)&&action===(phyAction||action)){var target=void 0,mapObj=map[action];target=mapObj.target;var touch=mapObj.touch;target||(target=this.context.getDefaultTargetContainer()),(hasTouch()?!0===touch||void 0===touch:!touch)&&this.bindActionWithBehaviour(initedPhysicalActions[action],target,mapObj.behaviours)}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(map){return this._actionBehaviourMap=mergeRecursive(this._actionBehaviourMap,map),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(action,targets,behaviourList){var _this3=this;return"string"==typeof targets&&(targets=[targets]),targets.forEach(function(target){var mount=_this3.context.mount(),nodes=target.node instanceof Function?target:renderer_utils_selectElement(mount).selectAll(target);nodes.empty()||(nodes instanceof Array?nodes.forEach(function(node){action(renderer_utils_selectElement(node),behaviourList)}):action(nodes,behaviourList))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(criteria){var propagationInf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=this.context,filteredDataModel=propagationInf.data?propagationInf.data:context.getDataModelFromIdentifiers(criteria,"all");return{model:filteredDataModel,uids:null===criteria?null:propagationInf.data?propagationInf.entryRowIds:filteredDataModel[0].getUids()}}},{key:"getSelectionSets",value:function getSelectionSets(action){var sourceId=this.context.id(),propagationSource=(this._propagationInf||{}).sourceId,applicableSelectionSets=[];return propagationSource!==sourceId&&(applicableSelectionSets=[this._volatileSelectionSet[action]]),propagationSource&&applicableSelectionSets.push(this.selectionSet()[action]),applicableSelectionSets}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(behaviour){return this._entryExitSet[behaviour]}}]),Firebolt}();function generic_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},sourceIdentifiers=propagationInf.sourceIdentifiers;return sourceIdentifiers?sourceIdentifiers.getSchema().map(function(d){return d.name}):criteria instanceof Array?criteria[0]:Object.keys(criteria||{})}(propagationInf,payload.criteria),sourceSelectionSet:!0===selectionSet._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}();function volatile_typeof(obj){return(volatile_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function volatile_defineProperties(target,props){for(var i=0;iydom[0]?ydom:xdom,max=min===ydom?xdom:ydom;min[1]100&&Math.abs(startPos.x-endPos.x)<=5)){endPos.x=Math.max(0,Math.min(endPos.x,drawingInf.width)),endPos.y=Math.max(0,Math.min(endPos.y,drawingInf.height));var payload=drag_action_config(firebolt.context.getSourceInfo(),{startPos:startPos,endPos:endPos,snap:!0},firebolt.context.data().getFieldsConfig());payload.dragEnd=!0,behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)})}}))},physical_hover=function hover(firebolt){return function(targetEl,behaviours){var dispatchBehaviour=function dispatchBehaviour(args){var event=renderer_utils_getEvent(),context=firebolt.context,mode=context.config().interaction.tooltip.mode,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{getAllPoints:"consolidated"===mode||"fragmented"===mode,data:args,event:event}),payload={criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos,mode:mode};behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()};targetEl.on("mouseover",dispatchBehaviour).on("mousemove",dispatchBehaviour).on("mouseout",function(){behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})})})}},helpers_generatePayloadFromEvent=function generatePayloadFromEvent(args,event,firebolt){var context=firebolt.context,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event.touches?event.touches[0]:event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{data:args,event:event});return{criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos}},physical_click=function click(firebolt){return function(targetEl,behaviours){targetEl.on("click",function dispatchBehaviour(args){var event=renderer_utils_getEvent(),payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()})}};function physical_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var physicalActions=(physical_defineProperty(_physicalActions={},DRAG,function drag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt)}}),physical_defineProperty(_physicalActions,HOVER,physical_hover),physical_defineProperty(_physicalActions,CLICK,physical_click),physical_defineProperty(_physicalActions,LONGTOUCH,function longtouch(firebolt){return function(targetEl,behaviours){var event,touchEnd;touchEnd=!1,event=renderer_utils_getEvent(),targetEl.on("touchstart",function(args){event=renderer_utils_getEvent(),touchEnd=!1,setTimeout(function(){touchEnd?behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})}):function dispatchBehaviour(args){var payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()}(args)},100)}).on("touchend",function(){touchEnd=!0})}}),physical_defineProperty(_physicalActions,TOUCHDRAG,function touchdrag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt,!0)}}),_physicalActions),side_effects_ANCHORS="anchors",side_effects_TOOLTIP="tooltip",side_effects_BRUSH_ANCHORS="brush-anchors",side_effects_PERSISTENT_ANCHORS="persistent-anchors",side_effects_FILTER="filter",side_effects_HIGHLIGHTER="highlighter",CROSSLINE="crossline",PROPS={valueParser:{defaultValue:function defaultValue(val){return val}}};function generic_sideeffect_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];var interactionType=arguments.length>2?arguments[2]:void 0,apply=arguments.length>3?arguments[3]:void 0;return this.firebolt.context.layers().forEach(function(layer){return!1!==layer.config().interactive&&layer.applyInteractionStyle(interactionType,set.uids,apply)}),this}}]),SurrogateSideEffect}();function spawnable_typeof(obj){return(spawnable_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function spawnable_defineProperties(target,props){for(var i=0;i=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2}},context.data().getFieldsConfig());onDrag(payload)}}).on("end",function(){var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2},snap:!0},context.data().getFieldsConfig());payload.dragEnd=!0,onDrag(payload)}}))}}(firebolt)(renderer_utils_selectElement(this),["brush"],sideEffect)}).merge(selection).each(function(attrs){var element=renderer_utils_selectElement(this);for(var key in transition&&(element=element.transition().duration(transition.duration)),attrs)({}).hasOwnProperty.call(attrs,key)&&isValidValue(attrs[key])&&element.attr(key,attrs[key])}),boxClassName=getQualifiedClassName(boxConf.defClassName,this._id,classPrefix);return selectionBox.classed(boxClassName.join(" "),!0),selectionBox.classed(boxConf.className,!0),this}},{key:"hide",value:function hide(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!1)}},{key:"show",value:function show(drawingInf){helper_changeVisibility(this,drawingInf.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}(),INITIAL_STYLE={position:"absolute",width:0,height:0},default_config_defaultConfig={classPrefix:"muze",defClassName:"tooltip-box",connectorClassName:"tooltip-connectors",className:"",row:{margin:0},content:{spacing:5,iconContainerSize:10,iconScale:1,iconShape:"circle",iconColor:"#ff0000",rowMargin:"4px 0 4px 0",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)"}},helper_getArrowPos=function getArrowPos(orient,dim,measurement,config){var arrowPos,x=measurement.x,y=measurement.y,boxHeight=measurement.boxHeight,boxWidth=measurement.boxWidth,arrowWidth=config.arrow.disabled?0:config.arrow.size;if("left"===orient||"right"===orient){var start=0,diff=boxHeight/2,plotBottom=dim.y+dim.height,boxBottom=y+boxHeight;dim.y>y?(start=dim.y-y,diff=(plotBottom>=boxBottom?boxBottom-dim.y:dim.height)/2):boxBottom>plotBottom&&(diff=Math.abs(y-(dim.y+dim.height))/2),arrowPos=start+diff-arrowWidth/2}else{var _start=0,_diff=boxWidth/2,plotRight=dim.x+dim.width,boxRight=x+boxWidth;dim.x>x?(_start=dim.x-x,_diff=(plotRight>=boxRight?boxRight-dim.x:dim.width)/2):boxRight>plotRight&&(_diff=Math.abs(x-(dim.x+dim.width))/2),arrowPos=_start+_diff-arrowWidth/2}return arrowPos},helper_placeArrow=function placeArrow(context,position,arrowPos){var tooltipArrow=context._tooltipArrow,tooltipBackground=context._tooltipBackground,config=context._config,classPrefix=config.classPrefix,arrowConf=config.arrow,className=getQualifiedClassName(arrowConf.defClassName,context._id,config.classPrefix);tooltipArrow.style("display","block"),tooltipArrow.attr("class","".concat(className.join(" "))),"left"===position||"right"===position?(tooltipArrow.style("top","".concat(arrowPos,"px")),tooltipArrow.style("left",""),tooltipBackground.style("top","".concat(arrowPos,"px")),tooltipBackground.style("left","")):("bottom"===position?tooltipArrow.style("top","100%"):tooltipArrow.style("top","-".concat(arrowConf.size,"px")),tooltipArrow.style("left","".concat(arrowPos,"px")),"bottom"===position?tooltipBackground.style("top","100%"):tooltipBackground.style("top","-".concat(arrowConf.size+3,"px")),tooltipBackground.style("left","".concat(arrowPos,"px"))),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow"),!0),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(context._arrowOrientation),!1),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(position),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow"),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(context._arrowOrientation),!1),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(position),!0)};__webpack_require__(10);function content_defineProperties(target,props){for(var i=0;i0?(this._config=mergeRecursive(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(item){return this._model=item.model,this._formatter=item.formatter,this}},{key:"context",value:function context(ctx){return this._context=ctx,this}},{key:"render",value:function render(mount){var data,config=this._config,iconContainerSize=config.iconContainerSize,formatter=this._formatter,rowMargin=config.rowMargin,model=this._model,classPrefix=config.classPrefix;if(this._mount=mount,(data=model instanceof Array?model:formatter(this._model,this.config(),this._context))instanceof Function){makeElement(mount,"div",[1],"".concat(classPrefix,"-tooltip-html-container")).html(data())}else{var content=data,displayFormat="default";isSimpleObject(data)&&(content=data.content,displayFormat=data.displayFormat);var body=makeElement(mount,"div",[displayFormat],"".concat(classPrefix,"-tooltip-content"),{},function(d){return d});if("table"===displayFormat){var table=makeElement(body,"table",[1],"".concat(classPrefix,"-tooltip-table")),tbody=makeElement(table,"tbody",[1],"".concat(classPrefix,"-tooltip-table-tbody")),rows=makeElement(tbody,"tr",content,"".concat(classPrefix,"-tooltip-table-row"));rows.each(function(d,i){renderer_utils_selectElement(this).classed("".concat(classPrefix,"-tooltip-table-row-").concat(i),!0)}),makeElement(rows,"td",function(d){return d},"".concat(classPrefix,"-tooltip-table-cell")).each(function(d){renderer_utils_selectElement(this).html(d)})}else{var _rows=makeElement(body,"div",content,"",{update:function update(elem,elemData){return elem.attr("class",elemData.className)}}),_cells=makeElement(_rows,"span",function(d){return d.data},"".concat(classPrefix,"-tooltip-content"));_cells.attr("class","".concat(classPrefix,"-tooltip-content")),renderer_utils_setStyles(_rows,{margin:rowMargin}),renderer_utils_setStyles(_cells,{display:"inline-block"}),_cells.each(function(d){var el=renderer_utils_selectElement(this);if(el.html(""),d instanceof Object)if("icon"===d.type){var svg=makeElement(el,"svg",[1]),path=makeElement(svg,"path",[1]),shape=d.shape instanceof Function?d.shape:common_utils_getSymbol(d.shape);renderer_utils_setAttrs(svg,{x:0,y:0,width:iconContainerSize,height:iconContainerSize}),renderer_utils_setAttrs(path,{d:shape.size(d.size)(),transform:"translate(".concat(iconContainerSize/2,", ").concat(iconContainerSize/2,")")}),renderer_utils_setStyles(path,{fill:d.color}),renderer_utils_setStyles(svg,{width:"".concat(iconContainerSize,"px"),height:"".concat(iconContainerSize,"px")})}else el.html(d.value),d.className&&el.classed(d.className,!0),renderer_utils_setStyles(el,d.style);else el.html(d)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var config=default_config_defaultConfig.content;return config.classPrefix=default_config_defaultConfig.classPrefix,config}}]),Content}();function tooltip_defineProperties(target,props){for(var i=0;i0){var defConf=mergeRecursive({},this.constructor.defaultConfig());return this._config=mergeRecursive(defConf,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(className){return this._tooltipContainer.classed(className,!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(name,data){var contentConfig=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},config=this.config(),classPrefix=config.classPrefix,contentClass=config.content.className,formatter=config.formatter,className=contentConfig.className||"".concat(classPrefix,"-").concat(contentClass,"-").concat(name),content=this._contents[name]=this._contents[name]||new content_Content,container=makeElement(this._contentContainer,"div",[contentConfig.order],className);container.attr("class","".concat(classPrefix,"-").concat(contentClass," ").concat(className)),function reorderContainers(parentContainer,className){parentContainer.selectAll(className).sort(function(a,b){return a-b})}(this._contentContainer,".".concat(classPrefix,"-").concat(contentClass));var contentConf=config.content;return contentConfig.classPrefix=this._config.classPrefix,content.config(contentConf),null===data?(content.clear(),container.remove(),delete this._contents[name]):(content.update({model:data,formatter:contentConfig.formatter||formatter}),content.context(this._context),content.render(container)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(x,y){var conf=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var target=this._target,repositionArrow=conf.repositionArrow;if(target&&repositionArrow){var node=this._tooltipContainer.node(),config=this._config,arrowDisabled=config.arrow.disabled,arrowWidth=arrowDisabled?0:config.arrow.size,arrowOrient=this._arrowOrientation,outsidePlot="left"===arrowOrient||"right"===arrowOrient?y+node.offsetHeight-arrowWidthtarget.y+target.height:x+node.offsetWidth-arrowWidthtarget.x+target.width;if(!arrowDisabled)if(outsidePlot){var path;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var connector=this._tooltipConnectorContainer.selectAll("path").data([1]),enter=connector.enter().append("path");"left"===arrowOrient?path="M ".concat(x," ").concat(y+node.offsetHeight/2," L ").concat(target.x+target.width)+" ".concat(target.y+target.height/2):"right"===arrowOrient?path="M ".concat(x+node.offsetWidth," ").concat(y+node.offsetHeight/2)+" L ".concat(target.x," ").concat(target.y+target.height/2):"bottom"===arrowOrient&&(path="M ".concat(x+node.offsetWidth/2," ").concat(y+node.offsetHeight)+" L ".concat(target.x+target.width/2," ").concat(target.y)),enter.merge(connector).attr("d",path).style("display","block")}else{var arrowPos=helper_getArrowPos(arrowOrient,target,{x:x,y:y,boxHeight:node.offsetHeight,boxWidth:node.offsetWidth},this._config);helper_placeArrow(this,this._arrowOrientation,arrowPos),this._tooltipConnectorContainer.style("display","none")}}var offset=this._offset||{x:0,y:0};return this._tooltipContainer.style("left","".concat(offset.x+x,"px")).style("top","".concat(offset.y+y,"px")),this}},{key:"positionRelativeTo",value:function positionRelativeTo(dim){var obj,_this=this,tooltipConf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},orientation=tooltipConf.orientation;if(this.show(),!dim)return this.hide(),this;var extent=this._extent,node=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var offsetWidth=node.offsetWidth+2,offsetHeight=node.offsetHeight+2,config=this._config,offset=this._offset,arrowDisabled=config.arrow.disabled,arrowSize=arrowDisabled?0:config.arrow.size,draw=void 0===tooltipConf.draw||tooltipConf.draw,topSpace=dim.y,dimX=dim.x+dim.width+offset.x,rightSpace=extent.width-dimX,leftSpace=dim.x+offset.x-extent.x,positionTop=topSpace>offsetHeight+arrowSize,positionRight=rightSpace>=offsetWidth+arrowSize,positionLeft=leftSpace>=offsetWidth+arrowSize;return this._target=dim,orientation||(orientation=positionTop?"vertical":positionRight||positionLeft?"horizontal":"vertical"),"horizontal"===orientation?obj=function positionHorizontal(){var position,x=dim.x+dim.width,y=dim.y;return positionRight?(position="left",x+=arrowSize):positionLeft?(x=dim.x-offsetWidth,position="right",x-=arrowSize):(position="left",x+=arrowSize),dim.height1;hasMultipleMeasures&&content.push({data:[icon,formattedRetinalValue]});var isSelected=target[1][target[0].indexOf(retField)]===retinalFieldValue;measuresArr.forEach(function(measure){var measureIndex=fieldsConfig[measure].index,_fieldInf$measure=fieldInf[measure],dName=_fieldInf$measure.displayName,value=(0,_fieldInf$measure.fn)(valueArr[measureIndex]),keyValue=getKeyValue({field:hasMultipleMeasures?"".concat(dName).concat(separator):formattedRetinalValue,value:value,classPrefix:classPrefix,margin:hasMultipleMeasures?margin:void 0,isSelected:isSelected});hasMultipleMeasures||(keyValue.data=[icon].concat(strategies_toConsumableArray(keyValue.data))),content.push(keyValue)})}};for(var retField in retinalFields)_loop(retField)},strategies_buildTooltipData=function buildTooltipData(dataModel){var nestedDataObj,displayFormat,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=arguments.length>2?arguments[2]:void 0,fieldValues=[],_dataModel$getData=dataModel.getData(),data=_dataModel$getData.data,schema=_dataModel$getData.schema,fieldspace=dataModel.getFieldspace(),fieldsConfig=dataModel.getFieldsConfig(),_context$firebolt$con=context.firebolt.context.retinalFields(),color=_context$firebolt$con.color,shape=_context$firebolt$con.shape,size=_context$firebolt$con.size,detailFields=context.detailFields||[],dimensions=schema.filter(function(d){return d.type===dist_datamodel.FieldType.DIMENSION}),measures=schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),containsDetailField=!!common_utils_intersect(schema,detailFields).length,dataLen=data.length,dimensionMeasureMap=context.dimensionMeasureMap,axes=context.axes,fieldInf=function getFieldInf(schema,dataModel,context){var valueParser=context.valueParser,timeDiffs=context.timeDiffs,fieldsObj=dataModel.getFieldspace().fieldsObj(),defFormatter=strategies_formatters(null,null,valueParser)[dist_datamodel.DimensionSubtype.CATEGORICAL];return schema.reduce(function(inf,field){var subtype=field.subtype,name=field.name,type=field.type,interval=subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[name]:0,nf=type===dist_datamodel.FieldType.MEASURE?fieldsObj[name].numberFormat():function(val){return val};return inf[name]={fn:defaultValue(strategies_formatters(nf,interval,valueParser)[subtype],defFormatter),displayName:"".concat(retrieveFieldDisplayName(dataModel,name))},inf},{})}(schema,dataModel,context);if(dataLen>1&&containsDetailField)fieldValues=function getTabularData(dataObj,fieldInf){var rows=[],data=dataObj.data,schema=dataObj.schema;return rows.push(schema.map(function(d){return fieldInf[d.name].displayName})),data.forEach(function(d){var row=[];schema.forEach(function(fieldObj,i){var value=fieldInf[fieldObj.name].fn(d[i]);row.push(value)}),rows.push(row)}),rows}({data:data,schema:schema,fieldspace:fieldspace},fieldInf),displayFormat="table";else{var retinalFields=[color.field,shape.field,size.field].reduce(function(acc,field){return field&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION&&(acc[field]=1),acc},{}),indices=dimensions.filter(function(field){return!retinalFields[field.name]}).map(function(dim){return fieldsConfig[dim.name].index}),allMeasures=strategies_toConsumableArray(_construct(Set,strategies_toConsumableArray(Object.values(dimensionMeasureMap)))),filteredMeasures=dataLen>1?measures.filter(function(d){return-1===allMeasures.indexOf(d.name)}):measures;nestedDataObj=common_utils_nestCollection({data:data,keys:indices});!function generateTooltipContent(nestedData){for(var index=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,content=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],classPrefix=config.classPrefix,separator=config.separator,i=0,len=nestedData.length;i1;content.push(getKeyValue({field:"".concat(displayName).concat(separator),value:formattedValue,classPrefix:classPrefix,margin:margin,isSelected:void 0,removeKey:removeKey}))}if(values[0]&&values[0].key)generateTooltipContent(values,index+1,content);else for(var _loop2=function _loop2(j,len2){var valueArr=values[j];generateRetinalFieldsValues(valueArr,retinalFields,content,{fieldInf:fieldInf,axes:axes,config:config,fieldsConfig:fieldsConfig,dimensionMeasureMap:dimensionMeasureMap,dataLen:dataLen,target:context.payload.target}),filteredMeasures.forEach(function(measure){var name=measure.name,_fieldInf$name=fieldInf[name],displayName=_fieldInf$name.displayName,fn=_fieldInf$name.fn;content.push(getKeyValue({field:"".concat(displayName).concat(separator),value:fn(valueArr[fieldsConfig[name].index]),classPrefix:classPrefix,margin:10}))})},j=0,len2=values.length;j2&&void 0!==arguments[2]?arguments[2]:{},totalHeight=0,totalWidth=0,dataModel=selectionSet.mergedEnter.model,context=this.firebolt.context,drawingInf=this.drawingContext();if(dataModel.isEmpty()||null===payload.criteria)return this.hide(options,null),this;var tooltips=this._tooltips,config=this.config(),boundBox={width:drawingInf.width,height:drawingInf.height},showInPosition=payload.showInPosition,pad=config.padding,dataModels=[],fragmented="fragmented"===config.mode,sourceInf=context.getSourceInfo(),fields=sourceInf.fields,showVertically=!!(!!fields.x[0]&&fields.x[0].type()===dist_datamodel.FieldType.DIMENSION),tooltipPos=payload.position,boxes=[],enter={},uids=dataModel.getData().uids;fragmented?dataModels.push.apply(dataModels,tooltip_toConsumableArray(uids.map(function(d){return dataModel.select(function(fieldsArr,i){return i===d},{saveChild:!1})}))):dataModels.push(dataModel);var target=payload.target,targetFields=[];if(target){targetFields=target[0]||[];for(var sourceFields=payload.sourceFields,indices=[],i=0,len=targetFields.length;idrawingInf.height:totalWidth>drawingInf.width)break;boxes.push({x:position.x,y:position.y,width:tooltipBoundBox.width,height:tooltipBoundBox.height,tooltip:tooltipInst})}}for(var key in tooltips)if(!enter[key]){var tooltip=tooltips[key];tooltip.content(payload.action,null),tooltip.getContents().length||(tooltip.remove(),delete tooltips[key])}return fragmented&&(!function spaceOutBoxes(boxes,extent,showVertically){var y,height,x,width,i,len=boxes.length,spaceOutIfOverlap=function spaceOutIfOverlap(firstBox,secondBox,opposite){x=firstBox.x,width=firstBox.width,y=firstBox.y,height=firstBox.height;var bottom=y+height,right=x+width;showVertically?(opposite?ysecondBox.y)&&(secondBox.y=opposite?firstBox.y-secondBox.height-5:bottom+5):(opposite?xsecondBox.x)&&(secondBox.x=opposite?firstBox.x-secondBox.width-5:right+5)};for(boxes.sort(function(a,b){return showVertically?a.y-b.y:a.x-b.x}),i=0,i=0;iextent.height||boxes[i].x+boxes[i].width>extent.width)for(showVertically?boxes[i].y-=boxes[i].height+boxes[i].y-extent.height:boxes[i].x-=boxes[i].width+boxes[i].x-extent.width,i=len-1;i>0;i--)spaceOutIfOverlap(boxes[i],boxes[i-1],!0)}(boxes,boundBox,showVertically),boxes.forEach(function(box){return box.tooltip.position(box.x,box.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var strategy=options.strategy||this._strategy;tooltips[key].content(strategy,null),tooltips[key].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0},highlightSummary:{dataTransform:function dataTransform(dt,fields){return fields?dt.project(fields,{saveChild:!1}):dt}},selectionSummary:{dataTransform:function dataTransform(dt,fields){var fieldspace=dt.getFieldspace(),dimensions=Object.keys(fieldspace.getDimension()),measures=Object.keys(fieldspace.getMeasure()),projectedFields=defaultValue(fields,measures.length?[measures[0]]:[]);return dt.project([].concat(tooltip_toConsumableArray(dimensions),tooltip_toConsumableArray(projectedFields)),{saveChild:!1})}}}}},{key:"formalName",value:function formalName(){return side_effects_TOOLTIP}}]),Tooltip}();__webpack_require__(12);function crossline_typeof(obj){return(crossline_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function crossline_toConsumableArray(arr){return function crossline_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{};return(0,this._strategies[options.strategy||this._strategy])(selectionSet,this,options.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return side_effects_HIGHLIGHTER}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}();function side_effects_filter_typeof(obj){return(side_effects_filter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function side_effects_filter_defineProperties(target,props){for(var i=0;i67.5&&rotationNormalizer<=90||(yShift+=2*height),xShift=width,xShift=90===rotation?height:270===rotation?-height:0,orientation===axis_orientation_TOP?(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift+xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(-xShift+tickSize,"\n ").concat(-yShift-tickSize,") rotate(").concat(rotation,")"))):(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift-xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(xShift-tickSize,"\n ").concat(yShift+tickSize,") rotate(").concat(rotation,")"))),renderer_utils_selectElement(this).transition().duration(1e3).text(datum)}),tickText},axis_renderer_changeTickOrientation=function changeTickOrientation(selectContainer,axisInstance,tickSize){var _smartTicks=axisInstance._smartTicks,config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,orientation=config.orientation,classPrefix=config.classPrefix,labels=renderConfig.labels,rotation=labels.rotation,isSmartTicks=labels.smartTicks,tickText=selectContainer.selectAll(".tick text");if(tickText.selectAll("tspan").remove(),!rotation||"top"!==orientation&&"bottom"!==orientation)if(rotation||isSmartTicks){if(tickText.text(""),"top"===orientation||"bottom"===orientation)tickText.attr("y",0).attr("x",0).attr("transform","").text(""),makeElement(tickText,"tspan",function(d,i){return _smartTicks[i]?_smartTicks[i].lines:[]},"".concat(classPrefix,"-smart-text")).attr("dy","0").style("opacity","0").transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).attr("dy",function(d,i){return"bottom"===orientation||0!==i?_smartTicks[0].oriTextHeight:-_smartTicks[0].oriTextHeight*(_smartTicks[0].lines.length-1)-tickSize}).style("opacity",1).text(function(e){return e}).attr("x",0);else makeElement(tickText,"tspan",function(d,i){return _smartTicks[i].lines},"".concat(classPrefix,"-smart-text")).text(function(e){return e})}else tickText.attr("transform","");else axis_renderer_rotateAxis(axisInstance,tickText,labelManager);return tickText},axis_renderer_setFixedBaseline=function setFixedBaseline(axisInstance){var fixedBaseline=axisInstance.config().fixedBaseline,showInnerTicks=axisInstance.renderConfig().showInnerTicks,domain=axisInstance.domain();fixedBaseline&&domain.length&&showInnerTicks&&axisInstance.setFixedBaseline()},axis_renderer_setAxisNamePos=function setAxisNamePos(textNode,orientation,measures){var axisNameHeight=measures.axisNameHeight,availableSpace=measures.availableSpace;switch(orientation){case axis_orientation_LEFT:textNode.attr("transform","translate(".concat(-(availableSpace.width-axisNameHeight),",").concat(availableSpace.height/2,")rotate(-90)"));break;case axis_orientation_RIGHT:textNode.attr("transform","translate(".concat(availableSpace.width-axisNameHeight,",").concat(availableSpace.height/2,")rotate(90)"));break;case axis_orientation_TOP:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(-availableSpace.height+axisNameHeight,")"));break;case axis_orientation_BOTTOM:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(availableSpace.height-axisNameHeight/2,")"))}return textNode};var _rangeAdjustmentMap,longestWord={month:"September",quarter:"October",halfYearly:"July",year:9999,day:"September",hour:"24 AM",mintues:"60:60",seconds:":60",week:"Wed 31"},skip_ticks_tickIntervals=[[1,1,"milliseconds",src_millisecond.every(1),"seconds"],[1,1e3,"seconds",src_second.every(1),"seconds"],[5,5e3,"five seconds",src_second.every(5),"seconds"],[10,1e4,"ten seconds",src_second.every(10),"seconds"],[15,15e3,"fifteen seconds",src_second.every(15),"seconds"],[30,3e4,"thirty seconds",src_second.every(30),"seconds"],[1,6e4,"minute",src_minute.every(1),"minutes"],[5,3e5,"five minutes",src_minute.every(5),"minutes"],[10,6e5,"ten minutes",src_minute.every(10),"minutes"],[15,9e5,"fifteen minutes",src_minute.every(15),"minutes"],[30,18e5,"thirty minutes",src_minute.every(30),"minutes"],[1,36e5,"hour",src_hour.every(1),"hour"],[3,108e5,"three hours",src_hour.every(3),"hour"],[6,216e5,"six hours",src_hour.every(6),"hour"],[12,432e5,"twelve hours",src_hour.every(12),"hour"],[1,864e5,"daily",src_day.every(1),"day"],[1,6048e5,"weekly",sunday.every(1),"week"],[1,2592e6,"monthly",src_month.every(1),"week"],[3,7776e6,"quaterly",src_month.every(3),"quarter"],[6,15552e6,"half yearly",src_month.every(6),"halfYearly"],[1,31536e6,"yearly",src_year.every(1),"year"],[2,63072e6,"2 year",src_year.every(2),"year"],[3,94608e6,"3 year",src_year.every(3),"year"],[5,15768e7,"5 year",src_year.every(5),"year"],[10,31536e7,"decade",src_year.every(10),"year"],[100,31536e8,"century",src_year.every(100),"year"],[1e3,31536e9,"millenium",src_year.every(1e3),"year"]],getTickIntervalFnBasedOnNumberOfTicks=function getTickIntervalFnBasedOnNumberOfTicks(interval,count,context){for(var possibleTickLevelIndex=skip_ticks_tickIntervals.length-1,maxPossibleTicks=1,tickIntervalLevelInfo=null,i=skip_ticks_tickIntervals.length-1;i>=0;i--){var tickIntervalInfo=skip_ticks_tickIntervals[i],numOfPossibleTicks=Math.floor(interval/tickIntervalInfo[1]);numOfPossibleTicks<=count&&(possibleTickLevelIndex=i,maxPossibleTicks=numOfPossibleTicks)}return tickIntervalLevelInfo=skip_ticks_tickIntervals[possibleTickLevelIndex],function getActualTickInterval(context,noOfTicks){var minWidthBetweenTicks=context._minTickDistance.width,width=context.availableSpace().width;return Math.floor((width-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)}(context,maxPossibleTicks)=numOfTicksAccordingToMinDiff&&(actualNumberOfTicks=numOfTicksAccordingToMinDiff),getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval,actualNumberOfTicks,context)}(context,maxTicks));context.renderConfig({tickValues:ticks})},adjustHorizontalRange=function adjustHorizontalRange(range,diff){return range[0]+=diff,range[1]-=diff,range},adjustVerticalRange=function adjustVerticalRange(range,diff){return range[0]-=diff,range[1]+=diff,range},rangeAdjustmentMap=(space_setter_defineProperty(_rangeAdjustmentMap={},axis_orientation_TOP,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_BOTTOM,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_LEFT,adjustVerticalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_RIGHT,adjustVerticalRange),_rangeAdjustmentMap),setAxisRange=function setAxisRange(context,type,rangeBounds,offset){context.range(rangeBounds),offset&&context.renderConfig(space_setter_defineProperty({},"".concat(type,"Offset"),offset))},getAdjustedRange=function getAdjustedRange(minDiff,range,domain,config){var orientation=config.orientation,adjustRange=config.adjustRange,diff=function getAxisOffset(timeDiff,range,domain){var avWidth=Math.abs(range[1]-range[0]),bars=avWidth/(avWidth/(domain[1]-domain[0])*timeDiff);return(avWidth-avWidth/(bars+1)*bars)/2}(minDiff,range,domain);return adjustRange?rangeAdjustmentMap[orientation](range,diff):range},space_setter_spaceSetter=function spaceSetter(context,spaceConfig){var _ref,tickInterval,heightForTicks,config=context.config(),_context$availableSpa2=context.availableSpace(),availWidth=_context$availableSpa2.width,availHeight=_context$availableSpa2.height,padding=_context$availableSpa2.padding,top=padding.top,left=padding.left,bottom=padding.bottom,right=padding.right,isOffset=spaceConfig.isOffset,_context$renderConfig2=context.renderConfig(),showAxisName=_context$renderConfig2.showAxisName,labels=_context$renderConfig2.labels,rotation=labels.rotation,fixedBaseline=config.fixedBaseline,axisNamePadding=config.axisNamePadding,tickValues=config.tickValues,_context$getAxisDimen=context.getAxisDimensions(),tickDimensions=_context$getAxisDimen.tickDimensions,allTickDimensions=_context$getAxisDimen.allTickDimensions,axisNameDimensions=_context$getAxisDimen.axisNameDimensions,tickSize=_context$getAxisDimen.tickSize,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width,namePadding=showAxisName?axisNamePadding:0,labelConfig={smartTicks:!0,rotation:labels.rotation},minTickDistance=context._minTickDistance,minTickSpace=context._minTickSpace,minDiff=context._minDiff,domain=context.domain(),axisNameHeight=axisNameDimensions.height,minWidthBetweenTicks=minTickDistance.width,minTickWidth=Math.min(minTickSpace.width,tickDimWidth),minTickHeight=Math.min(minTickSpace.height,tickDimHeight);return space_setter_defineProperty(_ref={},TIME,{x:function x(){!tickValues&&context.applyTickSkipping();var noOfTicks=context.getTickValues().length;heightForTicks=availHeight-axisNameHeight-tickSize-namePadding,(tickInterval=(availWidth-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)axisNameHeight?(labelConfig.rotation=null,context.renderConfig({showInnerTicks:!0,showAxisName:!0})):(labelConfig.rotation=-90,context.renderConfig({showInnerTicks:!0,showAxisName:!1}))),availHeight0&&void 0!==arguments[0]?arguments[0]:0,width=arguments.length>1?arguments[1]:void 0,height=arguments.length>2?arguments[2]:void 0,rotatedHeight=height,rotatedWidth=width;if(rotation){var angle=(rotation||0)*Math.PI/180;rotatedWidth=Math.abs(height*Math.sin(angle))+Math.abs(width*Math.cos(angle)),rotatedHeight=Math.abs(width*Math.sin(angle))+Math.abs(height*Math.cos(angle))}return{width:rotatedWidth,height:rotatedHeight}},helper_setOffset=function setOffset(context){var x=0,y=0,logicalSpace=context.logicalSpace(),config=context.config(),orientation=config.orientation,xOffset=config.xOffset,yOffset=config.yOffset;orientation===axis_orientation_LEFT&&(x=void 0===xOffset?logicalSpace.width:xOffset),orientation===axis_orientation_TOP&&(y=void 0===yOffset?logicalSpace.height:yOffset),context.renderConfig({xOffset:x,yOffset:y})},getAxisComponentDimensions=function getAxisComponentDimensions(context){var axisTicks,largestTick="",largestTickDimensions={width:0,height:0},smartTick={},allTickDimensions=[],scale=context.scale(),_context$renderConfig=context.renderConfig(),tickValues=_context$renderConfig.tickValues,showAxisName=_context$renderConfig.showAxisName,name=context.config().name,labelManager=context.dependencies().labelManager,labelFunc=scale.ticks||scale.quantile||scale.domain;return labelManager.setStyle(context._tickLabelStyle),axisTicks=(axisTicks=tickValues||labelFunc()).map(function(originalLabel,i){var label=context.getFormattedText(originalLabel,i,axisTicks),tickDimensions=labelManager.getOriSize(label);return allTickDimensions.push(tickDimensions),tickDimensions.width>largestTickDimensions.width&&(largestTick=label,smartTick=context.smartTicks()?context.smartTicks()[i]:{},largestTickDimensions=tickDimensions,smartTick=smartTick||tickDimensions),label}),labelManager.setStyle(context._axisNameStyle),{axisNameDimensions:showAxisName?labelManager.getOriSize(name):{width:0,height:0},largestTick:largestTick,largestTickDimensions:largestTickDimensions,allTickDimensions:allTickDimensions,axisTicks:axisTicks,smartTick:smartTick,tickSize:context.getTickSize()}},getHorizontalAxisSpace=function getHorizontalAxisSpace(context,axisDimensions,range){var width,height,domain=context.domain(),minTickDistance=context._minTickDistance.width,tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config2=context.config(),axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width;if(width=range&&range.length?range[1]-range[0]:3*(tickDimWidth+minTickDistance),height=0,tickValues){var minTickDiff=context.getMinTickDifference(),_ref=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];width=(_ref[1]-_ref[0])/Math.abs(minTickDiff)*(tickDimWidth+context._minTickDistance.width)}return height=range&&range.length?tickDimHeight:Math.max(tickDimWidth,tickDimHeight),{width:width,height:height+=(showAxisName?axisDimHeight+axisNamePadding:0)+tickSize}},getVerticalAxisSpace=function getVerticalAxisSpace(context,axisDimensions){var height,width,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config3=context.config(),axisNamePadding=_context$config3.axisNamePadding,tickValues=_context$config3.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height;if(height=0,width=tickDimensions.width,tickValues){var minTickDiff=context.getMinTickDifference(),_ref2=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];height=(_ref2[1]-_ref2[0])/Math.abs(minTickDiff)*tickDimHeight}return{height:height,width:width+=(showAxisName?axisDimHeight:0)+tickSize+axisNamePadding}},helper_calculateBandSpace=function calculateBandSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,show=context.renderConfig().show,largestTickDimensions=axisDimensions.largestTickDimensions,axisTicks=axisDimensions.axisTicks,allTickDimensions=axisDimensions.allTickDimensions,largestDimHeight=largestTickDimensions.height,minTickWidth=context._minTickDistance.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa=getHorizontalAxisSpace(context,axisDimensions,range),_width=_getHorizontalAxisSpa.width,_height=_getHorizontalAxisSpa.height;return range&&range.length||(_width=allTickDimensions.reduce(function(t,n){return t+Math.min(n.width,n.height)+minTickWidth},0)),!1===show&&(_height=0,_width=0),{width:_width,height:_height}}var _getVerticalAxisSpace=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace.width,height=_getVerticalAxisSpace.height;return height&&0!==height||(height=axisTicks.length*(largestDimHeight+context._minTickDistance.height)),!1===show&&(width=0),{width:width,height:height}},helper_getValidDomain=function getValidDomain(context,domain){var userDom=context.config().domain;return userDom&&(domain=userDom),defaultValue(domain,[])},setContinousAxisDomain=function setContinousAxisDomain(context,domain){var nice=context.config().nice,scale=context.scale.bind(context);scale().domain(domain),nice&&scale().nice(),context._domain=scale().domain()},props_PROPS={availableSpace:{},axisDimensions:{},axisComponentDimensions:{},config:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._config||{}),mockedOldConfig=mergeRecursive({},oldConfig);(value=mergeRecursive(mockedOldConfig,value)).axisNamePadding=Math.max(value.axisNamePadding,0);var shouldAxesScaleUpdate=function hasAxesConfigChanged(){var obj=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},obj1=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},properties=arguments.length>2?arguments[2]:void 0;return!(!Object.keys(obj).length||!Object.keys(obj1).length)&&properties.some(function(key){return obj[key]!==obj1[key]})}(value,oldConfig,["interpolator","exponent","base","orientation"]),tickFormatter=context.sanitizeTickFormatter(value);return shouldAxesScaleUpdate&&(context._scale=context.createScale(value),context._axis=context.createAxis(value)),context._tickFormatter=function(ticks){return tickFormatter(ticks)},context.resetRenderConfig(value),value}},renderConfig:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._renderConfig||{});return value=mergeRecursive(oldConfig,value)}},logicalSpace:{},mount:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.logicalSpace(null),value}},smartTicks:{},tickSize:{},maxTickSpaces:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._maxTickSpaces||{});return value=mergeRecursive(oldConfig,value)}},valueParser:{defaultValue:function defaultValue(val){return val}}};function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function simple_axis_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function simple_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;this.availableSpace({width:width,height:height,padding:padding});var type=this.constructor.type();return labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?space_setter_spaceSetter(this,{isOffset:isOffset})[type].x():space_setter_spaceSetter(this,{isOffset:isOffset})[type].y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.setSmartAxisName(),this}},{key:"setSmartAxisName",value:function setSmartAxisName(){var _this$config2=this.config(),orientation=_this$config2.orientation,name=_this$config2.name,dimType=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?"width":"height",widthDim=this.availableSpace()[dimType],labelManager=this.dependencies().labelManager;return labelManager.setStyle(this._axisNameStyle),this.renderConfig({smartAxisName:function getSmartAxisName(name,width,labelManager){var oriSize=labelManager.getOriSize(name);return labelManager.useEllipsesOnOverflow(!0),labelManager.getSmartText(name,width,oriSize.height,!0)}(name,widthDim,labelManager)}),this}},{key:"setTickConfig",value:function setTickConfig(){return this}},{key:"getScaleValue",value:function getScaleValue(domainVal){if(null!==domainVal&&void 0!==domainVal)return this.scale()(domainVal)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return this.axisDimensions(function computeAxisDimensions(context){var tickDimensions={},labels=context.renderConfig().labels,smartTicks=labels.smartTicks,rotation=labels.rotation,_getAxisComponentDime=getAxisComponentDimensions(context),largestTickDimensions=_getAxisComponentDime.largestTickDimensions,axisTicks=_getAxisComponentDime.axisTicks,smartTick=_getAxisComponentDime.smartTick,axisNameDimensions=_getAxisComponentDime.axisNameDimensions,allTickDimensions=_getAxisComponentDime.allTickDimensions,tickSize=_getAxisComponentDime.tickSize,labelHeight=largestTickDimensions.height,labelWidth=largestTickDimensions.width;return 0===context.domain().length?null:(tickDimensions=getRotatedSpaces(rotation,(tickDimensions=smartTicks?smartTick:{width:labelWidth,height:labelHeight}).width,tickDimensions.height),0===tickSize&&(tickDimensions={width:0,height:0}),{allTickDimensions:allTickDimensions,tickSize:tickSize,tickDimensions:tickDimensions,axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks})}.apply(void 0,[this].concat(params))),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||this.logicalSpace(function calculateContinousSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,_context$renderConfig6=context.renderConfig(),show=_context$renderConfig6.show,showAxisName=_context$renderConfig6.showAxisName,axisNameDimensions=axisDimensions.axisNameDimensions;if(!1===show)return{width:0,height:0};var axisNameWidth=axisNameDimensions.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa2=getHorizontalAxisSpace(context,axisDimensions,range),_width2=_getHorizontalAxisSpa2.width,_height2=_getHorizontalAxisSpa2.height;return{width:Math.max(_width2,axisNameWidth),height:_height2}}var _getVerticalAxisSpace2=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace2.width,height=_getVerticalAxisSpace2.height;return{width:width,height:Math.max(height,showAxisName?axisNameWidth:0)}}(this)),helper_setOffset(this),this.logicalSpace()}},{key:"invert",value:function invert(value){return this.scale().invert(value)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){return[v1,v2]}},{key:"invertExtent",value:function invertExtent(v1,v2){return[this.invert(v1),this.invert(v2)]}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(tickValues){return tickValues}},{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:"render",value:function render(){return this.mount()&&(this.setTickConfig(),function renderAxis(axisInstance){var config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,mount=axisInstance.mount(),range=axisInstance.range(),axis=axisInstance.axis(),scale=axisInstance.scale(),tickLabelStyle=axisInstance._tickLabelStyle,axisTickFormatter=axisInstance._tickFormatter,orientation=config.orientation,axisNamePadding=config.axisNamePadding,className=config.className,id=config.id,classPrefix=config.classPrefix,show=renderConfig.show,xOffset=renderConfig.xOffset,yOffset=renderConfig.yOffset,showAxisName=renderConfig.showAxisName,labels=renderConfig.labels,smartAxisName=renderConfig.smartAxisName;if(show){var tickSize=axisInstance.getTickSize(),selectContainer=makeElement(renderer_utils_selectElement(mount),"g",[axisInstance],"".concat(className),{},function(key){return key.config().id});labelManager.setStyle(tickLabelStyle);var labelFunc=scale.ticks||scale.quantile||scale.domain,ticks=axis.tickValues()||labelFunc();axis.tickFormat(axisTickFormatter(ticks));var availableSpace=Math.abs(range[0]-range[1]),labelProps=axisInstance.axisComponentDimensions().largestTickDimensions;selectContainer.attr("transform","translate(".concat(xOffset,",").concat(yOffset,")")),axis_renderer_setFixedBaseline(axisInstance),!1===labels.smartTicks||0===tickSize?selectContainer.transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).call(axis):selectContainer.call(axis),selectContainer.selectAll(".tick").classed("".concat(classPrefix,"-ticks"),!0),selectContainer.selectAll(".tick line").classed("".concat(classPrefix,"-tick-lines"),!0),selectContainer.selectAll(".tick text").classed("".concat(classPrefix,"-ticks"),!0).classed("".concat(classPrefix,"-ticks-").concat(id),!0),axis_renderer_changeTickOrientation(selectContainer,axisInstance,tickSize);var textNode=makeElement(selectContainer,"text",[smartAxisName],"".concat(classPrefix,"-axis-name")).attr("text-anchor","middle").classed("".concat(classPrefix,"-axis-name-").concat(id),!0).text(function(d){return d.text});textNode.classed(HIDDEN,!showAxisName);var labelOffset=availableSpace/2,measures={labelProps:labelProps,tickSize:tickSize,axisNamePadding:axisNamePadding,axisNameHeight:smartAxisName.height,yOffset:yOffset,xOffset:xOffset,labelOffset:labelOffset,availableSpace:axisInstance.availableSpace()};axis_renderer_setAxisNamePos(textNode,orientation,measures)}}(this)),this}},{key:"remove",value:function remove(){return renderer_utils_selectElement(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this}},{key:"isReverse",value:function isReverse(){var range=this.range();return range[0]>range[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var scale=this.scale(),range=scale.range(),domain=scale.domain();return Math.abs(range[1]-range[0])/(domain[1]-domain[0])}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return cartesian_axis_default_config_defaultConfig}}]),SimpleAxis}();function linear_defineProperties(target,props){for(var i=0;iavailableSpace&&(numberOfValues=Math.floor(availableSpace/(labelDim+minTickDistance))),numberOfTicks=numberOfTicks||numberOfValues,numberOfValues=Math.min(numberOfTicks,Math.max(2,numberOfValues)),(tickValues=axis.scale().ticks(numberOfValues)).length>numberOfValues&&(tickValues=tickValues.filter(function(e,i){return i%2==0})),2===numberOfValues&&(tickValues=[(tickValues=axis.scale().ticks(10))[0],tickValues[tickValues.length-1]]),tickValues}(availableSpace,labelProps[orientation===axis_orientation_BOTTOM||orientation===axis_orientation_TOP?"width":"height"],axis,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return getSmallestDiff(this.renderConfig().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(tickText){var orientation=this.config().orientation,rotation=this.renderConfig().labels.rotation,axis=this.axis(),ticks=axis.tickValues(),smartTicks=this.smartTicks();if(smartTicks&&smartTicks.length){var _this$smartTicks$=this.smartTicks()[0],width=_this$smartTicks$.width,height=_this$smartTicks$.height;axis.tickTransform(function(d){if(d===ticks[0]){if(orientation===axis_orientation_LEFT||orientation===axis_orientation_RIGHT)return"translate(0, -".concat(height/3,"px)");if((orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM)&&!rotation)return"translate(".concat(width/2,"px, ",0,"px)")}return""})}return tickText}}],[{key:"type",value:function type(){return LINEAR}}]),ContinousAxis}();function band_axis_typeof(obj){return(band_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function band_axis_defineProperties(target,props){for(var i=0;irange[1],extent=this.invertExtent(v1,v2);return[scale(reverse?extent[extent.length-1]:extent[0]),scale(reverse?extent[0]:extent[extent.length-1])+scale.bandwidth()]}}],[{key:"type",value:function type(){return BAND}}]),BandAxis}();function time_axis_typeof(obj){return(time_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function time_axis_defineProperties(target,props){for(var i=0;i1?config.range:[DEFAULT_GRADIENT_COLOR].concat(props_toConsumableArray(config.range)));var oldConfig=mergeRecursive(defCon,context.config()),newConfig=mergeRecursive(oldConfig,config);return newConfig.range instanceof Array&&(newConfig.range=newConfig.range.map(function(e,i){return props_getActualHslColor(e,palette[i])}),newConfig.stops=config.stops||newConfig.range.length),newConfig.value=props_getActualHslColor(newConfig.value,newConfig.value),newConfig}},domain:{},scale:{},uniqueValues:{}},helper_treatNullMeasures=function treatNullMeasures(domainVal,scaledVal,minDomainScaledVal){return domainVal instanceof src_InvalidAwareTypes?minDomainScaledVal:scaledVal},helper_resolveAxisConfig=function resolveAxisConfig(propVal,defaultVal,context){switch(getObjProp(propVal,"constructor")){case Function:return propVal(defaultVal,context);case Array:return propVal;default:return defaultVal}};function color_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function color_strategy_toConsumableArray(arr){return function color_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);iMath.min(range.length,18))for(var interpolator=common_utils_piecewiseInterpolator()(function hslInterpolator(){return hslLong}(),range.map(function(e){return props_getHslString(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(domain.length){var scale=this.scale(),range=scale.range?scale.range():null,scaleInfo=this._colorStrategy.domainRange()(domain,this.config().stops,range);this.domain(scaleInfo.domain),scaleInfo.range&&this.scale().range(scaleInfo.range),this.uniqueValues(scaleInfo.uniqueVals),this.scale().domain(scaleInfo.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(color,transformationArr){var h=360*color[0],s=100*color[1],l=100*color[2],a=Math.min(defaultValue(color[3],0),1),newH=h+transformationArr[0],newS=s+transformationArr[1],newL=l+transformationArr[2],newA=Math.min(a+transformationArr[3]||0,1);return{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH/360,newS/100,newL/100,newA]}}},{key:"id",value:function id(){return this._id}},{key:"getHslArray",value:function getHslArray(color){return props_getActualHslColor(color)}}],[{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIG}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),defaults_DEFAULT_CONFIG={value:36,range:[36,1e3]};function size_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function size_strategy_toConsumableArray(arr){return function size_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:0,value=this.config().value,scale=this.scale(),domain=this.domain()||[1,1];return scale&&domain[0]!==domain[1]?this._sizeStrategy.range(domainVal,scale,this.domain(),this.uniqueValues()):value}},{key:"updateDomain",value:function updateDomain(domain){if(domain){var domainInfo=(0,this._sizeStrategy.domain)(domain,this.config().intervals);this.domain(domainInfo.domain),this.uniqueValues(domainInfo.uniqueVals),this.scale().domain(domainInfo.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 defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),shape_axis_defaults_DEFAULT_CONFIG={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},shape_axis_props_PROPS={config:{},domain:{},scale:{},uniqueValues:{},generator:{}};function shape_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[];return domain.length&&(this.uniqueValues(domain),this.domain(domain),this.scale().domain(domain),this.config().generator&&(this._generatedShapes=function shapeGenerator(domain,generatorFn){var generatedShapes={};return domain.forEach(function(value){generatedShapes[value]=generatorFn(value)}),generatedShapes}(domain,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 shape_axis_defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}(),polar_axis_props_PROPS={config:{sanitization:function sanitization(context,config){return mergeRecursive(context.config(),config)},preset:function preset(context,config){var range=config.range,domain=config.domain;range&&context.range(range),domain&&context.domain(domain)}},domain:{},range:{}};function angle_axis_slicedToArray(arr,i){return function angle_axis_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function angle_axis_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function angle_axis_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function angle_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function angle_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AngleAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._range=[0,360],this._angleFn=angle_axis_pie().value(function(d){return"string"==typeof d?1:d}).sortValues(null),this._angleValues={}}return function angle_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&angle_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&angle_axis_defineProperties(Constructor,staticProps),Constructor}(AngleAxis,[{key:"createScale",value:function createScale(strategy){var range=this.config().range;return scale_creator_createScale({type:strategy.scale,range:range})}},{key:"getScaleValue",value:function getScaleValue(domainVal){return this._angleValues[domainVal]}},{key:"padAngle",value:function padAngle(angle){this._angleFn=this._angleFn.padAngle(angle)}},{key:"domain",value:function domain(){for(var _len=arguments.length,domainVal=new Array(_len),_key=0;_key<_len;_key++)domainVal[_key]=arguments[_key];if(domainVal.length){var customDomain=this.config().domain,domain=domainVal[0].length?domainVal[0]:DEFAULT_ANGLE_DOMAIN;return this._domain=helper_resolveAxisConfig(customDomain,domain,this),createAngleValues(this),this}return this._domain}},{key:"range",value:function range(){if(arguments.length){var customRange=this.config().range;this._range=helper_resolveAxisConfig(customRange,arguments.length<=0?void 0:arguments[0],this);var domain=this.domain(),_this$_range=angle_axis_slicedToArray(this._range,2),startAngle=_this$_range[0],endAngle=_this$_range[1];return this._angleFn.startAngle(startAngle/180*Math.PI).endAngle(Math.PI*endAngle/180),domain&&domain.length&&createAngleValues(this),this}return this._range}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),AngleAxis}(),X="x",Y="y",MEASURE="measure",ROWS="rows",COLUMNS="columns",COL="col",ROW="row",enums_constants_COLOR="color",enums_constants_SHAPE="shape",enums_constants_SIZE="size",enums_constants_LINEAR="linear",constants_LEFT="left",constants_RIGHT="right",CELL="cell",X_AXES="xAxes",Y_AXES="yAxes",ENTRY_CELLS="entryCell",EXIT_CELLS="exitCell",enums_constants_RADIUS="radius",enums_constants_ANGLE="angle",ANGLE0="angle0",PRIMARY="Primary",SECONDARY="Secondary";function radius_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function radius_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RadiusAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._range=[],this._radiusFactor=1,this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._scale=this.createScale({scale:enums_constants_LINEAR})}return function radius_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&radius_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&radius_axis_defineProperties(Constructor,staticProps),Constructor}(RadiusAxis,[{key:"config",value:function config(){if(arguments.length){var config=mergeRecursive(this.config(),arguments.length<=0?void 0:arguments[0]);return this._config=config,this}return this._config}},{key:"createScale",value:function createScale(strategy){return scale_creator_createScale({type:strategy.scale,range:this.range()})}},{key:"domain",value:function domain(){if(arguments.length){var customDomain=this.config().domain,domain=helper_resolveAxisConfig(customDomain,arguments.length<=0?void 0:arguments[0],this);domain=sanitizeDomainWhenEqual(domain),this._scale.domain(domain),this._domain=domain,adjustDomain(this)}return this._domain}},{key:"getInnerRadius",value:function getInnerRadius(domainVal){return void 0===domainVal?this.range()[0]:this._scale(domainVal)}},{key:"getOuterRadius",value:function getOuterRadius(domainVal){return void 0===domainVal?this.range()[1]:this._scale(domainVal)*this._radiusFactor}},{key:"range",value:function range(){for(var _len=arguments.length,_range=new Array(_len),_key=0;_key<_len;_key++)_range[_key]=arguments[_key];if(_range.length){var _this$config2=this.config(),padding=_this$config2.padding,customRange=_this$config2.range,sanitizedRange=_range[0].map(function(v,i){return v+(i?-padding[i]:padding[i])}),rangeVal=helper_resolveAxisConfig(customRange,sanitizedRange,this);this._range=rangeVal,this._scale.range(rangeVal),adjustDomain(this)}return this._range}},{key:"setRadiusFactor",value:function setRadiusFactor(val){return this._radiusFactor=val,this}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:[0,1],minOuterRadius:10}}}]),RadiusAxis}();function data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DATA_TYPES_MEASURE="measure",DATA_TYPES_TEMPORAL="temporal",group_transform=(data_type_scale_map_defineProperty(_dataTypeScaleMap={},"dimension",BAND),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_MEASURE,LINEAR),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_TEMPORAL,TIME),function(schema,data,config){var groupBy=config.groupBy instanceof Array?config.groupBy:[config.groupBy],groupByIndices=groupBy.map(function(fieldName){return schema.findIndex(function(d){return d.name===fieldName})});if(void 0!==groupByIndices.find(function(d){return-1===d}))throw new Error("Groupby field ".concat(groupBy," not found in schema"));var groupedData=common_utils_nestCollection({keys:groupByIndices,data:data});return groupedData.forEach(function(d){var key=d.key;src_InvalidAwareTypes.isInvalid(key)&&(d.key=src_InvalidAwareTypes.getInvalidType(key))}),groupedData});var _transformMap;function transform_factory_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var transformMap=(transform_factory_defineProperty(_transformMap={},"identity",function identityTransform(schema,data,config){return data}),transform_factory_defineProperty(_transformMap,"group",group_transform),transform_factory_defineProperty(_transformMap,"stack",function(schema,data,config){var uniqueField=config.uniqueField,valueField=config.value,groupBy=config.groupBy,sort=config.sort||"descending",normalizedData=function normalizeData(data,schema,valueField,uniqueField,groupBy){var groupedData=group_transform(schema,data,{groupBy:uniqueField}),uniqueFieldIndex=schema.findIndex(function(d){return d.name===uniqueField}),valueFieldIndex=schema.findIndex(function(d){return d.name===valueField}),seriesKeyIndex=schema.findIndex(function(d){return d.name===groupBy}),seriesKeys=data.map(function(d){return d[seriesKeyIndex]}).filter(function(item,pos,arr){return arr.indexOf(item)===pos}).sort(),fieldNames=schema.reduce(function(acc,obj,i){return acc[i]=obj.name,acc},{});return{data:groupedData.map(function(arr){var tuples={},rowObj=arr.values.reduce(function(acc,row){return acc=row.reduce(function(obj,value,i){return i===seriesKeyIndex?(obj[value]=row[valueFieldIndex],tuples[value]=row):i!==valueFieldIndex&&(obj[fieldNames[i]]=value),obj},acc)},{});return rowObj._tuple=tuples,seriesKeys.forEach(function(seriesKey){if(void 0===rowObj[seriesKey]){rowObj[seriesKey]=0;var newArr=new Array(arr.values[0].length);newArr[uniqueFieldIndex]=arr.key,newArr[seriesKeyIndex]=seriesKey,rowObj._tuple[seriesKey]=newArr}}),rowObj}),keys:seriesKeys}}(data,schema,valueField,uniqueField,groupBy),keys=normalizedData.keys,map={},orderBy=config.orderBy,orderIndex=schema.findIndex(function(d){return d.name===orderBy}),groupByIndex=schema.findIndex(function(d){return d.name===groupBy});-1!==orderIndex&&(keys.forEach(function(key){var name=data.find(function(d){return d[groupByIndex]===key});map[key]=name[orderIndex]}),normalizedData.keys.sort(function(a,b){return map[a].localeCompare(map[b])}));var stackData=common_utils_stack({keys:normalizedData.keys,offset:config.offset||"diverging",order:sort,data:normalizedData.data});return stackData.forEach(function(seriesData){seriesData.forEach(function(dataObj){dataObj.data=dataObj.data._tuple[seriesData.key]})}),stackData}),_transformMap);var _encodingFieldInfRetr,_dataNormalizers,_domainCalculator,transform_factory=function transformFactory(type){var transform=transformMap[type];if("function"!=typeof transform)throw new Error("Invalid transform type supplied.");return transform};function helpers_toConsumableArray(arr){return function helpers_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=d[0]?(y=x0=d[1],x=y0=d[0]):(y=x0=d[0],x=y0=d[1]),(pointObj=xFieldType===dist_datamodel.FieldType.MEASURE?{x:x,x0:x0,y:tuple[yFieldIndex],y0:tuple[yFieldIndex]}:{x:tuple[xFieldIndex],x0:tuple[xFieldIndex],y:y,y0:y0}).source=tuple,pointObj.rowId=tuple[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=tuple[encodingFieldInf["".concat(enc,"FieldIndex")]]})):((pointObj={x:d[xFieldIndex],y:d[yFieldIndex],x0:d[x0FieldIndex],y0:d[y0FieldIndex]}).source=d,pointObj.rowId=d[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=d[encodingFieldInf["".concat(enc,"FieldIndex")]]}));return pointObj})}).filter(function(d){return d.length})}),_dataNormalizers),domainCalculator=(helpers_defineProperty(_domainCalculator={},POLAR,function(data,layerInst){var config=layerInst.config(),sort=config.sort,angleValues=data[0],radius0Field=getObjProp(config.encoding.radius0,"field");return sort&&(angleValues=angleValues.sort(function(a,b){return"asc"===sort?a.radius-b.radius:b.radius-a.radius})),{radius:getDomainFromData(data,[ENCODING.RADIUS,radius0Field?ENCODING.RADIUS0:ENCODING.RADIUS]),angle:angleValues.map(function(d){return d.angle}),angle0:angleValues.map(function(d){return d.angle0})}}),helpers_defineProperty(_domainCalculator,helpers_CARTESIAN,function(data,layerInst){var transformType=layerInst.transformType(),encodingFieldInf=layerInst.encodingFieldsInf(),xFieldSubType=encodingFieldInf.xFieldSubType,yFieldSubType=encodingFieldInf.yFieldSubType,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,x0Field=encodingFieldInf.x0Field,y0Field=encodingFieldInf.y0Field,domains={},yEnc=ENCODING.Y,xEnc=ENCODING.X;return xField&&(domains.x=getDomainFromData(data,x0Field||"stack"===transformType?[xEnc,ENCODING.X0]:[xEnc,xEnc],xFieldSubType)),yField&&(domains.y=getDomainFromData(data,y0Field||"stack"===transformType?[ENCODING.Y0,ENCODING.Y]:[yEnc,yEnc],yFieldSubType)),domains}),_domainCalculator),attachDataToVoronoi=function attachDataToVoronoi(voronoi,points){var _ref3;voronoi.data((_ref3=[]).concat.apply(_ref3,helpers_toConsumableArray(points)).filter(function(d){return void 0!==d.rowId}).map(function(d){var point=d.update;return{x:point.x,y:point.y,data:d}}))},helpers_updateStyle=function updateStyle(target,styles,remove){for(var key in styles)({}).hasOwnProperty.call(styles,key)&&target.style(key,remove?null:styles[key])},positionPoints=function positionPoints(context,points){var positioner=context.encodingTransform();return positioner?positioner(points,context,{smartLabel:context._dependencies.smartLabel}):points},helpers_getPlotMeasurement=function getPlotMeasurement(context,dimensionalValues){var fieldInfo=context.encodingFieldsInf(),axes=context.axes(),transformType=context.transformType(),config=context.config(),bandScale=context._bandScale;return["x","y"].map(function(type){var span=0,groupSpan=0,padding=0,offsetValues=[];if(fieldInfo["".concat(type,"FieldType")]===dist_datamodel.FieldType.DIMENSION){var actualGroupWidth,timeDiff=fieldInfo["".concat(type,"FieldSubType")]===dist_datamodel.DimensionSubtype.TEMPORAL?context.dataProps().timeDiffs[type]:0,axis=axes[type],pad=config["pad".concat(type.toUpperCase())],innerPadding=config.innerPadding,keys=dimensionalValues,scale=axis.scale();groupSpan=function getGroupSpan(axis,minDiff){var width=axis.getUnitWidth(),scale=axis.scale(),range=scale.range(),domain=scale.domain();return width||Math.abs(range[1]-range[0])/Math.abs(domain[1]-domain[0])*minDiff}(axis,timeDiff);var isAxisBandScale=axis.constructor.type()===helpers_BAND,axisPadding=axis.config().padding;if("group"===transformType){var groupPadding=isAxisBandScale?0:axisPadding*groupSpan/2;bandScale.range([groupPadding,groupSpan-groupPadding]).domain(keys).paddingInner(innerPadding),span=bandScale.bandwidth(),actualGroupWidth=groupSpan-(isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(key){return bandScale(key)-(isAxisBandScale?0:groupSpan/2)})}else if(void 0!==pad){var offset;if(isAxisBandScale){var step=scale.step();offset=scale.padding()*step,span=scale.bandwidth()+offset}else span=groupSpan;offsetValues=keys.map(function(){return isAxisBandScale?-offset/2:-span/2})}else actualGroupWidth=span=groupSpan-(padding=isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(){return isAxisBandScale?0:-span/2});groupSpan=actualGroupWidth,padding=isAxisBandScale?axisPadding*axis.scale().step():axisPadding*groupSpan}return{span:span,offsetValues:offsetValues,groupSpan:groupSpan,padding:padding}})},helpers_resolveInvalidTransformType=function resolveInvalidTransformType(context){return function transformResolverPredicates(encodingFieldInf,context,groupByField){var fieldsConfig=context.data().getFieldsConfig(),xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,dimensionField=["xField","yField"].find(function(type){return encodingFieldInf["".concat(type,"Type")]===dist_datamodel.FieldType.DIMENSION});return[!xField,!yField,!groupByField,getObjProp(fieldsConfig[groupByField],"def","type")===dist_datamodel.FieldType.MEASURE,xFieldType===dist_datamodel.FieldType.DIMENSION&&yFieldType===dist_datamodel.FieldType.DIMENSION,dimensionField&&encodingFieldInf[dimensionField]===groupByField]}(context.encodingFieldsInf(),context,context.config().transform.groupBy).some(function(value){return value})?"identity":null},helpers_getValidTransformForAggFn=function getValidTransformForAggFn(context){var resolvedInvalidTransformType=helpers_resolveInvalidTransformType(context);if(resolvedInvalidTransformType)return resolvedInvalidTransformType;var _context$encodingFiel=context.encodingFieldsInf(),xField=_context$encodingFiel.xField,yField=_context$encodingFiel.yField,xFieldType=_context$encodingFiel.xFieldType,yFieldType=_context$encodingFiel.yFieldType,groupByField=context.config().transform.groupBy,isCustomTransformTypeProvided=!!getObjProp(context._customConfig,"transform","type"),transformType=context.config().transform.type;if(!isCustomTransformTypeProvided&&groupByField&&xFieldType!==yFieldType){var measureField=xFieldType===dist_datamodel.FieldType.MEASURE?xField:yField;transformType="sum"===common_utils_retrieveNearestGroupByReducers(context.data(),measureField)[measureField]?"stack":"group"}return transformType},helpers_resolveEncodingValues=function resolveEncodingValues(data,i,dataArr,layerInst){var transformedValues={},values=data.values,encoding=layerInst.config().encoding;for(var key in values){var value=getObjProp(encoding[key],"value");value instanceof Function?transformedValues[key]=value(values,i,dataArr,layerInst):transformedValues[key]=values[key]}return transformedValues},getColorMetaInf=function getColorMetaInf(colorInf,colorAxis){return{originalColor:Object.keys(colorInf).reduce(function(acc,key){return colorInf[key]&&(acc[key]=colorAxis.getHslArray(colorInf[key])),acc},{}),stateColor:{},colorTransform:{}}},getCoordValue=function getCoordValue(radius,trig,angle,offset){return radius*Math[trig](angle)+offset},coordValueGetter=function coordValueGetter(radius,angle,xOffset,yOffset){return{x:getCoordValue(radius,"cos",angle,xOffset),y:getCoordValue(radius,"sin",angle,yOffset)}},toCartesianCoordinates=function toCartesianCoordinates(points,measurement){for(var rangePlot=arguments.length>2&&void 0!==arguments[2]&&arguments[2],xOffset=measurement.width/2,yOffset=measurement.height/2,i=0,len=points.length;i3&&void 0!==arguments[3]?arguments[3]:{};return function base_layer_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,BaseLayer),_this=function base_layer_possibleConstructorReturn(self,call){return!call||"object"!==base_layer_typeof(call)&&"function"!=typeof call?base_layer_assertThisInitialized(self):call}(this,base_layer_getPrototypeOf(BaseLayer).call(this)),generateGetterSetters(base_layer_assertThisInitialized(_this),props_props),_this.axes(axes),_this.alias(_this.constructor.formalName()+getUniqueId()),_this.dependencies(dependencies),_this._points=[],_this._cachedData=[],_this._id=getUniqueId(),_this._measurement={},_this._animationDonePromises=[],_this._graphicElems={},_this._customConfig=null,_this}return function base_layer_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&base_layer_setPrototypeOf(subClass,superClass)}(BaseLayer,simple_layer_SimpleLayer),function base_layer_createClass(Constructor,protoProps,staticProps){return protoProps&&base_layer_defineProperties(Constructor.prototype,protoProps),staticProps&&base_layer_defineProperties(Constructor,staticProps),Constructor}(BaseLayer,[{key:"store",value:function store(){if(arguments.length){var store=this._store=arguments.length<=0?void 0:arguments[0],namespace=this.metaInf().namespace;return store.addSubNamespace(namespace,BaseLayer.formalName(),this),store_transactor(this,localOptions,store,{subNamespace:namespace,namespace:"".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE)}),this}return this._store}},{key:"domain",value:function domain(){var prop="".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain"),store=this.store();if(arguments.length){var _this$metaInf2=this.metaInf(),parentNamespace=_this$metaInf2.parentNamespace,namespace=_this$metaInf2.namespace,domain=defaultValue(store.get(prop,parentNamespace),{});return domain[namespace]=arguments.length<=0?void 0:arguments[0],this.store().commit(prop,domain,parentNamespace),this}return this.store().get(prop,this.metaInf().namespace)}},{key:"encodingFieldsInf",value:function encodingFieldsInf(){return arguments.length?(this._encodingFieldsInf=arguments.length<=0?void 0:arguments[0],this):this._encodingFieldsInf}},{key:"encodingTransform",value:function encodingTransform(){return arguments.length?(this._encodingTransform=arguments.length<=0?void 0:arguments[0],this):this._encodingTransform}},{key:"alias",value:function alias(){return arguments.length?(this._alias=arguments.length<=0?void 0:arguments[0],this):this._alias||this.constructor.formalName()}},{key:"dependencies",value:function dependencies(){return arguments.length?(this._dependencies=arguments.length<=0?void 0:arguments[0],this):this._dependencies}},{key:"enableCaching",value:function enableCaching(){return this._cacheEnabled=!0,this}},{key:"clearCaching",value:function clearCaching(){return this._cacheEnabled=!1,this.data(this._cachedData[0])}},{key:"serialize",value:function serialize(){return this.config()}},{key:"id",value:function id(){return this._id}},{key:"getTransformedData",value:function getTransformedData(dataModel,config,transformType,encodingFieldsInf){return function transformData(dataModel,config,transformType,encodingFieldInf){var data=dataModel.getData({withUid:!0}),schema=data.schema,transform=config.transform,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,uniqueField=xFieldType===dist_datamodel.FieldType.MEASURE?yField:xField;return transform_factory(transformType)(schema,data.data,{groupBy:transform.groupBy,uniqueField:uniqueField,sort:transform.sort||"none",offset:transform.offset,orderBy:transform.orderBy,value:yFieldType===dist_datamodel.FieldType.MEASURE?yField:xField},data.uids)}(dataModel,config,transformType,encodingFieldsInf)}},{key:"calculateDomainFromData",value:function calculateDomainFromData(data){var domains={};return this.data().isEmpty()||(domains=domainCalculator[this.coord()](data,this)),domains}},{key:"getDataDomain",value:function getDataDomain(encodingType){var _this$metaInf3=this.metaInf(),parentNamespace=_this$metaInf3.parentNamespace,namespace=_this$metaInf3.namespace,domains=getObjProp(this.store().get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain"),parentNamespace),namespace);return void 0!==encodingType?domains[encodingType]||[]:domains}},{key:"getNormalizedData",value:function getNormalizedData(transformedData){return function getNormalizedData(transformedData,context){var transformType=context.transformType(),transformedDataArr="identity"===transformType?[transformedData]:transformedData,encodingFieldInf=context.encodingFieldsInf(),fieldsConfig=context.data().getFieldsConfig();return dataNormalizers[context.coord()](transformedDataArr,encodingFieldInf,fieldsConfig,transformType)}(transformedData,this)}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(interactionType,selectionSet,apply,styles){var interactionStyles=(this.config().interaction||{})[interactionType];(interactionStyles=styles||interactionStyles)&&helpers_applyInteractionStyle(this,selectionSet,interactionStyles,{apply:apply,interactionType:interactionType})}},{key:"disableUpdate",value:function disableUpdate(){return this._updateLock=!0,this}},{key:"enableUpdate",value:function enableUpdate(){return this._updateLock=!1,this}},{key:"resolveTransformType",value:function resolveTransformType(){this._transformType=function getValidTransform(context){return helpers_resolveInvalidTransformType(context)||context.config().transform.type}(this)}},{key:"transformType",value:function transformType(){return this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){var _this$metaInf4=this.metaInf(),namespace=_this$metaInf4.namespace,parentNamespace=_this$metaInf4.parentNamespace,store=this.store();store.removeSubNamespace(namespace,BaseLayer.formalName());var unitDom=store.get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".domain"))[parentNamespace];return unitDom&&delete unitDom[namespace],renderer_utils_selectElement(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(key,data){if(null===key)return this;var pointMap=this._pointMap;return!pointMap[key]&&(pointMap[key]=[]),pointMap[key].push(data),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(data){var schema=this.data().getSchema(),fieldsConfig=this.data().getFieldsConfig(),identifiers=[[],[]],_this$encodingFieldsI=this.encodingFieldsInf(),xFieldType=_this$encodingFieldsI.xFieldType,yFieldType=_this$encodingFieldsI.yFieldType,xField=_this$encodingFieldsI.xField,yField=_this$encodingFieldsI.yField,_map2=base_layer_slicedToArray([xFieldType,yFieldType].map(function(type){return type===dist_datamodel.FieldType.MEASURE}),2),xMeasure=_map2[0],yMeasure=_map2[1];if(schema.forEach(function(d,i){var name=d.name;fieldsConfig[name].def.type===dist_datamodel.FieldType.DIMENSION&&(identifiers[0].push(name),identifiers[1].push(data[i]))}),xMeasure&&yMeasure){var _identifiers$,_identifiers$2,xMeasureIndex=fieldsConfig[xField].index,yMeasureIndex=fieldsConfig[yField].index;(_identifiers$=identifiers[0]).push.apply(_identifiers$,[xField,yField]),(_identifiers$2=identifiers[1]).push.apply(_identifiers$2,[data[xMeasureIndex],data[yMeasureIndex]])}return identifiers}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!1}},{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(identifiers){var _ref,fieldNames,values,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},getAllAttrs=config.getAllAttrs,getBBox=config.getBBox;if(!this.data())return[];if(identifiers instanceof datamodel_default.a){var dataObj=identifiers.getData();fieldNames=dataObj.schema.map(function(d){return d.name}),values=dataObj.data}else fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length);var points=this._points,fieldsConfig=this.data().getFieldsConfig(),filteredPoints=(_ref=[]).concat.apply(_ref,base_layer_toConsumableArray(points)).filter(function(point){var source=point.source,rowId=point.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})});return getAllAttrs?filteredPoints:filteredPoints.map(function(d){var obj=clone(d);if(getBBox){var update=obj.update||obj;if(void 0!==obj.size){var sizeVal=2*Math.sqrt(obj.size/Math.PI);update.width=sizeVal,update.height=sizeVal,update.x-=sizeVal/2,update.y-=sizeVal/2}else void 0===update.width&&(update.width=2),void 0===update.height&&(update.height=2)}return obj.update||obj}).sort(function(a,b){return a.y-b.y})}},{key:"getTransformedDataFromIdentifiers",value:function getTransformedDataFromIdentifiers(identifiers){var measureIndex,enc,_identifiers$getData=identifiers.getData(),identifierData=_identifiers$getData.data,identifierSchema=_identifiers$getData.schema,normalizedData=this._normalizedData,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI2=this.encodingFieldsInf(),yField=_this$encodingFieldsI2.yField,xField=_this$encodingFieldsI2.xField,yFieldType=_this$encodingFieldsI2.yFieldType;_this$encodingFieldsI2.xFieldType===dist_datamodel.FieldType.MEASURE?(measureIndex=fieldsConfig[xField].index,enc="x"):yFieldType===dist_datamodel.FieldType.MEASURE&&(measureIndex=fieldsConfig[yField].index,enc="y");var transformedData=[];return normalizedData.forEach(function(dataArr){dataArr.forEach(function(dataObj){var tupleArr=dataObj.source;if(identifierSchema.every(function(obj,i){return-1!==identifierData.findIndex(function(d){return tupleArr[fieldsConfig[obj.name].index]===d[i]})})){var transformedVal=dataObj[enc],row=dataObj.source,tuple={};for(var key in fieldsConfig){var index=fieldsConfig[key].index;tuple[key]=row[index],index===measureIndex&&(tuple[key]=transformedVal)}transformedData.push(tuple)}})}),[transformedData,this.data().getSchema()]}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){for(var graphicElems=this._graphicElems,elems=[],i=0,len=set.length;i2&&void 0!==arguments[2]?arguments[2]:{},dataPoint=renderer_utils_selectElement(config.event.target).data()[0];if(isSimpleObject(dataPoint)){var source=dataPoint.source,rowId=dataPoint.rowId;return{id:this.getIdentifiersFromData(source,rowId),layerId:this.id()}}return null}},{key:"translatePoints",value:function translatePoints(data){var _this2=this,_this$axes=this.axes(),angle=_this$axes.angle,colorAxis=_this$axes.color,radiusAxis=_this$axes.radius,pieIndex={},prevData=this._points[0]||[],points=[],angleV={};return this._prevPieData={},prevData.forEach(function(e,index){_this2._prevPieData[e.rowId]=[e,index],pieIndex[e.index]=e}),data.forEach(function(d,i){var angles=angle.getScaleValue(d.angle);if(angles){!angleV[d.angle]&&(angleV[d.angle]=0);var _angles=angles[angleV[d.angle]++],startAngle=_angles.startAngle,endAngle=_angles.endAngle,uid=d.rowId,resolvedEncodings=helpers_resolveEncodingValues({values:{radius:radiusAxis.getOuterRadius(d.radius),radius0:radiusAxis.getInnerRadius(d.radius0),color:colorAxis.getColor(d.color),angle0:startAngle,angle:endAngle,startAngle:startAngle,endAngle:endAngle,startAngle0:startAngle,endAngle0:endAngle},data:d},i,data,_this2),color=resolvedEncodings.color;points.push({source:d.source,index:i,enter:{},update:{angle0:resolvedEncodings.angle0,angle:resolvedEncodings.angle,radius0:resolvedEncodings.radius0,radius:resolvedEncodings.radius},color:color,meta:getColorMetaInf({fill:color},colorAxis),rowId:uid,_previousInfo:_this2._prevPieData[uid]?_this2._prevPieData[uid][0]:function getPreviousPoint(prevData,currIndex,context){var prevArc=prevData[currIndex-1],nextArc=prevData[currIndex],_context$axes$angle$r2=arc_helper_slicedToArray(context.axes().angle.range(),2),startAngle=_context$axes$angle$r2[0],endAngle=_context$axes$angle$r2[1];return prevArc&&nextArc?{update:{angle0:getObjProp(prevArc,"update","angle"),angle:getObjProp(nextArc,"update","angle0")}}:nextArc?{update:{angle0:(startAngle-90)*Math.PI*2/360,angle:(startAngle-90)*Math.PI*2/360}}:{update:{angle0:(endAngle-90)*Math.PI*2/360,angle:(endAngle-90)*Math.PI*2/360}}}(pieIndex,i,_this2)})}}),points}},{key:"render",value:function render(container){var _this3=this,measurement=this.measurement(),_this$config=this.config(),classPrefix=_this$config.classPrefix,defClassName=_this$config.defClassName,cornerRadius=_this$config.cornerRadius,padAngle=_this$config.padAngle,padRadius=_this$config.padRadius,transition=_this$config.transition,qualClassName=getQualifiedClassName(defClassName,this.id(),classPrefix),path=this._arcFn=arc_arc().cornerRadius(cornerRadius).startAngle(function(d){return d.update.angle0+Math.PI/2}).endAngle(function(d){return d.update.angle+Math.PI/2}).padAngle(padAngle).padRadius(padRadius).outerRadius(function(d){return d.update.radius}).innerRadius(function(d){return d.update.radius0});this._points=this._normalizedData.map(function(arr){return _this3.translatePoints(arr)});var graphicElems=this._graphicElems={},g=makeElement(renderer_utils_selectElement(container),"g",this._points,"".concat(qualClassName[0],"-group")).classed("".concat(qualClassName[1],"-group"),!0).attr("transform","translate(".concat(measurement.width/2,",\n ").concat(measurement.height/2,")")),consecutiveExits=[],exitCounter=0;return makeElement(g,"g",function(d){return d},"".concat(qualClassName[0]),{update:function tween(elem){makeElement(elem,"path",function(d){return[d]},"".concat(qualClassName[0],"-path")).style("fill",function(d){return d.color}).each(function(d){graphicElems[d.rowId]=renderer_utils_selectElement(this)}).transition().duration(transition.duration).on("end",_this3.registerAnimationDoneHook()).attrTween("d",function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return function tweenPie(path,b){var datum=b[0];return function(t){return path(common_utils_interpolator()(datum._previousInfo,datum)(t))}}(path,params)}).attr("class",function(d,i){var individualClass=getIndividualClassName(d,i,_this3._points,_this3);return"".concat(qualClassName[0],"-path ").concat(qualClassName[1],"-path-").concat(d.index,"\n ").concat(individualClass)})},exit:function tweenExit(elem,d){var exitArr=consecutiveExits[exitCounter],oldExitCounter=exitCounter;exitArr?exitArr[exitArr.length-1].datum.index===d.index-1?exitArr.push({elem:elem,datum:d}):exitCounter++:exitArr=[{elem:elem,datum:d}],consecutiveExits[oldExitCounter]=exitArr}}).attr("class",function(d,i){return"".concat(qualClassName[0]," ").concat(qualClassName[1],"-").concat(i)}),function tweenExitPie(consecutiveExits,transition,path){consecutiveExits.length>0&&consecutiveExits.forEach(function(consecutiveExitArr){var startAngle=consecutiveExitArr[0].datum.update.angle0,endAngle=consecutiveExitArr[consecutiveExitArr.length-1].datum.update.angle,mid=2*Math.PI*startAngle/(2*Math.PI+startAngle-endAngle);consecutiveExitArr.forEach(function(e){var elem=e.elem,datum=e.datum;elem.each(function(){var gElem=renderer_utils_selectElement(this);gElem.selectAll("path").transition().duration(transition.duration).attrTween("d",function(){return function(t){return path(common_utils_interpolator()(datum,{update:{angle0:mid,angle:mid,radius:datum.radius,radius0:datum.radius0}})(t))}}).remove(),gElem.remove()})})})}(consecutiveExits,transition,path),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){if(!this.data())return[];var fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length),pieSlices=renderer_utils_selectElement(this.mount()).selectAll("path").data(),fieldsConfig=this.data().getFieldsConfig(),pieSliceInf=pieSlices.filter(function(tData){var source=tData.source,rowId=tData.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})})[0];if(pieSliceInf){var measurement=this.measurement(),centroid=this._arcFn.centroid(pieSliceInf);return[{x:centroid[0]+measurement.width/2,y:centroid[1]+measurement.height/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return arc_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),text_renderer=function drawText(container,data,config,layerInst){var selection=renderer_utils_selectElement(container).selectAll("g").data(data),smartLabel=layerInst._dependencies.smartLabel,graphicElems=layerInst._graphicElems,selectionMerge=selection.enter().append("g").each(function(dataObj){renderer_utils_setAttrs(this,dataObj.enter)}).merge(selection),style=renderer_utils_getSmartComputedStyle(renderer_utils_selectElement(container),config.className),fontSize=parseInt(style.fontSize,10);return smartLabel.setStyle(style),selectionMerge.each(function(dataObj){var element=renderer_utils_selectElement(this);graphicElems[dataObj.rowId]=element;var backgroundVal,update=dataObj.update,text=dataObj.text,color=dataObj.color,textanchor=dataObj.textanchor,textStyle=dataObj.style,background=dataObj.background;if(backgroundVal=background.value){var diff,backgroundPadding=background.padding,_smartLabel$getOriSiz=smartLabel.getOriSize(dataObj.text),width=_smartLabel$getOriSiz.width,height=_smartLabel$getOriSiz.height,backgroundEl=makeElement(element,"rect",[1]);diff="end"===textanchor?width:"start"===textanchor?0:width/2,renderer_utils_setAttrs(backgroundEl.node(),{x:update.x-diff-backgroundPadding/2,y:update.y-fontSize-backgroundPadding/2,width:width+backgroundPadding,height:height+backgroundPadding}),background&&renderer_utils_setStyles(backgroundEl,{background:backgroundVal})}var textEl=makeElement(element,"text",function(d){return[d]}).text(text),textNode=textEl.node();textStyle&&renderer_utils_setStyles(textNode,textStyle),color&&renderer_utils_setStyles(textNode,{fill:color}),dataObj.className&&textEl.classed(dataObj.className,!0),renderer_utils_setAttrs(textNode,update),textEl.attr("text-anchor",textanchor),textEl.attr("alignment-baseline",dataObj["alignment-baseline"]),textEl.attr("transform","rotate(".concat(dataObj.rotation," ").concat(update.x," ").concat(update.y,")"))}),selection.exit().remove(),selection},text_default_config_defaultConfig={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:{},size:{},radius:{},angle:{},text:{value:"",formatter:function formatter(val,i,data,context){return context.valueParser()(val)},background:{padding:10}},rotation:{value:0},"alignment-baseline":{value:"middle"}},states:{highlight:{className:"".concat("muze","-layer-text-highlight")},fadeout:{className:"".concat("muze","-layer-text-fadeout")},selected:{className:"".concat("muze","-layer-text-selected")}}};__webpack_require__(18);function text_typeof(obj){return(text_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function text_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var _this=this,config=this.config(),normalizedData=this._normalizedData,className=config.className,qualifiedClassName=getQualifiedClassName(config.defClassName,this.id(),config.classPrefix);return renderer_utils_selectElement(container).classed("".concat(qualifiedClassName.join(" ")," ").concat(className),!0),this._graphicElems={},renderer_utils_createElements({data:normalizedData,append:"g",selector:"g",container:container,each:function each(dataArr,group){var node=group.node(),points=_this.translatePoints(dataArr,{},_this);renderer_utils_setStyles(node,{"text-anchor":"middle"}),text_renderer(node,points,{className:qualifiedClassName[0]},_this)}}),this}}],[{key:"defaultConfig",value:function defaultConfig(){return text_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"text"}}]),TextLayer}(),point_renderer=function drawSymbols(params){var layer=params.layer,container=params.container,points=params.points,transition=params.transition,className=params.className,duration=transition.duration,effect=transition.effect,disabled=transition.disabled,mount=renderer_utils_selectElement(container),graphicElems=layer._graphicElems;return mount.attr("class",className),makeElement(mount,"g",points,null,{enter:function enter(group,d){var enter=d.enter;group.attr("transform","translate(".concat(enter.x,",").concat(enter.y,")"))},update:function update(group,d){!function createShape(d,groupElement){var shape=d.shape,size=d.size,update=d.update;if(shape instanceof Promise)shape.then(function(res){d.shape=res,createShape(d,groupElement)});else if(shape instanceof Element){var newShape=shape.cloneNode(!0);if("img"===newShape.nodeName.toLowerCase()){var src=newShape.src||newShape.href;(newShape=document.createElementNS("http://www.w3.org/2000/svg","image")).setAttribute("href",src)}var shapeElement=renderer_utils_selectElement(newShape);"path"===newShape.nodeName||"image"===newShape.nodeName?shapeElement.attr("transform","scale(".concat(size/100,")")):(shapeElement.attr("height",size),shapeElement.attr("width",size)),shapeElement.attr("x",-size/2),shapeElement.attr("y",-size/2),makeElement(groupElement,function(){return newShape},[1])}else if("string"==typeof shape){var pathStr;pathStr=function checkPath(str){return!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(str)&&/[\dz]$/i.test(str)&&str.length>4)}(shape)?shape:common_utils_getSymbol(shape).size(size)(update),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}else d.shape="circle",createShape(d,groupElement)}(d,group),graphicElems[d.rowId]=group;var update=d.update,style=d.style;objectIterator(style,function(key){return group.style(key,style[key])}),group.attr("class",className),group.classed(d.className,!0),disabled||(group=group.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),group.attr("transform","translate(".concat(update.x,",").concat(update.y,")"))},exit:function exit(exitGroup){disabled?exitGroup.remove():exitGroup.transition().ease(easeFns[effect]).duration(duration).on("end",function(){return exitGroup.remove()}).style("fill-opacity",0).style("stroke-opacity",0)}},params.keyFn)},point_default_config_defaultConfig={defClassName:"layer-point",className:"",classPrefix:"muze",defColorStyle:"stroke",interaction:{highlight:[{type:"stroke",intensity:[0,0,0,1]}],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:{},stroke:{value:"hsla(0,0%,0%,0)"},fill:{},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]};__webpack_require__(19);function point_typeof(obj){return(point_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function point_toConsumableArray(arr){return function point_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},points=[],encoding=this.config().encoding,axes=this.axes(),x=encoding.x,y=encoding.y,xField=x.field,yField=y.field,sizeAxis=axes.size,shapeAxis=axes.shape,fieldsConfig=this.data().getFieldsConfig(),isXDim=fieldsConfig[xField]&&fieldsConfig[xField].def.type===dist_datamodel.FieldType.DIMENSION,isYDim=fieldsConfig[yField]&&fieldsConfig[yField].def.type===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=this.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,stroke=encoding.stroke.value,_loop=function _loop(i,len){var d=data[i],size=sizeAxis.getSize(d.size),shape=shapeAxis.getShape(d.shape),_map2=point_slicedToArray([ENCODING.X,ENCODING.Y].map(function(type){var value=null===d[type]?void 0:d[type],measure=type===ENCODING.X?measurement.width:measurement.height;return encoding[type].field?axes[type].getScaleValue(value):measure/2}),2),xPx=_map2[0],yPx=_map2[1];xPx+=offsetX,yPx+=offsetY;var color=colorAxis.getColor(d.color),resolvedEncodings=helpers_resolveEncodingValues({values:{x:xPx,y:yPx,color:color,shape:shape,size:size,data:d},data:d},i,data,_this2),style={fill:color=resolvedEncodings.color,stroke:stroke},pos={x:resolvedEncodings.x,y:resolvedEncodings.y};if(!isNaN(xPx)&&!isNaN(yPx)){var point={enter:pos,update:pos,shape:resolvedEncodings.shape,size:Math.abs(resolvedEncodings.size),meta:getColorMetaInf(style,colorAxis),style:style,source:d.source,rowId:d.rowId};point.className=getIndividualClassName(d,i,data,_this2),points.push(point),_this2.cachePoint(d[key],point)}},i=0,len=data.length;i=update.x&&x<=update.width+update.x&&y>=update.y&&y<=update.height+update.y){pointFound=point;break}pointFound=null}var values=pointFound&&pointFound.source;return values&&(identifiers=this.getIdentifiersFromData(values,pointFound.rowId)),pointFound?{dimensions:[pointFound.update],id:identifiers,layerId:this.id()}:pointFound}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!0}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return bar_default_config_defaultConfig}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){var config=base_layer_BaseLayer.defaultPolicy(conf,userConf),colorField=config.encoding.color.field,transform=config.transform;return colorField&&(transform.groupBy=colorField),config}}]),BarLayer}(),tick_default_config_defaultConfig={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},interpolate:"linear",encoding:{color:{},x:{},y:{},x0:{},y0:{},radius:{},radius0:{},angle:{},angle0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"".concat("muze","-layer-tick-highlight")},fadeout:{className:"".concat("muze","-layer-tick-fadeout")},selected:{className:"".concat("muze","-layer-tick-selected")}}},tick_renderer_line=Symbols.line,tick_renderer=function(params){var points=params.points,container=params.container,keyFn=params.keyFn,className=params.className,interpolate=params.interpolate,layer=params.layer,mount=renderer_utils_selectElement(container),ticks=mount.selectAll("path").data(points,keyFn),ticksEnter=ticks.enter().append("path"),graphicElems=layer._graphicElems;return mount.attr("class",className||""),ticksEnter.each(function(d){var selection=renderer_utils_selectElement(this),enter=d.enter||{};Object.entries(enter).forEach(function(attr){return!isNaN(attr[1])&&selection.attr(attr[0],attr[1])})}),ticks.exit().remove(),ticks.merge(ticksEnter).each(function(d){var selection=renderer_utils_selectElement(this);graphicElems[d.rowId]=selection;var update=d.update,updateStyle=d.style||{},x0=void 0!==update.x0?update.x0:update.x,y0=void 0!==update.y0?update.y0:update.y,curveInterpolatorFn=pathInterpolators[interpolate],linepath=tick_renderer_line().curve(curveInterpolatorFn).x(function(e){return e[0]}).y(function(e){return e[1]});d.className&&selection.classed(d.className,!0),selection.attr("d",linepath([[update.x,update.y],[x0,y0]])),Object.entries(updateStyle).forEach(function(styleObj){return selection.style(styleObj[0],styleObj[1])})})};__webpack_require__(21);function tick_typeof(obj){return(tick_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function tick_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];for(var layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],radiusAxis=axes.radius,angleAxis=axes.angle,angle0Axis=axes.angle0,measurement=layerInst.measurement(),colorAxis=axes.color,angleV={},angle0V={},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{},layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],_getAxesScales=helpers_getAxesScales(axes),xAxis=_getAxesScales.xAxis,yAxis=_getAxesScales.yAxis,_layerInst$encodingFi=layerInst.encodingFieldsInf(),xField=_layerInst$encodingFi.xField,yField=_layerInst$encodingFi.yField,x0Field=_layerInst$encodingFi.x0Field,y0Field=_layerInst$encodingFi.y0Field,xFieldType=_layerInst$encodingFi.xFieldType,yFieldType=_layerInst$encodingFi.yFieldType,isXDim=xFieldType===dist_datamodel.FieldType.DIMENSION,isYDim=yFieldType===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_config$span=config.span,xSpan=_config$span.x,ySpan=_config$span.y,i=0,len=data.length;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];var layerRegistry=factoryObj._layerRegistry,instances=(layerDef=layerDef instanceof Array?layerDef:[layerDef]).map(function(layerObj){var layerConstructor=layerRegistry[layerObj.mark];return layerConstructor.create.apply(layerConstructor,params)});return 1===instances.length?instances[0]:instances},getLayerClass:function getLayerClass(mark){return factoryObj._layerRegistry[mark]},composeLayers:function composeLayers(layerType,layerDefs){compositeLayers[layerType]=layerDefs},sanitizeLayerConfig:function sanitizeLayerConfig(layerDef){var newConf=mergeRecursive({},layerDef);return sanitizeEncoding(newConf.encoding),newConf}};return factoryObj}();function defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _CONFIG$ROWS$COLUMNS$,DEFAULT_LAYERS=(defaults_defineProperty(_DEFAULT_LAYERS={},layer_types_AREA_LAYER,area_AreaLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_ARC_LAYER,arc_ArcLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_LINE_LAYER,line_LineLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TEXT_LAYER,text_TextLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_POINT_LAYER,point_PointLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TICK_LAYER,tick_TickLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BAR_LAYER,bar_BarLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BASE_LAYER,base_layer_BaseLayer),_DEFAULT_LAYERS),muze_package=__webpack_require__(6);function visual_group_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options=(visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$={},"config",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,ROWS,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,COLUMNS,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_COLOR,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SHAPE,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SIZE,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"detail",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"layers",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"transform",{}),_CONFIG$ROWS$COLUMNS$);function simple_group_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{},innerRadius=config.innerRadius,outerRadius=config.outerRadius;return[innerRadius||0,outerRadius||Math.min(height,width)/2]}(context.width(),context.height()))})},helper_isXandYMeasures=function isXandYMeasures(context){var _context$fields=context.fields(),_map2=src_helper_slicedToArray([_context$fields.x,_context$fields.y].map(function(fields){return fields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE})}),2),xMeasures=_map2[0],yMeasures=_map2[1];return xMeasures&&yMeasures},getKey=function getKey(arr,row){for(var key=row[arr[0]],i=1,len=arr.length;i=0?axisInf[key]:axisArr.length-1;axes[key]&&(axesObj[key]=defaultValue(axes[key][axisIndex]))}}),Object.keys(axesObj).length&&layer.axes(axesObj)})}(axesVal,layers,layerAxisIndexVal),context._lifeCycleManager.notify({client:layers,action:"updated",formalName:"layer"}))}}];function src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var src_props_PROPS=(src_props_defineProperty(_PROPS={},"facetByFields",{}),src_props_defineProperty(_PROPS,"retinalFields",{}),src_props_defineProperty(_PROPS,"parentAlias",{}),src_props_defineProperty(_PROPS,"cachedData",{}),src_props_defineProperty(_PROPS,"detailFields",{}),src_props_defineProperty(_PROPS,"axes",{defaultValue:{x:[],y:[]}}),src_props_defineProperty(_PROPS,"fields",{defaultValue:{x:[],y:[]},sanitization:function sanitization(context,value){return mergeRecursive({x:[],y:[]},value)}}),src_props_defineProperty(_PROPS,"metaInf",{}),src_props_defineProperty(_PROPS,"registry",{}),src_props_defineProperty(_PROPS,"parentContainerInf",{}),src_props_defineProperty(_PROPS,"valueParser",{defaultValue:function defaultValue(val){return val}}),src_props_defineProperty(_PROPS,"coord",{}),_PROPS);function payload_generator_toConsumableArray(arr){return function payload_generator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},payload=config.payload,selectionSet=config.selectionSet,propagationFieldInf=config.propagationFields[action]||{},propagationFields=propagationFieldInf.fields||[],append=propagationFieldInf.append,criteria=payload.criteria,context=instance.context,dataModel=context.cachedData()[0],sourceId=context.id(),sideEfffects=instance.sideEffects(),behaviourEffectMap=instance._behaviourEffectMap,mergedModel=selectionSet.mergedEnter.model,fieldsConfig=dataModel.getFieldsConfig();payload.sourceUnit=sourceId,payload.action=action,payload.sourceCanvas=context.parentAlias();var propagationBehaviour=instance._propagationBehaviourMap[action]||action,propFields=[];null===criteria?propagationData=null:isSimpleObject(criteria)?(propFields=Object.keys(criteria||{}),propagationData=mergedModel?mergedModel.project(propFields):null):(propFields=criteria[0],propagationData=mergedModel?mergedModel.project(propFields):null);var facetByFields=context.facetByFields();if(null!==propagationData&&propagationFields.length){var fields=propagationData.getData().schema.map(function(d){return d.name});propagationData=function getModelWithFacetData(dm,data){var dataObj=dm.getData(),schema1=dataObj.schema,data1=dataObj.data,jsonData=[],derivedSchema=data[0].map(function(d){return{name:"".concat(d),type:dist_datamodel.FieldType.DIMENSION,subtype:d.subtype()}}),dataAtFirstPos=data[1];return data1.forEach(function(d){var tuple={};schema1.forEach(function(obj,i){tuple[obj.name]=d[i]}),derivedSchema.forEach(function(obj,i){tuple[obj.name]=dataAtFirstPos[i]}),jsonData.push(tuple)}),new datamodel_default.a(jsonData,[].concat(data_propagator_toConsumableArray(schema1),data_propagator_toConsumableArray(derivedSchema)))}(propagationData,facetByFields),propFields=append?[].concat(data_propagator_toConsumableArray(fields),data_propagator_toConsumableArray(propagationFields)):propagationFields,propagationData=propagationData.project(propFields)}var propagateInterpolatedValues=!1;propFields.length&&propFields.every(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.MEASURE})&&(propagateInterpolatedValues=!0);var groupId=context.parentAlias();payload.action=action;var behaviourInstance=instance._actions.behavioural[propagationBehaviour],isMutableAction=!!behaviourInstance&&behaviourInstance.constructor.mutates(),filterFn=function filterFn(entry,propagationConf){var effects=behaviourEffectMap[entry.config.action],mutates=!entry.config.groupId||effects.some(function(d){return sideEfffects[d.name||d].constructor.mutates()});return entry.config.groupId!==propagationConf.groupId&&mutates},sourceBehaviour=instance._actions.behavioural[action],mutates=!!sourceBehaviour&&sourceBehaviour.constructor.mutates(),propConfig={payload:payload,action:action,criteria:propagationData,isMutableAction:mutates,propagateInterpolatedValues:propagateInterpolatedValues,groupId:groupId,sourceId:mutates?groupId:sourceId,filterFn:filterFn,enabled:function enabled(propConf,firebolt){return action===propagationBehaviour||propConf.payload.sourceCanvas===firebolt.context.parentAlias()}};dataModel.propagate(propagationData,propConfig,!0),action!==propagationBehaviour&&(propConfig={payload:payload,sourceId:isMutableAction?groupId:sourceId,criteria:propagationData,isMutableAction:isMutableAction,propagateInterpolatedValues:propagateInterpolatedValues,action:propagationBehaviour,groupId:groupId,applyOnSource:action===propagationBehaviour,enabled:function enabled(propConf,firebolt){return propConf.payload.sourceCanvas!==firebolt.context.parentAlias()},filterFn:filterFn},dataModel.propagate(propagationData,propConfig,!0,{filterImmutableAction:function filterImmutableAction(actionInf,propInf){return actionInf.groupId!==propInf.groupId}}))};function src_firebolt_typeof(obj){return(src_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function src_firebolt_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},points=[],parsedIdentifiers=identifiers;if(null===identifiers)return[];var layers=this.layers(),len=layers.length;isSimpleObject(identifiers)&&(parsedIdentifiers=[Object.keys(identifiers)],parsedIdentifiers=[].concat(visual_unit_toConsumableArray(parsedIdentifiers),visual_unit_toConsumableArray(function transposeArray(arr){return arr[0].map(function(col,i){return arr.map(function(row){return row[i]})})}(Object.values(identifiers)))));for(var i=0;i0&&(dimensionArr[0]=[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),dimensionArr[1]=[]),{fields:dimensionArr.map(function(list,i){return 1===i?measureArr[i].concat(dimensionArr[i]):dimensionArr[i].concat(measureArr[i])}),dimensions:[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),measures:[].concat(field_sanitizer_toConsumableArray(measureArr[0]),field_sanitizer_toConsumableArray(measureArr[1])),temporal:[].concat(field_sanitizer_toConsumableArray(temporalArr[0]),field_sanitizer_toConsumableArray(temporalArr[1])),categorical:[].concat(field_sanitizer_toConsumableArray(categoricalArr[0]),field_sanitizer_toConsumableArray(categoricalArr[1]))}}(norFields,fields)}),2),rowsInfo=_map2[0],columnsInfo=_map2[1],rows=rowsInfo.fields,rowDimensions=rowsInfo.dimensions,rowMeasures=rowsInfo.measures,rowTemporalFields=rowsInfo.temporal,rowCategoricalFields=rowsInfo.categorical,columns=columnsInfo.fields,columnDimensions=columnsInfo.dimensions,columnMeasures=columnsInfo.measures;return{rows:rows,rowDimensions:rowDimensions,rowMeasures:rowMeasures,rowTemporalFields:rowTemporalFields,rowCategoricalFields:rowCategoricalFields,columns:columns,columnTemporalFields:columnsInfo.temporal,columnCategoricalFields:columnsInfo.categorical,columnDimensions:columnDimensions,columnMeasures:columnMeasures}};function visual_encoder_slicedToArray(arr,i){return function visual_encoder_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function visual_encoder_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function visual_encoder_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function visual_encoder_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},fields=arguments.length>1?arguments[1]:void 0,_getHeaderAxisFrom2=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(ROW,fields.rows,axisFrom),2),rowHeader=_getHeaderAxisFrom2[0],rowAxis=_getHeaderAxisFrom2[1],_getHeaderAxisFrom4=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom("column",fields.columns,axisFrom),2),colHeader=_getHeaderAxisFrom4[0],colAxis=_getHeaderAxisFrom4[1];return this.axisFrom({row:rowAxis,column:colAxis}),this.headerFrom({row:rowHeader,column:colHeader}),this}}]),VisualEncoder}(),scaleMaps={linear:continous_axis_ContinousAxis,band:band_axis_BandAxis,temporal:time_axis_TimeAxis,size:size_axis_SizeAxis,color:color_axis_ColorAxis,shape:shape_axis_ShapeAxis},data_type_scale_map_dataTypeScaleMap={dimension:scale_type_namespaceObject.BAND,categorical:scale_type_namespaceObject.BAND,temporal:scale_type_namespaceObject.TIME,measure:scale_type_namespaceObject.LINEAR,continuous:scale_type_namespaceObject.LINEAR};function encoder_helper_toConsumableArray(arr){return function encoder_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?axesCreators.position="both":axesCreators.position=_this.axisFrom()[type],geomCellAxes[axis]=encoder_helper_generateAxisFromMap(axis,axisFields[i],axesCreators,{groupAxes:axis===X?xAxes:yAxes,valueParser:resolver.valueParser()},indices,facetFields)}),geomCell.axes(geomCellAxes),geomCellAxes}},{key:"unionUnitDomains",value:function unionUnitDomains(context){for(var store=context.store(),resolver=context.resolver(),units=resolver.units(),domains={0:{},1:{}},config=context.config(),fieldsObj={0:{},1:{}},_loop=function _loop(rIdx,len){for(var unitsArr=units[rIdx],_loop2=function _loop2(cIdx,len2){var unit=unitsArr[cIdx],axisFields=unit.fields(),encodingDomains=unit.getDataDomain();["x","y"].forEach(function(axisType,axisTypeIndex){axisFields[axisType].forEach(function(field,axisIndex){var key=axisTypeIndex?"".concat(rIdx,"0").concat(axisIndex):"0".concat(cIdx).concat(axisIndex),dom=encodingDomains[axisType],typeOfField=field.subtype();fieldsObj[axisTypeIndex][key]=field,dom&&0!==Object.keys(dom).length&&(domains[axisTypeIndex][key]=unionDomain([domains[axisTypeIndex]&&domains[axisTypeIndex][key]||[],dom["".concat(field)]],typeOfField))})})},cIdx=0,len2=unitsArr.length;cIdx1&&typeOfAxis===scale_type_namespaceObject.LINEAR&&axes[0].config().alignZeroLine)axes.forEach(function(axis,i){key=axisType?"".concat(idx,"0").concat(i):"0".concat(idx).concat(i),domain=domains[axisType][key],min[i]=domain[0],max[i]=domain[1]}),adjustedDomain=function getAdjustedDomain(max,min){var y1ratio=max[0]/(max[0]-min[0]),y2ratio=max[1]/(max[1]-min[1]),allSameSign=!1;return min[0]>0&&min[1]>0&&min[1]>0&&max[1]>0&&(allSameSign=!0,min[0]=0,min[1]=0),min[0]<0&&min[1]<0&&min[1]<0&&max[1]<0&&(allSameSign=!0,max[0]=0,max[1]=0),allSameSign||y1ratio===y2ratio||(y1ratiocounter)for(var _i=counter;_i-1&&(projections=[[_facet,_facet]],primaryFacets.splice(_existIndex,1)),secondaryFacets.splice(0,1)}else{var axisFromIndex=primaryFacets.length-1,facet=primaryFacets[axisFromIndex];projections=[[facet]];var existIndex=getIndex(secondaryFacets,facet);existIndex>-1&&(projections=[[facet,facet]],secondaryFacets.splice(existIndex,1)),primaryFacets.splice(axisFromIndex,1)}return{facets:facets=(facets=[].concat(primaryFacets,secondaryFacets)).filter(function(el,index,self){return index===self.findIndex(function(t){return t.toString()===el.toString()})}),projections:projections}}},{key:"fieldSanitizer",value:function fieldSanitizer(datamodel,config){return cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,datamodel,config)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(dataModels,encoding){var groupedModel=dataModels.groupedModel,domains={};for(var key in encoding)if({}.hasOwnProperty.call(encoding,key)){var encodingObj=encoding[key],field=encodingObj.field;if(!encodingObj.domain&&field){var domain=retriveDomainFromData(groupedModel,field);domains[field]=domain}}return domains}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer,i){var def=src_layer_factory.sanitizeLayerConfig(layer);def.order=i,serializedLayers.push(def)}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),layerConfig.push(config)}),layerConfig}},{key:"getLayerConfig",value:function getLayerConfig(fields,userLayerConfig,retinalConfig){var layerConfig=[],columnFields=fields.columnFields,rowFields=fields.rowFields;return columnFields.forEach(function(colField){var colFieldName=colField.toString();rowFields.forEach(function(rowField){var configs=[],rowFieldName=rowField.toString(),encoding={x:{field:colFieldName},y:{field:rowFieldName}},rowFieldType=rowField.subtype(),mark=function getDefaultMark(colFieldType,rowFieldType){return"categorical"===colFieldType||"categorical"===rowFieldType?"bar":"temporal"===colFieldType||"temporal"===rowFieldType?"line":"point"}(colField.subtype(),rowFieldType),defConfigs=[{mark:mark,def:{mark:mark,encoding:encoding}}],layerConfigs=function getLayerConfFromFields(colFields,rowFields,userLayerConfig){return userLayerConfig.filter(function(conf){var _ref,_ref2,_ref3,userConf=conf instanceof Array?conf:[conf],encodingArr=(_ref=[]).concat.apply(_ref,encoder_helper_toConsumableArray(userConf.map(function(d){return d.encoding}).filter(function(d){return void 0!==d})));if(!encodingArr.length)return!0;var xFields=(_ref2=[]).concat.apply(_ref2,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.x&&d.x.field,d.x0&&d.x0.field]}))).filter(function(d){return void 0!==d&&null!==d}),yFields=(_ref3=[]).concat.apply(_ref3,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.y&&d.y.field,d.y0&&d.y0.field]}))).filter(function(d){return void 0!==d&&null!==d});if(!xFields.length&&!yFields.length)return!0;var colFieldExist=!!xFields.length&&xFields.every(function(d){return-1!==colFields.indexOf(d)}),rowFieldExist=!!yFields.length&&yFields.every(function(d){return-1!==rowFields.indexOf(d)});return xFields.length&&yFields.length?colFieldExist&&rowFieldExist:colFieldExist||rowFieldExist})}(colField.getMembers(),rowField.getMembers(),userLayerConfig||[]);configs=layerConfigs.length?layerConfigs.map(function(layerConf){var mergedLayerConf=mergeRecursive(mergeRecursive({},defConfigs[0].def),layerConf),serializedLayerConfig=src_layer_factory.getSerializedConf(mergedLayerConf.mark,mergedLayerConf);return{mark:mergedLayerConf.mark,order:mergedLayerConf.order,def:serializedLayerConfig}}):defConfigs,layerConfig.push.apply(layerConfig,cartesian_encoder_toConsumableArray(configs))})}),this.sanitizeLayerConfig(retinalConfig,layerConfig)}}],[{key:"type",value:function type(){return cartesian_encoder_CARTESIAN}}]),CartesianEncoder}();function polar_encoder_typeof(obj){return(polar_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function polar_encoder_toConsumableArray(arr){return function polar_encoder_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);icounter)for(var _i=counter;_i0&&(config=mergeRecursive(config,userLayerConfig[0])),layerConfig.push(config)}),0===layerConfig.length&&(layerConfig=userLayerConfig);var sanitizedConfig=this.sanitizeLayerConfig(retinalConfig,layerConfig);return this.layers(sanitizedConfig),sanitizedConfig}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer){var def=src_layer_factory.getSerializedConf(layer.mark,layer);serializedLayers.push({mark:layer.mark,def:def})}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),def.forEach(function(conf){var encoding=conf.encoding||(conf.encoding={});!encoding.angle&&(encoding.angle={});var angleField=getObjProp(encoding.angle,"field"),angle0Field=getObjProp(encoding.angle0,"field");angleField||Object.assign(encoding.angle,{field:encodingConfigs.color&&encodingConfigs.color.field}),angle0Field||(!encoding.angle0&&(encoding.angle0={}),Object.assign(encoding.angle0,{field:encoding.angle.field}))}),layerConfig.push(config)}),layerConfig}}],[{key:"type",value:function type(){return polar_encoder_POLAR}}]),PolarEncoder}();function retinal_encoder_typeof(obj){return(retinal_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function retinal_encoder_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},axisType=axesCreators.axisType,fieldsConfig=axesCreators.fieldsConfig,field=fieldProps.field,axis=[],Cls=scaleMaps[axisType];return fieldProps.type=fieldProps.type?fieldProps.type:group_utils_getAxisType(fieldsConfig,field||null),axis.push(new Cls(fieldProps)),axis}({axisType:axisType,fieldsConfig:fieldsConfig},config[axisType])}),newAxes}},{key:"setCommonDomain",value:function setCommonDomain(context){var domains=context.domains,axes=context.axes,encoding=context.encoding;return Object.entries(encoding).forEach(function(enc){if(enc[1]&&enc[1].field){var encType=enc[0],field=enc[1].field;field&&axes[encType].forEach(function(axis){var domain=domains[field];!enc[1].domain&&axis.updateDomain(domain)})}}),axes}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),group_utils_this=void 0;function group_utils_slicedToArray(arr,i){return function group_utils_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function group_utils_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function group_utils_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function group_utils_toConsumableArray(arr){return function group_utils_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];return"".concat(axisName,"-axis-").concat(params.join("-"))},group_utils_headerCreator=function headerCreator(fields,fieldHeaders,TextCell,_ref2){var classPrefix=_ref2.classPrefix,labelManager=_ref2.labelManager;return fields.length>0?fields[0].map(function(cell,i){return new TextCell({type:"header",className:"".concat(classPrefix,"-grid-headers")},{labelManager:labelManager}).source(function getHeaderText(headers,index,rowLength){var header="";if(index===rowLength-1&&headers.length>rowLength){for(var i=index;i1||right.length>1)&&(borders.top=!0,borders.bottom=!0),borders}(leftRows,rightRows),showColBorders=function getColumnsBorders(top,bottom){var borders={left:!1,right:!1};return(top.length||bottom.length)&&(top[0]&&top[0].length>1||bottom[0]&&bottom[0].length>1)&&(borders.left=!0,borders.right=!0),borders}(topColumns,bottomColumns),showValueBorders=function getValueBorders(rows,columns){var borders={top:!0,left:!0,bottom:!0,right:!0},borderTypeRow=[constants_LEFT,constants_RIGHT],borderTypeCol=["top","bottom"];return rows.forEach(function(e,i){e[0]&&e[0].length?borders[borderTypeRow[i]]=!0:borders[borderTypeRow[i]]=!1}),columns.forEach(function(e,i){e.length?borders[borderTypeCol[i]]=!0:borders[borderTypeCol[i]]=!1}),borders}([leftRows,rightRows],[topColumns,bottomColumns]),valueMatrix.length>1&&(showValueBorders.top=!0,showValueBorders.bottom=!0),valueMatrix.length&&valueMatrix[0].length>1&&(showValueBorders.left=!0,showValueBorders.right=!0),{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}},group_utils_sortFacetFields=function sortFacetFields(facets,keys,config){var schema=[],sortInfo=[],sortConfig=config.sort;return facets.forEach(function(facet){var name="".concat(facet),facetSortConfig=sortConfig[name];facetSortConfig?sortInfo.push([name,facetSortConfig]):sortInfo.push([name,null]),schema.push(facet.getSchemaDef())}),new datamodel_default.a([[]].concat(group_utils_toConsumableArray(keys)),schema).getData({sort:sortInfo}).data};function matrix_model_ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)}return keys}function matrix_model_objectSpread(target){for(var i=1;i0?formattedColKeys[0].map(function(col,i){return formattedColKeys.map(function(row){return row[i]})}):formattedColKeys}};function cell_creator_slicedToArray(arr,i){return function cell_creator_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function cell_creator_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function cell_creator_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cell_creator_toConsumableArray(arr){return function cell_creator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?rowProjections.length:1):(keys=columnKeys,length=colProjections.length>0?colProjections.length:1),keys=keys.map(function(arr){return arr.map(function(val){return resolver.valueParser()(val)})}),section.length&&headerFrom===type&&axis&&keys.length){var hContext={axis:axis,length:length,type:type},headers=[];index<2?(hContext.keys=keys,hContext.facet=facet.rows,headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)):(hContext.facet=facet.columns,hContext.keys=keys[0].map(function(key,i){return keys.map(function(e){return e[i]})}),headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)),selectionObj["".concat(type,"Headers")]=headers}else selectionObj["".concat(type,"Headers")]=null}),selectionObj},cell_creator_getAxisFields=function getAxisFields(projections){var fieldHolder=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return projections.reduce(function(acc,item){return[].concat(cell_creator_toConsumableArray(acc),cell_creator_toConsumableArray(item.reduce(function(ac,field){return field instanceof simple_var_SimpleVariable?[].concat(cell_creator_toConsumableArray(ac),[field.oneVar()]):ac},[])))},fieldHolder)},cell_creator_transformDataModel=function transformDataModel(dataModel,config,resolver){var groupedModel,fieldsConfig=dataModel.getFieldsConfig(),resolvedData=resolver.data(),groupBy=config.groupBy,suppliedLayers=config.suppliedLayers,facetsAndProjections=config.facetsAndProjections;if(resolvedData instanceof datamodel_default.a&&resolvedData.dispose(),groupedModel=dataModel.project(dataModel.getSchema().map(function(d){return d.name})),resolver.data(groupedModel),!groupBy.disabled){var allFields=function extractFields(facetsAndProjections,layerFields){var _ref6,fields=Object.values(facetsAndProjections).map(function(arr){var _ref4,_ref5,flattenArray=(_ref4=[]).concat.apply(_ref4,group_utils_toConsumableArray(arr));return(_ref5=[]).concat.apply(_ref5,group_utils_toConsumableArray(flattenArray.map(function(field){return field instanceof variable_Variable?field.getMembers():field})))});return(_ref6=[]).concat.apply(_ref6,group_utils_toConsumableArray(fields).concat(group_utils_toConsumableArray(layerFields)))}(facetsAndProjections,function getFieldsFromSuppliedLayers(suppliedLayerConfig,fieldsConfig){var _ref3,fields=[],encodingArr=suppliedLayerConfig.map(function(conf){return conf.encoding||{}});return fields=(fields=[].concat(group_utils_toConsumableArray(fields),[(_ref3=[]).concat.apply(_ref3,group_utils_toConsumableArray(encodingArr.map(function(enc){return Object.values(enc).map(function(d){return d.field})})))])).filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION})}(suppliedLayers,groupedModel.getFieldsConfig())),dimensions=allFields.filter(function(field){return getObjProp(fieldsConfig,field,"def","type")===dist_datamodel.FieldType.DIMENSION}),aggregationFns=groupBy.measures,measureNames=Object.keys(groupedModel.getFieldspace().getMeasure()),nearestAggFns=common_utils_retrieveNearestGroupByReducers.apply(void 0,[groupedModel].concat(cell_creator_toConsumableArray(measureNames))),resolvedAggFns=mergeRecursive(nearestAggFns,aggregationFns);groupedModel=groupedModel.groupBy(dimensions.length?dimensions:[""],resolvedAggFns).project(allFields)}return groupedModel=function sortDmTemporalFields(resolver,datamodel){var axisFields=[],projections=resolver.projections();axisFields=cell_creator_getAxisFields(projections.rowProjections,cell_creator_getAxisFields(projections.colProjections));var fieldConfig=datamodel.getFieldsConfig(),temporalFields=axisFields.reduce(function(acc,field){return"temporal"===fieldConfig[field].def.subtype?[].concat(cell_creator_toConsumableArray(acc),[[field]]):acc},[]);return temporalFields.length?datamodel.sort(temporalFields,{saveChild:!0}):datamodel}(resolver,groupedModel)},cell_creator_computeMatrices=function computeMatrices(context,config){var resolver=context.resolver,datamodel=context.datamodel,componentRegistry=context.componentRegistry,encoders=context.encoders,globalConfig=config.globalConfig,selection=config.selection,transform=config.transform,groupBy=globalConfig.autoGroupBy,labelManager=resolver.dependencies().smartlabel,fieldMap=datamodel.getFieldsConfig(),layerConfig=resolver.layerConfig(),registry=resolver.registry(),normalizedRows=resolver.horizontalAxis().fields,normalizedColumns=resolver.verticalAxis().fields,otherEncodings=resolver.optionalProjections(config,layerConfig),facetsAndProjections=resolver.getAllFields(),matrixGnContext={normalizedColumns:normalizedColumns,normalizedRows:normalizedRows,facetsAndProjections:facetsAndProjections,layers:layerConfig,fieldMap:fieldMap,otherEncodings:otherEncodings,encoders:encoders,facet:globalConfig.facet||{},axisFrom:globalConfig.axisFrom||{},selection:selection,resolver:resolver},cells={GeomCell:resolver.getCellDef(registry.GeomCell),AxisCell:resolver.getCellDef(registry.AxisCell),BlankCell:resolver.getCellDef(registry.BlankCell),TextCell:resolver.getCellDef(registry.TextCell)},isRowSizeEqual=group_utils_isDistributionEqual(normalizedRows),isColumnSizeEqual=group_utils_isDistributionEqual(normalizedColumns);resolver.colCells({}),resolver.rowCells({}),resolver.datamodelTransform(transform||{}),resolver.resetSimpleAxes();var newCacheMap={exitCellMap:resolver.cacheMaps().entryCellMap,entryCellMap:new Map};resolver.cacheMaps(newCacheMap);var valueCellContext={config:globalConfig,suppliedLayers:encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),resolver:resolver,cell:cells.GeomCell,encoder:encoders.simpleEncoder,newCacheMap:newCacheMap,detailFields:config.detail,retinalConfig:{color:config.color,size:config.size,shape:config.shape}},groupedModel=cell_creator_transformDataModel(datamodel,{facetsAndProjections:facetsAndProjections,suppliedLayers:valueCellContext.suppliedLayers,groupBy:groupBy},resolver),cellCreator=resolver.valueCellsCreator(valueCellContext),valueMatrixInfo=getMatrixModel(groupedModel,facetsAndProjections,cellCreator,globalConfig);!function removeExitCells(resolver){var _ref7,exitCells=resolver.cacheMaps().exitCellMap,store=resolver.store(),qualifiedStateProps=(_ref7=[]).concat.apply(_ref7,group_utils_toConsumableArray(visual_unit_VisualUnit.getQualifiedStateProps()).concat(group_utils_toConsumableArray(base_layer_BaseLayer.getQualifiedStateProps())));store.lockCommits(qualifiedStateProps),exitCells.forEach(function(placeholder){placeholder.remove()}),store.unlockCommits(qualifiedStateProps)}(resolver),resolver.cacheMaps().exitCellMap.clear(),resolver.valueMatrix(valueMatrixInfo.matrix);var _mutateAxesFromMap=function mutateAxesFromMap(cacheMaps,axes){var xAxes=null,yAxes=null,xAxesMap=cacheMaps.xAxesMap,yAxesMap=cacheMaps.yAxesMap,xAxisSet=axes.x,yAxisSet=axes.y;return xAxisSet&&xAxisSet.forEach(function(axisId){var xAxis=xAxesMap.get(axisId);(xAxes=xAxes||[]).push(xAxis)}),yAxisSet&&yAxisSet.forEach(function(axisId){var yAxis=yAxesMap.get(axisId);(yAxes=yAxes||[]).push(yAxis)}),{xAxes:xAxes,yAxes:yAxes}}(resolver.cacheMaps(),resolver.axes()),xAxes=_mutateAxesFromMap.xAxes,yAxes=_mutateAxesFromMap.yAxes;resolver.axes({x:xAxes,y:yAxes}),resolver.createUnits(componentRegistry,config);var _generateMatrices=function generateMatrices(context,matrices,cells,labelManager){var unitHeight=context.unitHeight,unitWidth=context.unitWidth,facetsAndProjections=context.facetsAndProjections,normalizedRows=context.normalizedRows,normalizedColumns=context.normalizedColumns,selection=context.selection,axisFrom=context.axisFrom,facet=context.facet,encoders=context.encoders,resolver=context.resolver,selectionObj=cell_creator_generatePlaceholders({fields:{rows:normalizedRows,columns:normalizedColumns},matrices:matrices,facetsAndProjections:facetsAndProjections,selection:selection,axisFrom:axisFrom,facet:facet,encoders:encoders,resolver:resolver},cells,labelManager),columnsPrimary=selectionObj.columnsPrimary,columnsSecondary=selectionObj.columnsSecondary,rowsPrimary=selectionObj.rowsPrimary,rowsSecondary=selectionObj.rowsSecondary,leftHeaders=selectionObj.leftHeaders,topHeaders=selectionObj.topHeaders,bottomHeaders=selectionObj.bottomHeaders,rightHeaders=selectionObj.rightHeaders,_map2=cell_creator_slicedToArray([rowsPrimary,rowsSecondary,columnsPrimary,columnsSecondary].map(function(d){return d?d.getObjects():[]}),4),rowPrime=_map2[0],rowSec=_map2[1],colPrime=_map2[2],colSec=_map2[3],_map4=cell_creator_slicedToArray([leftHeaders,rightHeaders].map(function(e){return e?e.getObjects().map(function(f){return f.getObjects()}):[]}),2),leftFacets=_map4[0],rightFacets=_map4[1],rowPriority=rowSec.length?1:-1;rowPrime.length&&rowPriority++;var colPriority=colSec.length?1:-1;colPrime.length&&colPriority++;var leftMatrix=leftFacets.length?leftFacets.map(function(d,i){return rowPrime[i]=rowPrime[i]?[rowPrime[i]]:[],[].concat(cell_creator_toConsumableArray(d),cell_creator_toConsumableArray(rowPrime[i]))}):rowPrime?rowPrime.map(function(d){return[d]}):[],rightMatrix=rowSec.length?rowSec.map(function(d,i){return[d].concat(cell_creator_toConsumableArray(rightFacets[i]||[]))}):rightFacets.length?rightFacets.map(function(d){return cell_creator_toConsumableArray(d)}):[],topMatrix=[];topHeaders&&topHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){topMatrix[i]=topMatrix[i]||[],topMatrix[i].push(x)})});colPrime.length&&topMatrix.push(colPrime);var bottomMatrix=[];colSec.length&&bottomMatrix.push(colSec);var currentBottomLength=bottomMatrix.length;bottomHeaders&&bottomHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){bottomMatrix[i+currentBottomLength]=bottomMatrix[i+currentBottomLength]||[],bottomMatrix[i+currentBottomLength].push(x)})});if(!leftMatrix.length&&!rightMatrix.length){var cell=new cells.BlankCell;cell.setAvailableSpace(unitWidth,unitHeight),leftMatrix=[[cell]]}if(!(topMatrix.length||bottomMatrix.length&&bottomMatrix[0].length)){var _cell=new cells.BlankCell;_cell.setAvailableSpace(unitWidth,unitHeight),bottomMatrix=[[_cell]]}return{rows:[leftMatrix,rightMatrix],columns:[topMatrix,bottomMatrix],selectionObj:selectionObj,colPriority:colPriority,rowPriority:rowPriority}}(matrixGnContext,{valuesMatrix:valueMatrixInfo,axesMatrix:resolver.axes()},cells,labelManager),rows=_generateMatrices.rows,columns=_generateMatrices.columns,selectionObj=_generateMatrices.selectionObj,rowPriority=_generateMatrices.rowPriority,colPriority=_generateMatrices.colPriority;return resolver.rowMatrix(rows),resolver.columnMatrix(columns),{rows:resolver.rowMatrix(),columns:resolver.columnMatrix(),values:resolver.valueMatrix(),isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,priority:{row:rowPriority,col:colPriority},selection:selectionObj,dataModels:{groupedModel:groupedModel,parentModel:datamodel}}},RESOLVER_PROPS={dependencies:{},units:{},datamodelTransform:{},layerConfig:{},matrixLayers:{},colCells:{},rowCells:{},rowMatrix:{},columnMatrix:{},valueMatrix:{},encoder:{},valueParser:{},data:{}};function matrix_resolver_slicedToArray(arr,i){return function matrix_resolver_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function matrix_resolver_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function matrix_resolver_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function matrix_resolver_toConsumableArray(arr){return function matrix_resolver_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?leftRows[0].map(blankCellCreator):[],right:rightRows.length>0?rightRows[0].map(blankCellCreator):[]},_map2=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return topCols.map(function(col,i){return i===topCols.length-1?headers[type]:footers[type]})}),2),topLeft=_map2[0],topRight=_map2[1];if(0===topCols.length){var _map4=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return bottomCols.map(function(col,i){return 0===i?headers[type]:footers[type]})}),2);bottomLeft=_map4[0],bottomRight=_map4[1]}else bottomLeft=bottomCols.map(function(){return leftRows.length>0?leftRows[0].map(blankCellCreator):[]}),bottomRight=bottomCols.map(function(){return rightRows.length>0?rightRows[0].map(blankCellCreator):[]});return lifeCycleManager.notify({client:[topLeft,topRight,bottomLeft,bottomRight],action:"initialized",formalName:"facet-headers"}),{topLeft:topLeft,topRight:topRight,bottomLeft:bottomLeft,bottomRight:bottomRight}}},{key:"getMatrices",value:function getMatrices(datamodel,config,componentRegistry,encoders){return cell_creator_computeMatrices({datamodel:datamodel,componentRegistry:componentRegistry,encoders:encoders,resolver:this},config)}},{key:"store",value:function store(){return arguments.length?(this._store=arguments.length<=0?void 0:arguments[0],this):this._store}},{key:"clear",value:function clear(){var cacheMaps=this._cacheMaps;for(var key in cacheMaps)cacheMaps[key].clear()}}]),MatrixResolver}();function value_matrix_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{},context=firebolt.context,type=context.constructor.type(),payload=config.payload,data=context.data(),metaData=context.metaData(),fieldType=metaData.getData().schema[0].type,propPayload={},sourceId=context._id;propPayload.action=action_behaviour_map_propagationBehaviourMap[action]||action,propPayload.sideEffects=propagationSideEffects[action],propPayload.sourceCanvas=context.canvasAlias();var isMutableAction=firebolt._actions.behavioural[propPayload.action].constructor.mutates();if(null===payload.criteria)propagationData=null;else{var entrySet=selectionSet.mergedEnter,values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.rawVal});if("step"===type||"discrete"===type&&"measure"===fieldType){var field=Object.keys(payload.criteria||{})[0];propagationData=(values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.range})).length?metaData.select(function(fields){for(var check=!1,i=0;i=values[i][0]&&fields[field].internalValue<=values[i][1]);i++);return check},{saveChild:!1}):null}else"gradient"===type?propagationData=getDataModelFromRange(metaData,payload.criteria):values.length?propagationData=function assembleModelFromIdentifiers(model,identifiers){var data,schema=[],fieldMap=model.getFieldsConfig();return identifiers.length?function(){for(var fields=identifiers[0],len=fields.length,i=0;i=drawingInfMeasure+offset?[axisScale.invert(drawingInfMeasure+offset-selectionBoxMeasure),axisScale.invert(drawingInfMeasure+offset)]:subjectStartPoint-offset1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-fadeout"),!0),classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)},brighten:function brighten(set){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-brighten"),!0),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-brighten"),!1)}}};function legend_highlighter_typeof(obj){return(legend_highlighter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_highlighter_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[options.strategy||this._strategy])(selectionSet,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),legend_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(context,value){var measurement=mergeRecursive(context._measurement,value);return["padding","border","margin"].forEach(function(space){measurement[space]=Math.min(measurement[space]>0?measurement[space]:0,.1*measurement.maxWidth,.1*measurement.maxHeight)}),measurement}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.resetLogicalSpace(),context.store().commit("range",value),value}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(context,value){return mergeRecursive(context._title||{},value)}},labelManager:{},minTickDistance:{},valueParser:{defaultValue:function defaultValue(val){return val}}},ALIGN_HORIZONTAL="horizontal",ALIGN_VERTICAL="vertical",DEFAULT_MEASUREMENT={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},LEGEND_TITLE={text:"",orientation:function orientation(pos){return"left"===pos||"right"===pos?"left":"center"}},legend_defaults_DEFAULT_CONFIG={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(val,i,data,context){return context.valueParser()(val)}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},defaults_ICON_MAP=function ICON_MAP(icon){return icon&&"string"==typeof icon?common_utils_getSymbol(icon):icon};function legend_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legend_helper_getScaleInfo=function getScaleInfo(scale){var scaleType=scale.constructor.type();return{scaleType:scaleType,domain:scale.uniqueValues(),steps:scale.config().stops||1,scaleFn:SCALE_FUNCTIONS[scaleType]}},legend_helper_getInterpolatedArrayData=function getInterpolatedArrayData(domainForLegend,scaleParams){var requiredWidth,requiredHeight,upperBound=domainForLegend[domainForLegend.length-1],minTickDiff=Math.ceil(domainForLegend[1]-domainForLegend[0]),maxTickDiff=Math.ceil(upperBound-domainForLegend[0]),alignment=scaleParams.alignment,smartLabelCalc=scaleParams.smartLabel,availableSpace=scaleParams.measures,minimumTickSize=scaleParams.minTickDistance,_smartLabelCalc$getOr=smartLabelCalc.getOriSize(upperBound),tickDimHeight=_smartLabelCalc$getOr.height,tickDimWidth=_smartLabelCalc$getOr.width;return Number.isInteger(upperBound)||(upperBound=upperBound.toFixed(2)),minTickDiff=minTickDiff<1?1:minTickDiff,requiredWidth=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*(tickDimWidth+minimumTickSize.width),requiredWidth-=Math.abs(maxTickDiff),requiredHeight=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*tickDimHeight,requiredHeight-=Math.abs(maxTickDiff),domainForLegend=function getcomputedArray(computationhelper,requiredMeasure,availableMeasure,domainForLegend){var currentTickValue,nextTickValue,upperBound=domainForLegend[domainForLegend.length-1],param=computationhelper.measureParam,smartLabelCalc=computationhelper.smartLabelCalc,pixelPerTick=availableMeasure[param]/upperBound;if(availableMeasure[param]>=requiredMeasure[param])return domainForLegend;currentTickValue=smartLabelCalc.getOriSize(domainForLegend[0])[param];for(var i=1;i0?titleSpace.height+effPadding:0,titleWidth=titleSpace.width+effPadding,labelSpaces=this.getLabelSpaces(effPadding,align),_computeItemSpaces=function computeItemSpaces(config,measures,data){var totalHeight=0,totalWidth=0,maxItemSpaces={width:0,height:0},effPadding=measures.effPadding,titleWidth=measures.titleWidth,labelSpaces=measures.labelSpaces,titleHeight=measures.titleHeight,maxWidth=measures.maxWidth,item=config.item,align=config.align,icon=item.icon,textOrientation=item.text.orientation,itemSpaces=[],iconSpaces=[],maxIconWidth=0;return labelSpaces.forEach(function(labelSpace,i){var itemSpace={width:0,height:0},iconSpace={width:0,height:0},datum=data[i]||{};"left"===textOrientation||"right"===textOrientation?(labelSpace.width+=effPadding,iconSpace.width=(datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),itemSpace.width=labelSpace.width+maxIconWidth,labelSpace.height=Math.max(labelSpace.height,icon.height)+effPadding,iconSpace.height=labelSpace.height,itemSpace.height=labelSpace.height):(labelSpace.width=Math.max(labelSpace.width,datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,iconSpace.width=labelSpace.width,itemSpace.width=labelSpace.width,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),labelSpace.height+=effPadding,iconSpace.height=icon.height+effPadding,itemSpace.height=labelSpace.height+iconSpace.height),"horizontal"===align?totalHeight=Math.max(totalHeight,itemSpace.height):(totalHeight+=itemSpace.height,totalWidth=Math.max(totalWidth,itemSpace.width,titleWidth)),maxItemSpaces={width:Math.max(itemSpace.width,maxItemSpaces.width),height:Math.max(itemSpace.height,maxItemSpaces.height)},itemSpaces.push(itemSpace),iconSpaces.push(iconSpace)}),itemSpaces.forEach(function(itemSpace,i){if("horizontal"===align)itemSpace.height=totalHeight,iconSpaces[i].width=maxIconWidth,"left"===textOrientation||"right"===textOrientation?(labelSpaces[i].height=totalHeight,iconSpaces[i].height=totalHeight,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth):(labelSpaces[i].width=maxIconWidth,itemSpaces[i].width=maxIconWidth,labelSpaces[i].width=maxIconWidth),totalWidth=Math.max(totalWidth+itemSpaces[i].width);else if(itemSpace.width=Math.max(totalWidth,maxWidth),"top"===textOrientation||"bottom"===textOrientation)labelSpaces[i].width=totalWidth,iconSpaces[i].width=totalWidth,maxIconWidth=totalWidth;else{var labelWidth=labelSpaces[i].width,newLabelWidth=maxItemSpaces.width-maxIconWidth;iconSpaces[i].width=maxIconWidth,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth,labelSpaces[i].width=Math.max(labelWidth,newLabelWidth),totalWidth=Math.max(totalWidth,itemSpace.width)}}),totalWidth=Math.ceil(Math.max(totalWidth,titleWidth))+effPadding,totalHeight+=titleHeight+effPadding,{totalHeight:totalHeight=Math.ceil(totalHeight),totalWidth:totalWidth,itemSpaces:itemSpaces,iconSpaces:iconSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth}}(this.config(),{effPadding:effPadding,titleWidth:titleWidth,labelSpaces:labelSpaces,titleHeight:titleHeight,maxWidth:maxWidth,maxHeight:maxHeight},this.data()),totalHeight=_computeItemSpaces.totalHeight,totalWidth=_computeItemSpaces.totalWidth,itemSpaces=_computeItemSpaces.itemSpaces,iconSpaces=_computeItemSpaces.iconSpaces,maxItemSpaces=_computeItemSpaces.maxItemSpaces,maxIconWidth=_computeItemSpaces.maxIconWidth;return this.measurement({width:Math.max(totalWidth,width)+effMargin+effBorder,height:Math.max(totalHeight,height)+effMargin+effBorder,labelSpaces:labelSpaces,iconSpaces:iconSpaces,itemSpaces:itemSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth,titleSpaces:{width:Math.min(maxWidth,this.measurement().width)-effMargin-effBorder,height:titleHeight}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(renderer_utils_getSmartComputedStyle(renderer_utils_selectElement("body"),"".concat(this.config().classPrefix,"-legend-title"))),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(container){var _this$measurement2=this.measurement(),titleSpaces=_this$measurement2.titleSpaces,border=_this$measurement2.border,padding=_this$measurement2.padding,width=_this$measurement2.width,maxWidth=_this$measurement2.maxWidth,_this$config3=this.config(),borderStyle=_this$config3.borderStyle,borderColor=_this$config3.borderColor;return function titleCreator(container,title,measurement,config){var titleWidth=Math.min(measurement.maxWidth,measurement.width),titleContainer=makeElement(container,"table",[1],"".concat(config.classPrefix,"-legend-title")).style("width","".concat(titleWidth,"px")).style("height","".concat(measurement.height,"px")).style("border-bottom","".concat(measurement.border,"px ").concat(config.borderStyle," ").concat(config.borderColor)).style("text-align",title.orientation instanceof Function?title.orientation(config.position):title.orientation);return makeElement(titleContainer,"td",[1],"".concat(config.classPrefix,"-legend-title-text")).style("width","".concat(titleWidth,"px")).style("max-width","".concat(titleWidth,"px")).style("height","100%").style("line-height",1).style("padding","".concat(measurement.padding,"px")).text(title.text).style("overflow-x","scroll").node()}(container,this.title(),{height:titleSpaces.height,width:width,maxWidth:maxWidth,border:border,padding:padding,borderStyle:borderStyle,borderColor:borderColor},this.config())}},{key:"render",value:function render(){var marginPosition,firebolt=this.firebolt(),_this$config4=this.config(),classPrefix=_this$config4.classPrefix,borderStyle=_this$config4.borderStyle,borderColor=_this$config4.borderColor,position=_this$config4.position,_this$measurement3=this.measurement(),maxWidth=_this$measurement3.maxWidth,maxHeight=_this$measurement3.maxHeight,width=_this$measurement3.width,height=_this$measurement3.height,margin=_this$measurement3.margin,border=_this$measurement3.border,legendContainer=makeElement(renderer_utils_selectElement(this.mount()),"div",[1],"".concat(classPrefix,"-legend-box"));switch(position){case"top":marginPosition="margin-".concat("bottom");break;case"left":marginPosition="margin-".concat("right");break;case"bottom":marginPosition="margin-".concat("top");break;default:marginPosition="margin-".concat("left")}return legendContainer.classed("".concat(classPrefix,"-legend-box-").concat(this._id),!0),legendContainer.style("float","left"),legendContainer.style("width","".concat(Math.min(maxWidth,width)-2*margin,"px")).style("height","".concat(Math.min(maxHeight,height)-2*margin,"px")).style("".concat(marginPosition),"".concat(margin,"px")).style("border","".concat(border,"px ").concat(borderStyle," ").concat(borderColor)),this.legendContainer(legendContainer.node()),this.renderTitle(legendContainer),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){var fieldName=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},fieldName,data.range):[[fieldName],[data.rawVal]]}}],[{key:"create",value:function create(dependencies){return new SimpleLegend(dependencies)}},{key:"defaultConfig",value:function defaultConfig(){return legend_defaults_DEFAULT_CONFIG}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENT}}]),SimpleLegend}();function position_config_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legendOrientation=(position_config_defineProperty(_legendOrientation={},"horizontal",{datasets:function datasets(data){return{row:[1],column:data}},itemContainerMeasures:function itemContainerMeasures(measurement){var itemSpaces=measurement.itemSpaces,width=measurement.width;return{row:{width:"".concat(width,"px"),padding:"".concat(0,"px")},column:{width:function width(d,i){return"".concat(itemSpaces[i].width,"px")},padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces;return{iconHeight:measurement.height,iconWidth:maxItemSpaces.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(_legendOrientation,"vertical",{datasets:function datasets(data){return{row:data,column:function column(d){return[d]}}},itemContainerMeasures:function itemContainerMeasures(measurement,config){var width=measurement.width,padding=config.padding;return{row:{width:"".concat(width,"px"),padding:"".concat(padding,"px")},column:{width:"".concat(width,"px"),padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces,width=measurement.width;return{iconHeight:maxItemSpaces.height,iconWidth:width,stepPadding:{horizontal:!1,vertical:!0}}}}),_legendOrientation),positionConfig=(position_config_defineProperty(_positionConfig={},"left",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"right",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"top",legendOrientation.horizontal),position_config_defineProperty(_positionConfig,"bottom",legendOrientation.horizontal),_positionConfig),alignmentMap=(position_config_defineProperty(_alignmentMap={},"left","end"),position_config_defineProperty(_alignmentMap,"right","start"),position_config_defineProperty(_alignmentMap,"top","center"),position_config_defineProperty(_alignmentMap,"bottom","center"),_alignmentMap),itemStack=(position_config_defineProperty(_itemStack={},"left",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"right",["shape",VALUE]),position_config_defineProperty(_itemStack,"top",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"bottom",["shape",VALUE]),_itemStack),renderer_createLegendSkeleton=function createLegendSkeleton(context,container,classPrefix,data){var gradWidth,gradHeight,maxGradHeight,maxGradWidth,measurement=context.measurement(),margin=measurement.margin,border=measurement.border,titleSpaces=measurement.titleSpaces,width=measurement.width,height=measurement.height,maxWidth=measurement.maxWidth,maxHeight=measurement.maxHeight;gradHeight=height-(titleSpaces.height+2*margin+2*border),gradWidth=width-(2*margin+2*border),maxGradHeight=maxHeight-(titleSpaces.height+2*margin+2*border),maxGradWidth=maxWidth-(2*margin+2*border);var legendBody=makeElement(container,"div",[1],"".concat(classPrefix,"-legend-body"));return legendBody.select(".".concat(classPrefix,"-legend-overflow")).remove(),maxGradWidth&&maxGradWidth4)}(shape)?shape:defaults_ICON_MAP(shape).size(size)(),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}return d[1]="circle",createShape(d,elem,"circle")}(datum,makeElement(svg,"g",[datum[1]],"".concat(classPrefix,"-legend-icon")),datum[3]?"circle":"square",iconWidth,iconHeight).attr("transform","translate(".concat(maxIconWidth/2-padding," ").concat(iconHeight/2,")")).attr("fill",datum[2]||color):makeElement(svg,"rect",[datum[1]],"".concat(classPrefix,"-legend-icon")).attr("x",0).attr("y",0).attr("width",maxIconWidth).attr("height",iconHeight).attr("fill",datum[2]||color)};function discrete_legend_typeof(obj){return(discrete_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function discrete_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function discrete_legend_toConsumableArray(arr){return function discrete_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainForLegend.push(domain[1]),domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b}),domainForLegend=legend_helper_getInterpolatedArrayData(domainForLegend,scaleParams)):domainForLegend=legend_helper_getInterpolatedData(domain,steps-1,scaleParams),(domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=domainForLegend[i];return gradient_legend_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](Math.floor(ele))),gradient_legend_defineProperty(_ref,"value",+value.toFixed(2)),gradient_legend_defineProperty(_ref,"id",i),_ref}).filter(function(d){return null!==d.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(effPadding){this.config({item:{text:{orientation:this.config().position}}});var axis=function createAxis(context){var data=context.data(),align=context.config().align,AxisCell=context._cells.AxisCell,newAxis=new continous_axis_ContinousAxis({id:"legend-".concat(context._id),orientation:align===ALIGN_VERTICAL?"right":"bottom",style:context._computedStyle,nice:!1,showAxisName:!1,tickValues:data.map(function(d){return d.value}),fixedBaseline:!1,labels:{rotation:null}},{labelManager:context._labelManager});return newAxis.domain(getGradientDomain(data)),newAxis.range([1,1]),(new AxisCell).source(newAxis).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),axisSpace=axis.getLogicalSpace(),space={width:axisSpace.width-effPadding,height:axisSpace.height-effPadding},axisDomainLength=axis.source().domain().length,labelSpaces=new Array(axisDomainLength).fill(space);return this.axis(axis),labelSpaces}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var firebolt=this.firebolt(),legendContainer=gradient_legend_get(gradient_legend_getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(context,container){var gradHeight,gradWidth,_context$config2=context.config(),align=_context$config2.align,classPrefix=_context$config2.classPrefix,item=_context$config2.item,data=context.data(),_createLegendSkeleton=gradient_helper_createLegendSkeleton(container,classPrefix,data),legendContainer=_createLegendSkeleton.legendContainer,legendGradSvg=_createLegendSkeleton.legendGradSvg,legendGradCont=_createLegendSkeleton.legendGradCont,linearGradient=_createLegendSkeleton.linearGradient,legendRect=_createLegendSkeleton.legendRect,labelDim=context.axis().source().getAxisDimensions().tickDimensions,_context$measurement=context.measurement(),padding=_context$measurement.padding,margin=_context$measurement.margin,border=_context$measurement.border,titleSpaces=_context$measurement.titleSpaces,maxItemSpaces=_context$measurement.maxItemSpaces,maxHeight=_context$measurement.maxHeight,maxWidth=_context$measurement.maxWidth,height=_context$measurement.height,width=_context$measurement.width,gradientDimensions={};gradHeight=Math.floor(Math.min(height,maxHeight)-(titleSpaces.height+2*margin+2*border)),gradWidth=Math.floor(Math.min(width,maxWidth)-(2*margin+2*border)),align===ALIGN_HORIZONTAL?(gradientDimensions.height=item.icon.height,gradientDimensions.width=gradWidth-2*padding-labelDim.width/2,linearGradient.attr("x2","100%").attr("y1","0%"),legendGradCont.attr("transform","translate( ".concat(labelDim.width/2," 0)")),gradient_helper_renderAxis(context,legendContainer,gradHeight-item.icon.height-padding,gradWidth-2*padding-1),applyStyle(legendContainer,{height:"".concat(maxItemSpaces.height+border+padding,"px"),width:"".concat(Math.min(width,maxWidth),"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height),legendRect.attr("width",gradientDimensions.width-labelDim.width/2)):(gradientDimensions.height=gradHeight-2*padding-labelDim.height/2,gradientDimensions.width=item.icon.width,linearGradient.attr("x2","0%").attr("y1","100%"),legendGradCont.attr("transform","translate(0 ".concat(labelDim.height/2,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-2*padding-1,gradWidth-item.icon.width-2*padding),applyStyle(legendContainer,{height:"".concat(Math.min(height,maxHeight),"px"),width:"".concat(maxWidth,"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height-labelDim.height/2),legendRect.attr("width",gradientDimensions.width)),applyStyle(legendGradSvg,{height:"".concat(gradientDimensions.height,"px"),width:"".concat(gradientDimensions.width,"px")}),applyStyle(legendRect,{fill:"url(#linear-gradient)"}),legendGradSvg.attr("height",gradientDimensions.height),legendGradSvg.attr("width",gradientDimensions.width),context.measurement({gradientDimensions:gradientDimensions}),context._legendGradientSvg=legendGradSvg}(this,legendContainer),legendContainer.selectAll("div").style("float","left"),firebolt.mapActionsAndBehaviour(),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){return[[this.fieldName()],[data.value]]}}],[{key:"create",value:function create(dependencies){return new GradientLegend(dependencies)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}();function step_legend_typeof(obj){return(step_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function step_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function step_legend_toConsumableArray(arr){return function step_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&(domainBounds.upper=["".concat(formatter.bounds.upper," ").concat(steps[steps.length-1])])):domainLeg=legend_helper_getInterpolatedData(domain,steps,scaleParams),domainLeg=(domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=null;return i0&&void 0!==arguments[0]?arguments[0]:{},registrableComponents=this._registrableComponents,mergedPolicy=mergeRecursive(mergeRecursive({},function defaultPolicy(registrableComponents){var aliases=registrableComponents.map(function(comp){return comp.alias()});return{behaviours:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}}}}(registrableComponents)),policy);return registrableComponents.forEach(function(canvas){canvas.firebolt().crossInteractionPolicy(mergedPolicy)}),this}}]),ActionModel}()),TITLE_CONFIG={position:"top",align:"left",padding:4,className:"".concat("muze","-title-container")},SUB_TITLE_CONFIG={position:"top",align:"left",padding:16,maxLines:2,className:"".concat("muze","-subtitle-container")},MESSAGE_CONFIG={className:"".concat("muze","-message-container")};function local_options_typeof(obj){return(local_options_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function local_options_slicedToArray(arr,i){return function local_options_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function local_options_iterableToArrayLimit(arr,i){if(!(Symbol.iterator in Object(arr)||"[object Arguments]"===Object.prototype.toString.call(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function local_options_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function canvas_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options_localOptions=(canvas_local_options_defineProperty(_localOptions={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"layers",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),_localOptions),canvasOptions=(canvas_local_options_defineProperty(_canvasOptions={},"title",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref){var _ref2=local_options_slicedToArray(_ref,2),arg1=_ref2[0],arg2=_ref2[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref3){var _ref4=local_options_slicedToArray(_ref3,2),title=_ref4[0],titleConfig=_ref4[1],t=title;"string"!=typeof title&&title||(t=function t(){return title});var defConfig=mergeRecursive({},TITLE_CONFIG);return[t,mergeRecursive(defConfig,titleConfig)]}}}),canvas_local_options_defineProperty(_canvasOptions,"subtitle",{value:[null,null],meta:{takesMultipleParams:!0,typeCheck:function typeCheck(_ref5){var _ref6=local_options_slicedToArray(_ref5,2),arg1=_ref6[0],arg2=_ref6[1];return"function"==typeof arg1&&"object"===local_options_typeof(arg2)},sanitization:function sanitization(_ref7){var _ref8=local_options_slicedToArray(_ref7,2),subtitle=_ref8[0],subtitleConfig=_ref8[1],sub=subtitle;"string"!=typeof subtitle&&subtitle||(sub=function sub(){return subtitle});var defConfig=mergeRecursive({},SUB_TITLE_CONFIG);return[sub,mergeRecursive(defConfig,subtitleConfig)]}}}),_canvasOptions);function layoutComponent_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isGridComponent=arguments.length>3&&void 0!==arguments[3]&&arguments[3],cut="",componentRatioWidth=1,leftHeight=0,leftWidth=0;if(!component)return{first:definitionModel,second:definitionModel};var _component$getLogical=component.getLogicalSpace(),componentHeight=_component$getLogical.height,componentWidth=_component$getLogical.width,position=component.position();"top"===position||"bottom"===position?(cut="h",componentRatioWidth=componentHeight/definitionModel.remainingHeight(),leftHeight=definitionModel.remainingHeight()-componentHeight,leftWidth=definitionModel.remainingWidth()):(cut="v",componentRatioWidth=componentWidth/definitionModel.remainingWidth(),leftWidth=definitionModel.remainingWidth()-componentWidth,leftHeight=definitionModel.remainingHeight()),leftOvercomponentRationWidth=1-componentRatioWidth,definitionModel.cut(cut);var firstLaneConfig={host:component.name(),cut:null,ratioWeight:componentRatioWidth,preferred:!isGridComponent&&isPreferred,lanes:[]},firstLane=new DefinitionModel(firstLaneConfig);firstLane.remainingHeight(componentHeight),firstLane.remainingWidth(componentWidth);var secondLane=new DefinitionModel({host:null,cut:null,ratioWeight:leftOvercomponentRationWidth,preferred:!isGridComponent&&!isPreferred,lanes:[]});return secondLane.remainingHeight(leftHeight),secondLane.remainingWidth(leftWidth),isPreferred?definitionModel.lanes([firstLane]):"top"===position||"left"===position?definitionModel.lanes([firstLane,secondLane]):definitionModel.lanes([secondLane,firstLane]),{first:firstLane,second:secondLane}}function tree_toConsumableArray(arr){return function tree_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?matrix[0]:matrix[1];return isTransposed?(joinedMatrix=matrix[0].length>0?utils_toConsumableArray(matrix[0]):[],joinedMatrix=matrix[1].length>0?[].concat(utils_toConsumableArray(joinedMatrix),utils_toConsumableArray(matrix[1])):joinedMatrix):joinedMatrix=joinedMatrix.map(function(row,rowIndex){var rowData=[];return matrix[0].length>0&&(rowData=utils_toConsumableArray(matrix[0][rowIndex])),matrix[1].length>0&&(rowData=[].concat(utils_toConsumableArray(rowData),utils_toConsumableArray(matrix[1][rowIndex]))),rowData}),joinedMatrix},utils_computeLogicalSpace=function computeLogicalSpace(){var item=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},config=arguments.length>1?arguments[1]:void 0,maxMeasures=arguments.length>2?arguments[2]:void 0,_config$isTransposed=config.isTransposed,isTransposed=void 0!==_config$isTransposed&&_config$isTransposed,unitMeasures=config.unitMeasures,_getMeasureInfo=function getMeasureInfo(isTransposed){return isTransposed?{firstMeasure:enums_constants_HEIGHT,secondMeasure:"width"}:{firstMeasure:"width",secondMeasure:enums_constants_HEIGHT}}(isTransposed),firstMeasure=_getMeasureInfo.firstMeasure,secondMeasure=_getMeasureInfo.secondMeasure,values=item.values,minMeasures=function getMinMeasures(isTransposed,unitMeasures){return isTransposed?{height:0,width:unitMeasures.width}:{height:unitMeasures.height,width:0}}(isTransposed,unitMeasures);if(values[0].key){var _logicalSpace,logicalSpace=(utils_defineProperty(_logicalSpace={},firstMeasure,0),utils_defineProperty(_logicalSpace,secondMeasure,0),_logicalSpace);return values.forEach(function(valueItem){var space=computeLogicalSpace(valueItem,config,maxMeasures);logicalSpace[firstMeasure]=Math.max(logicalSpace[firstMeasure],space[firstMeasure],minMeasures[firstMeasure]),logicalSpace[secondMeasure]+=+space[secondMeasure]}),item.space=logicalSpace,logicalSpace}return function getLogicalSpace(item,measures,minMeasures){var _ref,maxMeasure=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],firstMeasure=measures.firstMeasure,secondMeasure=measures.secondMeasure,firstMeasureValue=0,secondMeasureValue=0;return item.values.forEach(function(valueArray){var _item$space,fMeasure=0,sMeasure=0;valueArray.forEach(function(placeholder,colIndex){placeholder.setAvailableSpace();var space=placeholder.getLogicalSpace(),minSecondMeasure=placeholder.getMinMeasures(minMeasures[secondMeasure]);sMeasure=Math.max(sMeasure,+space[secondMeasure],minSecondMeasure),maxMeasure[colIndex]=Math.max(maxMeasure[colIndex]||0,space[firstMeasure]),fMeasure+=+maxMeasure[colIndex]}),secondMeasureValue+=sMeasure,firstMeasureValue=Math.max(firstMeasureValue,fMeasure),item.space=(utils_defineProperty(_item$space={},secondMeasure,Math.ceil(secondMeasureValue)),utils_defineProperty(_item$space,firstMeasure,Math.ceil(firstMeasureValue)),_item$space)}),utils_defineProperty(_ref={},secondMeasure,secondMeasureValue),utils_defineProperty(_ref,firstMeasure,firstMeasureValue),_ref}(item,{firstMeasure:firstMeasure,secondMeasure:secondMeasure},minMeasures,maxMeasures)},createMatrixEachLevel=function createMatrixEachLevel(item,isTransposed){if(item.values[0].key){var arr=[];return item.values.forEach(function(child){isTransposed?createMatrixEachLevel(child,isTransposed).forEach(function(e,i){var _arr$i;arr[i]=arr[i]||[],(_arr$i=arr[i]).push.apply(_arr$i,utils_toConsumableArray(e))}):arr.push.apply(arr,utils_toConsumableArray(createMatrixEachLevel(child,isTransposed)))}),item.matrix=arr,arr}return item.matrix=isTransposed?item.values[0].map(function(col,colIndex){return item.values.map(function(row){return row[colIndex]})}):item.values,item.matrix},extraCellsRemover=function extraCellsRemover(arr,beg,end){return arr.slice(beg,-end)},visual_matrix_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},visual_matrix_default_config_defaultConfig={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]};function visual_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=matrix[0]||[],this._secondaryMatrix=matrix[1]||[],this._maxMeasures=[],this._availableSpace={},generateGetterSetters(this,visual_matrix_props_PROPS);var defCon=Object.assign({},this.constructor.defaultConfig());this.config(mergeRecursive(defCon,config)),this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],this.config())}return function visual_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&visual_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&visual_matrix_defineProperties(Constructor,staticProps),Constructor}(VisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"computeViewableSpaces",value:function computeViewableSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"removeExtraCells",value:function removeExtraCells(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getPriorityDistribution",value:function getPriorityDistribution(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"calculateDepth",value:function calculateDepth(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeSpaces",value:function redistributeSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeViewSpaces",value:function redistributeViewSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getCellDimensions",value:function getCellDimensions(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{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 _createTree2=function createTree(context){var matrixTree={},lastLevelKey=0,facet="primary",nestFn=utils_nest(),keys=[],layoutMatrix=context._layoutMatrix,primaryMatrix=context.primaryMatrix(),secondaryMatrix=context.secondaryMatrix(),_context$config=context.config(),isTransposed=_context$config.isTransposed,breakPage=_context$config.breakPage;if(isTransposed){if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var _i2=0;_i20){for(var primaryMatrixLength=primaryMatrix.length,_i3=secondaryMatrix.length-1;_i3>0;_i3--)keys.push(_i3+primaryMatrixLength);keys.push(primaryMatrixLength),"primary"===facet&&(lastLevelKey=primaryMatrixLength)}var newMatrix;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),newMatrix=layoutMatrix[0].map(function(col,colIndex){return layoutMatrix.map(function(row){return row[colIndex]})}),matrixTree=nestFn.entries(newMatrix)}else{if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var i=0;i0){for(var keyLength=primaryMatrix.length>0?primaryMatrix[0].length:0,_i=secondaryMatrix[0].length-1;_i>0;_i--)keys.push(_i+keyLength);keys.push(keyLength),"primary"===facet&&(lastLevelKey=keyLength)}else lastLevelKey=primaryMatrix.length>0?primaryMatrix[0].length-1:0;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),matrixTree=nestFn.entries(layoutMatrix)}return{tree:matrixTree,lastLevelKey:lastLevelKey}}(this),tree=_createTree2.tree,lastLevelKey=_createTree2.lastLevelKey;return this._lastLevelKey=lastLevelKey,tree}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(width,height){this.availableSpace({width:width,height:height});var tree=this.tree(),heightMeasures=this.populateMaxMeasures(enums_constants_HEIGHT,tree),widthMeasures=this.populateMaxMeasures("width",tree),depth=this.calculateDepth(widthMeasures,heightMeasures);return this.viewableMatrix=this.createViewPortMatrix(depth),this.viewableMeasures=this.redistributeSpaces(width,height),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(type,matrixTree){var _this=this,depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,measures=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(measures[depth]=Math.max(measures[depth]||0,matrixTree.space[type]),matrixTree.values){var childDepth=depth+1;matrixTree.values.forEach(function(child){child.space&&(measures=_this.populateMaxMeasures(type,child,childDepth,measures))})}return measures}},{key:"getViewableSpaces",value:function getViewableSpaces(){return this.viewableMeasures}},{key:"getViewableMatrices",value:function getViewableMatrices(){return this.viewableMatrix}},{key:"createViewPortMatrix",value:function createViewPortMatrix(depth){var arr=[];return function createMatrixInstances(){var arr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],depth=arguments.length>1?arguments[1]:void 0,matrixInfo=arguments.length>2?arguments[2]:void 0,layout=arguments.length>3?arguments[3]:void 0,breakPointer=layout._breakPointer,isTransposed=layout.config().isTransposed,tree=matrixInfo.tree,layoutMatrix=matrixInfo.layoutMatrix;if(0===depth){var brokenMatrix=function breakMatrix(matrix,isTransposed,breakPointer){var primaryMatrix=[],secondaryMatrix=[];return isTransposed?matrix.forEach(function(row,rowIndex){rowIndex>=breakPointer?secondaryMatrix.push(row):primaryMatrix.push(row)}):matrix.forEach(function(row,rowIndex){row.forEach(function(column,columnIndex){columnIndex>=breakPointer?(secondaryMatrix[rowIndex]=secondaryMatrix[rowIndex]||[],secondaryMatrix[rowIndex].push(column)):(primaryMatrix[rowIndex]=primaryMatrix[rowIndex]||[],primaryMatrix[rowIndex].push(column))})}),[primaryMatrix,secondaryMatrix]}(tree.matrix,isTransposed,breakPointer);return arr.push({matrix:tree.matrix,primaryMatrix:brokenMatrix[0],secondaryMatrix:brokenMatrix[1],space:tree.space}),arr}var nextLevel=depth-1;return tree.values.forEach(function(e){createMatrixInstances(arr,nextLevel,{tree:e,layoutMatrix:layoutMatrix},layout)}),arr}(arr,depth,this.removeExtraCells(),this),arr}}],[{key:"defaultConfig",value:function defaultConfig(){return visual_matrix_default_config_defaultConfig}}]),VisualMatrix}();function row_matrix_typeof(obj){return(row_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function row_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function row_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RowVisualMatrix),(_this=row_matrix_possibleConstructorReturn(this,row_matrix_getPrototypeOf(RowVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length>0?matrix[0][0].length:0,_this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],_this.config()),_this._tree={key:ROW_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function row_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&row_matrix_setPrototypeOf(subClass,superClass)}(RowVisualMatrix,visual_matrix_VisualMatrix),function row_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&row_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&row_matrix_defineProperties(Constructor,staticProps),Constructor}(RowVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!1),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),widths=_this2$getCellDimensi.widths,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=[height,height],columnMeasures=widths;return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=extraCellsRemover(tree.matrix,begCellLen,endCellLen),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var remainingAvailWidth,remainingWidth,cWidths=[],conditions=[],maxPrioritySpace=0,matrix=measures.matrix,availableWidth=measures.width,maxWidths=measures.maxMeasures,currentWidth=measures.maxWidth,height=measures.height,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length?this.primaryMatrix()[0].length:0,dist=[];remainingAvailWidth=availableWidth,remainingWidth=currentWidth,(conditions=2===priority?[primaryMatrixLength-1,primaryMatrixLength]:0===priority?[primaryMatrixLength-1]:[primaryMatrixLength]).forEach(function(i){dist[i]=maxWidths[i],maxPrioritySpace+=maxWidths[i],remainingAvailWidth-=dist[i],remainingWidth-=dist[i]}),matrix[0].forEach(function(e,i){-1===conditions.indexOf(i)&&(dist[i]=remainingAvailWidth*(maxWidths[i]/remainingWidth))}),matrix.forEach(function(row){return row.forEach(function(col,cIdx){-1===conditions.indexOf(cIdx)?(col.setAvailableSpace(dist[cIdx],height),cWidths[cIdx]=Math.max(cWidths[cIdx]||0,Math.floor(col.getLogicalSpace().width))):cWidths[cIdx]=0})});var prioritySpace=availableWidth-cWidths.reduce(function(t,n){return t+n});return prioritySpace<0?cWidths=cWidths.map(function(){return 0}):conditions.forEach(function(i){cWidths[i]=Math.floor(prioritySpace*(dist[i]/maxPrioritySpace||1))}),cWidths}},{key:"calculateDepth",value:function calculateDepth(widthMeasures,heightMeasures){var i,height=this.availableSpace().height;for(i=0;i0?logicalWidths:maxMeasures.map(function(){return 0}),rHeights=function getDistributedHeight(context){var heightWithoutGutter,distSum=0,gutterSum=0,isTransposed=context.isTransposed,distribution=context.distribution,availableHeight=context.availableHeight,height=context.height,isDistributionEqual=context.isDistributionEqual,gutter=context.gutter,matrix=context.matrix,cIdx=context.cIdx;distribution&&void 0!==distribution[0]&&(distSum=distribution.reduce(function(t,n){return t+=n})),gutter&&void 0!==gutter[0]&&(gutterSum=gutter.reduce(function(t,n){return t+=n})),heightWithoutGutter=availableHeight-Math.floor(availableHeight*gutterSum);var colLen=matrix.length;return matrix.map(function(row,rIdx){var space=row[cIdx].getLogicalSpace().height,distHeight=space+space/height*(heightWithoutGutter-height);return isTransposed||(distribution.length>0&&colLen===distribution.length?distHeight=heightWithoutGutter*distribution[rIdx]/distSum:(isDistributionEqual||0===context.height)&&(distHeight=heightWithoutGutter/colLen)),Math.floor(distHeight)})}({matrix:matrix,cIdx:this._lastLevelKey,height:mHeight,availableHeight:height,isDistributionEqual:isDistributionEqual,distribution:distribution,isTransposed:isTransposed,gutter:gutter}),maxWidths.length>0&&(cWidths=cWidths.map(function(e,i){return Math.max(e,maxWidths[0][i]||0)})),maxWidths.push(cWidths);for(var x=0;x=breakPointer&&(columnWidths[1][cIdx-breakPointer]=colWidth,widths[1]=(widths[1]||0)+colWidth),cIdx===_this4._lastLevelKey&&(rowHeights[0][rIdx]=colHeight,rowHeights[1][rIdx]=colHeight)})}),{heights:[0,0],widths:widths,rowHeights:rowHeights,columnWidths:columnWidths}}}]),RowVisualMatrix}();function column_matrix_typeof(obj){return(column_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function column_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function column_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ColumnVisualMatrix),(_this=column_matrix_possibleConstructorReturn(this,column_matrix_getPrototypeOf(ColumnVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length,_this._tree={key:COLUMN_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function column_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&column_matrix_setPrototypeOf(subClass,superClass)}(ColumnVisualMatrix,visual_matrix_VisualMatrix),function column_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&column_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&column_matrix_defineProperties(Constructor,staticProps),Constructor}(ColumnVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!0),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height,width=measures.width;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i,height:height},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),heights=_this2$getCellDimensi.heights,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=heights,columnMeasures=[width,width];return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=tree.matrix.map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var height=measures.height,maxHeights=measures.maxHeights,remainingHeight=height,heightDist=[],conditions=[],divider=2,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length;return 2===priority?(conditions=[primaryMatrixLength-1,primaryMatrixLength],divider=2):(conditions=0===priority?[primaryMatrixLength-1]:[primaryMatrixLength],divider=1),maxHeights.forEach(function(heights,index){-1===conditions.indexOf(index)&&(heightDist[index]=heights,remainingHeight-=heights)}),remainingHeight<0?heightDist=heightDist.map(function(){return 0}):conditions.forEach(function(condition){heightDist[condition]=Math.min(maxHeights[condition],remainingHeight/divider)}),heightDist}},{key:"calculateDepth",value:function calculateDepth(widthMeasures){var j,width=this.availableSpace().width;for(j=0;j0)distWidth=availableWidth*distribution[colIndex]/distSum;else if(isDistributionEqual||0===width){var rowLen=row.length;distWidth=availableWidth/rowLen}return Math.floor(distWidth)})}({row:matrix[this._lastLevelKey],width:mWidth,availableWidth:width},this.config());matrix.forEach(function(row,rIdx){return row.forEach(function(col,cIdx){var oldLogicalSpace=col.getLogicalSpace();col.setAvailableSpace(cWidths[cIdx]-borderWidth,oldLogicalSpace.height),rHeights[rIdx]=Math.max(rHeights[rIdx]||0,Math.floor(col.getLogicalSpace().height))})}),maxHeights.length>0&&(rHeights=rHeights.map(function(e,i){return Math.max(e,maxHeights[0][i])})),maxHeights.push(rHeights);for(var x=0;x=breakPointer&&(rowHeights[1][rIdx-breakPointer]=colHeight,heights[1]=(heights[1]||0)+colHeight),rIdx===_this4._lastLevelKey&&(columnWidths[0][cIdx]=colWidth,columnWidths[1][cIdx]=colWidth)})}),{heights:heights,widths:[0,0],rowHeights:rowHeights,columnWidths:columnWidths}}}]),ColumnVisualMatrix}();function layout_helper_toConsumableArray(arr){return function layout_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);imaxMeasure&&layout.scrollInfo(computations_defineProperty({},scrollType,!0)),Math.max(maxMeasure,actualMeasure)}}(layout,paginationDetailsMap[matrixType],relatedMaxMeasure,buffer)},computations_getMatrixHeightDetails=function getMatrixHeightDetails(layout,columnMatrixWidth){var height=layout.measurement().height,buffer=layout.config().buffer,_getHeightRequiredByC=function getHeightRequiredByColMatrix(layout,columnMatrixWidth){var height=layout.measurement().height,columnMatrix=layout.columnMatrix(),maxColumnMatrixHeight=Math.min(columnMatrix.getLogicalSpace().height,height/2);columnMatrix.setAvailableSpace(columnMatrixWidth,maxColumnMatrixHeight);var columnViewSpace=columnMatrix.getViewableSpaces()[layout.config().columnPointer];return{columnMatrixHeight:columnViewSpace.height.primary+columnViewSpace.height.secondary,maxColumnMatrixHeight:maxColumnMatrixHeight}}(layout,columnMatrixWidth),columnMatrixHeight=_getHeightRequiredByC.columnMatrixHeight,maxColumnMatrixHeight=_getHeightRequiredByC.maxColumnMatrixHeight,maxHeightAvailableForRowMatrix=height-Math.min(maxColumnMatrixHeight,columnMatrixHeight);return{columnMatrixHeight:columnMatrixHeight,maxColumnMatrixHeight:maxColumnMatrixHeight,rowMatrixHeight:paginationMeasureGetter(layout,"row",maxHeightAvailableForRowMatrix,buffer),maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix}},bufferCondition={isScroll:!0,pagination:"scroll"},computations_getActualBufferFromConfig=function getActualBufferFromConfig(layout){var buffer=layout.config().buffer,_map2=computations_slicedToArray([enums_constants_HORIZONTAL,enums_constants_VERTICAL].map(function(type){return function getBufferFromCondition(layout,type){var scrollInfo=layout.scrollInfo(),currentBufferType={pagination:layout.config().pagination,isScroll:scrollInfo[type]};return Object.keys(bufferCondition).every(function(e){return bufferCondition[e]===currentBufferType[e]})}(layout,type)?buffer:0}),2);return{horizontalBuffer:_map2[0],verticalBuffer:_map2[1]}},computations_computeLayoutMeasurements=function computeLayoutMeasurements(layout){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_getMatrixWidthDetail=function getMatrixWidthDetails(layout){var rowMatrix=layout.rowMatrix(),width=layout.measurement().width,_layout$config3=layout.config(),border=_layout$config3.border,buffer=_layout$config3.buffer,borderWidth=border.width,rowMatrixWidth=getMatrixMeasurement(rowMatrix,"width"),maxRowMatrixWidth=Math.min(rowMatrixWidth+buffer,width/2),maxWidthAvailableForColumnMatrix=width-maxRowMatrixWidth-borderWidth;return{rowMatrixWidth:rowMatrixWidth,maxRowMatrixWidth:maxRowMatrixWidth,columnMatrixWidth:paginationMeasureGetter(layout,"column",maxWidthAvailableForColumnMatrix,0),maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}}(layout),rowMatrixWidth=_getMatrixWidthDetail.rowMatrixWidth,maxRowMatrixWidth=_getMatrixWidthDetail.maxRowMatrixWidth,maxWidthAvailableForColumnMatrix=_getMatrixWidthDetail.maxWidthAvailableForColumnMatrix,columnMatrixWidth=_getMatrixWidthDetail.columnMatrixWidth,_getMatrixHeightDetai=computations_getMatrixHeightDetails(layout,columnMatrixWidth),columnMatrixHeight=_getMatrixHeightDetai.columnMatrixHeight,rowMatrixHeight=_getMatrixHeightDetai.rowMatrixHeight,maxHeightAvailableForRowMatrix=_getMatrixHeightDetai.maxHeightAvailableForRowMatrix,_getActualBufferFromC=computations_getActualBufferFromConfig(layout),horizontalBuffer=_getActualBufferFromC.horizontalBuffer,verticalBuffer=_getActualBufferFromC.verticalBuffer;rowMatrix.setAvailableSpace(maxRowMatrixWidth-verticalBuffer,rowMatrixHeight-horizontalBuffer);var rowViewableSpaces=rowMatrix.getViewableSpaces(),columnViewableSpaces=columnMatrix.getViewableSpaces();return setViewSpaces(layout,"row",rowViewableSpaces),setViewSpaces(layout,"column",columnViewableSpaces),function setValueMatrixMeasurements(layout,rowViewableSpaces,columnViewableSpaces){var _ref,_ref2,_ref3,_ref4,_ref5,centerMatrix=layout.centerMatrix(),border=layout.config().border,matrices=layout.matrices(),top=matrices.top,bottom=matrices.bottom,borderWidth=border.width,rowHeights=(_ref=[]).concat.apply(_ref,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.rowHeights.primary}))),rowWidthsPrimary=(_ref2=[]).concat.apply(_ref2,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.primary}))),rowWidthsSecondary=(_ref3=[]).concat.apply(_ref3,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.secondary}))),columnWidths=(_ref4=[]).concat.apply(_ref4,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.columnWidths.primary}))),columnHeightsPrimary=columnViewableSpaces[0].rowHeights.primary,columnHeightsSecondary=(_ref5=[]).concat.apply(_ref5,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.rowHeights.secondary})));centerMatrix.forEach(function(matrix,rIdx){matrix.forEach(function(placeholder,cIdx){placeholder.setAvailableSpace(columnWidths[cIdx]-borderWidth,rowHeights[rIdx]-borderWidth)})}),computations_setAvailableSpace(top[0],rowWidthsPrimary,columnHeightsPrimary),computations_setAvailableSpace(top[2],rowWidthsSecondary,columnHeightsPrimary),computations_setAvailableSpace(bottom[0],rowWidthsPrimary,columnHeightsSecondary),computations_setAvailableSpace(bottom[2],rowWidthsSecondary,columnHeightsSecondary)}(layout,rowViewableSpaces,columnViewableSpaces),{rowMatrixHeight:rowMatrixHeight-horizontalBuffer,rowMatrixWidth:rowMatrixWidth-verticalBuffer,maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix-horizontalBuffer,columnMatrixHeight:columnMatrixHeight,columnMatrixWidth:columnMatrixWidth,maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}},measureSum=function measureSum(measureArr){return measureArr.reduce(function(total,measure){return total+measure},0)};function layout_typeof(obj){return(layout_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function layout_defineProperties(target,props){for(var i=0;i0&&(leftMatrix=[].concat(layout_helper_toConsumableArray(topLeft),layout_helper_toConsumableArray(leftRows),layout_helper_toConsumableArray(bottomLeft))),rightRows.length>0&&(rightMatrix=[].concat(layout_helper_toConsumableArray(topRight),layout_helper_toConsumableArray(rightRows),layout_helper_toConsumableArray(bottomRight))),topColumns.length>0&&topColumns[0].length>0&&(topMatrix=topColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(topLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(topRight[i]))})),bottomColumns.length>0&&bottomColumns[0].length>0&&(bottomMatrix=bottomColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(bottomLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(bottomRight[i]))})),context.rowMatrix(new row_matrix_RowVisualMatrix([leftMatrix,rightMatrix],{isDistributionEqual:isRowSizeEqual,distribution:distribution.rows,gutter:gutterSpace.rows,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.row,breakPage:breakPage.rows.map(function(e){return e+Math.max(topLeft.length,topRight.length)}),extraCellLengths:[topLeft.length,bottomLeft.length]})),begColCells=topLeft.length>0?topLeft[0].length:bottomLeft.length>0?bottomLeft[0].length:0,endColCells=topRight.length>0?topRight[0].length:bottomRight.length>0?bottomRight[0].length:0,context.columnMatrix(new column_matrix_ColumnVisualMatrix([topMatrix,bottomMatrix],{isDistributionEqual:isColumnSizeEqual,distribution:distribution.columns,gutter:gutterSpace.columns,isTransposed:!0,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.col,breakPage:breakPage.columns,extraCellLengths:[begColCells,endColCells]})),context.centerMatrix(valueMatrix),matrices}(this,_matrices),this):layout_get(layout_getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,_matrices)}},{key:"triggerReflow",value:function triggerReflow(){this.scrollInfo({horizontal:!1,vertical:!1});var _computeLayoutMeasure=computations_computeLayoutMeasurements(this),maxHeightAvailableForRowMatrix=_computeLayoutMeasure.maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix=_computeLayoutMeasure.maxWidthAvailableForColumnMatrix;return this.setViewInformation(maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix),this}},{key:"gotoPage",value:function gotoPage(type,pageNumber){var pageType=type.toLowerCase(),totalPages=this.viewInfo().viewMatricesInfo["".concat(pageType,"Pages")],pointer=Math.min(Math.max(1,pageNumber),totalPages);return this.config(function layout_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(pageType,"Pointer"),pointer-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(type){var viewMatricesInfo=this.viewInfo().viewMatricesInfo,pageType=type.toLowerCase();return{totalPages:viewMatricesInfo["".concat(pageType,"Pages")],currentPage:this.config()["".concat(pageType,"Pointer")]+1}}},{key:"viewInfo",value:function viewInfo(){return arguments.length?(this._viewInfo=arguments.length<=0?void 0:arguments[0],this):this._viewInfo}},{key:"scrollInfo",value:function scrollInfo(){return arguments.length?(this._scrollInfo=mergeRecursive(this._scrollInfo,arguments.length<=0?void 0:arguments[0]),this):this._scrollInfo}},{key:"setViewInformation",value:function setViewInformation(maxRowHeight,maxColWidth){var _this$config2=this.config(),rowPointer=_this$config2.rowPointer,columnPointer=_this$config2.columnPointer,border=_this$config2.border,viewMatricesInfo=function getViewMatrices(layout,rowPointer,columnPointer){for(var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),centerMatrix=layout.centerMatrix(),matrices=layout.matrices(),rowMatrices=rowMatrix.getViewableMatrices(),columnMatrices=columnMatrix.getViewableMatrices(),centralMatrixPointer={row:0,column:0},i=rowPointer-1;i>=0;i--){var length=Math.max(rowMatrices[i].primaryMatrix.length,rowMatrices[i].secondaryMatrix.length);centralMatrixPointer.row+=length}for(var _i=columnPointer-1;_i>=0;_i--){var matrix=columnMatrices[_i],primaryMatrix=matrix.primaryMatrix,secondaryMatrix=matrix.secondaryMatrix,_length=Math.max(primaryMatrix[0]?primaryMatrix[0].length:0,secondaryMatrix[0]?secondaryMatrix[0].length:0);centralMatrixPointer.column+=_length}matrices.top[1]=columnMatrices[columnPointer].primaryMatrix,matrices.bottom[1]=columnMatrices[columnPointer].secondaryMatrix,matrices.center[0]=rowMatrices[rowPointer].primaryMatrix,matrices.center[2]=rowMatrices[rowPointer].secondaryMatrix;var rowMatrixLen=Math.max(matrices.center[0].length,matrices.center[2].length),columnMatrixLen=Math.max(matrices.top[1][0]?matrices.top[1][0].length:0,matrices.bottom[1][0]?matrices.bottom[1][0].length:0);return matrices.center[1]=centerMatrix.slice(centralMatrixPointer.row,centralMatrixPointer.row+rowMatrixLen).map(function(matrix){return matrix.slice(centralMatrixPointer.column,centralMatrixPointer.column+columnMatrixLen)}),{matrices:matrices,rowPages:rowMatrices.length,columnPages:columnMatrices.length}}(this,rowPointer,columnPointer),layoutDimensions=function getViewMeasurements(layout,maxRowHeight,maxColWidth){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_layout$config=layout.config(),columnPointer=_layout$config.columnPointer,rowPointer=_layout$config.rowPointer,rowSpaces=rowMatrix.getViewableSpaces()[rowPointer],colSpaces=columnMatrix.getViewableSpaces()[columnPointer],rowHeights=rowSpaces.rowHeights,rowMatrixWidth=rowSpaces.width,columnWidths=colSpaces.columnWidths,columnMatrixHeight=colSpaces.height,leftWidth=rowMatrixWidth.primary,rightWidth=rowMatrixWidth.secondary,topHeight=columnMatrixHeight.primary,bottomHeight=columnMatrixHeight.secondary,centerHeight=measureSum(rowHeights.primary),centerWidth=measureSum(columnWidths.primary),viewWidth=[leftWidth,Math.min(centerWidth,maxColWidth),rightWidth],viewHeight=[topHeight,Math.min(centerHeight,maxRowHeight),bottomHeight];return{viewWidth:viewWidth,viewHeight:viewHeight,actualCenterMeasures:{height:centerHeight,width:centerWidth},totalMeasures:{width:measureSum(viewWidth),height:measureSum(viewHeight)},unitHeights:rowHeights,unitWidths:columnWidths}}(this,maxRowHeight,maxColWidth);return layoutDimensions.border=border,this.viewInfo({viewMatricesInfo:viewMatricesInfo,layoutDimensions:layoutDimensions}),this}}],[{key:"defaultViewInfo",value:function defaultViewInfo(){return Object.assign({},{layoutDimensions:{border:this.defaultConfig().border,viewHeight:[0,0,0],viewWidth:[0,0,0]},viewMatricesInfo:{columnPages:0,rowPages:0,matrices:{top:[],center:[],bottom:[]}}})}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENTS}},{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIGURATION}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}();function border_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _matrixSpanGeneratorM,_spanApplierMap,borderMap=(border_helper_defineProperty(_borderMap={},"".concat("top","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("right"),null),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("left"),"row"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("middle"),"center"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("right"),"row"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("right"),null),_borderMap),border_helper_specificBorderApplier=function specificBorderApplier(borderTypes,showBorders,cells,borderInfo){var color=borderInfo.color,width=borderInfo.width,style=borderInfo.style,borderStyle="".concat(width,"px ").concat(style);borderTypes.forEach(function(borderType){!function applySpecificBorder(cells,color,type,style){cells.style("border-".concat(type),"".concat(style," ").concat(color))}(cells,showBorders[borderType]?color:"rgba(0,0,0,0)",borderType,borderStyle)})},border_helper_applyBorders=function applyBorders(cells,border,row,column){var borderApplierFn=function borderApplier(cells,borderInfo){var showRowBorders=borderInfo.showRowBorders,showColBorders=borderInfo.showColBorders,showValueBorders=borderInfo.showValueBorders;return{row:function row(){return border_helper_specificBorderApplier(["top","bottom"],showRowBorders,cells,borderInfo)},column:function column(){return border_helper_specificBorderApplier(["left","right"],showColBorders,cells,borderInfo)},center:function center(){return border_helper_specificBorderApplier(["left","right","top","bottom"],showValueBorders,cells,borderInfo)}}}(cells,border),borderMapVal=borderMap["".concat(ROW_MATRIX_INDEX[VIEW_INDEX[row]],"-").concat(COLUMN_MATRIX_INDEX[column])];borderMapVal&&borderApplierFn[borderMapVal]()};function span_maker_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var orderMaker=function orderMaker(arr){return Array.from(Array(arr.length).keys())},nestByStack=function nestByStack(stack,updateArr){var optionalParams=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},order=optionalParams.order,keyFn=optionalParams.keyFn,arr=updateArr.slice(),currStack=stack.slice(),prevStack=currStack.slice();if(order=order||Array.from(Array(arr.length).keys()),keyFn=keyFn||function(v){return v},0===currStack.length){var _newArr=[];return order.forEach(function(e){_newArr.push(arr[e])}),{prevStack:prevStack,currStack:arr,arr:_newArr}}for(var arrVal="",stackVal="",newArr=[],i=order.length-1;i>=0;i--){var currElemIndex=order[i];if((arrVal+=keyFn(arr[currElemIndex]))===(stackVal+=keyFn(currStack[currElemIndex])))newArr[currElemIndex]=null;else{stackVal="";for(var j=i;j0&&void 0!==arguments[0]?arguments[0]:1,placeholder=arguments.length>1?arguments[1]:void 0,config=arguments.length>2?arguments[2]:void 0,index=arguments.length>3?arguments[3]:void 0,height=placeholder.availHeight(),width=placeholder.availWidth(),borderWidth=config.border.width,unitWidths=config.dimensions.unitWidths,col=index.col;return span_maker_defineProperty(_ref={},"rowSpan",function(){placeholder.setAvailableSpace(width,height*span),1===span&&renderer_utils_selectElement(this).style("height","".concat(height*span+borderWidth,"px"))}),span_maker_defineProperty(_ref,"colSpan",function(){var primaryUnitWidth=unitWidths.primary[col];if(span>1){for(var cumulativeWidth=0,i=col;i0&&void 0!==arguments[0]?arguments[0]:0}},{key:"type",get:function get(){return"simple"}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),SimpleCell}();function enums_defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var visual_cell_src_props_PROPS,enums_defaults_DEFAULT_CONFIG=(enums_defaults_defineProperty(_DEFAULT_CONFIG={},"margin",(enums_defaults_defineProperty(_CONSTANTS$MARGIN={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$MARGIN)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"spaceFixer",2),enums_defaults_defineProperty(_DEFAULT_CONFIG,"isOffset",!1),enums_defaults_defineProperty(_DEFAULT_CONFIG,"verticalAlign",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"textAlign","center"),enums_defaults_defineProperty(_DEFAULT_CONFIG,"show",!0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"maxLines",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"minCharacters",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"rotation",null),_DEFAULT_CONFIG);function visual_cell_src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_PROPS={mount:{},availHeight:{},availWidth:{},config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config,value)}},logicalSpace:{},minSpacing:{},source:{}},packages_visual_cell_src_props_PROPS=(visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS={},GEOM,mergeRecursive({data:{},caption:{},config:{},axes:{},facetByFields:{},fields:{},transform:{},layerDef:{},detailFields:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_TEXT,mergeRecursive({smartText:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_AXIS,DEFAULT_PROPS),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,BLANK,DEFAULT_PROPS),visual_cell_src_props_PROPS);function axis_cell_typeof(obj){return(axis_cell_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function axis_cell_defineProperties(target,props){for(var i=0;i(availWidth||0)&&maxLines&&(space.height=space.oriTextHeight*maxLines),availWidth&&availWidth":">",'"':""","'":"'","/":"/"};return"".concat(str).replace(/[&<>"'/]/g,function(match){return htmlEscapes[match]})}(rawContent()):rawContent()},createHeading=function createHeading(config,type,labelManager,prevCell){return config?function headerCreator(config,cellType,labelManager,prevCell){var margin={},content=config.content,classPrefix=config.classPrefix,maxLines=config.maxLines,cell=prevCell||new src_text_cell({type:"title"===cellType?"header":"text",className:"".concat(classPrefix,"-").concat(cellType,"-cell")},{labelManager:labelManager}).config({maxLines:maxLines}).minSpacing({width:0,height:0});return cell.source(content),cell._minTickDiff={height:0,width:0},margin=config.position===src_constants_TOP?{top:0,bottom:config.padding}:{top:config.padding,bottom:0},cell.config({margin:margin}),{height:cell.getLogicalSpace().height,cell:cell}}(config,type,labelManager,prevCell):""},legend_maker_legendInitializer=function legendInitializer(legendConfig,canvas,measurement,prevLegends){var legends=[],height=measurement.height,width=measurement.width,headerHeight=measurement.headerHeight,position=legendConfig.position,align=legendConfig.align,legendInfo=function legendCreator(canvas){var LegendCls,dataset=[],axes=canvas.getRetinalAxes();return Object.entries(axes).forEach(function(axisInfo){var scale=axisInfo[1][0],scaleType=axisInfo[0],scaleProps=canvas[scaleType]();if(scaleProps.field&&scale){var _scale$config=scale.config(),type=_scale$config.type,step=_scale$config.step,stepMapper="boolean"==typeof step&&step;LegendCls=LEGEND_TYPE_MAP["".concat(type,"-").concat(stepMapper,"-").concat(scaleType)],dataset.push({scale:scale,canvas:canvas,fieldName:scaleProps.field,title:retrieveFieldDisplayName(canvas.data(),scaleProps.field),LegendCls:LegendCls,scaleType:scaleType})}}),dataset}(canvas),invalidValues=canvas.config().invalidValues,parser=getValueParser(invalidValues);return legendInfo.forEach(function(dataInfo,index){var legendMeasures={},LegendCls=dataInfo.LegendCls,scale=dataInfo.scale,fieldName=dataInfo.fieldName,titleText=dataInfo.title,scaleType=dataInfo.scaleType,config=legendConfig[scaleType]||{},title=config.title||{};if(title.text=title.text||titleText,config.show){config.position=position,config.align=align;var legend=getObjProp(prevLegends[scaleType],index);legend||(legend=LegendCls.create({labelManager:canvas._dependencies.smartlabel,cells:{AxisCell:axis_cell,TextCell:src_text_cell}})),legendMeasures.maxHeight="vertical"===align?height-headerHeight:.2*height,legendMeasures.maxWidth="horizontal"===align?width:.2*width,legendMeasures.width=Math.min(legendMeasures.maxWidth,config.width),legendMeasures.height=Math.min(legendMeasures.maxHeight,config.height),[PADDING,BORDER,MARGIN].forEach(function(e){legendMeasures[e]=config[e]});var metaData=legend.metaData();metaData instanceof datamodel_default.a&&metaData.dispose(),legend.scale(scale).valueParser(parser).title(title).fieldName(fieldName).config(config).metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName])).measurement(legendMeasures).canvasAlias(canvas.alias()).setLegendMeasures(),legends.push({canvas:canvas,legend:legend,scaleType:scaleType})}}),legends};function muze_chart_component_typeof(obj){return(muze_chart_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function muze_chart_component_defineProperties(target,props){for(var i=0;icurrHeight?(sections++,currWidth=0,currHeight=legHeight):sections<0&§ions++,sectionComponents[sections]=sectionComponents[sections]||[],currHeight-=Math.min(leg.measurement().height,currHeight),currWidth=Math.max(Math.min(leg.measurement().width,leg.measurement().maxWidth),currWidth),sectionComponents[sections].push({legend:leg,legendHeight:legHeight,legendWidth:currWidth})});var mount=makeElement(legendMount,["div"],sectionComponents,"".concat(classPrefix,"-legend-section"));mount.classed("".concat(classPrefix,"-legend-vertical-section"),!0).style("width",function(d){return"".concat(d[0].legendWidth,"px")}),makeElement(mount,["div"],function(d){return d},"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legendWidth,"px")})}else{var _mount=makeElement(legendMount,"div",[1],"".concat(classPrefix,"-legend-section"));_mount.classed("".concat(classPrefix,"-legend-horizontal-section"),!0),_mount.classed("".concat(classPrefix,"-legend-section-",0),!0).style("width","".concat(legWidth,"px")),makeElement(_mount,"div",this.components,"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legend.measurement().width,"px")})}}},{key:"draw",value:function draw(container){this.renderLegend(container||document.getElementById(this.renderAt()))}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.boundBox(params.config.measurement.legendSpace),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.components=params.component,this.params=params,this.target(params.config.target),this.position(params.config.position);var _defaultAlignmentHelp=function defaultAlignmentHelper(position){var alignment=null,alignWith="".concat(ROW_MATRIX_INDEX[1],"-").concat(COLUMN_MATRIX_INDEX[1]);switch(position){case src_constants_TOP:case src_constants_BOTTOM:alignment=HORIZONTAL_CENTER;break;case src_constants_LEFT:case src_constants_RIGHT:alignment=VERTICAL_CENTER;break;default:alignment=VERTICAL_CENTER}return{alignment:alignment,alignWith:alignWith}}(params.config.position),alignWith=_defaultAlignmentHelp.alignWith,alignment=_defaultAlignmentHelp.alignment;this.className(params.config.className),this.alignWith(params.config.alignWith||alignWith),this.alignment(params.config.alignment||alignment)}}]),LegendComponent}(),helper_d3Drag=(__webpack_require__(25),renderer_utils_getD3Drag()),arrowSizeMap={left:"width",right:"width",top:"height",bottom:"height"},getUnitPositions=function getUnitPositions(unitMeasures,totalLength,viewLength){var currentLen=0;return(unitMeasures.primary&&unitMeasures.primary.length?unitMeasures.primary:unitMeasures.secondary).map(function(e){var unitPosition=100*currentLen/(totalLength-viewLength);return currentLen+=e,unitPosition})},helper_createScrollBarArrow=function createScrollBarArrow(mount,type,config){var classPrefix=config.classPrefix,thickness=config.thickness,arrow=makeElement(mount,"div",[type],"".concat(classPrefix,"-scroll-arrow-").concat(type));return arrow.classed("".concat(classPrefix,"-scroll-arrow"),!0),arrow.style(arrowSizeMap[type],"".concat(thickness,"px")),makeElement(arrow,"div",[1],"".concat(classPrefix,"-scroll-arrow-chevron")).attr("id","".concat(classPrefix,"-scroll-arrow-chevron-").concat(type)),arrow},helper_createScrollBarRect=function createScrollBarRect(mount,config){var classPrefix=config.classPrefix,rect=makeElement(mount,"div",[1],"".concat(classPrefix,"-scroll-rect"));return{rect:rect,mover:makeElement(rect,"div",[1],"".concat(classPrefix,"-scroll-mover"))}},applyScrollMouseDownAction=function applyScrollMouseDownAction(moverRect,scrollMaker,speed){var mover=moverRect.mover,rect=moverRect.rect,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y;scrollMaker.changeMoverPosition({x:x-rectX+speed,y:y-rectY+speed})},helper_registerListenerOnArrow=function registerListenerOnArrow(scrollMaker,moverRect,arrowType,speed){var timer="",arrow=scrollMaker._components[arrowType],isTouchDevice=hasTouch();arrow.on(isTouchDevice?"touchstart":"mousedown",function(){renderer_utils_getEvent().preventDefault(),timer=setInterval(function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)},100)}).on(isTouchDevice?"touchend":"mouseup",function(){renderer_utils_getEvent().preventDefault(),clearInterval(timer)}).on("click",function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)})},helper_registerListeners=function registerListeners(scrollMaker){var moverRect=scrollMaker._components.moverRect,speed=scrollMaker.config().speed;helper_registerListenerOnArrow(scrollMaker,moverRect,"prevArrow",-speed),function applyMoverDrag(scrollMaker,moverRect){var startPos={},moverStartPos=0,rectStartPos=0,endPos={},mover=moverRect.mover,rect=moverRect.rect;mover.call(helper_d3Drag().on("start",function(){var event=renderer_utils_getEvent();moverStartPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect(),startPos={x:event.x,y:event.y}}).on("drag",function(){var event=renderer_utils_getEvent(),window=getWindow(),distanceMoved_x=(endPos={x:event.x,y:event.y}).x-startPos.x,distanceMoved_y=endPos.y-startPos.y,actualPosition={x:moverStartPos.x+distanceMoved_x-rectStartPos.x+window.pageXOffset,y:moverStartPos.y+distanceMoved_y-rectStartPos.y+window.pageYOffset};scrollMaker.changeMoverPosition(actualPosition)}))}(scrollMaker,moverRect),function applyRectClick(scrollMaker,moverRect){moverRect.rect.on("click",function(){var event=renderer_utils_getEvent();scrollMaker.emptyScrollAreaClick(event)})}(scrollMaker,moverRect),helper_registerListenerOnArrow(scrollMaker,moverRect,"nextArrow",speed)},scroll_bar_maker_props_PROPS={config:{sanitization:function sanitization(context,value){return value=mergeRecursive(context._config,value)}},manager:{},unitPositions:{},logicalSpace:{}};function scroll_maker_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=horizontal_scroll_maker_get(horizontal_scroll_maker_getPrototypeOf(HorizontalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,config,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"left",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"right",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitWidths=_this$logicalSpace.unitWidths,scrollBarWithouArrowLength=width-2*height;rect.style("width","".concat(dimensions.width-2*height,"px")),rect.style("height","".concat(100,"%")),mover.style("width","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style("height","".concat(100,"%")),mover.style(src_constants_LEFT,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitWidths,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.xrectStartPos.width?rectStartPos.width-moverPos.width:newPosition.x,mover.style(src_constants_LEFT,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:0,x:moverPos.x-rectStartPos.x-delta}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.width)/100;return this.changeMoverPosition({y:0,x:movement}),this}}],[{key:"type",value:function type(){return"horizontal"}}]),HorizontalScrollMaker}(),vertical:function(_ScrollMaker){function VerticalScrollMaker(){return function vertical_scroll_maker_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VerticalScrollMaker),vertical_scroll_maker_possibleConstructorReturn(this,vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker).apply(this,arguments))}return function vertical_scroll_maker_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&vertical_scroll_maker_setPrototypeOf(subClass,superClass)}(VerticalScrollMaker,scroll_maker_ScrollMaker),function vertical_scroll_maker_createClass(Constructor,protoProps,staticProps){return protoProps&&vertical_scroll_maker_defineProperties(Constructor.prototype,protoProps),staticProps&&vertical_scroll_maker_defineProperties(Constructor,staticProps),Constructor}(VerticalScrollMaker,[{key:"createScroll",value:function createScroll(mountPoint){var dimensions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=vertical_scroll_maker_get(vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"top",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"bottom",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitHeights=_this$logicalSpace.unitHeights,scrollBarWithouArrowLength=height-2*width;rect.style("height","".concat(scrollBarWithouArrowLength,"px")),rect.style("width","".concat(100,"%")),mover.style("width","".concat(100,"%")),mover.style("height","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style(src_constants_TOP,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitHeights,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.yrectStartPos.height?rectStartPos.height-moverPos.height:newPosition.y,mover.style(src_constants_TOP,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:moverPos.y-rectStartPos.y-delta,x:0}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.height)/100;return this.changeMoverPosition({x:0,y:movement}),this}}],[{key:"type",value:function type(){return"vertical"}}]),VerticalScrollMaker}()},ScrollComponent=function(_MuzeComponent){function ScrollComponent(params){var _this;!function scroll_component_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ScrollComponent);var ScrollMaker=scrollMakerMap[params.config.type];return params.component=new ScrollMaker,params.component.config(params.config.scrollBarComponentConfig),params.component.logicalSpace(params.dimensions),(_this=scroll_component_possibleConstructorReturn(this,scroll_component_getPrototypeOf(ScrollComponent).call(this,params.name,params.component.getLogicalSpace(),0))).setParams(params),_this}return function scroll_component_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&scroll_component_setPrototypeOf(subClass,superClass)}(ScrollComponent,MuzeComponent),function scroll_component_createClass(Constructor,protoProps,staticProps){return protoProps&&scroll_component_defineProperties(Constructor.prototype,protoProps),staticProps&&scroll_component_defineProperties(Constructor,staticProps),Constructor}(ScrollComponent,[{key:"manager",value:function manager(){return arguments.length?(this.component.manager(arguments.length<=0?void 0:arguments[0]),this):this.component.manager()}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){return this.component.scrollDeltaTo(delta),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){return this.component.scrollTo(scrollPercentage),this}},{key:"scrollToUnitIndex",value:function scrollToUnitIndex(unitIndex){var unitPositions=this.component.unitPositions(),sanitizedUnitIndex=Math.min(Math.max(0,unitIndex),unitPositions.length-1);return this.component.scrollTo(unitPositions[sanitizedUnitIndex]),this}},{key:"getScrollPositionsForUnits",value:function getScrollPositionsForUnits(){return this.component.unitPositions()}},{key:"draw",value:function draw(container){return this.component.createScroll(container||document.getElementById(this.renderAt())),this}},{key:"attachScrollAction",value:function attachScrollAction(externalAction){return this.component.attachScrollAction(externalAction),this}},{key:"detachScrollAction",value:function detachScrollAction(){return this.component.detachScrollAction(),this}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.component.config(params.config.scrollBarComponentConfig),this.component.logicalSpace(params.dimensions),this.boundBox(this.component.getLogicalSpace()),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.component=params.component||this.component,this.params=params,this.target(params.config.target),this.position(params.config.position),this.className(params.config.className),this.alignWith(params.config.alignWith),this.alignment(params.config.alignment)}},{key:"remove",value:function remove(){this.component.remove()}}]),ScrollComponent}();function matrix_component_typeof(obj){return(matrix_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function matrix_component_defineProperties(target,props){for(var i=0;iMath.abs(wheelDeltaY)&&scrollBarManager.preventBrowserScroll("horizontal",event).triggerScrollBarAction("horizontal",wheelDeltaX/30),0!==wheelDeltaY&&Math.abs(wheelDeltaX)0?heightAttr:height,minHeight),availableWidthForCanvas=Math.max(widthAttr>0?widthAttr:width,minWidth),_createHeaders=function createHeaders(context,canvasHeight,canvasWidth){var headerHeight=0,headers={},subtitle=context.subtitle(),isSubtitle=title_maker_resolveTitleSubTitleContent(subtitle[0]);return canvasHeight>=200&&canvasWidth>=200&&["title","subtitle"].forEach(function(type){var headerOptions=context[type](),content=title_maker_resolveTitleSubTitleContent(headerOptions[0]);if(content){var config=headerOptions[1];config.width=context.width(),config.height=context.height(),config.classPrefix=context.config().classPrefix,config.content=content,config.padding="title"!==type||isSubtitle.length?config.padding:subtitle[1].padding;var _createHeading=createHeading(config,type,context.dependencies().smartlabel,context["".concat(type,"Cell")]),height=_createHeading.height,cell=_createHeading.cell;headers["".concat(type,"Cell")]=cell,context._composition[type]=cell,headerHeight+=height}}),{headerHeight:headerHeight,headers:headers}}(context,availableHeightForCanvas,availableWidthForCanvas),headers=_createHeaders.headers,headerHeight=_createHeaders.headerHeight,legends=function createLegend(context,headerHeight,height,width){var measurement={height:height,width:width,headerHeight:headerHeight},legend=context.config().legend,show=legend.show,position=legend.position;legend.classPrefix=context.config().classPrefix;var align=position===src_constants_LEFT||position===src_constants_RIGHT?"vertical":"horizontal";return legend.show=show?"vertical"===align&&width>200||"horizontal"===align&&height>200:show,legend.align=align,legend_maker_legendInitializer(legend,context,measurement,context.composition().legend||{})}(context,headerHeight,availableHeightForCanvas,availableWidthForCanvas);context._composition.legend={},legends.forEach(function(e){context._composition.legend[e.scaleType]=e.legend});var legendSpace=function getLegendSpace(legends,legendConfig,availableHeight,availableWidth){var legendSpace={width:0,height:0};return legends.map(function(legendInfo){return legendInfo.legend.measurement()}).forEach(function(space){var height,width;width=Math.min(space.width,space.maxWidth),height=Math.min(space.height,space.maxHeight),"horizontal"===legendConfig.align?legendSpace.width+width>availableWidth?(legendSpace.width=availableWidth,legendSpace.height+=height):(legendSpace.width+=width,legendSpace.height=Math.max(legendSpace.height,height)):legendSpace.height+height>availableHeight?(legendSpace.height=height,legendSpace.width+=width):(legendSpace.height+=height,legendSpace.width=Math.max(legendSpace.width,width))}),"horizontal"===legendConfig.align&&(legendSpace.width=availableWidth),legendSpace}(legends,legend,availableHeightForCanvas,availableWidthForCanvas),legendWidth=legendPosition===src_constants_LEFT||legendPosition===src_constants_RIGHT?legendSpace.width:0,legendHeight=legendPosition===src_constants_TOP||legendPosition===src_constants_BOTTOM?legendSpace.height:0,components={headers:headers,legends:legends,canvases:[context],rows:rows,columns:columns,values:values,cornerMatrices:visGroup.cornerMatrices()},measurement={mountSpace:{height:height,width:width},headerHeight:headerHeight,legendSpace:legendSpace,canvasWidth:availableWidthForCanvas,canvasHeight:availableHeightForCanvas,width:availableWidthForCanvas-legendWidth,height:availableHeightForCanvas-headerHeight-legendHeight,minUnitHeight:context.minUnitHeight(),minUnitWidth:context.minUnitWidth()};return{layoutConfig:layoutConfig=mergeRecursive(layoutConfig,{classPrefix:classPrefix,showHeaders:showHeaders,border:mergeRecursive(visGroup.metaData().border,context.config().border),layoutArrangement:layoutArrangement,legend:legend,buffer:scrollBar.thickness,pagination:pagination,title:titleConfig,subtitle:subtitleConfig,isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,mount:mount,priority:priority}),components:components,measurement:measurement}},componentIndexes={title:0,subtitle:1,legend:2,verticalScrollBar:3,horizontalScrollBar:4,grid:5,message:6},componentNames={0:"title",1:"subtitle",2:"legend",3:"verticalScrollBar",4:"horizontalScrollBar",5:"grid",6:"message"},layout_maker_renderLayout=function renderLayout(canvas,renderDetails){var layoutManager=canvas._layoutManager,gridLayout=canvas.layout(),grid=componentIndexes.grid,compWrappers=component_wrapper_maker_componentWrapperMaker(canvas,gridLayout,renderDetails),componentWrappers=Object.keys(componentIndexes).map(function(e){return compWrappers[e]});componentWrappers[grid]&&function createScrollManager(componentWrappers,canvas){var verticalScrollBar=componentIndexes.verticalScrollBar,grid=componentIndexes.grid,horizontalScrollWrapper=componentWrappers[componentIndexes.horizontalScrollBar],verticalScrollWrapper=componentWrappers[verticalScrollBar],gridWrapper=componentWrappers[grid],scrollBarManager=new ScrollManager,scrollBarComponents={};verticalScrollWrapper&&(scrollBarComponents.vertical=verticalScrollWrapper),horizontalScrollWrapper&&(scrollBarComponents.horizontal=horizontalScrollWrapper),scrollBarManager.scrollBarComponents(scrollBarComponents).attachedComponents({grid:gridWrapper}),canvas.composition().hScrollBar=horizontalScrollWrapper,canvas.composition().vScrollBar=verticalScrollWrapper,[horizontalScrollWrapper,verticalScrollWrapper].forEach(function(wrapper){wrapper&&wrapper.manager(scrollBarManager)}),gridWrapper.scrollBarManager(scrollBarManager)}(componentWrappers,canvas),componentWrappers.forEach(function(componentWrapper,index){if(!componentWrapper){var deleteElementName=componentNames[index];layoutManager.removeComponent(deleteElementName)}}),layoutManager.registerComponents(componentWrappers).compute(),function attachListeners(componentWrappers){componentWrappers.forEach(function(componentWrapper){componentWrapper&&componentWrapper.attachListener()})}(componentWrappers)};function group_firebolt_typeof(obj){return(group_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function group_firebolt_defineProperties(target,props){for(var i=0;i","\"","'","/","createHeading","prevCell","cellType","_minTickDiff","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendInfo","legendCreator","LegendCls","dataset","scaleProps","_scale$config","stepMapper","dataInfo","legendMeasures","titleText","getGroupByData","setLegendMeasures","MuzeComponent","_this$boundBox","HeaderComponent","headerComponent_classCallCheck","headerComponent_possibleConstructorReturn","headerComponent_getPrototypeOf","setParams","cont","renderHeader","LegendComponent","legendComponent_classCallCheck","legendComponent_possibleConstructorReturn","legendComponent_getPrototypeOf","legendSpace","sectionComponents","_this$params$config","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","legendHeight","legendWidth","renderLegend","_defaultAlignmentHelp","defaultAlignmentHelper","arrowSizeMap","getUnitPositions","totalLength","viewLength","currentLen","unitPosition","createScrollBarArrow","createScrollBarRect","mover","applyScrollMouseDownAction","moverRect","scrollMaker","_mover$node$getBoundi","_rect$node$getBoundin","rectX","rectY","changeMoverPosition","registerListenerOnArrow","arrowType","_components","isTouchDevice","registerListeners","applyMoverDrag","moverStartPos","rectStartPos","distanceMoved","actualPosition","pageXOffset","pageYOffset","applyRectClick","emptyScrollAreaClick","manager","unitPositions","ScrollMaker","scroll_maker_classCallCheck","_attachedScrollAction","_unitPositions","scroll_maker_createClass","scrollTo","scrollDeltaTo","createScroll","scrollBarContainer","scrollContainerHelper","attachScrollAction","externalScrollAction","detachScrollAction","scrollMakerMap","_ScrollMaker","HorizontalScrollMaker","horizontal_scroll_maker_classCallCheck","horizontal_scroll_maker_possibleConstructorReturn","horizontal_scroll_maker_getPrototypeOf","horizontal_scroll_maker_inherits","horizontal_scroll_maker_createClass","horizontal_scroll_maker_get","prevArrow","nextArrow","_this$logicalSpace","scrollBarWithouArrowLength","_scrollBarWithouArrowLength","_this$_components$mov","positionAdjuster","newPosition","currentPos","_this$_components$mov2","moverPos","movedViewLength","performAttachedScrollFunction","delta","_this$_components$mov3","scrollPercentage","movement","VerticalScrollMaker","vertical_scroll_maker_classCallCheck","vertical_scroll_maker_possibleConstructorReturn","vertical_scroll_maker_getPrototypeOf","vertical_scroll_maker_inherits","vertical_scroll_maker_createClass","vertical_scroll_maker_get","ScrollComponent","scroll_component_classCallCheck","scrollBarComponentConfig","scroll_component_possibleConstructorReturn","scroll_component_getPrototypeOf","unitIndex","sanitizedUnitIndex","externalAction","MatrixComponent","matrix_component_classCallCheck","matrix_component_possibleConstructorReturn","matrix_component_getPrototypeOf","_this$params$config$s","containerForMatrix","applyScroll","_cellSpanMaker","cellSpanMaker","_matrixSpanGenerator","renderTable","applySpans","applier","renderPlaceholders","renderMatrix","applyScrollAction","scollDistance","GridComponent","grid_component_classCallCheck","grid_component_possibleConstructorReturn","grid_component_getPrototypeOf","_this$component$viewI","matrixDim","matrixName","updateWrapper","matrixWrapper","allComponents","_scrollBarManager","scrollBarManager","wheelDeltaX","wheelDeltaY","preventBrowserScroll","triggerScrollBarAction","movedView","scrollActionApplier","_this$component$0$0$b","sanitizeGrid","attachScrollListener","MessageComponent","message_component_classCallCheck","message_component_possibleConstructorReturn","message_component_getPrototypeOf","_config$dimensions","message","_params$config","headerMap","headerCell","configType","headerAlignmentMap","component_wrapper_maker_defineProperty","_headerAlignmentMap","isGridPresent","renderDetails","_renderDetails$compon","checkParamsValidation","createHeaderWrapper","headerType","layoutManager","_headerMap$headerType","headerConfig","wrapperParams","component_wrapper_maker_objectSpread","existingComponent","createScrollBarWrapper","scrollBarType","grid","_scrollBarMap$scrollB","scrollBarMap","layoutBasedMeasure","viewMeasure","rowAlign","colAlign","componentWrapperMaker","_layoutManager","createMessageWrapper","_i","_headerValues","defaultDimensions","gridComponent","getBoundBox","createLegendWrapper","legendWrapper","gridLayoutWrapper","verticalScrollBar","horizontalScrollBar","ScrollManager","scroll_manager_classCallCheck","_scrollBarComponents","_attachedComponents","scroll_manager_createClass","scrollBarComponents","attachedComponents","performScrollAction","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","titleLayouts","component_resolver_defineProperty","legendLayouts","titlePosition","subtitlePosition","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","isSubtitle","headerOptions","_createHeading","createLegend","getLegendSpace","mountSpace","componentIndexes","componentNames","3","4","5","6","renderLayout","gridLayout","compWrappers","componentWrappers","createScrollManager","horizontalScrollWrapper","verticalScrollWrapper","gridWrapper","hScrollBar","vScrollBar","componentWrapper","deleteElementName","removeComponent","registerComponents","attachListeners","attachListener","defaultInteractionPolicy","isMeasure","group_firebolt_toConsumableArray","getFieldsFromChannel","colDim","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","GroupFireBolt","group_firebolt_classCallCheck","group_firebolt_possibleConstructorReturn","group_firebolt_getPrototypeOf","behaviouralAction","validFields","APP_INITIAL_STATE","app","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","canvas_getPrototypeOf","canvas_defineProperty","canvas_assertThisInitialized","initedComponents","initCanvas","createGroupState","_VisualGroup$getState2","canvas_helper_slicedToArray","register","prepareLayout","triggerReflow","setLayoutInfForUnits","getRootNodeId","setLabelRotationForAxes","rotationVal","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","Smartlabel","SideEffects","standards","Behaviours","pkg","operators","utils","lookupWhat","lookupDetails","lookupTarget"],"mappings":"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AI61C,gCCESwW,gBAZK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApX,IAAI61C,gCCESwW,gBAZK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApX,IAAI61C,gCCESwW,kBAZK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACApX,IAAI61C,gCCASwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,gBAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,gBAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACApX,IAAI61C,gCCESwW,cAVK,IAAIzrD,MAAM,GAAGwW,OAC/B,qBACA,2BACA,iCACA,uCAC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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 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(\"DataModel\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataModel\"] = factory();\n\telse\n\t\troot[\"DataModel\"] = 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 = 1);\n","const DataModel = require('./export');\n\nmodule.exports = DataModel.default ? DataModel.default : DataModel;\n","/**\n * DataFormat Enum defines the format of the input data.\n * Based on the format of the data the respective adapter is loaded.\n *\n * @readonly\n * @enum {string}\n */\nconst DataFormat = {\n FLAT_JSON: 'FlatJSON',\n DSV_STR: 'DSVStr',\n DSV_ARR: 'DSVArr',\n AUTO: 'Auto'\n};\n\nexport default DataFormat;\n","/**\n * DimensionSubtype enum defines the sub types of the Dimensional Field.\n *\n * @readonly\n * @enum {string}\n */\nconst DimensionSubtype = {\n CATEGORICAL: 'categorical',\n TEMPORAL: 'temporal',\n GEO: 'geo',\n BINNED: 'binned'\n};\n\nexport default DimensionSubtype;\n","/**\n * MeasureSubtype enum defines the sub types of the Measure Field.\n *\n * @readonly\n * @enum {string}\n */\nconst MeasureSubtype = {\n CONTINUOUS: 'continuous'\n};\n\nexport default MeasureSubtype;\n","/**\n * FieldType enum defines the high level field based on which visuals are controlled.\n * Measure in a high level is numeric field and Dimension in a high level is string field.\n *\n * @readonly\n * @enum {string}\n */\nconst FieldType = {\n MEASURE: 'measure',\n DIMENSION: 'dimension'\n};\n\nexport default FieldType;\n","/**\n * Filtering mode enum defines the filering modes of DataModel.\n *\n * @readonly\n * @enum {string}\n */\nconst FilteringMode = {\n NORMAL: 'normal',\n INVERSE: 'inverse',\n ALL: 'all'\n};\n\nexport default FilteringMode;\n","/**\n * Group by function names\n *\n * @readonly\n * @enum {string}\n */\nconst GROUP_BY_FUNCTIONS = {\n SUM: 'sum',\n AVG: 'avg',\n MIN: 'min',\n MAX: 'max',\n FIRST: 'first',\n LAST: 'last',\n COUNT: 'count',\n STD: 'std'\n};\n\nexport default GROUP_BY_FUNCTIONS;\n","/**\n * Creates a JS native date object from input\n *\n * @param {string | number | Date} date Input using which date object to be created\n * @return {Date} : JS native date object\n */\nfunction convertToNativeDate (date) {\n if (date instanceof Date) {\n return date;\n }\n\n return new Date(date);\n}\n/**\n * Apply padding before a number if its less than 1o. This is used when constant digit's number to be returned\n * between 0 - 99\n *\n * @param {number} n Input to be padded\n * @return {string} Padded number\n */\nfunction pad (n) {\n return (n < 10) ? (`0${n}`) : n;\n}\n/*\n * DateFormatter utility to convert any date format to any other date format\n * DateFormatter parse a date time stamp specified by a user abiding by rules which are defined\n * by user in terms of token. It creates JS native date object from the user specified format.\n * That native date can also be displayed\n * in any specified format.\n * This utility class only takes care of format conversion only\n */\n\n/*\n * Escapes all the special character that are used in regular expression.\n * Like\n * RegExp.escape('sgfd-$') // Output: sgfd\\-\\$\n *\n * @param text {String} : text which is to be escaped\n */\nRegExp.escape = function (text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n};\n\n/**\n * DateTimeFormatter class to convert any user format of date time stamp to any other format\n * of date time stamp.\n *\n * @param {string} format Format of the date given. For the above date,\n * 'year: %Y, month: %b, day: %d'.\n * @class\n */\n/* istanbul ignore next */ function DateTimeFormatter (format) {\n this.format = format;\n this.dtParams = undefined;\n this.nativeDate = undefined;\n}\n\n// The identifier of the tokens\nDateTimeFormatter.TOKEN_PREFIX = '%';\n\n// JS native Date constructor takes the date params (year, month, etc) in a certail sequence.\n// This defines the sequence of the date parameters in the constructor.\nDateTimeFormatter.DATETIME_PARAM_SEQUENCE = {\n YEAR: 0,\n MONTH: 1,\n DAY: 2,\n HOUR: 3,\n MINUTE: 4,\n SECOND: 5,\n MILLISECOND: 6\n};\n\n/*\n * This is a default number parsing utility. It tries to parse a number in integer, if parsing is unsuccessful, it\n * gives back a default value.\n *\n * @param: defVal {Number} : Default no if the parsing to integer is not successful\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be parsed.\n */\nDateTimeFormatter.defaultNumberParser = function (defVal) {\n return function (val) {\n let parsedVal;\n if (isFinite(parsedVal = parseInt(val, 10))) {\n return parsedVal;\n }\n\n return defVal;\n };\n};\n\n/*\n * This is a default number range utility. It tries to find an element in the range. If not found it returns a\n * default no as an index.\n *\n * @param: range {Array} : The list which is to be serached\n * @param: defVal {Number} : Default no if the serach and find does not return anything\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be found\n */\nDateTimeFormatter.defaultRangeParser = function (range, defVal) {\n return (val) => {\n let i;\n let l;\n\n if (!val) { return defVal; }\n\n const nVal = val.toLowerCase();\n\n for (i = 0, l = range.length; i < l; i++) {\n if (range[i].toLowerCase() === nVal) {\n return i;\n }\n }\n\n if (i === undefined) {\n return defVal;\n }\n return null;\n };\n};\n\n/*\n * Defines the tokens which are supporter by the dateformatter. Using this definitation a value gets extracted from\n * the user specifed date string. This also formats the value for display purpose from native JS date.\n * The definition of each token contains the following named properties\n * {\n * %token_name% : {\n * name: name of the token, this is used in reverse lookup,\n * extract: a function that returns the regular expression to extract that piece of information. All the\n * regex should be gouped by using ()\n * parser: a function which receives value extracted by the above regex and parse it to get the date params\n * formatter: a formatter function that takes milliseconds or JS Date object and format the param\n * represented by the token only.\n * }\n * }\n *\n * @return {Object} : Definition of the all the supported tokens.\n */\nDateTimeFormatter.getTokenDefinitions = function () {\n const daysDef = {\n short: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n long: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ]\n };\n const monthsDef = {\n short: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n };\n\n const definitions = {\n H: {\n // 24 hours format\n name: 'H',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n\n return d.getHours().toString();\n }\n },\n l: {\n // 12 hours format\n name: 'l',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const hours = d.getHours() % 12;\n\n return (hours === 0 ? 12 : hours).toString();\n }\n },\n p: {\n // AM or PM\n name: 'p',\n index: 3,\n extract () { return '(AM|PM)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'AM' : 'PM');\n }\n },\n P: {\n // am or pm\n name: 'P',\n index: 3,\n extract () { return '(am|pm)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'am' : 'pm');\n }\n },\n M: {\n // Two digit minutes 00 - 59\n name: 'M',\n index: 4,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const mins = d.getMinutes();\n\n return pad(mins);\n }\n },\n S: {\n // Two digit seconds 00 - 59\n name: 'S',\n index: 5,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const seconds = d.getSeconds();\n\n return pad(seconds);\n }\n },\n K: {\n // Milliseconds\n name: 'K',\n index: 6,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const ms = d.getMilliseconds();\n\n return ms.toString();\n }\n },\n a: {\n // Short name of day, like Mon\n name: 'a',\n index: 2,\n extract () { return `(${daysDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.short[day]).toString();\n }\n },\n A: {\n // Long name of day, like Monday\n name: 'A',\n index: 2,\n extract () { return `(${daysDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.long[day]).toString();\n }\n },\n e: {\n // 8 of March, 11 of November\n name: 'e',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return day.toString();\n }\n },\n d: {\n // 08 of March, 11 of November\n name: 'd',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return pad(day);\n }\n },\n b: {\n // Short month, like Jan\n name: 'b',\n index: 1,\n extract () { return `(${monthsDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.short[month]).toString();\n }\n },\n B: {\n // Long month, like January\n name: 'B',\n index: 1,\n extract () { return `(${monthsDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.long[month]).toString();\n }\n },\n m: {\n // Two digit month of year like 01 for January\n name: 'm',\n index: 1,\n extract () { return '(\\\\d+)'; },\n parser (val) { return DateTimeFormatter.defaultNumberParser()(val) - 1; },\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return pad(month + 1);\n }\n },\n y: {\n // Short year like 90 for 1990\n name: 'y',\n index: 0,\n extract () { return '(\\\\d{2})'; },\n parser (val) {\n let result;\n if (val) {\n const l = val.length;\n val = val.substring(l - 2, l);\n }\n let parsedVal = DateTimeFormatter.defaultNumberParser()(val);\n let presentDate = new Date();\n let presentYear = Math.trunc((presentDate.getFullYear()) / 100);\n\n result = `${presentYear}${parsedVal}`;\n\n if (convertToNativeDate(result).getFullYear() > presentDate.getFullYear()) {\n result = `${presentYear - 1}${parsedVal}`;\n }\n return convertToNativeDate(result).getFullYear();\n },\n formatter (val) {\n const d = convertToNativeDate(val);\n let year = d.getFullYear().toString();\n let l;\n\n if (year) {\n l = year.length;\n year = year.substring(l - 2, l);\n }\n\n return year;\n }\n },\n Y: {\n // Long year like 1990\n name: 'Y',\n index: 0,\n extract () { return '(\\\\d{4})'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const year = d.getFullYear().toString();\n\n return year;\n }\n }\n };\n\n return definitions;\n};\n\n/*\n * The tokens which works internally is not user friendly in terms of memorizing the names. This gives a formal\n * definition to the informal notations.\n *\n * @return {Object} : Formal definition of the tokens\n */\nDateTimeFormatter.getTokenFormalNames = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n\n return {\n HOUR: definitions.H,\n HOUR_12: definitions.l,\n AMPM_UPPERCASE: definitions.p,\n AMPM_LOWERCASE: definitions.P,\n MINUTE: definitions.M,\n SECOND: definitions.S,\n SHORT_DAY: definitions.a,\n LONG_DAY: definitions.A,\n DAY_OF_MONTH: definitions.e,\n DAY_OF_MONTH_CONSTANT_WIDTH: definitions.d,\n SHORT_MONTH: definitions.b,\n LONG_MONTH: definitions.B,\n MONTH_OF_YEAR: definitions.m,\n SHORT_YEAR: definitions.y,\n LONG_YEAR: definitions.Y\n };\n};\n\n/*\n * This defines the rules and declares dependencies that resolves a date parameter (year, month etc) from\n * the date time parameter array.\n *\n * @return {Object} : An object that contains dependencies and a resolver function. The dependencies values are fed\n * to the resolver function in that particular sequence only.\n */\nDateTimeFormatter.tokenResolver = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const defaultResolver = (...args) => { // eslint-disable-line require-jsdoc\n let i = 0;\n let arg;\n let targetParam;\n const l = args.length;\n\n for (; i < l; i++) {\n arg = args[i];\n if (args[i]) {\n targetParam = arg;\n }\n }\n\n if (!targetParam) { return null; }\n\n return targetParam[0].parser(targetParam[1]);\n };\n\n return {\n YEAR: [definitions.y, definitions.Y,\n defaultResolver\n ],\n MONTH: [definitions.b, definitions.B, definitions.m,\n defaultResolver\n ],\n DAY: [definitions.a, definitions.A, definitions.e, definitions.d,\n defaultResolver\n ],\n HOUR: [definitions.H, definitions.l, definitions.p, definitions.P,\n function (hourFormat24, hourFormat12, ampmLower, ampmUpper) {\n let targetParam;\n let amOrpm;\n let isPM;\n let val;\n\n if (hourFormat12 && (amOrpm = (ampmLower || ampmUpper))) {\n if (amOrpm[0].parser(amOrpm[1]) === 'pm') {\n isPM = true;\n }\n\n targetParam = hourFormat12;\n } else if (hourFormat12) {\n targetParam = hourFormat12;\n } else {\n targetParam = hourFormat24;\n }\n\n if (!targetParam) { return null; }\n\n val = targetParam[0].parser(targetParam[1]);\n if (isPM) {\n val += 12;\n }\n return val;\n }\n ],\n MINUTE: [definitions.M,\n defaultResolver\n ],\n SECOND: [definitions.S,\n defaultResolver\n ]\n };\n};\n\n/*\n * Finds token from the format rule specified by a user.\n * @param format {String} : The format of the input date specified by the user\n * @return {Array} : An array of objects which contains the available token and their occurence index in the format\n */\nDateTimeFormatter.findTokens = function (format) {\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenLiterals = Object.keys(definitions);\n const occurrence = [];\n let i;\n let forwardChar;\n\n while ((i = format.indexOf(tokenPrefix, i + 1)) >= 0) {\n forwardChar = format[i + 1];\n if (tokenLiterals.indexOf(forwardChar) === -1) { continue; }\n\n occurrence.push({\n index: i,\n token: forwardChar\n });\n }\n\n return occurrence;\n};\n\n/*\n * Format any JS date to a specified date given by user.\n *\n * @param date {Number | Date} : The date object which is to be formatted\n * @param format {String} : The format using which the date will be formatted for display\n */\nDateTimeFormatter.formatAs = function (date, format) {\n const nDate = convertToNativeDate(date);\n const occurrence = DateTimeFormatter.findTokens(format);\n const definitions = DateTimeFormatter.getTokenDefinitions();\n let formattedStr = String(format);\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n let token;\n let formattedVal;\n let i;\n let l;\n\n for (i = 0, l = occurrence.length; i < l; i++) {\n token = occurrence[i].token;\n formattedVal = definitions[token].formatter(nDate);\n formattedStr = formattedStr.replace(new RegExp(tokenPrefix + token, 'g'), formattedVal);\n }\n\n return formattedStr;\n};\n\n/*\n * Parses the user specified date string to extract the date time params.\n *\n * @return {Array} : Value of date time params in an array [year, month, day, hour, minutes, seconds, milli]\n */\nDateTimeFormatter.prototype.parse = function (dateTimeStamp, options) {\n const tokenResolver = DateTimeFormatter.tokenResolver();\n const dtParams = this.extractTokenValue(dateTimeStamp);\n const dtParamSeq = DateTimeFormatter.DATETIME_PARAM_SEQUENCE;\n const noBreak = options && options.noBreak;\n const dtParamArr = [];\n const args = [];\n let resolverKey;\n let resolverParams;\n let resolverFn;\n let val;\n let i;\n let param;\n let resolvedVal;\n let l;\n let result = [];\n\n for (resolverKey in tokenResolver) {\n if (!{}.hasOwnProperty.call(tokenResolver, resolverKey)) { continue; }\n\n args.length = 0;\n resolverParams = tokenResolver[resolverKey];\n resolverFn = resolverParams.splice(resolverParams.length - 1, 1)[0];\n\n for (i = 0, l = resolverParams.length; i < l; i++) {\n param = resolverParams[i];\n val = dtParams[param.name];\n\n if (val === undefined) {\n args.push(null);\n } else {\n args.push([param, val]);\n }\n }\n\n resolvedVal = resolverFn.apply(this, args);\n\n if ((resolvedVal === undefined || resolvedVal === null) && !noBreak) {\n break;\n }\n\n dtParamArr[dtParamSeq[resolverKey]] = resolvedVal;\n }\n\n if (dtParamArr.length && this.checkIfOnlyYear(dtParamArr.length))\n {\n result.unshift(dtParamArr[0], 0, 1); }\n else {\n result.unshift(...dtParamArr);\n }\n\n return result;\n};\n\n/*\n * Extract the value of the token from user specified date time string.\n *\n * @return {Object} : An key value pair which contains the tokens as key and value as pair\n */\nDateTimeFormatter.prototype.extractTokenValue = function (dateTimeStamp) {\n const format = this.format;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const occurrence = DateTimeFormatter.findTokens(format);\n const tokenObj = {};\n\n let lastOccurrenceIndex;\n let occObj;\n let occIndex;\n let targetText;\n let regexFormat;\n\n let l;\n let i;\n\n regexFormat = String(format);\n\n const tokenArr = occurrence.map(obj => obj.token);\n const occurrenceLength = occurrence.length;\n for (i = occurrenceLength - 1; i >= 0; i--) {\n occIndex = occurrence[i].index;\n\n if (occIndex + 1 === regexFormat.length - 1) {\n lastOccurrenceIndex = occIndex;\n continue;\n }\n\n if (lastOccurrenceIndex === undefined) {\n lastOccurrenceIndex = regexFormat.length;\n }\n\n targetText = regexFormat.substring(occIndex + 2, lastOccurrenceIndex);\n regexFormat = regexFormat.substring(0, occIndex + 2) +\n RegExp.escape(targetText) +\n regexFormat.substring(lastOccurrenceIndex, regexFormat.length);\n\n lastOccurrenceIndex = occIndex;\n }\n\n for (i = 0; i < occurrenceLength; i++) {\n occObj = occurrence[i];\n regexFormat = regexFormat.replace(tokenPrefix + occObj.token, definitions[occObj.token].extract());\n }\n\n const extractValues = dateTimeStamp.match(new RegExp(regexFormat)) || [];\n extractValues.shift();\n\n for (i = 0, l = tokenArr.length; i < l; i++) {\n tokenObj[tokenArr[i]] = extractValues[i];\n }\n return tokenObj;\n};\n\n/*\n * Give back the JS native date formed from user specified date string\n *\n * @return {Date} : Native JS Date\n */\nDateTimeFormatter.prototype.getNativeDate = function (dateTimeStamp) {\n let date = null;\n if (Number.isFinite(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n } else if (!this.format && Date.parse(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n }\n else {\n const dtParams = this.dtParams = this.parse(dateTimeStamp);\n if (dtParams.length) {\n this.nativeDate = new Date(...dtParams);\n date = this.nativeDate;\n }\n }\n return date;\n};\n\nDateTimeFormatter.prototype.checkIfOnlyYear = function(len) {\n return len === 1 && this.format.match(/y|Y/g).length;\n};\n\n/*\n * Represents JS native date to a user specified format.\n *\n * @param format {String} : The format according to which the date is to be represented\n * @return {String} : The formatted date string\n */\nDateTimeFormatter.prototype.formatAs = function (format, dateTimeStamp) {\n let nativeDate;\n\n if (dateTimeStamp) {\n nativeDate = this.nativeDate = this.getNativeDate(dateTimeStamp);\n } else if (!(nativeDate = this.nativeDate)) {\n nativeDate = this.getNativeDate(dateTimeStamp);\n }\n\n return DateTimeFormatter.formatAs(nativeDate, format);\n};\n\nexport { DateTimeFormatter as default };\n","/**\n * The utility function to calculate major column.\n *\n * @param {Object} store - The store object.\n * @return {Function} Returns the push function.\n */\nexport default (store) => {\n let i = 0;\n return (...fields) => {\n fields.forEach((val, fieldIndex) => {\n if (!(store[fieldIndex] instanceof Array)) {\n store[fieldIndex] = Array.from({ length: i });\n }\n store[fieldIndex].push(val);\n });\n i++;\n };\n};\n","/* eslint-disable */\nconst OBJECTSTRING = 'object';\nconst objectToStrFn = Object.prototype.toString;\nconst objectToStr = '[object Object]';\nconst arrayToStr = '[object Array]';\n\nfunction checkCyclicRef(obj, parentArr) {\n let i = parentArr.length;\n let bIndex = -1;\n\n while (i) {\n if (obj === parentArr[i]) {\n bIndex = i;\n return bIndex;\n }\n i -= 1;\n }\n\n return bIndex;\n}\n\nfunction merge(obj1, obj2, skipUndef, tgtArr, srcArr) {\n var item,\n srcVal,\n tgtVal,\n str,\n cRef;\n // check whether obj2 is an array\n // if array then iterate through it's index\n // **** MOOTOOLS precution\n\n if (!srcArr) {\n tgtArr = [obj1];\n srcArr = [obj2];\n }\n else {\n tgtArr.push(obj1);\n srcArr.push(obj2);\n }\n\n if (obj2 instanceof Array) {\n for (item = 0; item < obj2.length; item += 1) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (typeof tgtVal !== OBJECTSTRING) {\n if (!(skipUndef && tgtVal === undefined)) {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = tgtVal instanceof Array ? [] : {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n }\n }\n else {\n for (item in obj2) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (tgtVal !== null && typeof tgtVal === OBJECTSTRING) {\n // Fix for issue BUG: FWXT-602\n // IE < 9 Object.prototype.toString.call(null) gives\n // '[object Object]' instead of '[object Null]'\n // that's why null value becomes Object in IE < 9\n str = objectToStrFn.call(tgtVal);\n if (str === objectToStr) {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else if (str === arrayToStr) {\n if (srcVal === null || !(srcVal instanceof Array)) {\n srcVal = obj1[item] = [];\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (skipUndef && tgtVal === undefined) {\n continue;\n }\n obj1[item] = tgtVal;\n }\n }\n }\n return obj1;\n}\n\n\nfunction extend2 (obj1, obj2, skipUndef) {\n //if none of the arguments are object then return back\n if (typeof obj1 !== OBJECTSTRING && typeof obj2 !== OBJECTSTRING) {\n return null;\n }\n\n if (typeof obj2 !== OBJECTSTRING || obj2 === null) {\n return obj1;\n }\n\n if (typeof obj1 !== OBJECTSTRING) {\n obj1 = obj2 instanceof Array ? [] : {};\n }\n merge(obj1, obj2, skipUndef);\n return obj1;\n}\n\nexport { extend2 as default };\n","import { DataFormat } from '../enums';\n\n/**\n * Checks whether the value is an array.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an array otherwise returns false.\n */\nexport function isArray (val) {\n return Array.isArray(val);\n}\n\n/**\n * Checks whether the value is an object.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an object otherwise returns false.\n */\nexport function isObject (val) {\n return val === Object(val);\n}\n\n/**\n * Checks whether the value is a string value.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is a string value otherwise returns false.\n */\nexport function isString (val) {\n return typeof val === 'string';\n}\n\n/**\n * Checks whether the value is callable.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is callable otherwise returns false.\n */\nexport function isCallable (val) {\n return typeof val === 'function';\n}\n\n/**\n * Returns the unique values from the input array.\n *\n * @param {Array} data - The input array.\n * @return {Array} Returns a new array of unique values.\n */\nexport function uniqueValues (data) {\n return [...new Set(data)];\n}\n\nexport const getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Checks Whether two arrays have same content.\n *\n * @param {Array} arr1 - The first array.\n * @param {Array} arr2 - The 2nd array.\n * @return {boolean} Returns whether two array have same content.\n */\nexport function isArrEqual(arr1, arr2) {\n if (!isArray(arr1) || !isArray(arr2)) {\n return arr1 === arr2;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * It is the default number format function for the measure field type.\n *\n * @param {any} val - The input value.\n * @return {number} Returns a number value.\n */\nexport function formatNumber(val) {\n return val;\n}\n\n/**\n * Returns the detected data format.\n *\n * @param {any} data - The input data to be tested.\n * @return {string} Returns the data format name.\n */\nexport const detectDataFormat = (data) => {\n if (isString(data)) {\n return DataFormat.DSV_STR;\n } else if (isArray(data) && isArray(data[0])) {\n return DataFormat.DSV_ARR;\n } else if (isArray(data) && (data.length === 0 || isObject(data[0]))) {\n return DataFormat.FLAT_JSON;\n }\n return null;\n};\n","import { FieldType } from './enums';\nimport { getUniqueId } from './utils';\n\nconst fieldStore = {\n data: {},\n\n createNamespace (fieldArr, name) {\n const dataId = name || getUniqueId();\n\n this.data[dataId] = {\n name: dataId,\n fields: fieldArr,\n\n fieldsObj () {\n let fieldsObj = this._cachedFieldsObj;\n\n if (!fieldsObj) {\n fieldsObj = this._cachedFieldsObj = {};\n this.fields.forEach((field) => {\n fieldsObj[field.name()] = field;\n });\n }\n return fieldsObj;\n },\n getMeasure () {\n let measureFields = this._cachedMeasure;\n\n if (!measureFields) {\n measureFields = this._cachedMeasure = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.MEASURE) {\n measureFields[field.name()] = field;\n }\n });\n }\n return measureFields;\n },\n getDimension () {\n let dimensionFields = this._cachedDimension;\n\n if (!this._cachedDimension) {\n dimensionFields = this._cachedDimension = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.DIMENSION) {\n dimensionFields[field.name()] = field;\n }\n });\n }\n return dimensionFields;\n },\n };\n return this.data[dataId];\n },\n};\n\nexport default fieldStore;\n","import { getNumberFormattedVal } from './helper';\n\n/**\n * The wrapper class on top of the primitive value of a field.\n *\n * @todo Need to have support for StringValue, NumberValue, DateTimeValue\n * and GeoValue. These types should expose predicate API mostly.\n */\nclass Value {\n\n /**\n * Creates new Value instance.\n *\n * @param {*} val - the primitive value from the field cell.\n * @param {string | Field} field - The field from which the value belongs.\n */\n constructor (value, rawValue, field) {\n const formattedValue = getNumberFormattedVal(field, value);\n\n Object.defineProperties(this, {\n _value: {\n enumerable: false,\n configurable: false,\n writable: false,\n value\n },\n _formattedValue: {\n enumerable: false,\n configurable: false,\n writable: false,\n value: formattedValue\n },\n _internalValue: {\n enumerable: false,\n configurable: false,\n writable: false,\n value: rawValue\n }\n });\n\n this.field = field;\n }\n\n /**\n * Returns the field value.\n *\n * @return {*} Returns the current value.\n */\n get value () {\n return this._value;\n }\n\n /**\n * Returns the parsed value of field\n */\n get formattedValue () {\n return this._formattedValue;\n }\n\n /**\n * Returns the internal value of field\n */\n get internalValue () {\n return this._internalValue;\n }\n\n /**\n * Converts to human readable string.\n *\n * @override\n * @return {string} Returns a human readable string of the field value.\n *\n */\n toString () {\n return String(this.value);\n }\n\n /**\n * Returns the value of the field.\n *\n * @override\n * @return {*} Returns the field value.\n */\n valueOf () {\n return this.value;\n }\n}\n\nexport default Value;\n","/**\n * Iterates through the diffSet array and call the callback with the current\n * index.\n *\n * @param {string} rowDiffset - The row diffset string e.g. '0-4,6,10-13'.\n * @param {Function} callback - The callback function to be called with every index.\n */\nexport function rowDiffsetIterator (rowDiffset, callback) {\n if (rowDiffset.length > 0) {\n const rowDiffArr = rowDiffset.split(',');\n rowDiffArr.forEach((diffStr) => {\n const diffStsArr = diffStr.split('-');\n const start = +(diffStsArr[0]);\n const end = +(diffStsArr[1] || diffStsArr[0]);\n if (end >= start) {\n for (let i = start; i <= end; i += 1) {\n callback(i);\n }\n }\n });\n }\n}\n","/**\n * A parser to parser null, undefined, invalid and NIL values.\n *\n * @public\n * @class\n */\nclass InvalidAwareTypes {\n /**\n * Static method which gets/sets the invalid value registry.\n *\n * @public\n * @param {Object} config - The custom configuration supplied by user.\n * @return {Object} Returns the invalid values registry.\n */\n static invalidAwareVals (config) {\n if (!config) {\n return InvalidAwareTypes._invalidAwareValsMap;\n }\n return Object.assign(InvalidAwareTypes._invalidAwareValsMap, config);\n }\n\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} value - The value of the invalid data type.\n */\n constructor (value) {\n this._value = value;\n }\n\n /**\n * Returns the current value of the instance.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n value () {\n return this._value;\n }\n\n /**\n * Returns the current value of the instance in string format.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n toString () {\n return String(this._value);\n }\n\n static isInvalid(val) {\n return (val instanceof InvalidAwareTypes) || !!InvalidAwareTypes.invalidAwareVals()[val];\n }\n\n static getInvalidType(val) {\n return val instanceof InvalidAwareTypes ? val : InvalidAwareTypes.invalidAwareVals()[val];\n }\n}\n\n/**\n * Enums for Invalid types.\n */\nInvalidAwareTypes.NULL = new InvalidAwareTypes('null');\nInvalidAwareTypes.NA = new InvalidAwareTypes('na');\nInvalidAwareTypes.NIL = new InvalidAwareTypes('nil');\n\n/**\n * Default Registry for mapping the invalid values.\n *\n * @private\n */\nInvalidAwareTypes._invalidAwareValsMap = {\n invalid: InvalidAwareTypes.NA,\n nil: InvalidAwareTypes.NIL,\n null: InvalidAwareTypes.NULL,\n undefined: InvalidAwareTypes.NA\n};\n\nexport default InvalidAwareTypes;\n","export { DataFormat, FilteringMode } from '../enums';\n/**\n * The event name for data propagation.\n */\nexport const PROPAGATION = 'propagation';\n\n/**\n * The name of the unique row id column in DataModel.\n */\nexport const ROW_ID = '__id__';\n\n/**\n * The enums for operation names performed on DataModel.\n */\nexport const DM_DERIVATIVES = {\n SELECT: 'select',\n PROJECT: 'project',\n GROUPBY: 'group',\n COMPOSE: 'compose',\n CAL_VAR: 'calculatedVariable',\n BIN: 'bin',\n SORT: 'sort'\n};\n\nexport const JOINS = {\n CROSS: 'cross',\n LEFTOUTER: 'leftOuter',\n RIGHTOUTER: 'rightOuter',\n NATURAL: 'natural',\n FULLOUTER: 'fullOuter'\n};\n\nexport const LOGICAL_OPERATORS = {\n AND: 'and',\n OR: 'or'\n};\n","/**\n * The helper function that returns an array of common schema\n * from two fieldStore instances.\n *\n * @param {FieldStore} fs1 - The first FieldStore instance.\n * @param {FieldStore} fs2 - The second FieldStore instance.\n * @return {Array} An array containing the common schema.\n */\nexport function getCommonSchema (fs1, fs2) {\n const retArr = [];\n const fs1Arr = [];\n fs1.fields.forEach((field) => {\n fs1Arr.push(field.schema().name);\n });\n fs2.fields.forEach((field) => {\n if (fs1Arr.indexOf(field.schema().name) !== -1) {\n retArr.push(field.schema().name);\n }\n });\n return retArr;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { getCommonSchema } from './get-common-schema';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { JOINS } from '../constants';\nimport { prepareJoinData } from '../helper';\n/**\n * Default filter function for crossProduct.\n *\n * @return {boolean} Always returns true.\n */\nfunction defaultFilterFn() { return true; }\n\n/**\n * Implementation of cross product operation between two DataModel instances.\n * It internally creates the data and schema for the new DataModel.\n *\n * @param {DataModel} dataModel1 - The left DataModel instance.\n * @param {DataModel} dataModel2 - The right DataModel instance.\n * @param {Function} filterFn - The filter function which is used to filter the tuples.\n * @param {boolean} [replaceCommonSchema=false] - The flag if the common name schema should be there.\n * @return {DataModel} Returns The newly created DataModel instance from the crossProduct operation.\n */\nexport function crossProduct (dm1, dm2, filterFn, replaceCommonSchema = false, jointype = JOINS.CROSS) {\n const schema = [];\n const data = [];\n const applicableFilterFn = filterFn || defaultFilterFn;\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreName = dm1FieldStore.name;\n const dm2FieldStoreName = dm2FieldStore.name;\n const name = `${dm1FieldStore.name}.${dm2FieldStore.name}`;\n const commonSchemaList = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n if (dm1FieldStoreName === dm2FieldStoreName) {\n throw new Error('DataModels must have different alias names');\n }\n // Here prepare the schema\n dm1FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1 && !replaceCommonSchema) {\n tmpSchema.name = `${dm1FieldStore.name}.${tmpSchema.name}`;\n }\n schema.push(tmpSchema);\n });\n dm2FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1) {\n if (!replaceCommonSchema) {\n tmpSchema.name = `${dm2FieldStore.name}.${tmpSchema.name}`;\n schema.push(tmpSchema);\n }\n } else {\n schema.push(tmpSchema);\n }\n });\n\n // Here prepare Data\n rowDiffsetIterator(dm1._rowDiffset, (i) => {\n let rowAdded = false;\n let rowPosition;\n rowDiffsetIterator(dm2._rowDiffset, (ii) => {\n const tuple = [];\n const userArg = {};\n userArg[dm1FieldStoreName] = {};\n userArg[dm2FieldStoreName] = {};\n dm1FieldStore.fields.forEach((field) => {\n tuple.push(field.partialField.data[i]);\n userArg[dm1FieldStoreName][field.name()] = {\n rawValue: field.partialField.data[i],\n formattedValue: field.formattedData()[i],\n };\n });\n dm2FieldStore.fields.forEach((field) => {\n if (!(commonSchemaList.indexOf(field.schema().name) !== -1 && replaceCommonSchema)) {\n tuple.push(field.partialField.data[ii]);\n }\n userArg[dm2FieldStoreName][field.name()] = {\n rawValue: field.partialField.data[ii],\n formattedValue: field.formattedData()[ii],\n };\n });\n\n let cachedStore = {};\n let cloneProvider1 = () => dm1.detachedRoot();\n let cloneProvider2 = () => dm2.detachedRoot();\n\n const dm1Fields = prepareJoinData(userArg[dm1FieldStoreName]);\n const dm2Fields = prepareJoinData(userArg[dm2FieldStoreName]);\n if (applicableFilterFn(dm1Fields, dm2Fields, cloneProvider1, cloneProvider2, cachedStore)) {\n const tupleObj = {};\n tuple.forEach((cellVal, iii) => {\n tupleObj[schema[iii].name] = cellVal;\n });\n if (rowAdded && JOINS.CROSS !== jointype) {\n data[rowPosition] = tupleObj;\n }\n else {\n data.push(tupleObj);\n rowAdded = true;\n rowPosition = i;\n }\n } else if ((jointype === JOINS.LEFTOUTER || jointype === JOINS.RIGHTOUTER) && !rowAdded) {\n const tupleObj = {};\n let len = dm1FieldStore.fields.length - 1;\n tuple.forEach((cellVal, iii) => {\n if (iii <= len) {\n tupleObj[schema[iii].name] = cellVal;\n }\n else {\n tupleObj[schema[iii].name] = null;\n }\n });\n rowAdded = true;\n rowPosition = i;\n data.push(tupleObj);\n }\n });\n });\n\n return new DataModel(data, schema, { name });\n}\n","/**\n * The default sort function.\n *\n * @param {*} a - The first value.\n * @param {*} b - The second value.\n * @return {number} Returns the comparison result e.g. 1 or 0 or -1.\n */\nfunction defSortFn (a, b) {\n const a1 = `${a}`;\n const b1 = `${b}`;\n if (a1 < b1) {\n return -1;\n }\n if (a1 > b1) {\n return 1;\n }\n return 0;\n}\n\n/**\n * The helper function for merge sort which creates the sorted array\n * from the two halves of the input array.\n *\n * @param {Array} arr - The target array which needs to be merged.\n * @param {number} lo - The starting index of the first array half.\n * @param {number} mid - The ending index of the first array half.\n * @param {number} hi - The ending index of the second array half.\n * @param {Function} sortFn - The sort function.\n */\nfunction merge (arr, lo, mid, hi, sortFn) {\n const mainArr = arr;\n const auxArr = [];\n for (let i = lo; i <= hi; i += 1) {\n auxArr[i] = mainArr[i];\n }\n let a = lo;\n let b = mid + 1;\n\n for (let i = lo; i <= hi; i += 1) {\n if (a > mid) {\n mainArr[i] = auxArr[b];\n b += 1;\n } else if (b > hi) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else if (sortFn(auxArr[a], auxArr[b]) <= 0) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else {\n mainArr[i] = auxArr[b];\n b += 1;\n }\n }\n}\n\n/**\n * The helper function for merge sort which would be called\n * recursively for sorting the array halves.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {number} lo - The starting index of the array half.\n * @param {number} hi - The ending index of the array half.\n * @param {Function} sortFn - The sort function.\n * @return {Array} Returns the target array itself.\n */\nfunction sort (arr, lo, hi, sortFn) {\n if (hi === lo) { return arr; }\n\n const mid = lo + Math.floor((hi - lo) / 2);\n sort(arr, lo, mid, sortFn);\n sort(arr, mid + 1, hi, sortFn);\n merge(arr, lo, mid, hi, sortFn);\n\n return arr;\n}\n\n/**\n * The implementation of merge sort.\n * It is used in DataModel for stable sorting as it is not sure\n * what the sorting algorithm used by browsers is stable or not.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {Function} [sortFn=defSortFn] - The sort function.\n * @return {Array} Returns the input array itself in sorted order.\n */\nexport function mergeSort (arr, sortFn = defSortFn) {\n if (arr.length > 1) {\n sort(arr, 0, arr.length - 1, sortFn);\n }\n return arr;\n}\n","import { DimensionSubtype, MeasureSubtype } from '../enums';\nimport { mergeSort } from './merge-sort';\nimport { fieldInSchema } from '../helper';\nimport { isCallable, isArray } from '../utils';\n\n/**\n * Generates the sorting functions to sort the data of a DataModel instance\n * according to the input data type.\n *\n * @param {string} dataType - The data type e.g. 'measure', 'datetime' etc.\n * @param {string} sortType - The sorting order i.e. 'asc' or 'desc'.\n * @return {Function} Returns the the sorting function.\n */\nfunction getSortFn (dataType, sortType) {\n let retFunc;\n\n switch (dataType) {\n case MeasureSubtype.CONTINUOUS:\n case DimensionSubtype.TEMPORAL:\n if (sortType === 'asc') {\n retFunc = (a, b) => a - b;\n } else {\n retFunc = (a, b) => b - a;\n }\n break;\n default:\n if (sortType === 'asc') {\n retFunc = (a, b) => {\n a = `${a}`;\n b = `${b}`;\n if (a === b) {\n return 0;\n }\n return a > b ? 1 : -1;\n };\n } else {\n retFunc = (a, b) => {\n a = `${a}`;\n b = `${b}`;\n if (a === b) {\n return 0;\n }\n return a > b ? -1 : 1;\n };\n }\n }\n\n return retFunc;\n}\n\n/**\n * Resolves the actual sorting function based on sorting string value.\n *\n * @param {Object} fDetails - The target field info.\n * @param {string} strSortOrder - The sort order value.\n * @return {Function} Returns the sorting function.\n */\nfunction resolveStrSortOrder (fDetails, strSortOrder) {\n const sortOrder = String(strSortOrder).toLowerCase() === 'desc' ? 'desc' : 'asc';\n return getSortFn(fDetails.type, sortOrder);\n}\n\n/**\n * Groups the data according to the specified target field.\n *\n * @param {Array} data - The input data array.\n * @param {number} fieldIndex - The target field index within schema array.\n * @return {Array} Returns an array containing the grouped data.\n */\nfunction groupData (data, fieldIndex) {\n const hashMap = new Map();\n const groupedData = [];\n\n data.forEach((datum) => {\n const fieldVal = datum[fieldIndex];\n if (hashMap.has(fieldVal)) {\n groupedData[hashMap.get(fieldVal)][1].push(datum);\n } else {\n groupedData.push([fieldVal, [datum]]);\n hashMap.set(fieldVal, groupedData.length - 1);\n }\n });\n\n return groupedData;\n}\n\n/**\n * Creates the argument value used for sorting function when sort is done\n * with another fields.\n *\n * @param {Array} groupedDatum - The grouped datum for a single dimension field value.\n * @param {Array} targetFields - An array of the sorting fields.\n * @param {Array} targetFieldDetails - An array of the sorting field details in schema.\n * @return {Object} Returns an object containing the value of sorting fields and the target field name.\n */\nfunction createSortingFnArg (groupedDatum, targetFields, targetFieldDetails) {\n const arg = {\n label: groupedDatum[0]\n };\n\n targetFields.reduce((acc, next, idx) => {\n acc[next] = groupedDatum[1].map(datum => datum[targetFieldDetails[idx].index]);\n return acc;\n }, arg);\n\n return arg;\n}\n\n/**\n * Sorts the data by applying the standard sorting mechanism.\n *\n * @param {Array} data - The input data array.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nfunction applyStandardSort (data, schema, sortingDetails) {\n let fieldName;\n let sortMeta;\n let fDetails;\n let i = sortingDetails.length - 1;\n\n for (; i >= 0; i--) {\n fieldName = sortingDetails[i][0];\n sortMeta = sortingDetails[i][1];\n fDetails = fieldInSchema(schema, fieldName);\n\n if (!fDetails) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isCallable(sortMeta)) {\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortMeta(a[fDetails.index], b[fDetails.index]));\n } else if (isArray(sortMeta)) {\n const groupedData = groupData(data, fDetails.index);\n const sortingFn = sortMeta[sortMeta.length - 1];\n const targetFields = sortMeta.slice(0, sortMeta.length - 1);\n const targetFieldDetails = targetFields.map(f => fieldInSchema(schema, f));\n\n groupedData.forEach((groupedDatum) => {\n groupedDatum.push(createSortingFnArg(groupedDatum, targetFields, targetFieldDetails));\n });\n\n mergeSort(groupedData, (a, b) => {\n const m = a[2];\n const n = b[2];\n return sortingFn(m, n);\n });\n\n // Empty the array\n data.length = 0;\n groupedData.forEach((datum) => {\n data.push(...datum[1]);\n });\n } else {\n const sortFn = resolveStrSortOrder(fDetails, sortMeta);\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortFn(a[fDetails.index], b[fDetails.index]));\n }\n }\n}\n\n/**\n * Creates a map based on grouping.\n *\n * @param {Array} depColumns - The dependency columns' info.\n * @param {Array} data - The input data.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - The sorting details for standard sorting.\n * @return {Map} Returns a map.\n */\nconst makeGroupMapAndSort = (depColumns, data, schema, sortingDetails) => {\n if (depColumns.length === 0) { return data; }\n\n const targetCol = depColumns[0];\n const map = new Map();\n\n data.reduce((acc, currRow) => {\n const fVal = currRow[targetCol.index];\n if (acc.has(fVal)) {\n acc.get(fVal).push(currRow);\n } else {\n acc.set(fVal, [currRow]);\n }\n return acc;\n }, map);\n\n for (let [key, val] of map) {\n const nMap = makeGroupMapAndSort(depColumns.slice(1), val, schema, sortingDetails);\n map.set(key, nMap);\n if (Array.isArray(nMap)) {\n applyStandardSort(nMap, schema, sortingDetails);\n }\n }\n\n return map;\n};\n\n/**\n * Sorts the data by retaining the position/order of a particular field.\n *\n * @param {Array} data - The input data array.\n * @param {Array} schema - The data schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n * @param {Array} depColumns - The dependency column list.\n * @return {Array} Returns the sorted data.\n */\nfunction applyGroupSort (data, schema, sortingDetails, depColumns) {\n sortingDetails = sortingDetails.filter((detail) => {\n if (detail[1] === null) {\n depColumns.push(detail[0]);\n return false;\n }\n return true;\n });\n if (sortingDetails.length === 0) { return data; }\n\n depColumns = depColumns.map(c => fieldInSchema(schema, c));\n\n const sortedGroupMap = makeGroupMapAndSort(depColumns, data, schema, sortingDetails);\n return data.map((row) => {\n let i = 0;\n let nextMap = sortedGroupMap;\n\n while (!Array.isArray(nextMap)) {\n nextMap = nextMap.get(row[depColumns[i++].index]);\n }\n\n return nextMap.shift();\n });\n}\n\n/**\n * Sorts the data.\n *\n * @param {Object} dataObj - An object containing the data and schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nexport function sortData (dataObj, sortingDetails) {\n let { schema, data } = dataObj;\n\n sortingDetails = sortingDetails.filter(sDetial => !!fieldInSchema(schema, sDetial[0]));\n if (sortingDetails.length === 0) { return; }\n\n let groupSortingIdx = sortingDetails.findIndex(sDetial => sDetial[1] === null);\n groupSortingIdx = groupSortingIdx !== -1 ? groupSortingIdx : sortingDetails.length;\n\n const standardSortingDetails = sortingDetails.slice(0, groupSortingIdx);\n const groupSortingDetails = sortingDetails.slice(groupSortingIdx);\n\n applyStandardSort(data, schema, standardSortingDetails);\n data = applyGroupSort(data, schema, groupSortingDetails, standardSortingDetails.map(detail => detail[0]));\n\n dataObj.uids = data.map(row => row.pop());\n dataObj.data = data;\n}\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport { sortData } from './sort';\n\n/**\n * Builds the actual data array.\n *\n * @param {Array} fieldStore - An array of field.\n * @param {string} rowDiffset - A string consisting of which rows to be included eg. '0-2,4,6';\n * @param {string} colIdentifier - A string consisting of the details of which column\n * to be included eg 'date,sales,profit';\n * @param {Object} sortingDetails - An object containing the sorting details of the DataModel instance.\n * @param {Object} options - The options required to create the type of the data.\n * @return {Object} Returns an object containing the multidimensional array and the relative schema.\n */\nexport function dataBuilder (fieldStore, rowDiffset, colIdentifier, sortingDetails, options) {\n const defOptions = {\n addUid: false,\n columnWise: false\n };\n options = Object.assign({}, defOptions, options);\n\n const retObj = {\n schema: [],\n data: [],\n uids: []\n };\n const addUid = options.addUid;\n const reqSorting = sortingDetails && sortingDetails.length > 0;\n // It stores the fields according to the colIdentifier argument\n const tmpDataArr = [];\n // Stores the fields according to the colIdentifier argument\n const colIArr = colIdentifier.split(',');\n\n colIArr.forEach((colName) => {\n for (let i = 0; i < fieldStore.length; i += 1) {\n if (fieldStore[i].name() === colName) {\n tmpDataArr.push(fieldStore[i]);\n break;\n }\n }\n });\n\n // Inserts the schema to the schema object\n tmpDataArr.forEach((field) => {\n /** @todo Need to use extend2 here otherwise user can overwrite the schema. */\n retObj.schema.push(field.schema());\n });\n\n if (addUid) {\n retObj.schema.push({\n name: 'uid',\n type: 'identifier'\n });\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n retObj.data.push([]);\n const insertInd = retObj.data.length - 1;\n let start = 0;\n tmpDataArr.forEach((field, ii) => {\n retObj.data[insertInd][ii + start] = field.partialField.data[i];\n });\n if (addUid) {\n retObj.data[insertInd][tmpDataArr.length] = i;\n }\n // Creates an array of unique identifiers for each row\n retObj.uids.push(i);\n\n // If sorting needed then there is the need to expose the index\n // mapping from the old index to its new index\n if (reqSorting) { retObj.data[insertInd].push(i); }\n });\n\n // Handles the sort functionality\n if (reqSorting) {\n sortData(retObj, sortingDetails);\n }\n\n if (options.columnWise) {\n const tmpData = Array(...Array(retObj.schema.length)).map(() => []);\n retObj.data.forEach((tuple) => {\n tuple.forEach((data, i) => {\n tmpData[i].push(data);\n });\n });\n retObj.data = tmpData;\n }\n\n return retObj;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n\n/**\n * Performs the union operation between two dm instances.\n *\n * @todo Fix the conflicts between union and difference terminology here.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function difference (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n * @param {boolean} addData - If true only tuple will be added to the data.\n */\n function prepareDataHelper(dm, fieldsObj, addData) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n if (addData) { data.push(tuple); }\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm2, dm2FieldStoreFieldObj, false);\n prepareDataHelper(dm1, dm1FieldStoreFieldObj, true);\n\n return new DataModel(data, schema, { name });\n}\n\n","import { isArray } from '../utils';\nimport InvalidAwareTypes from '../invalid-aware-types';\nimport { GROUP_BY_FUNCTIONS } from '../enums';\n\nconst { SUM, AVG, FIRST, LAST, COUNT, STD, MIN, MAX } = GROUP_BY_FUNCTIONS;\n\nfunction getFilteredValues(arr) {\n return arr.filter(item => !(item instanceof InvalidAwareTypes));\n}\n/**\n * Reducer function that returns the sum of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the sum of the array.\n */\nfunction sum (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const filteredNumber = getFilteredValues(arr);\n const totalSum = filteredNumber.length ?\n filteredNumber.reduce((acc, curr) => acc + curr, 0)\n : InvalidAwareTypes.NULL;\n return totalSum;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that returns the average of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the mean value of the array.\n */\nfunction avg (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const totalSum = sum(arr);\n const len = arr.length || 1;\n return (Number.isNaN(totalSum) || totalSum instanceof InvalidAwareTypes) ?\n InvalidAwareTypes.NULL : totalSum / len;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the min value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the minimum value of the array.\n */\nfunction min (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.min(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the max value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the maximum value of the array.\n */\nfunction max (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.max(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the first value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the first value of the array.\n */\nfunction first (arr) {\n return arr[0];\n}\n\n/**\n * Reducer function that gives the last value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the last value of the array.\n */\nfunction last (arr) {\n return arr[arr.length - 1];\n}\n\n/**\n * Reducer function that gives the count value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the length of the array.\n */\nfunction count (arr) {\n if (isArray(arr)) {\n return arr.length;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Calculates the variance of the input array.\n *\n * @param {Array.} arr - The input array.\n * @return {number} Returns the variance of the input array.\n */\nfunction variance (arr) {\n let mean = avg(arr);\n return avg(arr.map(num => (num - mean) ** 2));\n}\n\n/**\n * Calculates the square root of the variance of the input array.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the square root of the variance.\n */\nfunction std (arr) {\n return Math.sqrt(variance(arr));\n}\n\n\nconst fnList = {\n [SUM]: sum,\n [AVG]: avg,\n [MIN]: min,\n [MAX]: max,\n [FIRST]: first,\n [LAST]: last,\n [COUNT]: count,\n [STD]: std\n};\n\nconst defaultReducerName = SUM;\n\nexport {\n defaultReducerName,\n sum as defReducer,\n fnList,\n};\n","import { defReducer, fnList } from '../operator';\n\n/**\n * A page level storage which stores, registers, unregisters reducers for all the datamodel instances. There is only one\n * reducer store available in a page. All the datamodel instances receive same instance of reducer store. DataModel\n * out of the box provides handful of {@link reducer | reducers} which can be used as reducer funciton.\n *\n * @public\n * @namespace DataModel\n */\nclass ReducerStore {\n constructor () {\n this.store = new Map();\n this.store.set('defReducer', defReducer);\n\n Object.entries(fnList).forEach((key) => {\n this.store.set(key[0], key[1]);\n });\n }\n\n /**\n * Changes the `defaultReducer` globally. For all the fields which does not have `defAggFn` mentioned in schema, the\n * value of `defaultReducer` is used for aggregation.\n *\n * @public\n * @param {string} [reducer='sum'] - The name of the default reducer. It picks up the definition from store by doing\n * name lookup. If no name is found then it takes `sum` as the default reducer.\n * @return {ReducerStore} Returns instance of the singleton store in page.\n */\n defaultReducer (...params) {\n if (!params.length) {\n return this.store.get('defReducer');\n }\n\n let reducer = params[0];\n\n if (typeof reducer === 'function') {\n this.store.set('defReducer', reducer);\n } else {\n reducer = String(reducer);\n if (Object.keys(fnList).indexOf(reducer) !== -1) {\n this.store.set('defReducer', fnList[reducer]);\n } else {\n throw new Error(`Reducer ${reducer} not found in registry`);\n }\n }\n return this;\n }\n\n /**\n *\n * Registers a {@link reducer | reducer}.\n * A {@link reducer | reducer} has to be registered before it is used.\n *\n * @example\n * // find the mean squared value of a given set\n * const reducerStore = DataModel.Reducers();\n *\n * reducers.register('meanSquared', (arr) => {\n * const squaredVal = arr.map(item => item * item);\n * let sum = 0;\n * for (let i = 0, l = squaredVal.length; i < l; i++) {\n * sum += squaredVal[i++];\n * }\n *\n * return sum;\n * })\n *\n * // datamodel (dm) is already prepared with cars.json\n * const dm1 = dm.groupBy(['origin'], {\n * accleration: 'meanSquared'\n * });\n *\n * @public\n *\n * @param {string} name formal name for a reducer. If the given name already exists in store it is overridden by new\n * definition.\n * @param {Function} reducer definition of {@link reducer} function.\n *\n * @return {Function} function for unregistering the reducer.\n */\n register (name, reducer) {\n if (typeof reducer !== 'function') {\n throw new Error('Reducer should be a function');\n }\n\n name = String(name);\n this.store.set(name, reducer);\n\n return () => { this.__unregister(name); };\n }\n\n __unregister (name) {\n if (this.store.has(name)) {\n this.store.delete(name);\n }\n }\n\n resolve (name) {\n if (name instanceof Function) {\n return name;\n }\n return this.store.get(name);\n }\n}\n\nconst reducerStore = (function () {\n let store = null;\n\n function getStore () {\n if (store === null) {\n store = new ReducerStore();\n }\n return store;\n }\n return getStore();\n}());\n\nexport default reducerStore;\n","import { getCommonSchema } from './get-common-schema';\n\n/**\n * The filter function used in natural join.\n * It generates a function that will have the logic to join two\n * DataModel instances by the process of natural join.\n *\n * @param {DataModel} dm1 - The left DataModel instance.\n * @param {DataModel} dm2 - The right DataModel instance.\n * @return {Function} Returns a function that is used in cross-product operation.\n */\nexport function naturalJoinFilter (dm1, dm2) {\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n // const dm1FieldStoreName = dm1FieldStore.name;\n // const dm2FieldStoreName = dm2FieldStore.name;\n const commonSchemaArr = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n return (dm1Fields, dm2Fields) => {\n let retainTuple = true;\n commonSchemaArr.forEach((fieldName) => {\n if (dm1Fields[fieldName].internalValue ===\n dm2Fields[fieldName].internalValue && retainTuple) {\n retainTuple = true;\n } else {\n retainTuple = false;\n }\n });\n return retainTuple;\n };\n}\n","import DataModel from '../export';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n/**\n * Performs the union operation between two dm instances.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function union (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n */\n function prepareDataHelper (dm, fieldsObj) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n data.push(tuple);\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm1, dm1FieldStoreFieldObj);\n prepareDataHelper(dm2, dm2FieldStoreFieldObj);\n\n return new DataModel(data, schema, { name });\n}\n","import { crossProduct } from './cross-product';\nimport { JOINS } from '../constants';\nimport { union } from './union';\n\n\nexport function leftOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel1, dataModel2, filterFn, false, JOINS.LEFTOUTER);\n}\n\nexport function rightOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel2, dataModel1, filterFn, false, JOINS.RIGHTOUTER);\n}\n\nexport function fullOuterJoin (dataModel1, dataModel2, filterFn) {\n return union(leftOuterJoin(dataModel1, dataModel2, filterFn), rightOuterJoin(dataModel1, dataModel2, filterFn));\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\n\n/**\n * In {@link DataModel}, every tabular data consists of column, a column is stored as field.\n * Field contains all the data for a given column in an array.\n *\n * Each record consists of several fields; the fields of all records form the columns.\n * Examples of fields: name, gender, sex etc.\n *\n * In DataModel, each field can have multiple attributes which describes its data and behaviour.\n * A field can have two types of data: Measure and Dimension.\n *\n * A Dimension Field is the context on which a data is categorized and the measure is the numerical values that\n * quantify the data set.\n * In short a dimension is the lens through which you are looking at your measure data.\n *\n * Refer to {@link Schema} to get info about possible field attributes.\n *\n * @public\n * @class\n */\nexport default class Field {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n this.partialField = partialField;\n this.rowDiffset = rowDiffset;\n }\n\n /**\n * Generates the field type specific domain.\n *\n * @public\n * @abstract\n */\n domain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the the field schema.\n *\n * @public\n * @return {string} Returns the field schema.\n */\n schema () {\n return this.partialField.schema;\n }\n\n /**\n * Returns the name of the field.\n *\n * @public\n * @return {string} Returns the name of the field.\n */\n name () {\n return this.partialField.name;\n }\n\n /**\n * Returns the type of the field.\n *\n * @public\n * @return {string} Returns the type of the field.\n */\n type () {\n return this.partialField.schema.type;\n }\n\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return this.partialField.schema.subtype;\n }\n\n /**\n * Returns the description of the field.\n *\n * @public\n * @return {string} Returns the description of the field.\n */\n description () {\n return this.partialField.schema.description;\n }\n\n /**\n * Returns the display name of the field.\n *\n * @public\n * @return {string} Returns the display name of the field.\n */\n displayName () {\n return this.partialField.schema.displayName || this.partialField.schema.name;\n }\n\n /**\n * Returns the data associated with the field.\n *\n * @public\n * @return {Array} Returns the data.\n */\n data () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n data.push(this.partialField.data[i]);\n });\n return data;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @abstract\n */\n formattedData () {\n throw new Error('Not yet implemented');\n }\n}\n","import Field from '../field';\n\n/**\n * Represents dimension field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Dimension extends Field {\n /**\n * Returns the domain for the dimension field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { DimensionSubtype } from '../../enums';\nimport Dimension from '../dimension';\n/**\n * Represents categorical field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Categorical extends Dimension {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return DimensionSubtype.CATEGORICAL;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n return domain;\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport Dimension from '../dimension';\nimport { DateTimeFormatter } from '../../utils';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents temporal field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Temporal extends Dimension {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n super(partialField, rowDiffset);\n\n this._cachedMinDiff = null;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be\n // occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n\n return domain;\n }\n\n\n /**\n * Calculates the minimum consecutive difference from the associated field data.\n *\n * @public\n * @return {number} Returns the minimum consecutive diff in milliseconds.\n */\n minimumConsecutiveDifference () {\n if (this._cachedMinDiff) {\n return this._cachedMinDiff;\n }\n\n const sortedData = this.data().filter(item => !(item instanceof InvalidAwareTypes)).sort((a, b) => a - b);\n const arrLn = sortedData.length;\n let minDiff = Number.POSITIVE_INFINITY;\n let prevDatum;\n let nextDatum;\n let processedCount = 0;\n\n for (let i = 1; i < arrLn; i++) {\n prevDatum = sortedData[i - 1];\n nextDatum = sortedData[i];\n\n if (nextDatum === prevDatum) {\n continue;\n }\n\n minDiff = Math.min(minDiff, nextDatum - sortedData[i - 1]);\n processedCount++;\n }\n\n if (!processedCount) {\n minDiff = null;\n }\n this._cachedMinDiff = minDiff;\n\n return this._cachedMinDiff;\n }\n\n /**\n * Returns the format specified in the input schema while creating field.\n *\n * @public\n * @return {string} Returns the datetime format.\n */\n format () {\n return this.partialField.schema.format;\n }\n\n /**\n * Returns the formatted version of the underlying field data\n * If data is of type invalid or has missing format use the raw value\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n const data = [];\n const dataFormat = this.format();\n\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n // If value is of invalid type or format is missing\n if (InvalidAwareTypes.isInvalid(datum) || (!dataFormat && Number.isFinite(datum))) {\n // Use the invalid map value or the raw value\n const parsedDatum = InvalidAwareTypes.getInvalidType(datum) || datum;\n data.push(parsedDatum);\n } else {\n data.push(DateTimeFormatter.formatAs(datum, dataFormat));\n }\n });\n return data;\n }\n}\n\n","import Dimension from '../dimension';\n\n/**\n * Represents binned field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Binned extends Dimension {\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the last and first values of bins config array.\n */\n calculateDataDomain () {\n const binsArr = this.partialField.schema.bins;\n return [binsArr[0], binsArr[binsArr.length - 1]];\n }\n\n /**\n * Returns the bins config provided while creating the field instance.\n *\n * @public\n * @return {Array} Returns the bins array config.\n */\n bins () {\n return this.partialField.schema.bins;\n }\n}\n","import { formatNumber } from '../../utils';\nimport { defaultReducerName } from '../../operator/group-by-function';\nimport Field from '../field';\n\n/**\n * Represents measure field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Measure extends Field {\n /**\n * Returns the domain for the measure field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Returns the unit of the measure field.\n *\n * @public\n * @return {string} Returns unit of the field.\n */\n unit () {\n return this.partialField.schema.unit;\n }\n\n /**\n * Returns the aggregation function name of the measure field.\n *\n * @public\n * @return {string} Returns aggregation function name of the field.\n */\n defAggFn () {\n return this.partialField.schema.defAggFn || defaultReducerName;\n }\n\n /**\n * Returns the number format of the measure field.\n *\n * @public\n * @return {Function} Returns number format of the field.\n */\n numberFormat () {\n const { numberFormat } = this.partialField.schema;\n return numberFormat instanceof Function ? numberFormat : formatNumber;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { MeasureSubtype } from '../../enums';\nimport Measure from '../measure';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents continuous field subtype.\n *\n * @public\n * @class\n * @extends Measure\n */\nexport default class Continuous extends Measure {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return MeasureSubtype.CONTINUOUS;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the min and max values.\n */\n calculateDataDomain () {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n return;\n }\n\n if (datum < min) {\n min = datum;\n }\n if (datum > max) {\n max = datum;\n }\n });\n\n return [min, max];\n }\n}\n","/**\n * A interface to represent a parser which is responsible to parse the field.\n *\n * @public\n * @interface\n */\nexport default class FieldParser {\n /**\n * Parses a single value of a field and return the sanitized form.\n *\n * @public\n * @abstract\n */\n parse () {\n throw new Error('Not yet implemented');\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the categorical values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class CategoricalParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the stringified form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the stringified value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n result = String(val).trim();\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import { DateTimeFormatter } from '../../../utils';\nimport FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the temporal values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class TemporalParser extends FieldParser {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {Object} schema - The schema object for the corresponding field.\n */\n constructor (schema) {\n super();\n this.schema = schema;\n this._dtf = new DateTimeFormatter(this.schema.format);\n }\n\n /**\n * Parses a single value of a field and returns the millisecond value.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {number} Returns the millisecond value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let nativeDate = this._dtf.getNativeDate(val);\n result = nativeDate ? nativeDate.getTime() : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the binned values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class BinnedParser extends FieldParser {\n /**\n * Parses a single binned value of a field and returns the sanitized value.\n *\n * @public\n * @param {string} val - The value of the field.\n * @return {string} Returns the sanitized value.\n */\n parse (val) {\n const regex = /^\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*-\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*$/;\n val = String(val);\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let matched = val.match(regex);\n result = matched ? `${Number.parseFloat(matched[1])}-${Number.parseFloat(matched[2])}`\n : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the continuous values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class ContinuousParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the number form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the number value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let parsedVal = parseFloat(val, 10);\n result = Number.isNaN(parsedVal) ? InvalidAwareTypes.NA : parsedVal;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","/**\n * Stores the full data and the metadata of a field. It provides\n * a single source of data from which the future Field\n * instance can get a subset of it with a rowDiffset config.\n *\n * @class\n * @public\n */\nexport default class PartialField {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} name - The name of the field.\n * @param {Array} data - The data array.\n * @param {Object} schema - The schema object of the corresponding field.\n * @param {FieldParser} parser - The parser instance corresponding to that field.\n */\n constructor (name, data, schema, parser) {\n this.name = name;\n this.schema = schema;\n this.parser = parser;\n this.data = this._sanitize(data);\n }\n\n /**\n * Sanitizes the field data.\n *\n * @private\n * @param {Array} data - The actual input data.\n * @return {Array} Returns the sanitized data.\n */\n _sanitize (data) {\n return data.map(datum => this.parser.parse(datum));\n }\n}\n","import { FieldType, DimensionSubtype, MeasureSubtype } from './enums';\nimport {\n Categorical,\n Temporal,\n Binned,\n Continuous,\n CategoricalParser,\n TemporalParser,\n BinnedParser,\n ContinuousParser,\n PartialField\n} from './fields';\n\n/**\n * Creates a field instance according to the provided data and schema.\n *\n * @param {Array} data - The field data array.\n * @param {Object} schema - The field schema object.\n * @return {Field} Returns the newly created field instance.\n */\nfunction createUnitField(data, schema) {\n data = data || [];\n let partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.TEMPORAL:\n partialField = new PartialField(schema.name, data, schema, new TemporalParser(schema));\n return new Temporal(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.BINNED:\n partialField = new PartialField(schema.name, data, schema, new BinnedParser());\n return new Binned(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n}\n\n\n/**\n * Creates a field instance from partialField and rowDiffset.\n *\n * @param {PartialField} partialField - The corresponding partial field.\n * @param {string} rowDiffset - The data subset config.\n * @return {Field} Returns the newly created field instance.\n */\nexport function createUnitFieldFromPartial(partialField, rowDiffset) {\n const { schema } = partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n return new Continuous(partialField, rowDiffset);\n default:\n return new Continuous(partialField, rowDiffset);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n return new Categorical(partialField, rowDiffset);\n case DimensionSubtype.TEMPORAL:\n return new Temporal(partialField, rowDiffset);\n case DimensionSubtype.BINNED:\n return new Binned(partialField, rowDiffset);\n default:\n return new Categorical(partialField, rowDiffset);\n }\n default:\n return new Categorical(partialField, rowDiffset);\n }\n}\n\n/**\n * Creates the field instances with input data and schema.\n *\n * @param {Array} dataColumn - The data array for fields.\n * @param {Array} schema - The schema array for fields.\n * @param {Array} headers - The array of header names.\n * @return {Array.} Returns an array of newly created field instances.\n */\nexport function createFields(dataColumn, schema, headers) {\n const headersObj = {};\n\n if (!(headers && headers.length)) {\n headers = schema.map(item => item.name);\n }\n\n headers.forEach((header, i) => {\n headersObj[header] = i;\n });\n\n return schema.map(item => createUnitField(dataColumn[headersObj[item.name]], item));\n}\n","import { DataFormat } from './enums';\n\nexport default {\n dataFormat: DataFormat.AUTO\n};\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in DSV array to a manageable internal format.\n *\n * @param {Array.} arr - A 2D array containing of the DSV data.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv data is header or not.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * [\"a\", \"b\", \"c\"],\n * [1, 2, 3],\n * [4, 5, 6],\n * [7, 8, 9]\n * ];\n */\nfunction DSVArr (arr, schema, options) {\n if (!Array.isArray(schema)) {\n throw new Error('Schema missing or is in an unsupported format');\n }\n const defaultOption = {\n firstRowHeader: true,\n };\n const schemaFields = schema.map(unitSchema => unitSchema.name);\n options = Object.assign({}, defaultOption, options);\n\n const columns = [];\n const push = columnMajor(columns);\n\n if (options.firstRowHeader) {\n // If header present then remove the first header row.\n // Do in-place mutation to save space.\n arr.splice(0, 1)[0];\n }\n\n arr.forEach(field => push(...field));\n\n return [schemaFields, columns];\n}\n\nexport default DSVArr;\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows\n };\n}\n","import dsv from \"./dsv\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\n","import dsv from \"./dsv\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\n","import { dsvFormat as d3Dsv } from 'd3-dsv';\nimport DSVArr from './dsv-arr';\n\n/**\n * Parses and converts data formatted in DSV string to a manageable internal format.\n *\n * @todo Support to be given for https://tools.ietf.org/html/rfc4180.\n * @todo Sample implementation https://github.com/knrz/CSV.js/.\n *\n * @param {string} str - The input DSV string.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv string data is header or not.\n * @param {string} [options.fieldSeparator=\",\"] - The separator of two consecutive field.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = `\n * a,b,c\n * 1,2,3\n * 4,5,6\n * 7,8,9\n * `\n */\nfunction DSVStr (str, schema, options) {\n const defaultOption = {\n firstRowHeader: true,\n fieldSeparator: ','\n };\n options = Object.assign({}, defaultOption, options);\n\n const dsv = d3Dsv(options.fieldSeparator);\n return DSVArr(dsv.parseRows(str), schema, options);\n}\n\nexport default DSVStr;\n","import FlatJSON from './flat-json';\nimport DSVArr from './dsv-arr';\nimport DSVStr from './dsv-str';\nimport { detectDataFormat } from '../utils';\n\n/**\n * Parses the input data and detect the format automatically.\n *\n * @param {string|Array} data - The input data.\n * @param {Object} options - An optional config specific to data format.\n * @return {Array.} Returns an array of headers and column major data.\n */\nfunction Auto (data, schema, options) {\n const converters = { FlatJSON, DSVStr, DSVArr };\n const dataFormat = detectDataFormat(data);\n\n if (!dataFormat) {\n throw new Error('Couldn\\'t detect the data format');\n }\n\n return converters[dataFormat](data, schema, options);\n}\n\nexport default Auto;\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in JSON to a manageable internal format.\n *\n * @param {Array.} arr - The input data formatted in JSON.\n * @return {Array.} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * {\n * \"a\": 1,\n * \"b\": 2,\n * \"c\": 3\n * },\n * {\n * \"a\": 4,\n * \"b\": 5,\n * \"c\": 6\n * },\n * {\n * \"a\": 7,\n * \"b\": 8,\n * \"c\": 9\n * }\n * ];\n */\nfunction FlatJSON (arr, schema) {\n if (!Array.isArray(schema)) {\n throw new Error('Schema missing or is in an unsupported format');\n }\n\n const header = {};\n let i = 0;\n let insertionIndex;\n const columns = [];\n const push = columnMajor(columns);\n const schemaFieldsName = schema.map(unitSchema => unitSchema.name);\n\n arr.forEach((item) => {\n const fields = [];\n schemaFieldsName.forEach((unitSchema) => {\n if (unitSchema in header) {\n insertionIndex = header[unitSchema];\n } else {\n header[unitSchema] = i++;\n insertionIndex = i - 1;\n }\n fields[insertionIndex] = item[unitSchema];\n });\n push(...fields);\n });\n\n return [Object.keys(header), columns];\n}\n\nexport default FlatJSON;\n","import { FieldType, FilteringMode, DimensionSubtype, MeasureSubtype, DataFormat } from './enums';\nimport fieldStore from './field-store';\nimport Value from './value';\nimport {\n rowDiffsetIterator\n} from './operator';\nimport { DM_DERIVATIVES, LOGICAL_OPERATORS } from './constants';\nimport { createFields, createUnitFieldFromPartial } from './field-creator';\nimport defaultConfig from './default-config';\nimport * as converter from './converter';\nimport { extend2, detectDataFormat } from './utils';\n\n/**\n * Prepares the selection data.\n */\nfunction prepareSelectionData (fields, formattedData, rawData, i) {\n const resp = {};\n\n for (const [key, field] of fields.entries()) {\n resp[field.name()] = new Value(formattedData[key][i], rawData[key][i], field);\n }\n return resp;\n}\n\nexport function prepareJoinData (fields) {\n const resp = {};\n\n for (const key in fields) {\n resp[key] = new Value(fields[key].formattedValue, fields[key].rawValue, key);\n }\n return resp;\n}\n\nexport const updateFields = ([rowDiffset, colIdentifier], partialFieldspace, fieldStoreName) => {\n let collID = colIdentifier.length ? colIdentifier.split(',') : [];\n let partialFieldMap = partialFieldspace.fieldsObj();\n let newFields = collID.map(coll => createUnitFieldFromPartial(partialFieldMap[coll].partialField, rowDiffset));\n return fieldStore.createNamespace(newFields, fieldStoreName);\n};\n\nexport const persistCurrentDerivation = (model, operation, config = {}, criteriaFn) => {\n if (operation === DM_DERIVATIVES.COMPOSE) {\n model._derivation.length = 0;\n model._derivation.push(...criteriaFn);\n } else {\n model._derivation.push({\n op: operation,\n meta: config,\n criteria: criteriaFn\n });\n }\n};\nexport const persistAncestorDerivation = (sourceDm, newDm) => {\n newDm._ancestorDerivation.push(...sourceDm._ancestorDerivation, ...sourceDm._derivation);\n};\n\nexport const persistDerivations = (sourceDm, model, operation, config = {}, criteriaFn) => {\n persistCurrentDerivation(model, operation, config, criteriaFn);\n persistAncestorDerivation(sourceDm, model);\n};\n\nconst selectModeMap = {\n [FilteringMode.NORMAL]: {\n diffIndex: ['rowDiffset'],\n calcDiff: [true, false]\n },\n [FilteringMode.INVERSE]: {\n diffIndex: ['rejectRowDiffset'],\n calcDiff: [false, true]\n },\n [FilteringMode.ALL]: {\n diffIndex: ['rowDiffset', 'rejectRowDiffset'],\n calcDiff: [true, true]\n }\n};\n\nconst generateRowDiffset = (rowDiffset, i, lastInsertedValue) => {\n if (lastInsertedValue !== -1 && i === (lastInsertedValue + 1)) {\n const li = rowDiffset.length - 1;\n\n rowDiffset[li] = `${rowDiffset[li].split('-')[0]}-${i}`;\n } else {\n rowDiffset.push(`${i}`);\n }\n};\n\nexport const selectRowDiffsetIterator = (rowDiffset, checker, mode) => {\n let lastInsertedValueSel = -1;\n let lastInsertedValueRej = -1;\n const newRowDiffSet = [];\n const rejRowDiffSet = [];\n\n const [shouldSelect, shouldReject] = selectModeMap[mode].calcDiff;\n\n rowDiffsetIterator(rowDiffset, (i) => {\n const checkerResult = checker(i);\n checkerResult && shouldSelect && generateRowDiffset(newRowDiffSet, i, lastInsertedValueSel);\n !checkerResult && shouldReject && generateRowDiffset(rejRowDiffSet, i, lastInsertedValueRej);\n });\n return {\n rowDiffset: newRowDiffSet.join(','),\n rejectRowDiffset: rejRowDiffSet.join(',')\n };\n};\n\n\nexport const rowSplitDiffsetIterator = (rowDiffset, checker, mode, dimensionArr, fieldStoreObj) => {\n let lastInsertedValue = {};\n const splitRowDiffset = {};\n const dimensionMap = {};\n\n rowDiffsetIterator(rowDiffset, (i) => {\n if (checker(i)) {\n let hash = '';\n\n let dimensionSet = { keys: {} };\n\n dimensionArr.forEach((_) => {\n const data = fieldStoreObj[_].partialField.data[i];\n hash = `${hash}-${data}`;\n dimensionSet.keys[_] = data;\n });\n\n if (splitRowDiffset[hash] === undefined) {\n splitRowDiffset[hash] = [];\n lastInsertedValue[hash] = -1;\n dimensionMap[hash] = dimensionSet;\n }\n\n generateRowDiffset(splitRowDiffset[hash], i, lastInsertedValue[hash]);\n lastInsertedValue[hash] = i;\n }\n });\n\n return {\n splitRowDiffset,\n dimensionMap\n };\n};\n\n\nexport const selectHelper = (clonedDm, selectFn, config, sourceDm, iterator) => {\n let cachedStore = {};\n let cloneProvider = () => sourceDm.detachedRoot();\n const { mode } = config;\n const rowDiffset = clonedDm._rowDiffset;\n const fields = clonedDm.getPartialFieldspace().fields;\n const formattedFieldsData = fields.map(field => field.formattedData());\n const rawFieldsData = fields.map(field => field.data());\n\n const selectorHelperFn = index => selectFn(\n prepareSelectionData(fields, formattedFieldsData, rawFieldsData, index),\n index,\n cloneProvider,\n cachedStore\n );\n\n return iterator(rowDiffset, selectorHelperFn, mode);\n};\n\nexport const cloneWithAllFields = (model) => {\n const clonedDm = model.clone(false);\n const partialFieldspace = model.getPartialFieldspace();\n clonedDm._colIdentifier = partialFieldspace.fields.map(f => f.name()).join(',');\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n\n return clonedDm;\n};\n\nconst getKey = (arr, data, fn) => {\n let key = fn(arr, data, 0);\n\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${fn(arr, data, i)}`;\n }\n return key;\n};\n\nexport const filterPropagationModel = (model, propModels, config = {}) => {\n let fns = [];\n const operation = config.operation || LOGICAL_OPERATORS.AND;\n const filterByMeasure = config.filterByMeasure || false;\n const clonedModel = cloneWithAllFields(model);\n const modelFieldsConfig = clonedModel.getFieldsConfig();\n\n if (!propModels.length) {\n fns = [() => false];\n } else {\n fns = propModels.map(propModel => ((dataModel) => {\n let keyFn;\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const dimensions = Object.keys(dataModel.getFieldspace().getDimension())\n .filter(d => d in modelFieldsConfig);\n const dLen = dimensions.length;\n const indices = dimensions.map(d =>\n fieldsConfig[d].index);\n const measures = Object.keys(dataModel.getFieldspace().getMeasure())\n .filter(d => d in modelFieldsConfig);\n const fieldsSpace = dataModel.getFieldspace().fieldsObj();\n const data = dataObj.data;\n const domain = measures.reduce((acc, v) => {\n acc[v] = fieldsSpace[v].domain();\n return acc;\n }, {});\n const valuesMap = {};\n\n keyFn = (arr, row, idx) => row[arr[idx]];\n if (dLen) {\n data.forEach((row) => {\n const key = getKey(indices, row, keyFn);\n valuesMap[key] = 1;\n });\n }\n\n keyFn = (arr, fields, idx) => fields[arr[idx]].internalValue;\n return data.length ? (fields) => {\n const present = dLen ? valuesMap[getKey(dimensions, fields, keyFn)] : true;\n\n if (filterByMeasure) {\n return measures.every(field => fields[field].internalValue >= domain[field][0] &&\n fields[field].internalValue <= domain[field][1]) && present;\n }\n return present;\n } : () => false;\n })(propModel));\n }\n\n let filteredModel;\n if (operation === LOGICAL_OPERATORS.AND) {\n filteredModel = clonedModel.select(fields => fns.every(fn => fn(fields)), {\n saveChild: false\n });\n } else {\n filteredModel = clonedModel.select(fields => fns.some(fn => fn(fields)), {\n saveChild: false\n });\n }\n\n return filteredModel;\n};\n\n\nexport const splitWithSelect = (sourceDm, dimensionArr, reducerFn = val => val, config) => {\n const {\n saveChild,\n } = config;\n const fieldStoreObj = sourceDm.getFieldspace().fieldsObj();\n\n const {\n splitRowDiffset,\n dimensionMap\n } = selectHelper(\n sourceDm.clone(saveChild),\n reducerFn,\n config,\n sourceDm,\n (...params) => rowSplitDiffsetIterator(...params, dimensionArr, fieldStoreObj)\n );\n\n const clonedDMs = [];\n Object.keys(splitRowDiffset).sort().forEach((e) => {\n if (splitRowDiffset[e]) {\n const cloned = sourceDm.clone(saveChild);\n const derivation = dimensionMap[e];\n cloned._rowDiffset = splitRowDiffset[e].join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n const derivationFormula = fields => dimensionArr.every(_ => fields[_].internalValue === derivation.keys[_]);\n // Store reference to child model and selector function\n if (saveChild) {\n persistDerivations(sourceDm, cloned, DM_DERIVATIVES.SELECT, config, derivationFormula);\n }\n cloned._derivation[cloned._derivation.length - 1].meta = dimensionMap[e];\n\n clonedDMs.push(cloned);\n }\n });\n\n\n return clonedDMs;\n};\nexport const addDiffsetToClonedDm = (clonedDm, rowDiffset, sourceDm, selectConfig, selectFn) => {\n clonedDm._rowDiffset = rowDiffset;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n persistDerivations(\n sourceDm,\n clonedDm,\n DM_DERIVATIVES.SELECT,\n { config: selectConfig },\n selectFn\n );\n};\n\n\nexport const cloneWithSelect = (sourceDm, selectFn, selectConfig, cloneConfig) => {\n let extraCloneDm = {};\n\n let { mode } = selectConfig;\n\n const cloned = sourceDm.clone(cloneConfig.saveChild);\n const setOfRowDiffsets = selectHelper(\n cloned,\n selectFn,\n selectConfig,\n sourceDm,\n selectRowDiffsetIterator\n );\n const diffIndex = selectModeMap[mode].diffIndex;\n\n addDiffsetToClonedDm(cloned, setOfRowDiffsets[diffIndex[0]], sourceDm, selectConfig, selectFn);\n\n if (diffIndex.length > 1) {\n extraCloneDm = sourceDm.clone(cloneConfig.saveChild);\n addDiffsetToClonedDm(extraCloneDm, setOfRowDiffsets[diffIndex[1]], sourceDm, selectConfig, selectFn);\n return [cloned, extraCloneDm];\n }\n\n return cloned;\n};\n\nexport const cloneWithProject = (sourceDm, projField, config, allFields) => {\n const cloned = sourceDm.clone(config.saveChild);\n let projectionSet = projField;\n if (config.mode === FilteringMode.INVERSE) {\n projectionSet = allFields.filter(fieldName => projField.indexOf(fieldName) === -1);\n }\n // cloned._colIdentifier = sourceDm._colIdentifier.split(',')\n // .filter(coll => projectionSet.indexOf(coll) !== -1).join();\n cloned._colIdentifier = projectionSet.join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivations(\n sourceDm,\n cloned,\n DM_DERIVATIVES.PROJECT,\n { projField, config, actualProjField: projectionSet },\n null\n );\n\n return cloned;\n};\n\n\nexport const splitWithProject = (sourceDm, projFieldSet, config, allFields) =>\n projFieldSet.map(projFields =>\n cloneWithProject(sourceDm, projFields, config, allFields));\n\nexport const sanitizeUnitSchema = (unitSchema) => {\n // Do deep clone of the unit schema as the user might change it later.\n unitSchema = extend2({}, unitSchema);\n if (!unitSchema.type) {\n unitSchema.type = FieldType.DIMENSION;\n }\n\n if (!unitSchema.subtype) {\n switch (unitSchema.type) {\n case FieldType.MEASURE:\n unitSchema.subtype = MeasureSubtype.CONTINUOUS;\n break;\n default:\n case FieldType.DIMENSION:\n unitSchema.subtype = DimensionSubtype.CATEGORICAL;\n break;\n }\n }\n\n return unitSchema;\n};\n\nexport const validateUnitSchema = (unitSchema) => {\n const supportedMeasureSubTypes = [MeasureSubtype.CONTINUOUS];\n const supportedDimSubTypes = [\n DimensionSubtype.CATEGORICAL,\n DimensionSubtype.BINNED,\n DimensionSubtype.TEMPORAL,\n DimensionSubtype.GEO\n ];\n const { type, subtype, name } = unitSchema;\n\n switch (type) {\n case FieldType.DIMENSION:\n if (supportedDimSubTypes.indexOf(subtype) === -1) {\n throw new Error(`DataModel doesn't support dimension field subtype ${subtype} used for ${name} field`);\n }\n break;\n case FieldType.MEASURE:\n if (supportedMeasureSubTypes.indexOf(subtype) === -1) {\n throw new Error(`DataModel doesn't support measure field subtype ${subtype} used for ${name} field`);\n }\n break;\n default:\n throw new Error(`DataModel doesn't support field type ${type} used for ${name} field`);\n }\n};\n\nexport const sanitizeAndValidateSchema = schema => schema.map((unitSchema) => {\n unitSchema = sanitizeUnitSchema(unitSchema);\n validateUnitSchema(unitSchema);\n return unitSchema;\n});\n\nexport const resolveFieldName = (schema, dataHeader) => {\n schema.forEach((unitSchema) => {\n const fieldNameAs = unitSchema.as;\n if (!fieldNameAs) { return; }\n\n const idx = dataHeader.indexOf(unitSchema.name);\n dataHeader[idx] = fieldNameAs;\n unitSchema.name = fieldNameAs;\n delete unitSchema.as;\n });\n};\n\nexport const updateData = (relation, data, schema, options) => {\n schema = sanitizeAndValidateSchema(schema);\n options = Object.assign(Object.assign({}, defaultConfig), options);\n const converterFn = converter[options.dataFormat];\n\n if (!(converterFn && typeof converterFn === 'function')) {\n throw new Error(`No converter function found for ${options.dataFormat} format`);\n }\n\n const [header, formattedData] = converterFn(data, schema, options);\n resolveFieldName(schema, header);\n const fieldArr = createFields(formattedData, schema, header);\n\n // This will create a new fieldStore with the fields\n const nameSpace = fieldStore.createNamespace(fieldArr, options.name);\n relation._partialFieldspace = nameSpace;\n\n // If data is provided create the default colIdentifier and rowDiffset\n relation._rowDiffset = formattedData.length && formattedData[0].length ? `0-${formattedData[0].length - 1}` : '';\n\n // This stores the value objects which is passed to the filter method when selection operation is done.\n const valueObjects = [];\n const { fields } = nameSpace;\n const rawFieldsData = fields.map(field => field.data());\n const formattedFieldsData = fields.map(field => field.formattedData());\n rowDiffsetIterator(relation._rowDiffset, (i) => {\n valueObjects[i] = prepareSelectionData(fields, formattedFieldsData, rawFieldsData, i);\n });\n nameSpace._cachedValueObjects = valueObjects;\n\n relation._colIdentifier = (schema.map(_ => _.name)).join();\n relation._dataFormat = options.dataFormat === DataFormat.AUTO ? detectDataFormat(data) : options.dataFormat;\n return relation;\n};\n\nexport const fieldInSchema = (schema, field) => {\n let i = 0;\n\n for (; i < schema.length; ++i) {\n if (field === schema[i].name) {\n return {\n name: field,\n type: schema[i].subtype || schema[i].type,\n index: i,\n };\n }\n }\n return null;\n};\n\nexport const getDerivationArguments = (derivation) => {\n let params = [];\n let operation;\n operation = derivation.op;\n switch (operation) {\n case DM_DERIVATIVES.SELECT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.PROJECT:\n params = [derivation.meta.actualProjField];\n break;\n case DM_DERIVATIVES.SORT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.GROUPBY:\n operation = 'groupBy';\n params = [derivation.meta.groupByString.split(','), derivation.criteria];\n break;\n default:\n operation = null;\n }\n\n return {\n operation,\n params\n };\n};\n\nconst applyExistingOperationOnModel = (propModel, dataModel) => {\n const derivations = dataModel.getDerivations();\n let selectionModel = propModel;\n\n derivations.forEach((derivation) => {\n if (!derivation) {\n return;\n }\n\n const { operation, params } = getDerivationArguments(derivation);\n if (operation) {\n selectionModel = selectionModel[operation](...params, {\n saveChild: false\n });\n }\n });\n\n return selectionModel;\n};\n\nconst getFilteredModel = (propModel, path) => {\n for (let i = 0, len = path.length; i < len; i++) {\n const model = path[i];\n propModel = applyExistingOperationOnModel(propModel, model);\n }\n return propModel;\n};\n\nconst propagateIdentifiers = (dataModel, propModel, config = {}, propModelInf = {}) => {\n const nonTraversingModel = propModelInf.nonTraversingModel;\n const excludeModels = propModelInf.excludeModels || [];\n\n if (dataModel === nonTraversingModel) {\n return;\n }\n\n const propagate = excludeModels.length ? excludeModels.indexOf(dataModel) === -1 : true;\n\n propagate && dataModel.handlePropagation(propModel, config);\n\n const children = dataModel._children;\n children.forEach((child) => {\n const selectionModel = applyExistingOperationOnModel(propModel, child);\n propagateIdentifiers(child, selectionModel, config, propModelInf);\n });\n};\n\nexport const getRootGroupByModel = (model) => {\n while (model._parent && model._derivation.find(d => d.op !== DM_DERIVATIVES.GROUPBY)) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getRootDataModel = (model) => {\n while (model._parent) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getPathToRootModel = (model, path = []) => {\n while (model._parent) {\n path.push(model);\n model = model._parent;\n }\n return path;\n};\n\nexport const propagateToAllDataModels = (identifiers, rootModels, propagationInf, config) => {\n let criteria;\n let propModel;\n const { propagationNameSpace, propagateToSource } = propagationInf;\n const propagationSourceId = propagationInf.sourceId;\n const propagateInterpolatedValues = config.propagateInterpolatedValues;\n const filterFn = (entry) => {\n const filter = config.filterFn || (() => true);\n return filter(entry, config);\n };\n\n let criterias = [];\n\n if (identifiers === null && config.persistent !== true) {\n criterias = [{\n criteria: []\n }];\n criteria = [];\n } else {\n let actionCriterias = Object.values(propagationNameSpace.mutableActions);\n if (propagateToSource !== false) {\n actionCriterias = actionCriterias.filter(d => d.config.sourceId !== propagationSourceId);\n }\n\n const filteredCriteria = actionCriterias.filter(filterFn).map(action => action.config.criteria);\n\n const excludeModels = [];\n\n if (propagateToSource !== false) {\n const sourceActionCriterias = Object.values(propagationNameSpace.mutableActions);\n\n sourceActionCriterias.forEach((actionInf) => {\n const actionConf = actionInf.config;\n if (actionConf.applyOnSource === false && actionConf.action === config.action &&\n actionConf.sourceId !== propagationSourceId) {\n excludeModels.push(actionInf.model);\n criteria = sourceActionCriterias.filter(d => d !== actionInf).map(d => d.config.criteria);\n criteria.length && criterias.push({\n criteria,\n models: actionInf.model,\n path: getPathToRootModel(actionInf.model)\n });\n }\n });\n }\n\n\n criteria = [].concat(...[...filteredCriteria, identifiers]).filter(d => d !== null);\n criterias.push({\n criteria,\n excludeModels: [...excludeModels, ...config.excludeModels || []]\n });\n }\n\n const rootModel = rootModels.model;\n\n const propConfig = Object.assign({\n sourceIdentifiers: identifiers,\n propagationSourceId\n }, config);\n\n const rootGroupByModel = rootModels.groupByModel;\n if (propagateInterpolatedValues && rootGroupByModel) {\n propModel = filterPropagationModel(rootGroupByModel, criteria, {\n filterByMeasure: propagateInterpolatedValues\n });\n propagateIdentifiers(rootGroupByModel, propModel, propConfig);\n }\n\n criterias.forEach((inf) => {\n const propagationModel = filterPropagationModel(rootModel, inf.criteria);\n const path = inf.path;\n\n if (path) {\n const filteredModel = getFilteredModel(propagationModel, path.reverse());\n inf.models.handlePropagation(filteredModel, propConfig);\n } else {\n propagateIdentifiers(rootModel, propagationModel, propConfig, {\n excludeModels: inf.excludeModels,\n nonTraversingModel: propagateInterpolatedValues && rootGroupByModel\n });\n }\n });\n};\n\nexport const propagateImmutableActions = (propagationNameSpace, rootModels, propagationInf) => {\n const immutableActions = propagationNameSpace.immutableActions;\n\n for (const action in immutableActions) {\n const actionInf = immutableActions[action];\n const actionConf = actionInf.config;\n const propagationSourceId = propagationInf.config.sourceId;\n const filterImmutableAction = propagationInf.propConfig.filterImmutableAction ?\n propagationInf.propConfig.filterImmutableAction(actionConf, propagationInf.config) : true;\n if (actionConf.sourceId !== propagationSourceId && filterImmutableAction) {\n const criteriaModel = actionConf.criteria;\n propagateToAllDataModels(criteriaModel, rootModels, {\n propagationNameSpace,\n propagateToSource: false,\n sourceId: propagationSourceId\n }, actionConf);\n }\n }\n};\n\nexport const addToPropNamespace = (propagationNameSpace, config = {}, model) => {\n let sourceNamespace;\n const isMutableAction = config.isMutableAction;\n const criteria = config.criteria;\n const key = `${config.action}-${config.sourceId}`;\n\n if (isMutableAction) {\n sourceNamespace = propagationNameSpace.mutableActions;\n } else {\n sourceNamespace = propagationNameSpace.immutableActions;\n }\n\n if (criteria === null) {\n delete sourceNamespace[key];\n } else {\n sourceNamespace[key] = {\n model,\n config\n };\n }\n\n return this;\n};\n\n\nexport const getNormalizedProFields = (projField, allFields, fieldConfig) => {\n const normalizedProjField = projField.reduce((acc, field) => {\n if (field.constructor.name === 'RegExp') {\n acc.push(...allFields.filter(fieldName => fieldName.search(field) !== -1));\n } else if (field in fieldConfig) {\n acc.push(field);\n }\n return acc;\n }, []);\n return Array.from(new Set(normalizedProjField)).map(field => field.trim());\n};\n\n/**\n * Get the numberFormatted value if numberFormat present,\n * else returns the supplied value.\n * @param {Object} field Field Instance\n * @param {Number|String} value\n * @return {Number|String}\n */\nexport const getNumberFormattedVal = (field, value) => {\n if (field.numberFormat) {\n return field.numberFormat()(value);\n }\n return value;\n};\n","import { FilteringMode } from './enums';\nimport { getUniqueId } from './utils';\nimport {\n updateFields,\n cloneWithSelect,\n cloneWithProject,\n updateData,\n getNormalizedProFields\n} from './helper';\nimport { crossProduct, difference, naturalJoinFilter, union } from './operator';\n\n/**\n * Relation provides the definitions of basic operators of relational algebra like *selection*, *projection*, *union*,\n * *difference* etc.\n *\n * It is extended by {@link DataModel} to inherit the functionalities of relational algebra concept.\n *\n * @class\n * @public\n * @module Relation\n * @namespace DataModel\n */\nclass Relation {\n\n /**\n * Creates a new Relation instance by providing underlying data and schema.\n *\n * @private\n *\n * @param {Object | string | Relation} data - The input tabular data in dsv or json format or\n * an existing Relation instance object.\n * @param {Array} schema - An array of data schema.\n * @param {Object} [options] - The optional options.\n */\n constructor (...params) {\n let source;\n\n this._parent = null;\n this._derivation = [];\n this._ancestorDerivation = [];\n this._children = [];\n\n if (params.length === 1 && ((source = params[0]) instanceof Relation)) {\n // parent datamodel was passed as part of source\n this._colIdentifier = source._colIdentifier;\n this._rowDiffset = source._rowDiffset;\n this._dataFormat = source._dataFormat;\n this._parent = source;\n this._partialFieldspace = this._parent._partialFieldspace;\n this._fieldStoreName = getUniqueId();\n this.__calculateFieldspace().calculateFieldsConfig();\n } else {\n updateData(this, ...params);\n this._fieldStoreName = this._partialFieldspace.name;\n this.__calculateFieldspace().calculateFieldsConfig();\n this._propagationNameSpace = {\n mutableActions: {},\n immutableActions: {}\n };\n }\n }\n\n /**\n * Retrieves the {@link Schema | schema} details for every {@link Field | field} as an array.\n *\n * @public\n *\n * @return {Array.} Array of fields schema.\n * ```\n * [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', numberFormat: (val) => `${val} miles / gallon` },\n * { name: 'Cylinder', type: 'dimension' },\n * { name: 'Displacement', type: 'measure', defAggFn: 'max' },\n * { name: 'HorsePower', type: 'measure', defAggFn: 'max' },\n * { name: 'Weight_in_lbs', type: 'measure', defAggFn: 'avg', },\n * { name: 'Acceleration', type: 'measure', defAggFn: 'avg' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin' }\n * ]\n * ```\n */\n getSchema () {\n return this.getFieldspace().fields.map(d => d.schema());\n }\n\n /**\n * Returns the name of the {@link DataModel} instance. If no name was specified during {@link DataModel}\n * initialization, then it returns a auto-generated name.\n *\n * @public\n *\n * @return {string} Name of the DataModel instance.\n */\n getName() {\n return this._fieldStoreName;\n }\n\n getFieldspace () {\n return this._fieldspace;\n }\n\n __calculateFieldspace () {\n this._fieldspace = updateFields([this._rowDiffset, this._colIdentifier],\n this.getPartialFieldspace(), this._fieldStoreName);\n return this;\n }\n\n getPartialFieldspace () {\n return this._partialFieldspace;\n }\n\n /**\n * Performs {@link link_of_cross_product | cross-product} between two {@link DataModel} instances and returns a\n * new {@link DataModel} instance containing the results. This operation is also called theta join.\n *\n * Cross product takes two set and create one set where each value of one set is paired with each value of another\n * set.\n *\n * This method takes an optional predicate which filters the generated result rows. If the predicate returns true\n * the combined row is included in the resulatant table.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.join(originDM)));\n *\n * console.log(carsDM.join(originDM,\n * obj => obj.[originDM.getName()].Origin === obj.[carsDM.getName()].Origin));\n *\n * @text\n * This is chained version of `join` operator. `join` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel to be joined with the current instance DataModel.\n * @param {SelectionPredicate} filterFn - The predicate function that will filter the result of the crossProduct.\n *\n * @return {DataModel} New DataModel instance created after joining.\n */\n join (joinWith, filterFn) {\n return crossProduct(this, joinWith, filterFn);\n }\n\n /**\n * {@link natural_join | Natural join} is a special kind of cross-product join where filtering of rows are performed\n * internally by resolving common fields are from both table and the rows with common value are included.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.naturalJoin(originDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel with which the current instance of DataModel on which the method is\n * called will be joined.\n * @return {DataModel} New DataModel instance created after joining.\n */\n naturalJoin (joinWith) {\n return crossProduct(this, joinWith, naturalJoinFilter(this, joinWith), true);\n }\n\n /**\n * {@link link_to_union | Union} operation can be termed as vertical stacking of all rows from both the DataModel\n * instances, provided that both of the {@link DataModel} instances should have same column names.\n *\n * @example\n * console.log(EuropeanMakerDM.union(USAMakerDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} unionWith - DataModel instance for which union has to be applied with the instance on which\n * the method is called\n *\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n union (unionWith) {\n return union(this, unionWith);\n }\n\n /**\n * {@link link_to_difference | Difference } operation only include rows which are present in the datamodel on which\n * it was called but not on the one passed as argument.\n *\n * @example\n * console.log(highPowerDM.difference(highExpensiveDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} differenceWith - DataModel instance for which difference has to be applied with the instance\n * on which the method is called\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n difference (differenceWith) {\n return difference(this, differenceWith);\n }\n\n /**\n * {@link link_to_selection | Selection} is a row filtering operation. It expects a predicate and an optional mode\n * which control which all rows should be included in the resultant DataModel instance.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection operation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resultant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * // with selection mode NORMAL:\n * const normDt = dt.select(fields => fields.Origin.value === \"USA\")\n * console.log(normDt));\n *\n * // with selection mode INVERSE:\n * const inverDt = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt);\n *\n * // with selection mode ALL:\n * const dtArr = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.ALL })\n * // print the selected parts\n * console.log(dtArr[0]);\n * // print the inverted parts\n * console.log(dtArr[1]);\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Function} selectFn - The predicate function which is called for each row with the current row.\n * ```\n * function (row, i, cloneProvider, store) { ... }\n * ```\n * @param {Object} config - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance.\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection.\n * @return {DataModel} Returns the new DataModel instance(s) after operation.\n */\n select (selectFn, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n config.mode = config.mode || defConfig.mode;\n\n const cloneConfig = { saveChild: config.saveChild };\n return cloneWithSelect(\n this,\n selectFn,\n config,\n cloneConfig\n );\n }\n\n /**\n * Retrieves a boolean value if the current {@link DataModel} instance has data.\n *\n * @example\n * const schema = [\n * { name: 'CarName', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n * const data = [];\n *\n * const dt = new DataModel(data, schema);\n * console.log(dt.isEmpty());\n *\n * @public\n *\n * @return {Boolean} True if the datamodel has no data, otherwise false.\n */\n isEmpty () {\n return !this._rowDiffset.length || !this._colIdentifier.length;\n }\n\n /**\n * Creates a clone from the current DataModel instance with child parent relationship.\n *\n * @private\n * @param {boolean} [saveChild=true] - Whether the cloned instance would be recorded in the parent instance.\n * @return {DataModel} - Returns the newly cloned DataModel instance.\n */\n clone (saveChild = true) {\n const clonedDm = new this.constructor(this);\n if (saveChild) {\n clonedDm.setParent(this);\n } else {\n clonedDm.setParent(null);\n }\n return clonedDm;\n }\n\n /**\n * {@link Projection} is filter column (field) operation. It expects list of fields' name and either include those\n * or exclude those based on {@link FilteringMode} on the resultant variable.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * const dm = new DataModel(data, schema);\n *\n * // with projection mode NORMAL:\n * const normDt = dt.project([\"Name\", \"HorsePower\"]);\n * console.log(normDt.getData());\n *\n * // with projection mode INVERSE:\n * const inverDt = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt.getData());\n *\n * // with selection mode ALL:\n * const dtArr = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.ALL })\n * // print the normal parts\n * console.log(dtArr[0].getData());\n * // print the inverted parts\n * console.log(dtArr[1].getData());\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {DataModel} Returns the new DataModel instance after operation.\n */\n project (projField, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const { mode } = config;\n const normalizedProjField = getNormalizedProFields(projField, allFields, fieldConfig);\n\n let dataModel;\n\n if (mode === FilteringMode.ALL) {\n let projectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.NORMAL,\n saveChild: config.saveChild\n }, allFields);\n let rejectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.INVERSE,\n saveChild: config.saveChild\n }, allFields);\n dataModel = [projectionClone, rejectionClone];\n } else {\n let projectionClone = cloneWithProject(this, normalizedProjField, config, allFields);\n dataModel = projectionClone;\n }\n\n return dataModel;\n }\n\n getFieldsConfig () {\n return this._fieldConfig;\n }\n\n calculateFieldsConfig () {\n this._fieldConfig = this._fieldspace.fields.reduce((acc, fieldObj, i) => {\n acc[fieldObj.name()] = {\n index: i,\n def: fieldObj.schema(),\n };\n return acc;\n }, {});\n return this;\n }\n\n\n /**\n * Frees up the resources associated with the current DataModel instance and breaks all the links instance has in\n * the DAG.\n *\n * @public\n */\n dispose () {\n this._parent && this._parent.removeChild(this);\n this._parent = null;\n this._children.forEach((child) => {\n child._parent = null;\n });\n this._children = [];\n }\n\n /**\n * Removes the specified child {@link DataModel} from the child list of the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\")\n * dt.removeChild(dt2);\n *\n * @private\n *\n * @param {DataModel} child - Delegates the parent to remove this child.\n */\n removeChild (child) {\n let idx = this._children.findIndex(sibling => sibling === child);\n idx !== -1 ? this._children.splice(idx, 1) : true;\n }\n\n /**\n * Sets the specified {@link DataModel} as a parent for the current {@link DataModel} instance.\n *\n * @param {DataModel} parent - The datamodel instance which will act as parent.\n */\n setParent (parent) {\n this._parent && this._parent.removeChild(this);\n this._parent = parent;\n parent && parent._children.push(this);\n }\n\n /**\n * Returns the parent {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const parentDm = dt2.getParent();\n *\n * @return {DataModel} Returns the parent DataModel instance.\n */\n getParent () {\n return this._parent;\n }\n\n /**\n * Returns the immediate child {@link DataModel} instances.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const childDm1 = dt.select(fields => fields.Origin.value === \"USA\");\n * const childDm2 = dt.select(fields => fields.Origin.value === \"Japan\");\n * const childDm3 = dt.groupBy([\"Origin\"]);\n *\n * @return {DataModel[]} Returns the immediate child DataModel instances.\n */\n getChildren () {\n return this._children;\n }\n\n /**\n * Returns the in-between operation meta data while creating the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const derivations = dt3.getDerivations();\n *\n * @return {Any[]} Returns the derivation meta data.\n */\n getDerivations () {\n return this._derivation;\n }\n\n /**\n * Returns the in-between operation meta data happened from root {@link DataModel} to current instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const ancDerivations = dt3.getAncestorDerivations();\n *\n * @return {Any[]} Returns the previous derivation meta data.\n */\n getAncestorDerivations () {\n return this._ancestorDerivation;\n }\n}\n\nexport default Relation;\n","/* eslint-disable default-case */\n\nimport { FieldType, DimensionSubtype, DataFormat, FilteringMode } from './enums';\nimport {\n persistDerivations,\n getRootGroupByModel,\n propagateToAllDataModels,\n getRootDataModel,\n propagateImmutableActions,\n addToPropNamespace,\n sanitizeUnitSchema,\n splitWithSelect,\n splitWithProject,\n getNormalizedProFields\n} from './helper';\nimport { DM_DERIVATIVES, PROPAGATION } from './constants';\nimport {\n dataBuilder,\n rowDiffsetIterator,\n groupBy\n} from './operator';\nimport { createBinnedFieldData } from './operator/bucket-creator';\nimport Relation from './relation';\nimport reducerStore from './utils/reducer-store';\nimport { createFields } from './field-creator';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport Value from './value';\n\n/**\n * DataModel is an in-browser representation of tabular data. It supports\n * {@link https://en.wikipedia.org/wiki/Relational_algebra | relational algebra} operators as well as generic data\n * processing opearators.\n * DataModel extends {@link Relation} class which defines all the relational algebra opreators. DataModel gives\n * definition of generic data processing operators which are not relational algebra complient.\n *\n * @public\n * @class\n * @extends Relation\n * @memberof Datamodel\n */\nclass DataModel extends Relation {\n /**\n * Creates a new DataModel instance by providing data and schema. Data could be in the form of\n * - Flat JSON\n * - DSV String\n * - 2D Array\n *\n * By default DataModel finds suitable adapter to serialize the data. DataModel also expects a\n * {@link Schema | schema} for identifying the variables present in data.\n *\n * @constructor\n * @example\n * const data = loadData('cars.csv');\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', unit : 'cm', scale: '1000', numberformat: val => `${val}G`},\n * { name: 'Cylinders', type: 'dimension' },\n * { name: 'Displacement', type: 'measure' },\n * { name: 'Horsepower', type: 'measure' },\n * { name: 'Weight_in_lbs', type: 'measure' },\n * { name: 'Acceleration', type: 'measure' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin', type: 'dimension' }\n * ];\n * const dm = new DataModel(data, schema, { name: 'Cars' });\n * table(dm);\n *\n * @public\n *\n * @param {Array. | string | Array.} data Input data in any of the mentioned formats\n * @param {Array.} schema Defination of the variables. Order of the variables in data and order of the\n * variables in schema has to be same.\n * @param {object} [options] Optional arguments to specify more settings regarding the creation part\n * @param {string} [options.name] Name of the datamodel instance. If no name is given an auto generated name is\n * assigned to the instance.\n * @param {string} [options.fieldSeparator=','] specify field separator type if the data is of type dsv string.\n */\n constructor (...args) {\n super(...args);\n\n this._onPropagation = [];\n }\n\n /**\n * Reducers are simple functions which reduces an array of numbers to a representative number of the set.\n * Like an array of numbers `[10, 20, 5, 15]` can be reduced to `12.5` if average / mean reducer function is\n * applied. All the measure fields in datamodel (variables in data) needs a reducer to handle aggregation.\n *\n * @public\n *\n * @return {ReducerStore} Singleton instance of {@link ReducerStore}.\n */\n static get Reducers () {\n return reducerStore;\n }\n\n /**\n * Configure null, undefined, invalid values in the source data\n *\n * @public\n *\n * @param {Object} [config] - Configuration to control how null, undefined and non-parsable values are\n * represented in DataModel.\n * @param {string} [config.undefined] - Define how an undefined value will be represented.\n * @param {string} [config.null] - Define how a null value will be represented.\n * @param {string} [config.invalid] - Define how a non-parsable value will be represented.\n */\n static configureInvalidAwareTypes (config) {\n return InvalidAwareTypes.invalidAwareVals(config);\n }\n\n /**\n * Retrieve the data attached to an instance in JSON format.\n *\n * @example\n * // DataModel instance is already prepared and assigned to dm variable\n * const data = dm.getData({\n * order: 'column',\n * formatter: {\n * origin: (val) => val === 'European Union' ? 'EU' : val;\n * }\n * });\n * console.log(data);\n *\n * @public\n *\n * @param {Object} [options] Options to control how the raw data is to be returned.\n * @param {string} [options.order='row'] Defines if data is retieved in row order or column order. Possible values\n * are `'rows'` and `'columns'`\n * @param {Function} [options.formatter=null] Formats the output data. This expects an object, where the keys are\n * the name of the variable needs to be formatted. The formatter function is called for each row passing the\n * value of the cell for a particular row as arguments. The formatter is a function in the form of\n * `function (value, rowId, schema) => { ... }`\n * Know more about {@link Fomatter}.\n *\n * @return {Array} Returns a multidimensional array of the data with schema. The return format looks like\n * ```\n * {\n * data,\n * schema\n * }\n * ```\n */\n getData (options) {\n const defOptions = {\n order: 'row',\n formatter: null,\n withUid: false,\n getAllFields: false,\n sort: []\n };\n options = Object.assign({}, defOptions, options);\n const fields = this.getPartialFieldspace().fields;\n\n const dataGenerated = dataBuilder.call(\n this,\n this.getPartialFieldspace().fields,\n this._rowDiffset,\n options.getAllFields ? fields.map(d => d.name()).join() : this._colIdentifier,\n options.sort,\n {\n columnWise: options.order === 'column',\n addUid: !!options.withUid\n }\n );\n\n if (!options.formatter) {\n return dataGenerated;\n }\n\n const { formatter } = options;\n const { data, schema, uids } = dataGenerated;\n const fieldNames = schema.map((e => e.name));\n const fmtFieldNames = Object.keys(formatter);\n const fmtFieldIdx = fmtFieldNames.reduce((acc, next) => {\n const idx = fieldNames.indexOf(next);\n if (idx !== -1) {\n acc.push([idx, formatter[next]]);\n }\n return acc;\n }, []);\n\n if (options.order === 'column') {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n data[fIdx].forEach((datum, datumIdx) => {\n data[fIdx][datumIdx] = fmtFn.call(\n undefined,\n datum,\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n } else {\n data.forEach((datum, datumIdx) => {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n datum[fIdx] = fmtFn.call(\n undefined,\n datum[fIdx],\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n }\n\n return dataGenerated;\n }\n\n /**\n * Returns the unique ids in an array.\n *\n * @return {Array} Returns an array of ids.\n */\n getUids () {\n const rowDiffset = this._rowDiffset;\n const ids = [];\n\n if (rowDiffset.length) {\n const diffSets = rowDiffset.split(',');\n\n diffSets.forEach((set) => {\n let [start, end] = set.split('-').map(Number);\n\n end = end !== undefined ? end : start;\n ids.push(...Array(end - start + 1).fill().map((_, idx) => start + idx));\n });\n }\n\n return ids;\n }\n /**\n * Groups the data using particular dimensions and by reducing measures. It expects a list of dimensions using which\n * it projects the datamodel and perform aggregations to reduce the duplicate tuples. Refer this\n * {@link link_to_one_example_with_group_by | document} to know the intuition behind groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupedDM = dm.groupBy(['Year'], { horsepower: 'max' } );\n * console.log(groupedDm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {DataModel} Returns a new DataModel instance after performing the groupby.\n */\n groupBy (fieldsArr, reducers = {}, config = { saveChild: true }) {\n const groupByString = `${fieldsArr.join()}`;\n let params = [this, fieldsArr, reducers];\n const newDataModel = groupBy(...params);\n\n persistDerivations(\n this,\n newDataModel,\n DM_DERIVATIVES.GROUPBY,\n { fieldsArr, groupByString, defaultReducer: reducerStore.defaultReducer() },\n reducers\n );\n\n if (config.saveChild) {\n newDataModel.setParent(this);\n } else {\n newDataModel.setParent(null);\n }\n\n return newDataModel;\n }\n\n /**\n * Performs sorting operation on the current {@link DataModel} instance according to the specified sorting details.\n * Like every other operator it doesn't mutate the current DataModel instance on which it was called, instead\n * returns a new DataModel instance containing the sorted data.\n *\n * DataModel support multi level sorting by listing the variables using which sorting needs to be performed and\n * the type of sorting `ASC` or `DESC`.\n *\n * In the following example, data is sorted by `Origin` field in `DESC` order in first level followed by another\n * level of sorting by `Acceleration` in `ASC` order.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * let sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\"] // Default value is ASC\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * // Sort with a custom sorting function\n * sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\", (a, b) => a - b] // Custom sorting function\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @text\n * DataModel also provides another sorting mechanism out of the box where sort is applied to a variable using\n * another variable which determines the order.\n * Like the above DataModel contains three fields `Origin`, `Name` and `Acceleration`. Now, the data in this\n * model can be sorted by `Origin` field according to the average value of all `Acceleration` for a\n * particular `Origin` value.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * const sortedDm = dm.sort([\n * ['Origin', ['Acceleration', (a, b) => avg(...a.Acceleration) - avg(...b.Acceleration)]]\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @public\n *\n * @param {Array.} sortingDetails - Sorting details based on which the sorting will be performed.\n * @return {DataModel} Returns a new instance of DataModel with sorted data.\n */\n sort (sortingDetails, config = { saveChild: false }) {\n const rawData = this.getData({\n order: 'row',\n sort: sortingDetails\n });\n const header = rawData.schema.map(field => field.name);\n const dataInCSVArr = [header].concat(rawData.data);\n\n const sortedDm = new this.constructor(dataInCSVArr, rawData.schema, { dataFormat: 'DSVArr' });\n\n persistDerivations(\n this,\n sortedDm,\n DM_DERIVATIVES.SORT,\n config,\n sortingDetails\n );\n\n if (config.saveChild) {\n sortedDm.setParent(this);\n } else {\n sortedDm.setParent(null);\n }\n\n return sortedDm;\n }\n\n /**\n * Performs the serialization operation on the current {@link DataModel} instance according to the specified data\n * type. When an {@link DataModel} instance is created, it de-serializes the input data into its internal format,\n * and during its serialization process, it converts its internal data format to the specified data type and returns\n * that data regardless what type of data is used during the {@link DataModel} initialization.\n *\n * @example\n * // here dm is the pre-declared DataModel instance.\n * const csvData = dm.serialize(DataModel.DataFormat.DSV_STR, { fieldSeparator: \",\" });\n * console.log(csvData); // The csv formatted data.\n *\n * const jsonData = dm.serialize(DataModel.DataFormat.FLAT_JSON);\n * console.log(jsonData); // The json data.\n *\n * @public\n *\n * @param {string} type - The data type name for serialization.\n * @param {Object} options - The optional option object.\n * @param {string} options.fieldSeparator - The field separator character for DSV data type.\n * @return {Array|string} Returns the serialized data.\n */\n serialize (type, options) {\n type = type || this._dataFormat;\n options = Object.assign({}, { fieldSeparator: ',' }, options);\n\n const fields = this.getFieldspace().fields;\n const colData = fields.map(f => f.formattedData());\n const rowsCount = colData[0].length;\n let serializedData;\n let rowIdx;\n let colIdx;\n\n if (type === DataFormat.FLAT_JSON) {\n serializedData = [];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = {};\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row[fields[colIdx].name()] = colData[colIdx][rowIdx];\n }\n serializedData.push(row);\n }\n } else if (type === DataFormat.DSV_STR) {\n serializedData = [fields.map(f => f.name()).join(options.fieldSeparator)];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row.join(options.fieldSeparator));\n }\n serializedData = serializedData.join('\\n');\n } else if (type === DataFormat.DSV_ARR) {\n serializedData = [fields.map(f => f.name())];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row);\n }\n } else {\n throw new Error(`Data type ${type} is not supported`);\n }\n\n return serializedData;\n }\n\n addField (field) {\n const fieldName = field.name();\n this._colIdentifier += `,${fieldName}`;\n const partialFieldspace = this._partialFieldspace;\n const cachedValueObjects = partialFieldspace._cachedValueObjects;\n const formattedData = field.formattedData();\n const rawData = field.partialField.data;\n\n if (!partialFieldspace.fieldsObj()[field.name()]) {\n partialFieldspace.fields.push(field);\n cachedValueObjects.forEach((obj, i) => {\n obj[field.name()] = new Value(formattedData[i], rawData[i], field);\n });\n } else {\n const fieldIndex = partialFieldspace.fields.findIndex(fieldinst => fieldinst.name() === fieldName);\n fieldIndex >= 0 && (partialFieldspace.fields[fieldIndex] = field);\n }\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n\n this.__calculateFieldspace().calculateFieldsConfig();\n return this;\n }\n\n /**\n * Creates a new variable calculated from existing variables. This method expects the definition of the newly created\n * variable and a function which resolves the value of the new variable from existing variables.\n *\n * Can create a new measure based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const newDm = dataModel.calculateVariable({\n * name: 'powerToWeight',\n * type: 'measure'\n * }, ['horsepower', 'weight_in_lbs', (hp, weight) => hp / weight ]);\n *\n *\n * Can create a new dimension based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const child = dataModel.calculateVariable(\n * {\n * name: 'Efficiency',\n * type: 'dimension'\n * }, ['horsepower', (hp) => {\n * if (hp < 80) { return 'low'; },\n * else if (hp < 120) { return 'moderate'; }\n * else { return 'high' }\n * }]);\n *\n * @public\n *\n * @param {Object} schema - The schema of newly defined variable.\n * @param {Array.} dependency - An array containing the dependency variable names and a resolver\n * function as the last element.\n * @param {Object} config - An optional config object.\n * @param {boolean} [config.saveChild] - Whether the newly created DataModel will be a child.\n * @param {boolean} [config.replaceVar] - Whether the newly created variable will replace the existing variable.\n * @return {DataModel} Returns an instance of DataModel with the new field.\n */\n calculateVariable (schema, dependency, config) {\n schema = sanitizeUnitSchema(schema);\n config = Object.assign({}, { saveChild: true, replaceVar: false }, config);\n\n const fieldsConfig = this.getFieldsConfig();\n const depVars = dependency.slice(0, dependency.length - 1);\n const retrieveFn = dependency[dependency.length - 1];\n\n if (fieldsConfig[schema.name] && !config.replaceVar) {\n throw new Error(`${schema.name} field already exists in datamodel`);\n }\n\n const depFieldIndices = depVars.map((field) => {\n const fieldSpec = fieldsConfig[field];\n if (!fieldSpec) {\n // @todo dont throw error here, use warning in production mode\n throw new Error(`${field} is not a valid column name.`);\n }\n return fieldSpec.index;\n });\n\n const clone = this.clone(config.saveChild);\n\n const fs = clone.getFieldspace().fields;\n const suppliedFields = depFieldIndices.map(idx => fs[idx]);\n\n let cachedStore = {};\n let cloneProvider = () => this.detachedRoot();\n\n const computedValues = [];\n rowDiffsetIterator(clone._rowDiffset, (i) => {\n const fieldsData = suppliedFields.map(field => field.partialField.data[i]);\n computedValues[i] = retrieveFn(...fieldsData, i, cloneProvider, cachedStore);\n });\n const [field] = createFields([computedValues], [schema], [schema.name]);\n clone.addField(field);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.CAL_VAR,\n { config: schema, fields: depVars },\n retrieveFn\n );\n\n return clone;\n }\n\n /**\n * Propagates changes across all the connected DataModel instances.\n *\n * @param {Array} identifiers - A list of identifiers that were interacted with.\n * @param {Object} payload - The interaction specific details.\n *\n * @return {DataModel} DataModel instance.\n */\n propagate (identifiers, config = {}, addToNameSpace, propConfig = {}) {\n const isMutableAction = config.isMutableAction;\n const propagationSourceId = config.sourceId;\n const payload = config.payload;\n const rootModel = getRootDataModel(this);\n const propagationNameSpace = rootModel._propagationNameSpace;\n const rootGroupByModel = getRootGroupByModel(this);\n const rootModels = {\n groupByModel: rootGroupByModel,\n model: rootModel\n };\n\n addToNameSpace && addToPropNamespace(propagationNameSpace, config, this);\n propagateToAllDataModels(identifiers, rootModels, { propagationNameSpace, sourceId: propagationSourceId },\n Object.assign({\n payload\n }, config));\n\n if (isMutableAction) {\n propagateImmutableActions(propagationNameSpace, rootModels, {\n config,\n propConfig\n }, this);\n }\n\n return this;\n }\n\n /**\n * Associates a callback with an event name.\n *\n * @param {string} eventName - The name of the event.\n * @param {Function} callback - The callback to invoke.\n * @return {DataModel} Returns this current DataModel instance itself.\n */\n on (eventName, callback) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation.push(callback);\n break;\n }\n return this;\n }\n\n /**\n * Unsubscribes the callbacks for the provided event name.\n *\n * @param {string} eventName - The name of the event to unsubscribe.\n * @return {DataModel} Returns the current DataModel instance itself.\n */\n unsubscribe (eventName) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation = [];\n break;\n\n }\n return this;\n }\n\n /**\n * This method is used to invoke the method associated with propagation.\n *\n * @param {Object} payload The interaction payload.\n * @param {DataModel} identifiers The propagated DataModel.\n * @memberof DataModel\n */\n handlePropagation (propModel, payload) {\n let propListeners = this._onPropagation;\n propListeners.forEach(fn => fn.call(this, propModel, payload));\n }\n\n /**\n * Performs the binning operation on a measure field based on the binning configuration. Binning means discretizing\n * values of a measure. Binning configuration contains an array; subsequent values from the array marks the boundary\n * of buckets in [inclusive, exclusive) range format. This operation does not mutate the subject measure field,\n * instead, it creates a new field (variable) of type dimension and subtype binned.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non-uniform buckets,\n * - providing bins count,\n * - providing each bin size,\n *\n * When custom `buckets` are provided as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', buckets: [30, 80, 100, 110] }\n * const binnedDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binsCount` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', binsCount: 5, start: 0, end: 100 }\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binSize` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHorsepower', binSize: 20, start: 5}\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @public\n *\n * @param {string} measureFieldName - The name of the target measure field.\n * @param {Object} config - The config object.\n * @param {string} [config.name] - The name of the new field which will be created.\n * @param {string} [config.buckets] - An array containing the bucket ranges.\n * @param {string} [config.binSize] - The size of each bin. It is ignored when buckets are given.\n * @param {string} [config.binsCount] - The total number of bins to generate. It is ignored when buckets are given.\n * @param {string} [config.start] - The start value of the bucket ranges. It is ignored when buckets are given.\n * @param {string} [config.end] - The end value of the bucket ranges. It is ignored when buckets are given.\n * @return {DataModel} Returns a new {@link DataModel} instance with the new field.\n */\n bin (measureFieldName, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n if (!fieldsConfig[measureFieldName]) {\n throw new Error(`Field ${measureFieldName} doesn't exist`);\n }\n\n const binFieldName = config.name || `${measureFieldName}_binned`;\n\n if (fieldsConfig[binFieldName]) {\n throw new Error(`Field ${binFieldName} already exists`);\n }\n\n const measureField = this.getFieldspace().fieldsObj()[measureFieldName];\n const { binnedData, bins } = createBinnedFieldData(measureField, this._rowDiffset, config);\n\n const binField = createFields([binnedData], [\n {\n name: binFieldName,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.BINNED,\n bins\n }], [binFieldName])[0];\n\n const clone = this.clone(config.saveChild);\n clone.addField(binField);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.BIN,\n { measureFieldName, config, binFieldName },\n null\n );\n\n return clone;\n }\n\n /**\n * Creates a new {@link DataModel} instance with completely detached root from current {@link DataModel} instance,\n * the new {@link DataModel} instance has no parent-children relationship with the current one, but has same data as\n * the current one.\n * This API is useful when a completely different {@link DataModel} but with same data as the current instance is\n * needed.\n *\n * @example\n * const dm = new DataModel(data, schema);\n * const detachedDm = dm.detachedRoot();\n *\n * // has different namespace\n * console.log(dm.getPartialFieldspace().name);\n * console.log(detachedDm.getPartialFieldspace().name);\n *\n * // has same data\n * console.log(dm.getData());\n * console.log(detachedDm.getData());\n *\n * @public\n *\n * @return {DataModel} Returns a detached {@link DataModel} instance.\n */\n detachedRoot () {\n const data = this.serialize(DataFormat.FLAT_JSON);\n const schema = this.getSchema();\n\n return new DataModel(data, schema);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of rows in the source {@link DataModel}\n * instance based on a set of dimensions.\n *\n * For each unique dimensional value, a new split is created which creates a unique {@link DataModel} instance for\n * that split\n *\n * If multiple dimensions are provided, it splits the source {@link DataModel} instance with all possible\n * combinations of the dimensional values for all the dimensions provided\n *\n * Additionally, it also accepts a predicate function to reduce the set of rows provided. A\n * {@link link_to_selection | Selection} is performed on all the split {@link DataModel} instances based on\n * the predicate function\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByRow(['Origin'])\n * console.log(splitDt));\n * // This should give three unique DataModel instances, one each having rows only for 'USA',\n * // 'Europe' and 'Japan' respectively\n *\n * @example\n * // without predicate function:\n * const splitDtMulti = dt.splitByRow(['Origin', 'Cylinders'])\n * console.log(splitDtMulti));\n * // This should give DataModel instances for all unique combinations of Origin and Cylinder values\n *\n * @example\n * // with predicate function:\n * const splitWithPredDt = dt.select(['Origin'], fields => fields.Origin.value === \"USA\")\n * console.log(splitWithPredDt);\n * // This should not include the DataModel for the Origin : 'USA'\n *\n *\n * @public\n *\n * @param {Array} dimensionArr - Set of dimensions based on which the split should occur\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByRow (dimensionArr, reducerFn, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n dimensionArr.forEach((fieldName) => {\n if (!fieldsConfig[fieldName]) {\n throw new Error(`Field ${fieldName} doesn't exist in the schema`);\n }\n });\n\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n\n config = Object.assign({}, defConfig, config);\n\n return splitWithSelect(this, dimensionArr, reducerFn, config);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of fields in the source {@link DataModel}\n * instance based on a set of common and unique field names provided.\n *\n * Each DataModel created contains a set of fields which are common to all and a set of unique fields.\n * It also accepts configurations such as saveChild and mode(inverse or normal) to include/exclude the respective\n * fields\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByColumn( [['Acceleration'], ['Horsepower']], ['Origin'])\n * console.log(splitDt));\n * // This should give two unique DataModel instances, both having the field 'Origin' and\n * // one each having 'Acceleration' and 'Horsepower' fields respectively\n *\n * @example\n * // without predicate function:\n * const splitDtInv = dt.splitByColumn( [['Acceleration'], ['Horsepower'],['Origin', 'Cylinders'],\n * {mode: 'inverse'})\n * console.log(splitDtInv));\n * // This should give DataModel instances in the following way:\n * // All DataModel Instances do not have the fields 'Origin' and 'Cylinders'\n * // One DataModel Instance has rest of the fields except 'Acceleration' and the other DataModel instance\n * // has rest of the fields except 'Horsepower'\n *\n *\n *\n * @public\n *\n * @param {Array} uniqueFields - Set of unique fields included in each datamModel instance\n * @param {Array} commonFields - Set of common fields included in all datamModel instances\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByColumn (uniqueFields = [], commonFields = [], config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const normalizedProjFieldSets = [[commonFields]];\n\n config = Object.assign({}, defConfig, config);\n uniqueFields = uniqueFields.length ? uniqueFields : [[]];\n\n\n uniqueFields.forEach((fieldSet, i) => {\n normalizedProjFieldSets[i] = getNormalizedProFields(\n [...fieldSet, ...commonFields],\n allFields,\n fieldConfig);\n });\n\n return splitWithProject(this, normalizedProjFieldSets, config, allFields);\n }\n\n\n}\n\nexport default DataModel;\n","import { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport DataModel from '../export';\nimport reducerStore from '../utils/reducer-store';\nimport { defaultReducerName } from './group-by-function';\nimport { FieldType } from '../enums';\n\n/**\n * This function sanitize the user given field and return a common Array structure field\n * list\n * @param {DataModel} dataModel the dataModel operating on\n * @param {Array} fieldArr user input of field Array\n * @return {Array} arrays of field name\n */\nfunction getFieldArr (dataModel, fieldArr) {\n const retArr = [];\n const fieldStore = dataModel.getFieldspace();\n const dimensions = fieldStore.getDimension();\n\n Object.entries(dimensions).forEach(([key]) => {\n if (fieldArr && fieldArr.length) {\n if (fieldArr.indexOf(key) !== -1) {\n retArr.push(key);\n }\n } else {\n retArr.push(key);\n }\n });\n\n return retArr;\n}\n\n/**\n * This sanitize the reducer provide by the user and create a common type of object.\n * user can give function Also\n * @param {DataModel} dataModel dataModel to worked on\n * @param {Object|function} [reducers={}] reducer provided by the users\n * @return {Object} object containing reducer function for every measure\n */\nfunction getReducerObj (dataModel, reducers = {}) {\n const retObj = {};\n const fieldStore = dataModel.getFieldspace();\n const measures = fieldStore.getMeasure();\n const defReducer = reducerStore.defaultReducer();\n\n Object.keys(measures).forEach((measureName) => {\n if (typeof reducers[measureName] !== 'string') {\n reducers[measureName] = measures[measureName].defAggFn();\n }\n const reducerFn = reducerStore.resolve(reducers[measureName]);\n if (reducerFn) {\n retObj[measureName] = reducerFn;\n } else {\n retObj[measureName] = defReducer;\n reducers[measureName] = defaultReducerName;\n }\n });\n return retObj;\n}\n\n/**\n * main function which perform the group-by operations which reduce the measures value is the\n * fields are common according to the reducer function provided\n * @param {DataModel} dataModel the dataModel to worked\n * @param {Array} fieldArr fields according to which the groupby should be worked\n * @param {Object|Function} reducers reducers function\n * @param {DataModel} existingDataModel Existing datamodel instance\n * @return {DataModel} new dataModel with the group by\n */\nfunction groupBy (dataModel, fieldArr, reducers, existingDataModel) {\n const sFieldArr = getFieldArr(dataModel, fieldArr);\n const reducerObj = getReducerObj(dataModel, reducers);\n const fieldStore = dataModel.getFieldspace();\n const fieldStoreObj = fieldStore.fieldsObj();\n const dbName = fieldStore.name;\n const dimensionArr = [];\n const measureArr = [];\n const schema = [];\n const hashMap = {};\n const data = [];\n let newDataModel;\n\n // Prepare the schema\n Object.entries(fieldStoreObj).forEach(([key, value]) => {\n if (sFieldArr.indexOf(key) !== -1 || reducerObj[key]) {\n schema.push(extend2({}, value.schema()));\n\n switch (value.schema().type) {\n case FieldType.MEASURE:\n measureArr.push(key);\n break;\n default:\n case FieldType.DIMENSION:\n dimensionArr.push(key);\n }\n }\n });\n // Prepare the data\n let rowCount = 0;\n rowDiffsetIterator(dataModel._rowDiffset, (i) => {\n let hash = '';\n dimensionArr.forEach((_) => {\n hash = `${hash}-${fieldStoreObj[_].partialField.data[i]}`;\n });\n if (hashMap[hash] === undefined) {\n hashMap[hash] = rowCount;\n data.push({});\n dimensionArr.forEach((_) => {\n data[rowCount][_] = fieldStoreObj[_].partialField.data[i];\n });\n measureArr.forEach((_) => {\n data[rowCount][_] = [fieldStoreObj[_].partialField.data[i]];\n });\n rowCount += 1;\n } else {\n measureArr.forEach((_) => {\n data[hashMap[hash]][_].push(fieldStoreObj[_].partialField.data[i]);\n });\n }\n });\n\n // reduction\n let cachedStore = {};\n let cloneProvider = () => dataModel.detachedRoot();\n data.forEach((row) => {\n const tuple = row;\n measureArr.forEach((_) => {\n tuple[_] = reducerObj[_](row[_], cloneProvider, cachedStore);\n });\n });\n if (existingDataModel) {\n existingDataModel.__calculateFieldspace();\n newDataModel = existingDataModel;\n }\n else {\n newDataModel = new DataModel(data, schema, { name: dbName });\n }\n return newDataModel;\n}\n\nexport { groupBy, getFieldArr, getReducerObj };\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nconst generateBuckets = (binSize, start, end) => {\n const buckets = [];\n let next = start;\n\n while (next < end) {\n buckets.push(next);\n next += binSize;\n }\n buckets.push(next);\n\n return buckets;\n};\n\nconst findBucketRange = (bucketRanges, value) => {\n let leftIdx = 0;\n let rightIdx = bucketRanges.length - 1;\n let midIdx;\n let range;\n\n // Here use binary search as the bucketRanges is a sorted array\n while (leftIdx <= rightIdx) {\n midIdx = leftIdx + Math.floor((rightIdx - leftIdx) / 2);\n range = bucketRanges[midIdx];\n\n if (value >= range.start && value < range.end) {\n return range;\n } else if (value >= range.end) {\n leftIdx = midIdx + 1;\n } else if (value < range.start) {\n rightIdx = midIdx - 1;\n }\n }\n\n return null;\n};\n\n /**\n * Creates the bin data from input measure field and supplied configs.\n *\n * @param {Measure} measureField - The Measure field instance.\n * @param {string} rowDiffset - The datamodel rowDiffset values.\n * @param {Object} config - The config object.\n * @return {Object} Returns the binned data and the corresponding bins.\n */\nexport function createBinnedFieldData (measureField, rowDiffset, config) {\n let { buckets, binsCount, binSize, start, end } = config;\n const [dMin, dMax] = measureField.domain();\n\n if (!buckets) {\n start = (start !== 0 && (!start || start > dMin)) ? dMin : start;\n end = (end !== 0 && (!end || end < dMax)) ? (dMax + 1) : end;\n\n if (binsCount) {\n binSize = Math.ceil(Math.abs(end - start) / binsCount);\n }\n\n buckets = generateBuckets(binSize, start, end);\n }\n\n if (buckets[0] > dMin) {\n buckets.unshift(dMin);\n }\n if (buckets[buckets.length - 1] <= dMax) {\n buckets.push(dMax + 1);\n }\n\n const bucketRanges = [];\n for (let i = 0; i < buckets.length - 1; i++) {\n bucketRanges.push({\n start: buckets[i],\n end: buckets[i + 1]\n });\n }\n\n const binnedData = [];\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = measureField.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n binnedData.push(datum);\n return;\n }\n\n const range = findBucketRange(bucketRanges, datum);\n binnedData.push(`${range.start}-${range.end}`);\n });\n\n return { binnedData, bins: buckets };\n}\n","import { fnList } from '../operator/group-by-function';\n\nexport const { sum, avg, min, max, first, last, count, std: sd } = fnList;\n","import DataModel from './datamodel';\nimport {\n compose,\n bin,\n select,\n project,\n groupby as groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n} from './operator';\nimport * as Stats from './stats';\nimport * as enums from './enums';\nimport { DateTimeFormatter } from './utils';\nimport { DataFormat, FilteringMode, DM_DERIVATIVES } from './constants';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport pkg from '../package.json';\n\nconst Operators = {\n compose,\n bin,\n select,\n project,\n groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n};\n\nconst version = pkg.version;\nObject.assign(DataModel, {\n Operators,\n Stats,\n DM_DERIVATIVES,\n DateTimeFormatter,\n DataFormat,\n FilteringMode,\n InvalidAwareTypes,\n version\n}, enums);\n\nexport default DataModel;\n","import { persistDerivations } from '../helper';\nimport { DM_DERIVATIVES } from '../constants';\n\n/**\n * DataModel's opearators are exposed as composable functional operators as well as chainable operators. Chainable\n * operators are called on the instances of {@link Datamodel} and {@link Relation} class.\n *\n * Those same operators can be used as composable operators from `DataModel.Operators` namespace.\n *\n * All these operators have similar behaviour. All these operators when called with the argument returns a function\n * which expects a DataModel instance.\n *\n * @public\n * @module Operators\n * @namespace DataModel\n */\n\n/**\n * This is functional version of selection operator. {@link link_to_selection | Selection} is a row filtering operation.\n * It takes {@link SelectionPredicate | predicate} for filtering criteria and returns a function.\n * The returned function is called with the DataModel instance on which the action needs to be performed.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection opearation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * [Warn] Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * [Error] `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @example\n * const select = DataModel.Operators.select;\n * usaCarsFn = select(fields => fields.Origin.value === 'USA');\n * usaCarsDm = usaCarsFn(dm);\n * console.log(usaCarsDm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {SelectionPredicate} selectFn - Predicate funciton which is called for each row with the current row\n * ```\n * function (row, i) { ... }\n * ```\n * @param {Object} [config] - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const select = (...args) => dm => dm.select(...args);\n\n/**\n * This is functional version of projection operator. {@link link_to_projection | Projection} is a column filtering\n * operation.It expects list of fields name and either include those or exclude those based on {@link FilteringMode} on\n * the resultant variable.It returns a function which is called with the DataModel instance on which the action needs\n * to be performed.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const project = (...args) => dm => dm.project(...args);\n\n/**\n * This is functional version of binnig operator. Binning happens on a measure field based on a binning configuration.\n * Binning in DataModel does not aggregate the number of rows present in DataModel instance after binning, it just adds\n * a new field with the binned value. Refer binning {@link example_of_binning | example} to have a intuition of what\n * binning is and the use case.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non uniform buckets\n * - providing bin count\n * - providing each bin size\n *\n * When custom buckets are provided as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const buckets = {\n * start: 30\n * stops: [80, 100, 110]\n * };\n * const config = { buckets, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(dm);\n *\n * @text\n * When `binCount` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binCount: 5, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @text\n * When `binSize` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binSize: 200, name: 'binnedHorsepower' }\n * const binnedDm = dataModel.bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {String} name Name of measure which will be used to create bin\n * @param {Object} config Config required for bin creation\n * @param {Array.} config.bucketObj.stops Defination of bucket ranges. Two subsequent number from arrays\n * are picked and a range is created. The first number from range is inclusive and the second number from range\n * is exclusive.\n * @param {Number} [config.bucketObj.startAt] Force the start of the bin from a particular number.\n * If not mentioned, the start of the bin or the lower domain of the data if stops is not mentioned, else its\n * the first value of the stop.\n * @param {Number} config.binSize Bucket size for each bin\n * @param {Number} config.binCount Number of bins which will be created\n * @param {String} config.name Name of the new binned field to be created\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const bin = (...args) => dm => dm.bin(...args);\n\n/**\n * This is functional version of `groupBy` operator.Groups the data using particular dimensions and by reducing\n * measures. It expects a list of dimensions using which it projects the datamodel and perform aggregations to reduce\n * the duplicate tuples. Refer this {@link link_to_one_example_with_group_by | document} to know the intuition behind\n * groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupBy = DataModel.Operators.groupBy;\n * const groupedFn = groupBy(['Year'], { horsepower: 'max' } );\n * groupedDM = groupByFn(dm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const groupBy = (...args) => dm => dm.groupBy(...args);\n\n/**\n * Enables composing operators to run multiple operations and save group of operataion as named opration on a DataModel.\n * The resulting DataModel will be the result of all the operation provided. The operations provided will be executed in\n * a serial manner ie. result of one operation will be the input for the next operations (like pipe operator in unix).\n *\n * Suported operations in compose are\n * - `select`\n * - `project`\n * - `groupBy`\n * - `bin`\n * - `compose`\n *\n * @example\n * const compose = DataModel.Operators.compose;\n * const select = DataModel.Operators.select;\n * const project = DataModel.Operators.project;\n *\n * let composedFn = compose(\n * select(fields => fields.netprofit.value <= 15),\n * project(['netprofit', 'netsales']));\n *\n * const dataModel = new DataModel(data1, schema1);\n *\n * let composedDm = composedFn(dataModel);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} operators: An array of operation that will be applied on the\n * datatable.\n *\n * @returns {DataModel} Instance of resultant DataModel\n */\nexport const compose = (...operations) =>\n (dm, config = { saveChild: true }) => {\n let currentDM = dm;\n let firstChild;\n const derivations = [];\n\n operations.forEach((operation) => {\n currentDM = operation(currentDM);\n derivations.push(...currentDM._derivation);\n if (!firstChild) {\n firstChild = currentDM;\n }\n });\n\n if (firstChild && firstChild !== currentDM) {\n firstChild.dispose();\n }\n\n // reset all ancestorDerivation saved in-between compose\n currentDM._ancestorDerivation = [];\n persistDerivations(\n dm,\n currentDM,\n DM_DERIVATIVES.COMPOSE,\n null,\n derivations\n );\n\n if (config.saveChild) {\n currentDM.setParent(dm);\n } else {\n currentDM.setParent(null);\n }\n\n return currentDM;\n };\n","/**\n * Wrapper on calculateVariable() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const calculateVariable = (...args) => dm => dm.calculateVariable(...args);\n\n/**\n * Wrapper on sort() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const sort = (...args) => dm => dm.sort(...args);\n","import { crossProduct } from './cross-product';\nimport { naturalJoinFilter } from './natural-join-filter-function';\n\nexport function naturalJoin (dataModel1, dataModel2) {\n return crossProduct(dataModel1, dataModel2, naturalJoinFilter(dataModel1, dataModel2), true);\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', {\n value: true\n});\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _lib = require('./lib');\n\nvar _lib2 = _interopRequireDefault(_lib);\n\nvar _containerManager = require('./container-manager');\n\nvar _containerManager2 = _interopRequireDefault(_containerManager);\n\nvar slLib = _lib2['default'].init(typeof window !== \"undefined\" ? window : undefined),\n doc = slLib.win.document,\n M = slLib.win.Math,\n max = M.max,\n round = M.round,\n BLANK = '',\n htmlSplCharSpace = { ' ': ' ' },\n documentSupport = slLib.getDocumentSupport(),\n SVG_BBOX_CORRECTION = documentSupport.isWebKit ? 0 : 4.5;\n\n/*\n * Create new instance of SmartLabelManager.\n *\n * SmartLabelManager controls the lifetime of the execution space where the text's metrics will be calculated.\n * This takes a string for a given style and returns the height, width.\n * If a bound box is defined it wraps the text and returns the wrapped height and width.\n * It allows to append ellipsis at the end if the text is truncated.\n *\n * @param {String | Number} id - Id of the instance. If the same id is passed, it disposes the old instance and\n * save the new one;\n * @param {String | HTMLElement} container - The id or the instance of the container where the intermediate dom\n * elements are to be attached. If not passed, it appends in div\n *\n * @param {Boolean} useEllipses - This decides if a ellipses to be appended if the text is truncated.\n * @param {Object} options - Control options\n * {\n * maxCacheLimit: No of letter to be cached. Default: 500.\n * }\n * @constructor\n */\nfunction SmartLabelManager(id, container, useEllipses, options) {\n var wrapper,\n prop,\n max,\n prevInstance,\n isBrowserLess = false,\n store = SmartLabelManager.store;\n\n if (typeof id === 'undefined' || typeof id === 'object') {\n return;\n }\n\n if (prevInstance = store[id]) {\n prevInstance.dispose();\n }\n\n store[id] = this;\n options = options || {};\n options.maxCacheLimit = isFinite(max = options.maxCacheLimit) ? max : slLib.maxDefaultCacheLimit;\n\n if (typeof container === 'string') {\n container = doc.getElementById(container);\n }\n\n wrapper = slLib.createContainer(container);\n wrapper.innerHTML = slLib.testStrAvg;\n\n if (documentSupport.isHeadLess || !documentSupport.isIE && !wrapper.offsetHeight && !wrapper.offsetWidth) {\n isBrowserLess = true;\n }\n\n wrapper.innerHTML = '';\n for (prop in slLib.parentContainerStyle) {\n wrapper.style[prop] = slLib.parentContainerStyle[prop];\n }\n\n this.id = id;\n this.parentContainer = wrapper;\n\n this._containerManager = new _containerManager2['default'](wrapper, isBrowserLess, 10);\n this._showNoEllipses = !useEllipses;\n this._init = true;\n this.style = {};\n this.options = options;\n\n this.setStyle();\n}\n\n/*\n * getSmartText returns the text separated by
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'];","(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(\"hyperdis\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hyperdis\"] = factory();\n\telse\n\t\troot[\"hyperdis\"] = 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 = 0);\n","const makeEntry = (arr, sCon) => {\n arr.forEach((elem) => {\n if (elem === undefined || elem === null) {\n return;\n }\n sCon[elem] = 1;\n });\n};\n\nexport default class ForeignSet {\n constructor (arr) {\n this._set = {};\n makeEntry(arr, this._set);\n }\n\n append (arr) {\n makeEntry(arr, this._set);\n return this;\n }\n\n toArray () {\n return Object.keys(this._set);\n }\n\n static difference (set1, set2) {\n let key;\n const filteredKeys = [],\n s1 = set1._set,\n s2 = set2._set;\n for (key in s1) {\n if (!({}).hasOwnProperty.call(s1, key)) {\n continue;\n }\n if (key in s2) {\n continue;\n }\n filteredKeys.push(key);\n }\n return new ForeignSet(filteredKeys);\n }\n}\n","/* global window */\n\nimport ForeignSet from './set';\n\nconst\n 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 minMsThreshold = 16,\n /* istanbul ignore next */win = typeof window === 'undefined' ? (this || {}) : window,\n /* istanbul ignore next */ reqAnimFrame = win.requestAnimationFrame || win.webkitRequestAnimationFrame ||\n win.mozRequestAnimationFrame || win.oRequestAnimationFrame ||\n win.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, minMsThreshold);\n },\n\n getTimeBasedId = () => {\n if (getTimeBasedId.__lastTime === new Date().getTime()) {\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n }\n\n getTimeBasedId.__id = 0;\n getTimeBasedId.__lastTime = new Date().getTime();\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n },\n pullableRecent = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const\n hist = node.history,\n l = hist.length - 1;\n return [hist[l - 1 < 0 ? 0 : l - 1], hist[l]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n pullableEnd = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const hist = node.history;\n return [hist[0], hist[hist.length - 1]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n unique = fns => fns\n .reduce((store, fn) => {\n // @warn function with side effect, it mutates the store passed during initialization\n if (fn.__id in store.map) {\n return store;\n }\n\n store.map[fn.__id] = 1;\n store.unique.push(fn);\n\n return store;\n }, { map: {}, unique: [] })\n .unique,\n compose = fns => () => {\n fns.forEach(fn => fn());\n },\n flat = (...params) => {\n const res = [];\n params.forEach(param => res.push(...param));\n return res;\n },\n identityMap = arrays => arrays,\n splitPathProp = (path) => {\n const pathArr = path.split('.'),\n len = pathArr.length;\n return [pathArr.slice(0, len - 1), pathArr[len - 1]];\n },\n scheduler = (onFinishCallback) => {\n let queue = [],\n animationFrame = null;\n\n onFinishCallback = onFinishCallback &&\n typeof onFinishCallback === 'function' && onFinishCallback || (() => { });\n\n return (listeners, payload) => {\n [].push.apply(queue, listeners);\n if (animationFrame === null) {\n animationFrame = reqAnimFrame(() => {\n const tempQ = queue.slice(0);\n queue.length = 0;\n animationFrame = null;\n\n unique(tempQ).forEach(fn => fn());\n onFinishCallback(payload);\n });\n }\n };\n },\n fetch = namedNode => (...params) => params.map((param) => {\n const node = namedNode[param];\n return {\n name: node.name,\n qualifiedName: node.qualifiedName,\n value: node.seed\n };\n }),\n fetchAggregator = (...params) => ({\n dependencies: params.slice(0, params.length - 1),\n fn: params[params.length - 1]\n }),\n getUpstreamNodes = (list) => {\n let res = [];\n const map = {};\n list.forEach(node => map[node.qualifiedName] = -1);\n function rec (arr) {\n arr.forEach((node) => {\n let qname,\n placedIndex,\n preArr,\n postArr;\n if (!((qname = node.qualifiedName) in map)) {\n map[qname] = res.push(node) - 1;\n } else {\n placedIndex = map[qname];\n if (placedIndex !== -1 && placedIndex !== res.length - 1) {\n // If not the last element, readjust the array so that the later dependency position is saved\n preArr = res.slice(0, placedIndex);\n postArr = res.slice(placedIndex + 1);\n res = preArr.concat(postArr);\n\n // reset the index in map\n postArr.forEach((elem, i) => map[elem.qualifiedName] = i + preArr.length);\n map[qname] = res.push(node) - 1;\n }\n }\n rec(node.outgoingEdges);\n });\n }\n rec(list);\n return res;\n },\n resolver = {\n accumulate: (...params) => {\n const resp = {};\n params.forEach((nodeDetails) => {\n Object.assign(resp, { [nodeDetails.name]: nodeDetails.value });\n });\n return resp;\n },\n identity: nodeDetails => nodeDetails.value\n };\n\nfunction resolveDependencyOrder (node, resolved, resolveMap) {\n let qname;\n node.edges.forEach((neighbour) => {\n resolveDependencyOrder(neighbour, resolved, resolveMap);\n });\n\n if (node.isRoot() || (qname = node.qualifiedName) in resolveMap) {\n return;\n }\n resolved.push(node);\n resolveMap[qname] = 1;\n}\n\nclass CustomResolver {\n constructor (resolver) {\n this.fn = resolver;\n this.dep = [];\n }\n\n addDependencies(...dep) {\n this.dep.push(...dep);\n return this;\n }\n\n getDependencies () {\n return this.dep;\n }\n\n get () {\n return this.fn;\n }\n}\n\nexport {\n isSimpleObject,\n scheduler,\n compose,\n flat,\n identityMap,\n pullableEnd,\n pullableRecent,\n unique,\n splitPathProp,\n resolver,\n ForeignSet,\n resolveDependencyOrder,\n fetch,\n fetchAggregator,\n CustomResolver,\n getUpstreamNodes\n};\n","export default class GraphNode {\n constructor (name, qualifiedName, options) {\n /* istanbul ignore next */options = options || {};\n this.name = name;\n this.qualifiedName = qualifiedName;\n this.edges = [];\n this.outgoingEdges = [];\n this._seed = null;\n this.requireResolve = true;\n this.retriever = options.retriever;\n this.history = [];\n this.resolver = null;\n this.electricEdges = [];\n }\n\n addDependencies (...dep) {\n this.edges.push(...dep);\n dep.forEach(entry => entry.outgoingEdges.push(this));\n return this;\n }\n\n addElectricNode (node) {\n this.electricEdges.push(node);\n return this;\n }\n\n get seed () {\n return this._seed;\n }\n\n set seed (value) {\n this._seed = value;\n this.requireResolve = true;\n return this;\n }\n\n resolve () {\n this.seed = this.resolver(...this.retrieveDetails());\n this.history.push(this.seed);\n this.requireResolve = false;\n return this;\n }\n\n retrieveDetails () {\n if (this.edges.length === 0) {\n return [{\n name: this.name,\n qualifiedName: this.qualifiedName,\n value: this.seed\n }];\n }\n return this.retriever(...this.edges.map(edge => edge.qualifiedName));\n }\n\n repeatHead () {\n const\n history = this.history,\n head = history[history.length - 1];\n // @todo- Akash, write test case if history.length === 0 to pass code coverage\n if (history.length === 0) {\n return this;\n }\n history.push(head);\n return this;\n }\n\n flush () {\n const hist = this.history,\n head = hist[hist.length - 1];\n hist.length = 0;\n hist.push(head);\n return this;\n }\n\n isRoot () {\n return this.name === null;\n }\n}\n","import {\n pullableRecent,\n pullableEnd\n} from './utils';\n\nexport default class ElectricNode {\n constructor () {\n this.edges = [];\n this.listeners = {\n nextFrame: [],\n currentFrame: []\n };\n }\n\n addEdges (...nodes) {\n this.edges.push(...nodes);\n return this;\n }\n\n regListenerForCurrFrame (fn) {\n const lstnrs = this.listeners.currentFrame;\n let index = lstnrs.push(pullableRecent(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.currentFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n regListenerForNextFrame (fn) {\n const lstnrs = this.listeners.nextFrame;\n let index = lstnrs.push(pullableEnd(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.nextFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n hasNextFrameListener () {\n return !!this.listeners.nextFrame.length;\n }\n}\n","import {\n isSimpleObject,\n resolver,\n // upstreamNodes,\n flat,\n resolveDependencyOrder,\n getUpstreamNodes,\n ForeignSet,\n fetch,\n CustomResolver,\n scheduler\n} from './utils';\nimport Node from './graph-node';\nimport ElectricNode from './electric-node';\n\nexport default class Graph {\n constructor () {\n this.qualifiedNodeMap = {};\n this.retriever = fetch(this.qualifiedNodeMap);\n this.root = new Node(null, null, { retriever: this.retriever });\n this.root.resolver = resolver.accumulate;\n\n this._wholeSet = null;\n this._propagate = true;\n this.propagationOverride = {\n currentFrameListeners: false,\n nextFrameListeners: false\n };\n\n this._schedule = scheduler((payload) => {\n let qname;\n for (qname in payload.flushTarget) {\n if (!({}).hasOwnProperty.call(this.qualifiedNodeMap, qname)) {\n return;\n }\n this.qualifiedNodeMap[qname].flush();\n }\n });\n }\n\n createNodesFrom (obj, mount) {\n let val,\n resolveReqList;\n const qualifiedNodeMap = this.qualifiedNodeMap,\n root = this.root,\n retriever = this.retriever;\n\n (function rec (objn, qualifiedName, history) {\n let key,\n qname,\n perv,\n node;\n\n for (key in objn) {\n if (!({}).hasOwnProperty.call(objn, key)) {\n continue;\n }\n qname = `${qualifiedName}${key}`;\n node = new Node(key, qname, { retriever });\n qualifiedNodeMap[qname] = node;\n\n if ((perv = history.perv) !== undefined) {\n perv.addDependencies(node);\n } else {\n // top most level entries\n root.addDependencies(node);\n }\n\n if (isSimpleObject(val = objn[key])) {\n rec(val, `${qualifiedName}${key}.`, { perv: node });\n node.resolver = resolver.accumulate;\n } else if (val instanceof CustomResolver) {\n node.resolver = val.get();\n node.addDependencies(...val.getDependencies().map(qname => qualifiedNodeMap[qname]));\n } else {\n node.resolver = resolver.identity;\n node.seed = val;\n // node.resolve();\n }\n }\n }(obj, mount === null ? '' : `${mount}.`, {\n perv: qualifiedNodeMap[mount]\n }));\n\n this._wholeSet = new ForeignSet(Object.keys(this.qualifiedNodeMap));\n\n // Recalculate the model without firing the listeners\n // @todo selective branch resolve. Currently resolve gets called even for a branch which was updated\n resolveReqList = this.constructor.getResolvedList(root).concat(root).filter(node => node.requireResolve);\n resolveReqList.forEach(node => node.resolve());\n getUpstreamNodes(resolveReqList).forEach(node => node.resolve());\n return this;\n }\n\n getNodeValue (prop) {\n if (prop in this.qualifiedNodeMap) {\n return this.qualifiedNodeMap[prop].seed;\n }\n return undefined;\n }\n\n createElectricNodeOf (props, fnSpec) {\n const nodes = props.map(prop => this.qualifiedNodeMap[prop]),\n eNode = new ElectricNode().addEdges(...nodes);\n\n nodes.forEach(node => node.addElectricNode(eNode));\n return eNode[`regListenerFor${fnSpec.type}`](fnSpec.fn);\n }\n\n update (...params) {\n let changedSet,\n upstreamNodes;\n const\n electricEdges = [],\n nodes = params.map((entry) => {\n entry[0].seed = entry[1];\n return entry[0];\n });\n nodes.forEach(node => node.resolve());\n electricEdges.push(...flat(...nodes.map(node => node.electricEdges)));\n changedSet = new ForeignSet(nodes.map(node => node.qualifiedName));\n\n if (!this._propagate) {\n this.__execUniqueElectricEdges(electricEdges);\n this._propagate = true;\n return this;\n }\n\n upstreamNodes = getUpstreamNodes(nodes);\n upstreamNodes.forEach(upstreamNode => upstreamNode.resolve());\n changedSet.append(upstreamNodes.map(node => node.qualifiedName));\n electricEdges.push(...flat(...upstreamNodes.map(node => node.electricEdges)));\n\n this.__execUniqueElectricEdges(Array.from(new Set(electricEdges)), changedSet);\n return this;\n }\n\n __execUniqueElectricEdges (electricEdges, changedSet) {\n const\n cfLstnrs = [], // current frame listeners\n nfLstnrs = []; // next frame listeners\n if (changedSet) {\n const\n differenceSet = ForeignSet.difference(this._wholeSet, changedSet),\n entries = differenceSet.toArray();\n\n entries.forEach(entry => this.qualifiedNodeMap[entry].repeatHead());\n }\n\n electricEdges.forEach((e) => {\n cfLstnrs.push(...e.listeners.currentFrame);\n });\n electricEdges.forEach((e) => {\n nfLstnrs.push(...e.listeners.nextFrame);\n });\n\n !this.propagationOverride.currentFrameListeners && cfLstnrs.forEach(fn => fn());\n !this.propagationOverride.nextFrameListeners && this._schedule(nfLstnrs, { flushTarget: changedSet });\n this.resetPropagationOverride();\n return this;\n }\n\n resetNodeValue (...qnames) {\n const nodes = qnames.map(qname => this.qualifiedNodeMap[qname]),\n args = nodes.map(node => [node, node.seed]);\n this.update(...args);\n return this;\n }\n\n static getResolvedList (node) {\n const resolved = [];\n resolveDependencyOrder(node, resolved, {});\n return resolved;\n }\n\n stopPropagation () {\n this._propagate = false;\n return this;\n }\n\n resetPropagationOverride () {\n this.propagationOverride.currentFrameListeners = false;\n this.propagationOverride.nextFrameListeners = false;\n return this;\n }\n\n setPropagationOverride (key) {\n this.propagationOverride[`${key}Listeners`] = true;\n return this;\n }\n\n getNodeFromQualifiedName (qname) {\n return this.qualifiedNodeMap[qname];\n }\n}\n","import Graph from './graph';\nimport { CustomResolver, fetchAggregator } from './utils';\n\n/**\n * The container class for Hyperdis. Hyperdis is an enabler for observable object with few interesting features like,\n * calculated property, next frame and same frame listeners, multiple listeners etc with a dependency resolving system.\n * It internally uses a graph to hold the hierarchial relationship of a object. Model is merely a container which\n * ties all the components together.\n *\n * @todo Circular dependency detection is not present\n *\n * @example check src/index.spec.js\n * @class\n */\nclass Model {\n constructor () {\n this._graph = new Graph();\n this._lockFlag = false;\n this._reqQ = [];\n }\n\n /**\n * Static method to create and init the model with an observable seed\n *\n * @param {Object} obj The target object which is required to be made observable\n * @return {Model} instance of the observable object model\n */\n static create (obj) {\n return new Model()._addPropInModel(null, obj);\n }\n\n /**\n * Appends more observable property on the already observable instance. This mutates the original model.\n *\n * This function works in two mode. One being\n * @param {String} mountPoint the property on which the new set of properties will be mounted. If its a nested\n * property then the mountPoint has to be written such a way so it feels like you are\n * accessing the object. If the mount point is not found then he obeservables are added in\n * the root.\n * @param {Object} The target object which is required to be made observable\n *\n * Another being\n * @param {Object} The target object which is required to be made observable\n *\n * @return {Model} instance of the observable object model\n */\n append (...params) {\n let mountPoint,\n obj;\n\n if (params.length === 1) {\n mountPoint = null;\n obj = params[0];\n } else {\n mountPoint = params[0];\n obj = params[1];\n }\n\n this._addPropInModel(mountPoint, obj);\n return this;\n }\n\n /**\n * Creates a calculated variable from existing variable. This variable can't be updated from outside.\n * @param {string} mountpoint property path on which the new variable will be placed\n * @param {string} name name of the variable. If the variable could have hierarchy like `limits.start`\n * @param {Function} fn funtion where the dependent variables are injected based on the dependency requirement\n */\n calculatedProp (...params) {\n let calculationConfig,\n customResolver,\n varName,\n mount,\n fetchFn;\n\n if (params.length > 2) {\n mount = params[0];\n varName = params[1];\n fetchFn = params[2];\n } else {\n mount = null;\n varName = params[0];\n fetchFn = params[1];\n }\n\n calculationConfig = fetchFn(fetchAggregator);\n customResolver = new CustomResolver(calculationConfig.fn);\n customResolver.addDependencies(...calculationConfig.dependencies);\n\n this._addPropInModel(mount, { [varName]: customResolver });\n return this;\n }\n\n // eslint-disable-next-line require-jsdoc\n _addPropInModel (mountPoint, obj) {\n this._graph.createNodesFrom(obj, mountPoint);\n return this;\n }\n\n /**\n * Register a listener in the current frame when a property or group of properties is changed.\n *\n * @example\n * This function takes a single or group of property and handler which is called when any of the properties are\n * changed.\n * When a single property is changed the handler is called with two parameter, what was the old value of the state\n * property and what is the new value.\n * myState.on('range.start', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 9);\n * // Output\n * Value before prop change 1\n * Value after prop change 9\n *\n * If a handler is registered on change of a property which has another state property as value, then the handler\n * gets called whenever any state property connected to it gets changed\n *\n * myState.on('range', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 10);\n * myState.prop('range.type.absolute', false);\n *\n * // Output\n * Value before prop change\n * range {\n * start: 9,\n * end: 5,\n * type: {\n * absolute: true\n * }\n * }\n * Value after prop change\n * range: {\n * start: 10,\n * end: 5,\n * type: {\n * absolute: false\n * }\n * }\n * If a handler is registered with more than one property change then, the handler is called when any of the\n * properties gets changed. In this cast the handler is called with more than one parameter: each for one state\n * property which is registered for listening. Each parameter is of type array containing [oldValue, newValue]\n *\n * myState.on('range.start', 'range.end', (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * myState.prop('range.start', 12);\n *\n * // Output\n * Start [10, 12]\n * End [5, 5]\n *\n * myState.prop('range.end', 7);\n *\n * // Output\n * Start [12, 12]\n * End [5, 7]\n *\n * The on returns a function which is when called the listener registered gets unregistered\n *\n * let unsub = myState.on(['range.start', 'range.end'], (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * // Unsubscribe\n * unsub()\n *\n * On takes an optional boolean value as the last parameter, which if passed as a true value the handler gets called\n * during registration itself.\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n on (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed in the current stack frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'CurrFrame',\n fn\n });\n\n if (instantCall) {\n // Bar current next frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('nextFrame').resetNodeValue(...props);\n }\n return unsub;\n }\n\n /**\n * Register a listener for the next frame when a property or group of properties is changed.\n *\n * @example\n * See the examples for the on listener\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties. Here the oldvalue is last value of the last frame\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n next (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed at the tick of next animation frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'NextFrame',\n fn\n });\n\n // @todo check support for this from the graph side\n if (instantCall) {\n // Bar current frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('currentFrame').resetNodeValue(...props);\n }\n\n return unsub;\n }\n\n /**\n * Lock queues the request of property change and releases the change when unlock is called. This is helpful when\n * multiple property is getting called and the model listeners are to be fired once at the end of update.\n *\n * @return {Model} instance of the model\n */\n lock () {\n this._lockFlag = true;\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * Unlock unleashes the change done after the lock was called.\n\n * @return {Model} instance of the model\n */\n unlock () {\n this._lockFlag = false;\n this.setProp(...this._reqQ);\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * This acts as getter and setter. If the function is called by passing only one argument, it retrieve the value\n * associated with the property. If the same function is called using two parameters, first one being the property\n * and second one being the value, then the value is set for the property and the handlers are called (if any)\n * which got registered using the on function\n *\n * Getter\n * @param {string} prop property path whose value to be retrieved\n * @return {Object} value of the property at the time of call\n *\n * Setter\n * @param {string} property property path whose value to be ser\n * @return {Model} instance of the model\n */\n prop (...params) {\n let prop,\n val,\n len;\n\n switch (len = params.length) {\n case 1:\n prop = params[0];\n break;\n\n case 2:\n prop = params[0];\n val = params[1];\n break;\n\n default:\n return this;\n }\n\n if (len === 2) {\n this._lockFlag ? this._reqQ.push([prop, val]) : this.setProp([prop, val]);\n return this;\n }\n\n return this._graph.getNodeValue(prop);\n }\n\n // eslint-disable-next-line require-jsdoc\n setProp (...props) {\n // Filter out the calculated variables, so that it cant be changed from outside\n // @todo if a node is not leafValue, and change is called, ignore it too\n // props = props.filter(prop => !(VirtualObj.walkTill(prop[0].split('.'), this._vObj).leafValue()\n // instanceof CalculatedVar));\n\n if (props.length === 0) {\n return this;\n }\n\n this._graph.update(...props.map(prop => [this._graph.getNodeFromQualifiedName(prop[0]), prop[1]]));\n return this;\n }\n\n /**\n * Retrieves the graph representation of the object\n * @return {Graph} instance of the graph associated to the model\n */\n graph () {\n return this._graph;\n }\n\n /**\n * Get serialized data from the model\n *\n * @return {Object} Serialized data\n */\n serialize () {\n return this._graph.root.seed;\n }\n}\n\nexport default Model;\n","import Model from './model';\n\nexport default Model;\n","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 copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\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]) // eslint-disable-line no-prototype-builtins\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.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\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\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 formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\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://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) return hcl2lab(o);\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.l < 100 ? 0 : NaN, 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\nfunction hcl2lab(o) {\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\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 hcl2lab(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 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","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 {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","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","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","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(date - date.getMilliseconds());\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, durationSecond} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\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, durationSecond} from \"./duration\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\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","export const UNIT_GLOBAL_NAMESPACE = 'app.units';\nexport const UNIT_LOCAL_NAMESPACE = 'local.units';\nexport const LAYER_LOCAL_NAMESPACE = 'local.layers';\nexport const LAYER_GLOBAL_NAMESPACE = 'app.layers';\nexport const GROUP_GLOBAL_NAMESPACE = 'app.group';\nexport const GROUP_LOCAL_NAMESPACE = 'local.group';\nexport const CANVAS_LOCAL_NAMESPACE = 'local.canvas';\nexport const CANVAS_GLOBAL_NAMESPACE = 'app.canvas';\n\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 MATRIX_CREATED: 'matrixCreated'\n};\n\nexport default CommonProps;\n","export const COORD_TYPES = {\n POLAR: 'polar',\n CARTESIAN: 'cartesian'\n};\nexport const DATA_TYPE = {\n FUNCTION: 'function',\n STRING: 'string',\n NUMBER: 'number',\n BOOLEAN: 'Boolean'\n};\nexport const SORT_ORDER_ASCENDING = 'asc';\nexport const SORT_ORDER_DESCENDING = 'desc';\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, ccw = !!ccw;\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 = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\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 oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var 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","import { defaultValue } from '../common-utils';\n\nconst sortSelection = (dataObjects, updateData, sortFn) =>\n (a, b) => {\n const kA = a[0];\n const kB = b[0];\n return sortFn([a[0], dataObjects.get(kA), updateData.get(kA)], [kB, dataObjects.get(kB), updateData.get(kB)]);\n };\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 (idGetter) {\n this._dataObjects = new Map();\n this._updateData = new Map();\n this._enterData = new Map();\n this._exitData = new Map();\n this._idGetter = idGetter;\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) {\n const entryData = new Map();\n const exitdata = new Map();\n const tempMap = new Map();\n const duplicateData = new Map();\n const updatedData = this._updateData;\n const idGetter = this._idGetter;\n\n newData.forEach((...params) => {\n const key = idGetter ? idGetter(...params) : params[1];\n if (!tempMap.has(key)) {\n tempMap.set(key, params[0]);\n } else {\n duplicateData.push(key, params[0]);\n }\n });\n\n let val;\n // prepare enter data\n let entries = tempMap.entries();\n while (val = entries.next().value) {\n if (!updatedData.has(val[0])) {\n entryData.set(val[0], val[1]);\n } else {\n updatedData.set(val[0], val[1]);\n }\n }\n // prepare exit data\n entries = updatedData.entries();\n while (val = entries.next().value) {\n if (!tempMap.has(val[0])) {\n exitdata.set(val[0], val[1]);\n }\n }\n\n // put duplicate data to exit list\n entries = duplicateData.entries();\n while (val = entries.next().value) {\n exitdata.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = updatedData;\n newSelection._dataObjects = this._dataObjects;\n newSelection._enterData = entryData;\n newSelection._exitData = exitdata;\n\n return newSelection;\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 Selection\n */\n append (callback) {\n let val;\n const dataObjects = new Map();\n const data = new Map();\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n dataObjects.set(val[0], callback(val[1]));\n data.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = data;\n newSelection._dataObjects = dataObjects;\n\n return newSelection;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {Selection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\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 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 (target) {\n const mergedObjects = new Map();\n const mergedData = new Map();\n let val;\n let entries;\n\n // merge Object and data present in this selection\n entries = this._updateData.entries();\n while (val = entries.next().value) {\n if (!this._exitData.has(val[0])) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], this._dataObjects.get(val[0]));\n }\n }\n\n // merge object from target selection\n entries = target._updateData.entries();\n while (val = entries.next().value) {\n if (!(mergedData.has(val[0]) || target._exitData.has(val[0]))) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], target._dataObjects.get(val[0]));\n }\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = mergedData;\n newSelection._dataObjects = mergedObjects;\n\n return newSelection;\n }\n\n each (fn) {\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n fn(val[1], this._updateData.get(val[0]), val[0]);\n }\n }\n\n map (fn) {\n const newdata = new Map();\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n newdata.set(val[0], fn(val[1], this._updateData.get(val[0]), val[0]));\n }\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = this._updateData;\n newSelection._dataObjects = newdata;\n\n return newSelection;\n }\n\n remove () {\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n\n currentData.clear();\n\n return this;\n }\n\n sort (sortFn) {\n const updateData = this._updateData;\n const dataObjects = this._dataObjects;\n const sortSel = sortSelection(dataObjects, updateData, sortFn);\n\n this._updateData = new Map([...updateData.entries()].sort(sortSel));\n this._dataObjects = new Map([...dataObjects.entries()].sort(sortSel));\n return this;\n }\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 let val;\n const objects = [];\n const dataObjects = this._dataObjects;\n // select the data to create object\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n if (dataObjects.has(val[0])) {\n objects.push(dataObjects.get(val[0]));\n }\n }\n\n return objects;\n }\n}\n\nexport default Selection;\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","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype, DateTimeFormatter, DM_DERIVATIVES, default as DataModel } 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 { dataSelect } from './DataSystem';\nimport { DATA_TYPE, SORT_ORDER_ASCENDING, SORT_ORDER_DESCENDING } from './enums';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst { CATEGORICAL, TEMPORAL } = DimensionSubtype;\nconst { STRING, FUNCTION } = DATA_TYPE;\nconst { InvalidAwareTypes } = DataModel;\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.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.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 const domArr = [];\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n for (let i = 0, len = data.length; i < len; i++) {\n const arr = data[i];\n const [field0, field1] = fields;\n const arr0 = arr.filter(d => !isNaN(d[field0]));\n const arr1 = arr.filter(d => !isNaN(d[field1]));\n if (arr0.length || arr1.length) {\n const firstMin = getMin(arr0, field0);\n const secondMin = getMin(arr1, field1);\n const firstMax = getMax(arr0, field0);\n const secondMax = getMax(arr1, field1);\n domArr.push([Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)]);\n }\n }\n domain = domArr.length ? [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))] : [];\n break;\n }\n return domain;\n};\n\nconst sanitizeDomainWhenEqual = (domain) => {\n if (domain[0] === domain[1]) {\n domain[0] = domain[0] > 0 ? 0 : domain[0];\n domain[1] = domain[1] > 0 ? domain[1] : 0;\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 && dom.length);\n if (domains.length) {\n if (fieldType === CATEGORICAL) {\n domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\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\nconst getNearestValue = (data, key) => {\n const filterData = data.filter(d => typeof d === 'number');\n return filterData[getClosestIndexOf(filterData, key)];\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 *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object}\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} name\n * @return {Object}\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\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 * 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\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const { sanitization, preset, onset, typeChecker, defaultValue: defVal } = propInfo[1];\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n if (defVal) {\n context[`_${prop}`] = defVal;\n }\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0], context[`_${prop}`]);\n }\n if (preset) {\n preset(context, value);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n if (onset) {\n onset(context, value);\n }\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 *\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\n .registerImmediateListener(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\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 */\nconst createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect(idFn);\n\n selection = selection.data(data);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n const exitSelection = selection.exit();\n exitSelection.getObjects().forEach(inst => inst.remove());\n exitSelection.remove();\n return mergedSelection;\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 shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? rgbToHsv(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : '';\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\\(([\\d.]+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*(\\d*(?:\\.\\d+)?)\\)$/;\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\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 *\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].internalValue;\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 *\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].internalValue;\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 } else {\n filteredDataModel = dataModel.select(() => false, {\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, ...params) => {\n const propListenerMap = listenerMap(context, ...params);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const { namespace } = params[1];\n let ns = null;\n if (namespace) {\n ns = namespace;\n }\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, false, {\n namespace: ns\n });\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} str\n *\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 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};\n\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\n\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\n\nconst formatTemporal = (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n};\n\nconst temporalFields = (dataModel) => {\n const filteredFields = {};\n Object.entries(dataModel.getFieldspace().getDimension()).forEach(([fieldName, fieldObj]) => {\n if (fieldObj.subtype() === TEMPORAL) {\n filteredFields[fieldName] = fieldObj;\n }\n });\n return filteredFields;\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\nconst getValueParser = config => (val) => {\n if (val instanceof InvalidAwareTypes) {\n return val in config ? config[val] : `${val}`;\n }\n return val;\n};\n\nconst retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => {\n const filteredReducers = {};\n if (dataModel instanceof DataModel) {\n const derivations = [...dataModel.getDerivations().reverse(), ...dataModel.getAncestorDerivations().reverse()];\n const nearestReducers = defaultValue(\n getObjProp(derivations.find(derv => derv.op === DM_DERIVATIVES.GROUPBY), 'criteria'), {});\n\n const measures = dataModel.getFieldspace().getMeasure();\n measureFieldNames = measureFieldNames.length ? measureFieldNames : Object.keys(measures);\n measureFieldNames.forEach((measureName) => {\n if (nearestReducers[measureName]) {\n filteredReducers[measureName] = nearestReducers[measureName];\n } else {\n const measureField = measures[measureName];\n if (measureField) {\n filteredReducers[measureName] = measureField.defAggFn();\n }\n }\n });\n }\n return filteredReducers;\n};\n\nconst retrieveFieldDisplayName = (dm, fieldName) => dm.getFieldspace().fieldsObj()[fieldName].displayName();\n/**\n * Fetches the nearest sort operation details by traversing the chain of parent DataModels\n * @param {Object} dataModel Instance of DataModel\n *\n * @return {Array|null} sort criteria, null if no sort operation found\n */\nconst nearestSortingDetails = (dataModel) => {\n const allDerivations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n const nearestSortDerivation = allDerivations.reverse().find(derivation => derivation.op === DM_DERIVATIVES.SORT);\n\n return nearestSortDerivation ? nearestSortDerivation.criteria : null;\n};\n\n/**\n * Map containing key, value sortingOrder pairs\n */\nconst sortOrderMap = {\n [SORT_ORDER_ASCENDING]: (firstVal, secondVal) => firstVal.localeCompare(secondVal),\n [SORT_ORDER_DESCENDING]: (firstVal, secondVal) => secondVal.localeCompare(firstVal)\n};\n\n/**\n * Sort categorical field based on it's sorting order\n * @param {string} sortOrder Order by which field is to be sorted (asc or desc or func)\n * @param {string} firstVal First sort parameter\n * @param {string} secondVal Second sort parameter\n * @return {number} position|null if sort order is invalid\n*/\nconst sortCategoricalField = (sortOrder, firstVal, secondVal) => {\n const sortOrderType = typeof sortOrder;\n\n if (sortOrderType === FUNCTION) {\n return sortOrder(firstVal, secondVal);\n } else if (sortOrderType === STRING) {\n if (!sortOrderMap[sortOrder]) return null;\n return sortOrderMap[sortOrder](firstVal, secondVal);\n }\n return null;\n};\n\nconst intersect = (arr1, arr2, accessors = [v => v, v => v]) => {\n const [fn1, fn2] = accessors;\n const set = new Set(arr2.map(v => fn2(v)));\n return arr1.filter(value => set.has(fn1(value)));\n};\n\nexport {\n getValueParser,\n require,\n intersect,\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 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 getDependencyOrder,\n objectIterator,\n intSanitizer,\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 getNearestValue,\n retrieveNearestGroupByReducers,\n nearestSortingDetails,\n createSelection,\n formatTemporal,\n temporalFields,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField\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 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 (idFn) {\n return new Selection(idFn);\n}\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","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) > 0)) 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","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\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_join from \"./join\";\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 join: selection_join,\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","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\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 && node.compareDocumentPosition(next) ^ 4) 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\", \"cancel\", \"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 > STARTED) throw new Error(\"too late; already running\");\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 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.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\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(node, 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 {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\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 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\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\";\nimport transition_end from \"./end\";\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 end: transition_end\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 string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, 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 attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i(t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\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","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i(t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\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 {set} from \"./schedule\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(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) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\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 schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\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 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","import Model from 'hyperdis';\nimport { defaultValue, getObjProp, toArray } from './common-utils';\n\nconst initProp = (obj, props, val = () => ({})) => {\n props.forEach((prop) => {\n if (!obj[prop]) {\n obj[prop] = val();\n }\n obj = obj[prop];\n });\n return obj;\n};\n\nconst fetchPropValues = (propNames, params, deps) => params.map((param, i) => {\n const prop = propNames[i];\n\n return param.map(val => (val === undefined || val === null ? val : val[deps[prop]]));\n});\n\nconst addListenerToNamespace = (namespaceInf, fn, context) => {\n let key = namespaceInf.key;\n const namespace = namespaceInf.id;\n const listeners = context._listeners;\n\n if (namespace) {\n !listeners.get(namespace) && (listeners.set(namespace, new Map()));\n const namespaceListeners = listeners.get(namespace);\n\n if (!key) {\n key = namespaceListeners.size;\n }\n namespaceListeners.set(key, fn);\n } else {\n key = key || listeners.size;\n listeners.set(key, fn);\n }\n};\n\nconst setContexts = (contexts, propObj, contextMap) => {\n for (const key of propObj.keys()) {\n contexts[key] = {\n context: contextMap[key],\n deps: propObj.get(key).depProps\n };\n }\n return contexts;\n};\n\nconst registerPropInMaps = (store, props, namespaceInf, type) => {\n const {\n _registeredListeners: registeredListeners,\n _propListenerMap: propListenerMap\n } = store;\n const {\n subNamespace,\n namespace: ns\n } = namespaceInf;\n\n initProp(registeredListeners, [ns]);\n props.forEach((prop) => {\n const subNamespaces = defaultValue(getObjProp(registeredListeners, ns, prop, 'subNamespace'), []);\n let fns = defaultValue(getObjProp(propListenerMap, prop, type, 'fns'), 0);\n\n fns++;\n subNamespace && subNamespaces.push(subNamespace);\n registeredListeners[ns][prop] = {\n subNamespace: subNamespaces,\n allProps: props,\n subNamespaces: {}\n };\n initProp(propListenerMap, [prop, type]);\n propListenerMap[prop][type] = {\n fns,\n _fnCount: fns\n };\n });\n};\n\nconst registerListener = (context, type, ...options) => {\n const [propList, callBack, instantCall, namespaceInf = {}] = options;\n let props = propList;\n\n if (!Array.isArray(propList)) {\n props = [propList];\n }\n\n const { namespace: ns } = namespaceInf;\n const callbackFn = ((propNames, namespaceVal) => (...params) => {\n const { _savedCommits: commits, _propListenerMap: propListenerMap } = context;\n\n if (!propNames.some(prop => getObjProp(propListenerMap, prop, 'disabled'))) {\n if (namespaceVal) {\n const listenersObj = context._registeredListeners[namespaceVal];\n const contextMap = context._contextMap[namespaceVal];\n const contextsObj = {};\n\n propNames.forEach((prop) => {\n const commitsObj = defaultValue(getObjProp(commits, prop, type), {});\n const listeners = listenersObj[prop].subNamespaces;\n const propDeps = propListenerMap[prop][type];\n\n for (const nm in commitsObj) {\n const fnInf = defaultValue(propDeps[nm], { fns: 0 });\n let { fns } = fnInf;\n\n if (fns > 0) {\n setContexts(contextsObj, listeners[nm], contextMap);\n fns--;\n }\n\n if (fns <= 0) {\n delete commitsObj[nm];\n }\n fnInf.fns = fns;\n }\n });\n for (const key in contextsObj) {\n const obj = contextsObj[key];\n\n callBack(obj.context, ...fetchPropValues(propNames, params, obj.deps));\n }\n } else {\n callBack(...params);\n }\n }\n })(props, ns, type);\n\n const fn = context.model[type](props, callbackFn, instantCall);\n\n if (ns) {\n registerPropInMaps(context, props, namespaceInf, type);\n }\n addListenerToNamespace(namespaceInf, fn, context);\n};\n\nconst retrieveNamespaces = (names, key) => {\n if (names instanceof Object) {\n return [names[key]];\n } else if (names instanceof Array) {\n return names;\n }\n return [names];\n};\n\nconst createMap = () => new Map();\n\nconst listenerTypes = ['next', 'on'];\n\nconst removePropValue = (context, map, propInf) => {\n const { subNamespace: sns, prop, propListenerMap } = propInf;\n const propObj = propListenerMap[prop];\n\n listenerTypes.forEach((type) => {\n if (type in propObj) {\n delete propObj[type][sns];\n }\n });\n if (map.has(sns)) {\n const value = context.get(prop);\n\n if (value instanceof Object && sns in value) {\n delete value[sns];\n }\n map.delete(sns);\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 */\nexport class 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 = new Map();\n this._registeredListeners = {};\n this._contextMap = {};\n this._commits = {};\n this._savedCommits = {};\n this._queuedProps = {};\n this._propListenerMap = {};\n this._locked = false;\n }\n\n lockModel () {\n this.model.lock();\n this._locked = true;\n return this;\n }\n\n unlockModel () {\n this._locked = false;\n this.model.unlock();\n return this;\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 lockCommits (props) {\n props.forEach((prop) => {\n this._commits[prop] = {\n locked: true,\n queue: []\n };\n });\n return this;\n }\n\n unlockCommits (props) {\n const commitsObj = this._commits;\n\n this.lockModel();\n props.forEach((prop) => {\n commitsObj[prop].locked = false;\n const queuedProps = {};\n const { queue } = commitsObj[prop];\n\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n if (namespace) {\n const propObj = initProp(queuedProps, [propName, namespace]);\n\n Object.assign(propObj, value);\n }\n });\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n this.commit(propName, propName in queuedProps ? queuedProps[propName][namespace] : value,\n namespace);\n });\n delete commitsObj[prop];\n });\n this.unlockModel();\n return this;\n }\n\n addSubNamespace (sns, namespace, context) {\n // Get all the listeners registered by the component\n const listeners = this._registeredListeners[namespace];\n const propListenerMap = this._propListenerMap;\n\n initProp(this._contextMap, [namespace]);\n this._contextMap[namespace][sns] = context;\n for (const key in listeners) {\n const obj = listeners[key];\n const propObj = propListenerMap[key];\n const propFns = listenerTypes.reduce((acc, type) => {\n const val = defaultValue(getObjProp(propObj, type, 'fns'), 0);\n val && (acc[type] = val);\n return acc;\n }, {});\n const { allProps, subNamespaces, subNamespace } = obj;\n const snsArr = subNamespace.length ? subNamespace : [sns];\n\n snsArr.forEach((ns) => {\n const nsObj = ns instanceof Function ? ns(context) : ns;\n const names = retrieveNamespaces(nsObj, key);\n const depProps = allProps.reduce((acc, prop) => {\n acc[prop] = ns instanceof Function ? nsObj[prop] : ns;\n return acc;\n }, {});\n\n names.forEach((nm) => {\n initProp(subNamespaces, [nm], createMap).set(sns, {\n depProps\n });\n\n for (const type in propFns) {\n initProp(propObj, [type, nm]);\n const fns = propFns[type];\n\n propObj[type][nm] = {\n fns,\n _fnCount: fns\n };\n }\n });\n });\n }\n return this;\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, namespace, disableListener = false) {\n let sanitizedVal = value;\n const commits = this._commits;\n const savedCommits = this._savedCommits;\n const locked = getObjProp(commits, propName, 'locked');\n const propListenerMap = this._propListenerMap[propName] || {};\n\n propListenerMap.disabled = disableListener;\n\n if (locked) {\n commits[propName].queue.push([propName, value, namespace]);\n return this;\n }\n\n if (namespace) {\n if (this._locked) {\n const queuedProps = initProp(this._queuedProps, [propName]);\n queuedProps[namespace] = value;\n sanitizedVal = queuedProps;\n } else {\n sanitizedVal = defaultValue(this.get(propName), {});\n sanitizedVal[namespace] = value;\n }\n\n listenerTypes.forEach((type) => {\n initProp(savedCommits, [propName, type]);\n savedCommits[propName][type][namespace] = true;\n if (getObjProp(propListenerMap, type, namespace)) {\n propListenerMap[type][namespace].fns = propListenerMap[type][namespace]._fnCount;\n }\n });\n }\n\n this.model.prop(propName, sanitizedVal);\n return this;\n }\n\n /**\n * This method is used to register a callback 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 (...params) {\n registerListener(this, 'next', ...params);\n return this;\n }\n\n /**\n * This method is used to register a callback 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 (...params) {\n registerListener(this, 'on', ...params);\n }\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, subNamespace) {\n const value = this.model.prop(propName);\n return subNamespace ? value && value[subNamespace] : value;\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 append (...params) {\n this.model.append(...params);\n return this;\n }\n\n unsubscribeAll () {\n Object.values(this._listeners).forEach(fn => fn());\n return this;\n }\n\n unsubscribe (namespaceInf = {}) {\n const { id, key } = namespaceInf;\n const listenersMap = this._listeners;\n const listeners = listenersMap.get(id);\n\n if (key) {\n const fn = listenersMap.get(key);\n\n fn && fn();\n } else {\n for (const fn of listeners.values()) {\n fn();\n }\n listenersMap.set(id, []);\n }\n return this;\n }\n\n removeSubNamespace (subNamespace, namespace) {\n const {\n _registeredListeners: listenerMap,\n _contextMap: contextMap,\n _propListenerMap: propListenerMap\n } = this;\n const listenersObj = listenerMap[namespace];\n\n for (const prop in listenersObj) {\n const { subNamespaces } = listenersObj[prop];\n const propInf = {\n subNamespace,\n prop,\n propListenerMap\n };\n\n if (subNamespaces[subNamespace]) {\n removePropValue(this, subNamespaces[subNamespace], propInf);\n delete subNamespaces[subNamespace];\n } else {\n for (const ns in subNamespaces) {\n const snsMap = subNamespaces[ns];\n\n removePropValue(this, snsMap, propInf);\n if (!snsMap.size) {\n delete subNamespaces[ns];\n }\n }\n }\n }\n delete contextMap[namespace][subNamespace];\n return this;\n }\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 * sanitization: // 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}\n */\nexport const transactor = (holder, options, model, namespaceInf = {}) => {\n let conf;\n const store = model instanceof Store ? model : new Store({});\n const stateProps = {};\n const { namespace, subNamespace } = namespaceInf;\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n const nameSpaceProp = namespace ? `${namespace}.${prop}` : prop;\n\n if (subNamespace) {\n const value = defaultValue(store.get(nameSpaceProp), {});\n value[subNamespace] = conf.value;\n stateProps[nameSpaceProp] = value;\n } else {\n stateProps[prop] = conf.value;\n }\n\n holder[prop] = ((context, meta, nsProp) => (...params) => {\n const paramsLen = params.length;\n if (paramsLen) {\n const { takesMultipleParams = false } = meta || {};\n // If parameters are passed then it's a setter\n let val = takesMultipleParams ? params : params[0];\n\n if (meta) {\n let values;\n const prevVal = context.get(nsProp, subNamespace);\n const { sanitization, typeCheck, typeExpected } = meta;\n if (typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n const typeCheckResult = typeCheck(val);\n\n if (typeCheckResult) {\n values = val;\n }\n } else if (typeof typeCheck === 'string' && typeCheck === 'constructor') {\n if (val && val.constructor.name === typeExpected) {\n values = val;\n }\n } else {\n values = val;\n }\n\n const preset = meta.preset;\n const oldValues = toArray(context.get(nsProp, subNamespace));\n preset && preset(values, holder);\n if (takesMultipleParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values && context.commit(nsProp, values, subNamespace);\n } else {\n context.commit(nsProp, val, subNamespace);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.get(nsProp, subNamespace);\n })(store, conf.meta, nameSpaceProp, Array.isArray(conf.value));\n }\n }\n\n if (subNamespace) {\n for (const key in stateProps) {\n store.commit(key, stateProps[key][subNamespace], subNamespace);\n }\n } else if (namespace === undefined) {\n store.append(stateProps);\n } else {\n store.append(namespace, stateProps);\n }\n\n return [holder, store];\n};\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed',\n 'animationend'\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';\nimport { createPromise } from './helper';\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] = resolver(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 const promise = this._makeNotifierPromise(eventName);\n this._promises.set(eventName, promise);\n createPromise(promise, eventName, this);\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","/**\n * Creates a new promise when the given promise is resolved. This needs to be done so that after the lifecycle event\n * is completed, then again when the event gets completed, then a new promise gets resolved.\n *\n * @param {Promise} promise Instance of promise\n * @param {string} eventName name of event\n * @param {LifeCycleManager} context Instance of lifecyclemanager\n */\nexport const createPromise = (promise, eventName, context) => {\n promise.then(() => {\n const prm = context._makeNotifierPromise(eventName);\n context._promises.set(eventName, prm);\n createPromise(prm, eventName, context);\n });\n};\n","import { default as DataModel } from 'datamodel';\nimport * as scales from './scales';\nimport * as colorSchemes from './color-schemes';\nimport * as STATE_NAMESPACES from './enums/namespace';\n\nconst InvalidAwareTypes = DataModel.InvalidAwareTypes;\n\nexport {\n InvalidAwareTypes,\n DataModel\n};\n\nexport {\n ReservedFields,\n CommonProps,\n COORD_TYPES\n} from './enums';\n\nexport { STATE_NAMESPACES };\n\nexport {\n scales,\n colorSchemes\n};\n\nexport {\n getNearestValue,\n getValueParser,\n transformColors,\n detectColor,\n hslToRgb,\n rgbToHsv,\n hexToHsv,\n hsvToRgb,\n escapeHTML,\n angleToRadian,\n generateGetterSetters,\n getArraySum,\n ERROR_MSG,\n interpolator,\n colorInterpolator,\n numberInterpolator,\n piecewiseInterpolator,\n reqAnimFrame,\n cancelAnimFrame,\n nextAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n replaceCSSPrefix,\n symbolFns,\n defaultValue,\n easeFns,\n clone,\n interpolateArray,\n getMinPoint,\n getMaxPoint,\n getClosestIndexOf,\n registerListeners,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n enableChainedTransaction,\n isHTMLElem,\n isEqual,\n isSimpleObject,\n nextFrame,\n getObjProp,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n transposeArray,\n toArray,\n extendsClass,\n concatModels,\n assembleModelFromIdentifiers,\n isValidValue,\n nestCollection,\n stack,\n getSymbol,\n Scales,\n Symbols,\n pathInterpolators,\n hslInterpolator,\n getSmallestDiff,\n require,\n formatTemporal,\n nearestSortingDetails,\n createSelection,\n temporalFields,\n retrieveNearestGroupByReducers,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField,\n intersect\n} from './common-utils';\n\nexport {\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 hasTouch\n} from './renderer-utils';\n\nexport {\n Store,\n transactor\n} from './store';\n\nexport {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'd3-time';\n\nexport { default as Smartlabel } from 'fusioncharts-smartlabel';\nexport { dataSelect } from './DataSystem';\n\nexport { default as LifeCycleManager } from './lifecycle-manager';\n\nexport {\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n DateTimeFormatter,\n DM_DERIVATIVES,\n GROUP_BY_FUNCTIONS\n} from 'datamodel';\n\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 SelectionSet from './selection-set';\n\nexport default SelectionSet;\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. This keeps\n * information of which rows are in previous and new entry set and previous and new exit set. This is initialized by\n * {@link Firebolt}.\n *\n * @public\n *\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n *\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. This also moves the other rows to exit set.\n *\n * @public\n * @param {Array.} ids Array of unique ids.\n *\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 an array of ids to the old entry set.\n *\n * @param {Array.} ids Array of unique ids\n *\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 * Moves all ids which in new entry set to old entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\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 * Moves an array of ids which are in new exit set to old exit set.\n *\n * @public\n *\n * @param {Array.} ids Array of unique ids.\n *\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 an array of ids from the selection set. It also moves the remaining row ids to entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\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 an array of ids in the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set which means they are neither in entry set nor in exit set. If no ids are passed,\n * then it resets all the ids to null.\n *\n * @public\n *\n * @param {Array} ids Array of unique ids.\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 *\n * @public\n *\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 *\n * @public\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 /**\n * Returns a set of unique ids which are already present in exit set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old exit set or new exit set\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 array of ids which are in the exit set.\n *\n * @public\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 /**\n * Gets all the ids which are either in exit or entry set.\n *\n * @public\n * @return {Array} Array of unique ids\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, retrieveNearestGroupByReducers } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const formalName = SideEffect.formalName();\n const sideEffectInstance = sideEffectsMap[formalName];\n sideEffectsMap[formalName] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const setSideEffectConfig = (sideEffects, config) => {\n for (const key in sideEffects) {\n const sideEffect = sideEffects[key];\n const formalName = sideEffect.constructor.formalName();\n const sideEffectConf = config[formalName];\n\n sideEffectConf && sideEffect.config(sideEffectConf);\n }\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 mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n const conditions = conditionsMap[type];\n if (model && conditions) {\n return model.select((fields, i) =>\n (conditions.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 if (type === 'mergedEnter') {\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 let aggFns = retrieveNearestGroupByReducers(model);\n if (!existingModel) {\n existingModel = models[type] = model;\n } else if (`${model.getSchema().map(d => d.name).sort()}` ===\n `${existingModel.getSchema().map(d => d.name).sort()}`) {\n aggFns = Object.assign({}, retrieveNearestGroupByReducers(existingModel));\n existingModel = models[type] = model.union(existingModel);\n } else {\n existingModel = model;\n }\n combinedSet[type].model = existingModel;\n combinedSet[type].aggFns = aggFns;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\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 setSideEffectConfig\n} from './helper';\n\n/**\n * This class is responsible for dispatching behavioural actions and side effects. It also keeps the information of\n * registered physical actions, behavioural actions and side effects. Also, it keeps the map of physical and behavioural\n * actions and behavioural actions and side effects. Whenever any behavioural action is dispatched, it also propagates\n * the rows which got affected to the other datamodels. This class is initialized by {@link VisualUnit} and legend to\n * manage it's interaction.\n *\n * @public\n * @class Firebolt\n * @module Firebolt\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 this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\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 this._config = mergeRecursive(this._config, config[0]);\n setSideEffectConfig(this.sideEffects(), this._config);\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 this.initializeSideEffects();\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, key = 'default') {\n const behaviourConditions = this._sourceBehaviours[behaviour] || (this._sourceBehaviours[behaviour] = {});\n if (value instanceof Function) {\n behaviourConditions[key] = value;\n } else {\n behaviourConditions[key] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value, key = 'default') {\n const sideEffectConditions = this._sourceSideEffects[sideEffect] || (this._sourceSideEffects[sideEffect] = {});\n if (value instanceof Function) {\n sideEffectConditions[key] = value;\n } else {\n sideEffectConditions[key] = () => value;\n }\n }\n\n removeSideEffectPolicy (sideEffect, key) {\n delete this._sourceSideEffects[sideEffect][key];\n return this;\n }\n\n removeBehaviourPolicy (behaviour, key) {\n delete this._sourceBehaviours[behaviour][key];\n return this;\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 this.mapActionsAndBehaviour(key);\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 this._entryExitSet[key] = null;\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 /**\n * Allows to propagate the datamodel with only the supplied fields. When propagation is done, then the fields\n * which are supplied for the specified behavioural action is propagated.\n *\n * @public\n *\n * @param {string} action Name of behavioural action. If '*' is specified, then for all behavioural actions it is\n * applied.\n * @param {Array} fields Array of field names which will be propagated.\n * @param {boolean} append If true, then it is appended to the existing propagation data model fields else only\n * those fields are projected from propagation data model and propagated.\n *\n * @return {Firebolt} Instance of firebolt\n */\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\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\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour (phyAction) {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map) && action === (phyAction || action)) {\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 bind && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n this._actionBehaviourMap = mergeRecursive(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 (!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 return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? propagationInf.entryRowIds :\n filteredDataModel[0].getUids())\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 /**\n * Returns the entry and exit set information of the specified behavioural action.\n *\n * @public\n *\n * @param {string} behaviour Name of behavioural action.\n *\n * @return {Object} Entry exit set information.\n */\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\n/**\n * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural\n * action needs to extend this class.\n *\n * @public\n * @class GenericBehaviour\n * @module GenericBehaviour\n */\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n /**\n * Returns entry and exit set information. This method is called by firebolt when ```dispatchBehaviour``` is called\n * dynamically or when any physical action is triggered on the chart.\n *\n * @param {Object} payload Payload information.\n * @param {Object|Array} payload.criteria Identifiers of data interacted with.\n *\n * @return {Array} Entry and exit set information.\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 /**\n * Updates the selection set by adding uids to the instance of {@link SelectionSet} or removing them.\n * {@link SelectionSet} keeps the information of which rows are in the entry set and exit set.\n *\n * @public\n * @param {Array} addSet Array of row ids which got affected during interaction.\n * @param {SelectionSet} selectionSet Instance of selection set.\n *\n * @return {GenericBehaviour} Instance of behaviour.\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 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 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, MeasureSubtype } 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;\n const yFieldType = fieldsConfig[yField].def.subtype;\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 === MeasureSubtype.CONTINUOUS ? (yFieldType === MeasureSubtype.CONTINUOUS ?\n ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.invertExtent(stPos.x, endPos.x);\n const yRange = yAxis.invertExtent(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","const ANCHORS = 'anchors';\nconst TOOLTIP = 'tooltip';\nconst BRUSH_ANCHORS = 'brush-anchors';\nconst PERSISTENT_ANCHORS = 'persistent-anchors';\nconst FILTER = 'filter';\nconst HIGHLIGHTER = 'highlighter';\nconst CROSSLINE = 'crossline';\n\nexport {\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS,\n FILTER,\n HIGHLIGHTER,\n CROSSLINE,\n TOOLTIP\n};\n","export const PROPS = {\n valueParser: {\n defaultValue: val => val\n }\n};\n","import GenericSideEffect from './generic-sideeffect';\n\nexport default GenericSideEffect;\n","import { mergeRecursive, getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { PROPS } from './props';\n\n/**\n * This is the base class of all side effects. It contains all common methods like setting configuration, disabling,\n * enabling side effect, etc. Every new side effect has to inherit this class or {@link SpawnableSideEffect} or\n * {@link SurrogateSideEffect} class. All side effects are initialized by firebolt. The instance of firebolt is\n * passed on initialization. The firebolt instance contains ```context``` which is the instance of visual unit with\n * which the firebolt is attached.\n *\n * @public\n * @class\n * @module GenericSideEffect\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 generateGetterSetters(this, PROPS);\n this.config(this.constructor.defaultConfig());\n }\n\n /**\n * Returns the default configuration of the side effect.\n *\n * @public\n * @return {Object} Default configuration of side effect.\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the formal name of a side effect. This method must be implemented by all side effects which changes\n * or adds any element in the visualization.\n *\n * @return {string} Formal name of side effect.\n */\n static formalName () {\n return 'generic';\n }\n\n static target () {\n return 'all';\n }\n\n /**\n * Returns true if the side effects mutates the data of chart.\n *\n * @public\n *\n * @return {boolean} If the side effect mutates the data of chart.\n */\n static mutates () {\n return false;\n }\n\n /**\n * Sets or gets the configuration of side effect.\n *\n * When setter,\n * @param {Object} config Configuration of side effect.\n * @return {GenericSideEffect} Side effect instance.\n *\n * When getter,\n * @return {Object} Side effect configuration.\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 /**\n * Applies the interaction effect on the chart. This is where the implemntation of the side effect is defined.\n *\n * @param {Object} selectionSet Contains the entry and exit set of data which got affected during interaction.\n * @param {Object} selectionSet.mergedEnter Combined previous entry and new entry set.\n * @param {DataModel} selectionSet.mergedEnter.model Instance of data model containing all rows which got\n * affected during interaction.\n * @param {Array} selectionSet.mergedEnter.uids Ids of all rows which were affected during interaction.\n * @param {Object} selectionSet.mergedExit Combined previous exit and new exit set.\n * @param {DataModel} selectionSet.mergedExit.model Instance of data model containing rows which were not affected\n * during interaction.\n * @param {Array} selectionSet.mergedExit.uids Ids of all rows which were not affected during interaction.\n * @param {Object} selectionSet.entrySet Entry set information.\n * @param {Array} selectionSet.entrySet[0].uids All row ids which got affected during previous interaction.\n * @param {Array} selectionSet.entrySet[1].uids All row ids which got affected during current interaction.\n * @param {Array} selectionSet.exitSet[0].uids All row ids which were not affected during previous interaction.\n * @param {Array} selectionSet.exitSet[1].uids All row ids which were not affected during current interaction.\n * @param {Object} payload Payload information of the behavioural action on trigger of which this side effect\n * is applied.\n * @param {Object} options Optional information for side effect like strategy, etc.\n */\n apply () {\n return this;\n }\n\n /**\n * Adds a new strategy method for this side effect. The strategy method is implemented by side effect class.\n *\n * @param {string} name Name of the strategy.\n * @param {Function} fn Strategy method.\n *\n * @return {GenericSideEffect} Instance of side effect.\n */\n setStrategy (name, fn) {\n if (fn) {\n this._strategies[name] = fn;\n }\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\n/**\n * This class is inherited by all side effects which changes the look of any existing elements in the visualization.\n * For example, if a side effect wants to change the color of bar plots, then it is a surrogate side effect.\n *\n * To use this,\n * ```\n * const SurrogateSideEffect = muze.SideEffects.standards.SurrogateSideEffect;\n *\n * class BarColorChanger extends SurrogateSideEffect {\n * static formalName () {\n * return 'colorChanger';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n *\n * @module SurrogateSideEffect\n * @class\n * @extends GenericSideEffect\n */\nexport default class SurrogateSideEffect extends GenericSideEffect {\n /**\n * Applies or removes interaction styles from plot elements. An array of row ids needs to be passed\n * which identifies the plot elements and applies styles to them.\n *\n * To apply the interaction style,\n * ```\n * const entryRowIds = entrySet[0].uids;\n * const interactionStyle = [{\n * type: 'fill',\n * intensity: [0, 0, 15, 0] // hsla configuration\n * }];\n *\n * this.applyInteractionStyle(entryRowIds, interactionStyle, 'brighten', true);\n * ```\n * @public\n * @param {Array} set Array of row ids.\n * @param {Array} config Style configuration.\n * @param {Object} config[0] fill or stroke configuration.\n * @param {string} config[0].type Type of style - fill or stroke.\n * @param {Array} config[0].intensity hsla configuration.\n * @param {string} interactionType Type of interaction. This is needed for storing the styles for\n * each type of interaction in the plot elements.\n * @param {boolean} apply Whether to apply or remove the interaction style.\n *\n * @return {SurrogateSideEffect} Instance of surrogate side effect.\n */\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 return this;\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\n/**\n * Any side effect which will add any new element to the chart like drawing a rectangular box or any annotation over\n * the chart needs to inherit this class. This class has methods which returns the container where the dom elements\n * needs to be created.\n *\n * To use this,\n * ```\n * const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect;\n *\n * class SelectionBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'selectionBox';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n * @class\n * @extends GenericSideEffect\n * @module SpawnableSideEffect\n */\nexport default class SpawnableSideEffect extends GenericSideEffect {\n /**\n * Creates a html or svg element in the container.\n *\n * @public\n * @param {SVGElement|HTMLElement} container Container where the dom element will be rendered.\n * @param {string} elemType Type of dom element.\n * @param {Array} data Array of objects with which the dom elements will be binded.\n * @param {string} className class name of the element.\n *\n * @return {Selection} D3 Selection of the element.\n */\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n /**\n * Returns the drawing information for side effect like svg container, dimensions of the visual unit.\n *\n * @public\n * @return {Object} Drawing information for side effect.\n * ```\n * sideEffectGroup: // svg container where the side effect needs to be appended.\n * svgContainer: // svg container of the {@link VisualUnit}.\n * htmlContainer: // html div container of the {@link VisualUnit}.\n * width: // Width of the {@link VisualUnit}\n * height: // Height of the {@link VisualUnit}\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};\nexport const TABLE_FORMAT = 'table';\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: '4px 0 4px 0',\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 selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { TABLE_FORMAT } from './constants';\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._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._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 const { classPrefix } = config;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter(this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n const mountHtmlTooltip = makeElement(mount, 'div', [1], `${classPrefix}-tooltip-html-container`);\n mountHtmlTooltip.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], `${classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === TABLE_FORMAT) {\n const table = makeElement(body, 'table', [1], `${classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, '', {\n update: (elem, elemData) => elem.attr('class', elemData.className)\n });\n const cells = makeElement(rows, 'span', d => d.data, `${classPrefix}-tooltip-content`);\n cells.attr('class', `${classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block' // '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","export const SELECTION_SUMMARY = 'selectionSummary';\nexport const HIGHLIGHT_SUMMARY = 'highlightSummary';\n","import {\n FieldType,\n GROUP_BY_FUNCTIONS,\n formatTemporal,\n DimensionSubtype,\n MeasureSubtype,\n DataModel,\n defaultValue,\n retrieveFieldDisplayName,\n nestCollection,\n getObjProp,\n intersect\n} from 'muze-utils';\nimport { TABLE_FORMAT } from '@chartshq/muze-tooltip';\nimport { SELECTION_SUMMARY, HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\n\nconst { SUM, COUNT } = GROUP_BY_FUNCTIONS;\nconst { InvalidAwareTypes } = DataModel;\nconst FIRST_VALUE_MARGIN = '10px';\nconst SINGLE_DATA_MARGIN = 10;\n\nconst formatters = (formatter, interval, valueParser) => ({\n [DimensionSubtype.TEMPORAL]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatTemporal(Number(value), interval)),\n [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatter(value.toFixed(2))),\n [DimensionSubtype.CATEGORICAL]: value => valueParser(value)\n});\n\nconst getTabularData = (dataObj, fieldInf) => {\n const rows = [];\n const { data, schema } = dataObj;\n rows.push(schema.map(d => fieldInf[d.name].displayName));\n\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const value = fieldInf[fieldObj.name].fn(d[i]);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nconst getKeyValue = (params) => {\n const { field, value, classPrefix, margin, isSelected, removeKey } = params;\n\n if (!removeKey) {\n const keyObj = {\n value: field,\n className: `${classPrefix}-tooltip-key`\n };\n const valueObj = {\n value,\n className: `${classPrefix}-tooltip-value`\n };\n if (margin !== undefined) {\n keyObj.style = {\n 'margin-left': `${margin}px`\n };\n valueObj.style = {\n 'margin-left': `${margin}px`\n };\n }\n\n return ({\n className: isSelected ? `${classPrefix}-tooltip-row ${classPrefix}-tooltip-selected-row`\n : `${classPrefix}-tooltip-row`,\n data: [keyObj, valueObj]\n }\n );\n }\n return ({\n data: [{\n className: '',\n value,\n style: {\n 'margin-left': FIRST_VALUE_MARGIN\n }\n }],\n className: `${classPrefix}-tooltip-first`\n });\n};\n\nconst generateRetinalFieldsValues = (valueArr, retinalFields, content, context) => {\n const { fieldsConfig, dimensionMeasureMap, axes, config, fieldInf, dataLen, target } = context;\n const { classPrefix, margin, separator } = config;\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const REF_VALUES_INDEX = 1;\n const REF_KEYS_INDEX = 0;\n\n for (const retField in retinalFields) {\n const retIndex = fieldsConfig[retField].index;\n const retinalFieldValue = valueArr[retIndex];\n const measuresArr = dimensionMeasureMap[retField];\n const icon = {\n type: 'icon',\n color: colorAxis.getColor(retinalFieldValue),\n shape: shapeAxis.getShape(retinalFieldValue),\n size: sizeAxis.getSize(retinalFieldValue) * config.iconScale\n };\n const { displayName, fn } = fieldInf[retField];\n const formattedRetinalValue = fn(retinalFieldValue);\n\n if (dataLen === 1) {\n content.push(getKeyValue({\n field: displayName,\n value: formattedRetinalValue,\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n } else {\n const hasMultipleMeasures = measuresArr.length > 1;\n hasMultipleMeasures && (content.push({ data: [icon, formattedRetinalValue] }));\n const selectedContext = target[REF_VALUES_INDEX][target[REF_KEYS_INDEX].indexOf(retField)];\n const isSelected = selectedContext === retinalFieldValue;\n measuresArr.forEach((measure) => {\n const measureIndex = fieldsConfig[measure].index;\n const { displayName: dName, fn: formatterFn } = fieldInf[measure];\n const value = formatterFn(valueArr[measureIndex]);\n const keyValue = getKeyValue({\n field: hasMultipleMeasures ? `${dName}${separator}` : formattedRetinalValue,\n value,\n classPrefix,\n margin: hasMultipleMeasures ? margin : undefined,\n isSelected\n });\n if (!hasMultipleMeasures) {\n keyValue.data = [icon, ...keyValue.data];\n }\n content.push(keyValue);\n });\n }\n }\n};\n\nconst getFieldInf = (schema, dataModel, context) => {\n const { valueParser, timeDiffs } = context;\n const fieldsObj = dataModel.getFieldspace().fieldsObj();\n const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL];\n\n return schema.reduce((inf, field) => {\n const { subtype, name, type } = field;\n const interval = subtype === DimensionSubtype.TEMPORAL ? timeDiffs[name] : 0;\n const nf = type === FieldType.MEASURE ? fieldsObj[name].numberFormat() : val => val;\n inf[name] = {\n fn: defaultValue(formatters(nf, interval, valueParser)[subtype], defFormatter),\n displayName: `${retrieveFieldDisplayName(dataModel, name)}`\n };\n return inf;\n }, {});\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let nestedDataObj;\n let fieldValues = [];\n const { data, schema } = dataModel.getData();\n const fieldspace = dataModel.getFieldspace();\n const fieldsConfig = dataModel.getFieldsConfig();\n const { color, shape, size } = context.firebolt.context.retinalFields();\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 containsDetailField = !!intersect(schema, detailFields).length;\n const dataLen = data.length;\n const {\n dimensionMeasureMap,\n axes\n } = context;\n const fieldInf = getFieldInf(schema, dataModel, context);\n\n let displayFormat;\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData({\n data,\n schema,\n fieldspace\n }, fieldInf);\n displayFormat = TABLE_FORMAT;\n } else {\n const retinalFields = [color.field, shape.field, size.field].reduce((acc, field) => {\n field && fieldsConfig[field].def.type === FieldType.DIMENSION && (acc[field] = 1);\n return acc;\n }, {});\n const filteredDimensions = dimensions.filter(field => !retinalFields[field.name]);\n const indices = filteredDimensions.map(dim => fieldsConfig[dim.name].index);\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1) : measures;\n\n nestedDataObj = nestCollection({\n data,\n keys: indices\n });\n nestedDataObj = !getObjProp(nestedDataObj[0], 'key') ? [{\n values: nestedDataObj\n }] : nestedDataObj;\n\n const generateTooltipContent = (nestedData, index = 0, content = []) => {\n const { classPrefix, separator } = config;\n for (let i = 0, len = nestedData.length; i < len; i++) {\n const { values, key } = nestedData[i];\n const field = getObjProp(schema, indices[index], 'name');\n const margin = dataLen === 1 || Object.keys(retinalFields).length === 0\n ? SINGLE_DATA_MARGIN : undefined;\n if (field) {\n const { displayName, fn } = fieldInf[field];\n const formattedValue = fn(key);\n const removeKey = values.length > 1;\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n value: formattedValue,\n classPrefix,\n margin,\n isSelected: undefined,\n removeKey\n }));\n }\n\n if (values[0] && values[0].key) {\n generateTooltipContent(values, index + 1, content);\n } else {\n for (let j = 0, len2 = values.length; j < len2; j++) {\n const valueArr = values[j];\n generateRetinalFieldsValues(valueArr, retinalFields, content, {\n fieldInf,\n axes,\n config,\n fieldsConfig,\n dimensionMeasureMap,\n dataLen,\n target: context.payload.target\n });\n\n filteredMeasures.forEach((measure) => {\n const { name } = measure;\n const { displayName, fn } = fieldInf[name];\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n value: fn(valueArr[fieldsConfig[name].index]),\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n });\n }\n }\n }\n };\n generateTooltipContent(nestedDataObj, 0, fieldValues);\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\nexport const strategies = {\n [SELECTION_SUMMARY]: (dm, config, context) => {\n const { selectionSet } = context;\n const aggFns = selectionSet.mergedEnter.aggFns;\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] = aggFns[v.name] === COUNT ? SUM : aggFns[v.name];\n return acc;\n }, {\n saveChild: false\n }));\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 const data = aggregatedModel.getData().data;\n measureNames.forEach((measure) => {\n const value = data[0][fieldsConf[measure].index];\n value instanceof InvalidAwareTypes ? values.push([]) : values.push([`(${aggFns[measure].toUpperCase()})`,\n `${retrieveFieldDisplayName(dm, measure)}`,\n {\n value: `${value.toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]);\n });\n if (measureNames.length === 1) {\n values = [[...values[0], ...values[1]]];\n }\n return ([{\n data: values[0]\n }]);\n },\n [HIGHLIGHT_SUMMARY]: (data, config, context) => buildTooltipData(data, config, context)\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType, mergeRecursive, defaultValue } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport { TOOLTIP } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\nimport { HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\n\nconst configResolvers = {\n [HIGHLIGHT_SUMMARY]: (specificConf, config) => defaultValue(specificConf, config),\n default: specificConf => defaultValue(specificConf, {})\n};\n\nconst sanitizeConfig = (config, context) => {\n const strategyObj = context._strategies;\n const sanitizedConf = Object.assign({}, config);\n for (const key in strategyObj) {\n sanitizedConf[key] = defaultValue(configResolvers[key], configResolvers.default)(config[key], config);\n }\n return sanitizedConf;\n};\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = mergeRecursive({}, strategies);\n this._strategy = HIGHLIGHT_SUMMARY;\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n },\n highlightSummary: {\n dataTransform: (dt, fields) => (fields ? dt.project(fields, { saveChild: false }) : dt\n )\n },\n selectionSummary: {\n dataTransform: (dt, fields) => {\n const fieldspace = dt.getFieldspace();\n const dimensions = Object.keys(fieldspace.getDimension());\n const measures = Object.keys(fieldspace.getMeasure());\n const projectedFields = defaultValue(fields, measures.length ? [measures[0]] : []);\n return dt.project([...dimensions, ...projectedFields], {\n saveChild: false\n });\n }\n }\n };\n }\n\n static formalName () {\n return TOOLTIP;\n }\n\n config (...params) {\n if (params.length) {\n const config = this._config = mergeRecursive(this._config, sanitizeConfig(params[0], this));\n const strategyObj = this._strategies;\n for (const key in strategyObj) {\n const formatter = config[key].formatter;\n this.setStrategy(key, formatter);\n }\n return this;\n }\n return this._config;\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)) {\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 const strategy = defaultValue(options.strategy, this._strategy);\n const strategyConf = config[strategy];\n const { dataTransform, fields: projectFields } = strategyConf;\n const strategyObj = this._strategies;\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 const dt = dataTransform(dataModels[i], projectFields, this);\n\n enter[i] = true;\n const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf;\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 sourceInf.valueParser = context.valueParser();\n sourceInf.selectionSet = selectionSet;\n tooltipInst.context(sourceInf);\n const strategyFn = strategyObj[strategy];\n tooltipInst.content(strategy, dt, {\n formatter: strategyFn,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: parentContainerDimensions.width,\n height: parentContainerDimensions.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 { CROSSLINE } from '../../enums/side-effects';\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 layers = this.firebolt.context.layers();\n const plotWidth = Math.max(...layers.map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...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 !isNaN(px) && 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';\nimport { HIGHLIGHTER } from '../../enums/side-effects';\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 strategy(selectionSet, this, options.strategy || this._strategy);\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, getObjProp } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport { ANCHORS } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nconst addLayer = (layerRegistry, context, sideEffect) => {\n context.addLayer((layerDefs) => {\n const layers = [];\n\n if (layerDefs) {\n layerDefs.forEach((layerDef) => {\n const mark = layerDef.mark;\n const layerCls = layerRegistry[mark];\n\n if (layerCls && layerCls.shouldDrawAnchors()) {\n const depLayerEncoding = layerDef.def.encoding;\n const encoding = {\n x: getObjProp(depLayerEncoding, 'x', 'field'),\n y: getObjProp(depLayerEncoding, 'y', 'field'),\n color: getObjProp(depLayerEncoding, 'color', 'field'),\n size: {\n field: getObjProp(depLayerEncoding, 'size', 'field'),\n value: sideEffect.defaultSizeValue()\n }\n };\n const commonName = sideEffect.constructor.formalName();\n const name = `${layerDef.def.name}-${commonName}`;\n\n layers.push({\n name,\n mark: 'point',\n groupId: commonName,\n className: sideEffect.constructor.defaultConfig().className,\n encoding,\n transform: {\n type: 'identity'\n },\n calculateDomain: false,\n transition: sideEffect.getTransitionConfig(),\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n owner: layerDef.def.name\n });\n }\n });\n }\n return layers;\n });\n};\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._layersMap = {};\n this.addAnchorLayers();\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 () {\n const context = this.firebolt.context;\n const layerRegistry = context.registry().layerRegistry;\n\n addLayer(layerRegistry, context, this);\n return this;\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 dataModel = selectionSet.mergedEnter.model;\n const formalName = this.constructor.formalName();\n\n const context = this.firebolt.context;\n const layers = context.layers().filter(layer => layer.config().groupId === formalName);\n\n layers.forEach((layer) => {\n const linkedLayer = context.getLayerByName(layer.config().owner);\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n\n layer.data(transformedDataModel);\n });\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\nimport { PERSISTENT_ANCHORS } from '../enums/side-effects';\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';\nimport { BRUSH_ANCHORS } from '../enums/side-effects';\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: 'selectionSummary',\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 TEXT = 'text';\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 RADIUS: 'radius',\n RADIUS0: 'radius0',\n ANGLE: 'angle',\n ANGLE0: 'angle0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AGG_FN_SUM = 'sum';\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","import { COORD_TYPES, mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nconst { CARTESIAN } = COORD_TYPES;\nexport const props = {\n axes: {},\n mount: {},\n measurement: {},\n metaInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {\n defaultValue: CARTESIAN\n },\n [PROPS.CONFIG]: {\n value: null,\n sanitization: (context, config) => {\n context._customConfig = config;\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n\n return constructor.defaultPolicy(newConf, config);\n }\n }\n};\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\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 BAND = 'band';\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 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\nexport const DEFAULT_ANGLE_DOMAIN = [1];\nexport const MIN_NO_OF_TICKS = 2;\nexport const DEFAULT_NO_OF_TICKS = 10;\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 *\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 *\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 adjustRange: false,\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: null,\n smartTicks: null\n },\n orientation: 'left',\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: null,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: true,\n showOuterTicks: true,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: 0,\n yOffset: 0\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) => {\n let rotation;\n const axis = instance.axis();\n const config = instance.config();\n const renderConfig = instance.renderConfig();\n const smartTicks = instance.smartTicks();\n const scale = axis.scale();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n const ticks = labelFunc();\n const {\n orientation,\n fixedBaseline,\n type\n } = config;\n const {\n labels\n } = renderConfig;\n\n rotation = labels.rotation;\n\n const tickSize = instance.getTickSize();\n tickText.each(function (d, index) {\n let yShift;\n let xShift;\n let datum = smartTicks[index] ? smartTicks[index].text : d;\n\n datum = datum.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n\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 = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize}\n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift - xShift / 2 : xShift;\n\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize}\n ${yShift + tickSize}) rotate(${rotation})`);\n }\n selectElement(this).transition()\n .duration(1000).text(datum);\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 renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n orientation,\n classPrefix\n } = config;\n const {\n labels\n } = renderConfig;\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 && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager);\n } else if (!rotation && !isSmartTicks) {\n tickText.attr('transform', '');\n } else {\n tickText.text('');\n if (orientation === TOP || orientation === BOTTOM) {\n tickText.attr('y', 0)\n .attr('x', 0)\n .attr('transform', '')\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => {\n if (_smartTicks[i]) {\n return _smartTicks[i].lines;\n } return [];\n }, `${classPrefix}-smart-text`);\n\n tspan.attr('dy', '0')\n .style('opacity', '0')\n\n .transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[0].oriTextHeight;\n }\n return -_smartTicks[0].oriTextHeight * (_smartTicks[0].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .text(e => e)\n .attr('x', 0);\n } else {\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, `${classPrefix}-smart-text`);\n tspan.text(e => e);\n }\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n const {\n showInnerTicks\n } = axisInstance.renderConfig();\n const domain = axisInstance.domain();\n if (fixedBaseline && domain.length && showInnerTicks) {\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 availableSpace\n } = measures;\n\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})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 renderConfig = axisInstance.renderConfig();\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 _tickLabelStyle: tickLabelStyle,\n _tickFormatter: axisTickFormatter\n } = axisInstance;\n const {\n orientation,\n axisNamePadding,\n className,\n id,\n classPrefix\n } = config;\n const {\n show,\n xOffset,\n yOffset,\n showAxisName,\n labels,\n smartAxisName\n } = renderConfig;\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 const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n const ticks = axis.tickValues() || labelFunc();\n\n axis.tickFormat(axisTickFormatter(ticks));\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.axisComponentDimensions().largestTickDimensions;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false || tickSize === 0) {\n selectContainer.transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .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\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [smartAxisName], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d.text);\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 const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: smartAxisName.height,\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 {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'muze-utils';\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\n// Longest Word for each level based on which tick skipping is decided\nconst longestWord = {\n month: 'September',\n quarter: 'October',\n halfYearly: 'July',\n year: 9999,\n day: 'September',\n hour: '24 AM',\n mintues: '60:60',\n seconds: ':60',\n week: 'Wed 31'\n};\n\n// These are the various levels of ticks that can be shown by Muze.\n// Each level is described as how frequently the ticks appear\n// The format is as follows:\n// [Frequency, Milliseconds, Name of Seconds, Tick Generator, Level Type]\nconst tickIntervals = [\n [1, 1, 'milliseconds', timeMillisecond.every(1), 'seconds'],\n [1, durationSecond, 'seconds', timeSecond.every(1), 'seconds'],\n [5, 5 * durationSecond, 'five seconds', timeSecond.every(5), 'seconds'],\n [10, 10 * durationSecond, 'ten seconds', timeSecond.every(10), 'seconds'],\n [15, 15 * durationSecond, 'fifteen seconds', timeSecond.every(15), 'seconds'],\n [30, 30 * durationSecond, 'thirty seconds', timeSecond.every(30), 'seconds'],\n [1, durationMinute, 'minute', timeMinute.every(1), 'minutes'],\n [5, 5 * durationMinute, 'five minutes', timeMinute.every(5), 'minutes'],\n [10, 10 * durationMinute, 'ten minutes', timeMinute.every(10), 'minutes'],\n [15, 15 * durationMinute, 'fifteen minutes', timeMinute.every(15), 'minutes'],\n [30, 30 * durationMinute, 'thirty minutes', timeMinute.every(30), 'minutes'],\n [1, durationHour, 'hour', timeHour.every(1), 'hour'],\n [3, 3 * durationHour, 'three hours', timeHour.every(3), 'hour'],\n [6, 6 * durationHour, 'six hours', timeHour.every(6), 'hour'],\n [12, 12 * durationHour, 'twelve hours', timeHour.every(12), 'hour'],\n [1, durationDay, 'daily', timeDay.every(1), 'day'],\n [1, durationWeek, 'weekly', timeWeek.every(1), 'week'],\n [1, durationMonth, 'monthly', timeMonth.every(1), 'week'],\n [3, 3 * durationMonth, 'quaterly', timeMonth.every(3), 'quarter'],\n [6, 6 * durationMonth, 'half yearly', timeMonth.every(6), 'halfYearly'],\n [1, durationYear, 'yearly', timeYear.every(1), 'year'],\n [2, 2 * durationYear, '2 year', timeYear.every(2), 'year'],\n [3, 3 * durationYear, '3 year', timeYear.every(3), 'year'],\n [5, 5 * durationYear, '5 year', timeYear.every(5), 'year'],\n [10, 10 * durationYear, 'decade', timeYear.every(10), 'year'],\n [100, 100 * durationYear, 'century', timeYear.every(100), 'year'],\n [1000, 1000 * durationYear, 'millenium', timeYear.every(1000), 'year']\n];\n/**\n * Get the actual tick interval based on the available width, number of ticks\n * and the distance between two ticks\n *\n * @param {Object} context Axis Context\n * @param {number} noOfTicks Number of Ticks based on which interval is calculated\n * @return {number} The width for the tick interval\n */\nconst getActualTickInterval = (context, noOfTicks) => {\n const minTickDistance = context._minTickDistance;\n const minWidthBetweenTicks = minTickDistance.width;\n\n const { width } = context.availableSpace();\n const actualTickInterval = Math.floor(((width - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks));\n\n return actualTickInterval;\n};\n\n/**\n * Get the tick interval based on the current level of ticks. Levels are decided on\n * the number of ticks that are possible to show\n *\n * @param {Object} context Axis Context\n * @param {string} type Type of level (yearly, monthly, etc)\n * @return {number} The width for the tick interval\n */\nconst getTickIntervalBasedOnCurrentLevel = (context, type) => {\n const labelManager = context._dependencies.labelManager;\n const longestWordType = longestWord[type];\n const measure = labelManager.getOriSize(longestWordType);\n\n return measure.width;\n};\n\nconst getTickIntervalFnBasedOnNumberOfTicks = (interval, count, context) => {\n let possibleTickLevelIndex = tickIntervals.length - 1;\n let maxPossibleTicks = 1;\n let tickIntervalLevelInfo = null;\n\n // Decide possible tick level based on min tick width (with ellipses)\n for (let i = tickIntervals.length - 1; i >= 0; i--) {\n const tickIntervalInfo = tickIntervals[i];\n const numOfPossibleTicks = Math.floor(interval / tickIntervalInfo[1]);\n if (numOfPossibleTicks <= count) {\n possibleTickLevelIndex = i;\n maxPossibleTicks = numOfPossibleTicks;\n }\n }\n\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex];\n\n // Get actual tick interval based on the level of ticks generated\n const actualTickInterval = getActualTickInterval(context, maxPossibleTicks);\n\n // Maximum Possible tick Interval for a particular level based on a pre decided set of values\n const maxTickInterval = getTickIntervalBasedOnCurrentLevel(context, tickIntervalLevelInfo[4]);\n\n // Display the next level involving tick skipping if current level does not meet the requirement\n // for displaying max tick\n if (actualTickInterval < maxTickInterval && possibleTickLevelIndex < tickIntervals.length - 1) {\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex + 1];\n }\n return tickIntervalLevelInfo[3];\n};\n\nexport const getSkippedTicks = (context, maxPossibleTicks) => {\n let actualNumberOfTicks = maxPossibleTicks;\n const domain = context.domain();\n const minDiff = context._minDiff;\n // Get the interval in ms from the domain\n const millisecondInterval = domain[1] - domain[0];\n // Get number of ticks based on the minimum difference in the data\n const numOfTicksAccordingToMinDiff = Math.floor(millisecondInterval / minDiff);\n\n // Show ticks according to min diff if possible\n if (maxPossibleTicks >= numOfTicksAccordingToMinDiff) {\n actualNumberOfTicks = numOfTicksAccordingToMinDiff;\n }\n\n return getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval, actualNumberOfTicks, context);\n};\n","import { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { getSkippedTicks } from './skip-ticks';\nimport { TIME, LINEAR, BAND } from '../enums/scale-type';\n\nexport const applyTickSkipping = (context) => {\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n\n const { width } = context.availableSpace();\n\n const maxTicks = Math.floor((width + minWidthBetweenTicks) / (minTickWidth + minWidthBetweenTicks));\n\n const ticks = context.scale().ticks(getSkippedTicks(context, maxTicks));\n\n context.renderConfig({\n tickValues: ticks\n });\n};\n\nconst adjustHorizontalRange = (range, diff) => {\n range[0] += diff;\n range[1] -= diff;\n return range;\n};\n\nconst adjustVerticalRange = (range, diff) => {\n range[0] -= diff;\n range[1] += diff;\n return range;\n};\n\nconst rangeAdjustmentMap = {\n [TOP]: adjustHorizontalRange,\n [BOTTOM]: adjustHorizontalRange,\n [LEFT]: adjustVerticalRange,\n [RIGHT]: adjustVerticalRange\n};\n\nexport const setAxisRange = (context, type, rangeBounds, offset) => {\n context.range(rangeBounds);\n offset && context.renderConfig({ [`${type}Offset`]: offset });\n};\n\nconst getAxisOffset = (timeDiff, range, domain) => {\n const avWidth = Math.abs(range[1] - range[0]);\n const pvr = avWidth / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\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 getAdjustedRange = (minDiff, range, domain, config) => {\n const {\n orientation,\n adjustRange\n } = config;\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (adjustRange) {\n return rangeAdjustmentMap[orientation](range, diff);\n }\n return range;\n};\n\nexport const spaceSetter = (context, spaceConfig) => {\n let tickInterval;\n let heightForTicks;\n const config = context.config();\n const {\n width: availWidth,\n height: availHeight,\n padding\n } = context.availableSpace();\n const {\n top,\n left,\n bottom,\n right\n } = padding;\n const {\n isOffset\n } = spaceConfig;\n const {\n showAxisName,\n labels\n } = context.renderConfig();\n const {\n rotation\n } = labels;\n const {\n fixedBaseline,\n axisNamePadding,\n tickValues\n } = config;\n const {\n tickDimensions,\n allTickDimensions,\n axisNameDimensions,\n tickSize\n } = context.getAxisDimensions();\n const {\n height: tickDimHeight,\n width: tickDimWidth\n } = tickDimensions;\n\n const namePadding = showAxisName ? axisNamePadding : 0;\n const labelConfig = { smartTicks: true, rotation: labels.rotation };\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minDiff = context._minDiff;\n const domain = context.domain();\n const axisNameHeight = axisNameDimensions.height;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = Math.min(minTickSpace.width, tickDimWidth);\n const minTickHeight = Math.min(minTickSpace.height, tickDimHeight);\n\n return {\n [TIME]: {\n x: () => {\n !tickValues && context.applyTickSkipping();\n const noOfTicks = context.getTickValues().length;\n\n // Get the Tick Interval\n tickInterval = ((availWidth - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks);\n\n // Get height for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation;\n // Remove ticks if not enough height\n if (tickInterval < minTickHeight) {\n heightForTicks = availHeight;\n tickInterval = minTickHeight;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n const tickShifter = Math.min(tickInterval, tickDimWidth);\n // set range for axis\n setAxisRange(context, 'y', getAdjustedRange(minDiff, [tickShifter / 2,\n availWidth - left - right - tickShifter / 2], domain, config),\n isOffset ? availHeight : null);\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n\n return labelConfig;\n },\n y: () => {\n let widthForTicks = availWidth;\n const tickShifter = tickDimHeight / 2;\n\n setAxisRange(context, 'x', getAdjustedRange(minDiff,\n [availHeight - top - bottom - tickShifter, tickShifter], domain, config),\n isOffset ? availWidth : null);\n\n if ((availWidth - axisNameHeight - namePadding) <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [BAND]: {\n x: () => {\n setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null);\n const range = context.range();\n\n // Get Tick Interval\n tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minWidthBetweenTicks;\n\n // Get height available for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation === null ? -90 : rotation;\n labelConfig.smartTicks = false;\n\n tickInterval = Math.max(heightForTicks, minTickWidth);\n\n if (heightForTicks < minTickWidth) {\n context.renderConfig({ showAxisName: false });\n }\n } else if (tickValues) {\n const interval = (availWidth / domain.length) - minWidthBetweenTicks;\n if (interval < minTickWidth) {\n context.range([minTickHeight / 2, availWidth - minTickHeight / 2]);\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null);\n\n let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding;\n if (widthForTicks <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [LINEAR]: {\n x: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimWidth / 2;\n\n const baseline = fixedBaseline ? 0 : tickShifter;\n\n setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter],\n isOffset ? availHeight : null);\n\n const range = context.range();\n\n // Get Tick widths and available space\n const totalTickWidth = allTickDimensions.length * (tickDimWidth + minWidthBetweenTicks);\n const availableWidth = range[1] - range[0];\n\n // Rotate labels if not enough width\n if (availableWidth < totalTickWidth && labels.rotation !== null) {\n if (availHeight - tickDimWidth - namePadding - tickSize > axisNameHeight) {\n labelConfig.rotation = null;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: true\n });\n } else {\n labelConfig.rotation = -90;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: false\n\n });\n }\n }\n\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n },\n y: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimensions.height / 2;\n const baseline = fixedBaseline ? 1 : tickShifter;\n\n setAxisRange(context, 'x', [availHeight - bottom - baseline, tickShifter + top],\n isOffset ? availWidth : null);\n\n // Remove display of ticks if no space is left\n if (availWidth < tickDimWidth + axisNameHeight + namePadding) {\n context.renderConfig({ showInnerTicks: false });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n }\n }\n };\n};\n","import { defaultValue } from 'muze-utils';\nimport { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { MIN_NO_OF_TICKS, DEFAULT_NO_OF_TICKS } from '../enums/constants';\nimport { setAxisRange, getAdjustedRange } from './space-setter';\n\nexport const getRotatedSpaces = (rotation = 0, width, height) => {\n let rotatedHeight = height;\n let rotatedWidth = width;\n if (rotation) {\n const angle = ((rotation || 0) * Math.PI) / 180;\n rotatedWidth = Math.abs(height * Math.sin(angle)) + Math.abs(width * Math.cos(angle));\n rotatedHeight = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n }\n return { width: rotatedWidth, height: rotatedHeight };\n};\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.renderConfig({ xOffset: x, yOffset: y });\n};\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n let numberOfValues = 0;\n let tickValues = [];\n let { numberOfTicks } = axisInstance.config();\n const ticks = axis.scale().ticks();\n const tickLength = ticks.length;\n const minTickDistance = axisInstance._minTickDistance.width;\n\n numberOfValues = tickLength;\n\n if (tickLength * (labelDim + minTickDistance) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim + minTickDistance));\n }\n\n numberOfTicks = numberOfTicks || numberOfValues;\n numberOfValues = Math.min(numberOfTicks, Math.max(MIN_NO_OF_TICKS, numberOfValues));\n\n tickValues = axis.scale().ticks(numberOfValues);\n\n if (tickValues.length > numberOfValues) {\n tickValues = tickValues.filter((e, i) => i % 2 === 0);\n }\n\n if (numberOfValues === MIN_NO_OF_TICKS) {\n tickValues = axis.scale().ticks(DEFAULT_NO_OF_TICKS);\n tickValues = [tickValues[0], tickValues[tickValues.length - 1]];\n }\n return tickValues;\n};\n\nexport const getAxisComponentDimensions = (context) => {\n let largestTick = '';\n let largestTickDimensions = { width: 0, height: 0 };\n let smartTick = {};\n let axisTicks;\n const allTickDimensions = [];\n const scale = context.scale();\n const { tickValues, showAxisName } = context.renderConfig();\n const { name } = context.config();\n const { labelManager } = context.dependencies();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(context._tickLabelStyle);\n\n // get the values along the domain\n axisTicks = tickValues || labelFunc();\n\n // Get the tick labels\n axisTicks = axisTicks.map((originalLabel, i) => {\n const label = context.getFormattedText(originalLabel, i, axisTicks);\n\n // convert to string for quant values\n const tickDimensions = labelManager.getOriSize(label);\n\n // Get spaces for all labels\n allTickDimensions.push(tickDimensions);\n\n // Getting largest label\n if (tickDimensions.width > largestTickDimensions.width) {\n largestTick = label;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n\n largestTickDimensions = tickDimensions;\n smartTick = smartTick || tickDimensions;\n }\n return label;\n });\n\n labelManager.setStyle(context._axisNameStyle);\n const axisNameDimensions = showAxisName ? labelManager.getOriSize(name) : { width: 0, height: 0 };\n\n return {\n axisNameDimensions,\n largestTick,\n largestTickDimensions,\n allTickDimensions,\n axisTicks,\n smartTick,\n tickSize: context.getTickSize()\n };\n};\n\nexport const computeAxisDimensions = (context) => {\n let tickDimensions = {};\n const { labels } = context.renderConfig();\n const { smartTicks, rotation } = labels;\n const {\n largestTickDimensions,\n axisTicks,\n smartTick,\n axisNameDimensions,\n allTickDimensions,\n tickSize\n } = getAxisComponentDimensions(context);\n const { height: labelHeight, width: labelWidth } = largestTickDimensions;\n\n // get the domain of axis\n const domain = context.domain();\n // const angle = ((rotation || 0) * Math.PI) / 180;\n\n if (domain.length === 0) {\n return null;\n }\n\n if (smartTicks) {\n tickDimensions = smartTick;\n } else {\n tickDimensions = { width: labelWidth, height: labelHeight };\n }\n tickDimensions = getRotatedSpaces(rotation, tickDimensions.width, tickDimensions.height);\n\n if (tickSize === 0) {\n tickDimensions = { width: 0, height: 0 };\n }\n return {\n allTickDimensions,\n tickSize,\n tickDimensions,\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, range) => {\n let width;\n let height;\n const domain = context.domain();\n const minTickDistance = context._minTickDistance.width;\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n width = range && range.length ? range[1] - range[0] : ((tickDimWidth + minTickDistance) * 3);\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!range || !range.length) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n\n height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize;\n\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getVerticalAxisSpace = (context, axisDimensions) => {\n let height;\n let width;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\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 axisDimensions = context.getAxisDimensions();\n\n const { orientation } = context.config();\n const { show } = context.renderConfig();\n const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions;\n const { height: largestDimHeight } = largestTickDimensions;\n const minTickWidth = context._minTickDistance.width;\n if (orientation === TOP || orientation === BOTTOM) {\n let {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n\n if (!range || !range.length) {\n width = allTickDimensions.reduce((t, n) =>\n t + Math.min(n.width, n.height) + minTickWidth, 0);\n }\n\n if (show === false) {\n height = 0;\n width = 0;\n }\n return {\n width,\n height\n };\n }\n\n let {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n if (!height || height === 0) {\n height = axisTicks.length * (largestDimHeight + context._minTickDistance.height);\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 axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show, showAxisName } = context.renderConfig();\n const { axisNameDimensions } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisNameWidth } = axisNameDimensions;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n const axisWidth = Math.max(width, axisNameWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n const {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n const effHeight = Math.max(height, showAxisName ? axisNameWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n/**\n * Overwrites domain with user defined domain (if present)\n * @param {Object} context reference to current axes\n * @param {Array} domain default domain\n *\n * @return {Array} domain\n */\nexport const getValidDomain = (context, domain) => {\n const { domain: userDom } = context.config();\n\n if (userDom) {\n domain = userDom;\n }\n\n return defaultValue(domain, []);\n};\n\nexport const setContinousAxisDomain = (context, domain) => {\n const { nice } = context.config();\n const scale = context.scale.bind(context);\n\n scale().domain(domain);\n nice && scale().nice();\n context._domain = scale().domain();\n};\n\n/**\n * Checks if any of the properties have changed between two objects\n * @param {Object} obj first object\n * @param {Object} obj1 second object\n * @param {Array} properties properties to be compared between two objects\n *\n * @return {Boolean} boolean value\n */\nexport const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => {\n if (!Object.keys(obj).length || !Object.keys(obj1).length) {\n return false;\n }\n return properties.some(key => obj[key] !== obj1[key]);\n};\n\nexport const resetTickInterval = (context, domain) => {\n const {\n orientation,\n isOffset\n } = context.config();\n\n const minDiff = context._minDiff;\n // Set available space on interaction\n if (context.range().length && (orientation === TOP || orientation === BOTTOM)) {\n context.applyTickSkipping();\n const {\n largestTickDimensions\n } = context.getAxisDimensions();\n\n const noOfTicks = context.getTickValues().length;\n\n const { width, height, padding } = context.availableSpace();\n const {\n left,\n right\n } = padding;\n // Get the Tick Interval\n const tickInterval = Math.min(largestTickDimensions.width,\n ((width - (noOfTicks - 1) * (context._minTickDistance.width)) / noOfTicks));\n\n context.maxTickSpaces({\n width: tickInterval\n });\n\n const adjustedRange = getAdjustedRange(minDiff, [tickInterval / 2,\n width - left - right - tickInterval / 2], domain, context.config());\n\n // set range for axis\n setAxisRange(context, 'y', adjustedRange, isOffset ? height : null);\n\n context.setTickConfig();\n }\n};\n\nexport const getSmartAxisName = (name, width, labelManager) => {\n const oriSize = labelManager.getOriSize(name);\n\n labelManager.useEllipsesOnOverflow(true);\n\n return labelManager.getSmartText(name, width, oriSize.height, true);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { hasAxesConfigChanged } from './helper';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n axisComponentDimensions: {},\n config: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._config || {});\n const mockedOldConfig = mergeRecursive({}, oldConfig);\n value = mergeRecursive(mockedOldConfig, value);\n\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n const shouldAxesScaleUpdate = hasAxesConfigChanged(\n value, oldConfig, ['interpolator', 'exponent', 'base', 'orientation']\n );\n const tickFormatter = context.sanitizeTickFormatter(value);\n\n if (shouldAxesScaleUpdate) {\n context._scale = context.createScale(value);\n context._axis = context.createAxis(value);\n }\n\n context._tickFormatter = ticks => tickFormatter(ticks);\n\n context.resetRenderConfig(value);\n return value;\n }\n },\n renderConfig: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._renderConfig || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n return value;\n }\n },\n\n smartTicks: {},\n tickSize: {},\n maxTickSpaces: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._maxTickSpaces || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n valueParser: {\n defaultValue: val => val\n }\n};\n","import {\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 { spaceSetter } from './space-setter';\nimport {\n getAxisComponentDimensions,\n computeAxisDimensions,\n calculateContinousSpace,\n setOffset,\n getValidDomain,\n getSmartAxisName\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._axisDimensions = {};\n this._smartTicks = [];\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\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n const dist = dependencies.labelManager.getOriSize('w');\n\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n this._minTickSpace = dependencies.labelManager.getOriSize('www...');\n\n generateGetterSetters(this, PROPS);\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n this._animationDonePromises = [];\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 resetDomain () {\n this._domain = [];\n return this;\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 *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n this.scale().domain(domainValue);\n this._domain = this.scale().domain();\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n setAxisComponentDimensions () {\n this.axisComponentDimensions(getAxisComponentDimensions(this));\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n *\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 sanitizeTickFormatter (value) {\n const { tickFormat, numberFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), val, i, ticks);\n }\n\n return () => val => numberFormat(val);\n }\n\n resetRenderConfig (config) {\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n } = config;\n this.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n });\n return this;\n }\n\n resetLogicalSpace () {\n this.logicalSpace(null);\n this.range([]);\n\n this.resetRenderConfig(this.config());\n }\n\n getFormattedText (text, index, axisTicks) {\n const formatter = this._tickFormatter;\n\n return formatter(axisTicks)(text, index);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n setTickValues (tickValues) {\n const renderConfig = this.renderConfig();\n this.config({ ...renderConfig, tickValues });\n this.tickValues = tickValues;\n this.axis().tickValues(tickValues);\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 let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n const type = this.constructor.type();\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset })[type].x();\n } else {\n labelConfig = spaceSetter(this, { isOffset })[type].y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.setSmartAxisName();\n return this;\n }\n\n setSmartAxisName () {\n const { orientation, name } = this.config();\n const dimType = (orientation === TOP || orientation === BOTTOM) ? 'width' : 'height';\n const widthDim = this.availableSpace()[dimType];\n const labelManager = this.dependencies().labelManager;\n labelManager.setStyle(this._axisNameStyle);\n this.renderConfig({\n smartAxisName: getSmartAxisName(name, widthDim, labelManager)\n });\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\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 *\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 (...params) {\n this.axisDimensions(computeAxisDimensions(this, ...params));\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 }\n setOffset(this);\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 return this.scale().invert(value);\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 *\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n return [v1, v2];\n }\n\n invertExtent (v1, v2) {\n return [this.invert(v1), this.invert(v2)];\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\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 /**\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 this.setTickConfig();\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n remove () {\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n *\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 * Notifies when all animations/transitions of the axis are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n}\n\n","import { sanitizeDomainWhenEqual } from 'muze-utils';\nimport { 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 if (domain.length) {\n domain = sanitizeDomainWhenEqual(domain);\n }\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 const scale = this._scale;\n if (domainVal <= 0) {\n return scale(scale.domain()[0]);\n }\n\n return scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n domain[0] = Math.max(1, domain[0]);\n }\n if (domain[1] <= 0) {\n domain[1] = Math.max(1, domain[1]);\n }\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 {\n getNumberOfTicks,\n getValidDomain,\n setContinousAxisDomain\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 *\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 *\n *\n * @static\n *\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 *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainVal = this._interpolator.sanitizeDomain(getValidDomain(this, domain[0]));\n setContinousAxisDomain(this, domainVal);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\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 (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n const {\n tickValues,\n showInnerTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n if (!showInnerTicks) {\n axis.tickValues([]);\n return this;\n }\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n }\n const newTickValues = this.getTickValues();\n\n axis.tickValues(newTickValues);\n const smartLabel = this.dependencies().labelManager;\n smartLabel.setStyle(this._tickLabelStyle);\n const formatter = this._tickFormatter(newTickValues);\n const smartTicks = newTickValues.map((val, i) => {\n const text = formatter(val, i);\n const tickSpace = smartLabel.getOriSize(text);\n\n tickSpace.text = text;\n return tickSpace;\n });\n\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation\n\n } = this.config();\n const {\n tickValues\n } = this.renderConfig();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = this.axisComponentDimensions().largestTickDimensions;\n\n if (tickValues) {\n return 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.renderConfig().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 } = this.config();\n const {\n labels\n } = this.renderConfig();\n\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const ticks = axis.tickValues();\n const smartTicks = this.smartTicks();\n\n if (smartTicks && smartTicks.length) {\n const { width, height } = this.smartTicks()[0];\n\n axis.tickTransform((d) => {\n if (d === ticks[0]) {\n if ((orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n\n if ((orientation === TOP || orientation === BOTTOM) && !rotation) {\n return `translate(${width / 2}px, ${0}px)`;\n }\n } return '';\n });\n }\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { calculateBandSpace, setOffset, getRotatedSpaces } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n /**\n *\n *\n * @static\n *\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const domain = this.domain();\n const { labelManager } = this._dependencies;\n const { padding } = this.config();\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n tickValues && this.axis().tickValues(tickValues);\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n // Update padding between plots\n if (typeof padding === 'number') {\n const paddingNormalized = Math.min(1, Math.max(0, padding));\n this.scale().padding(paddingNormalized);\n }\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\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 }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n *\n *\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n formatTickValue (val) {\n return this.valueParser()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(this.formatTickValue(val), val, i, ticks);\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\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 invertExtent (v1, v2) {\n return this.scale().invertExtent(v1, v2);\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 const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n const extent = this.invertExtent(v1, v2);\n const p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n const p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { TIME } from '../enums/scale-type';\nimport { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset,\n resetTickInterval } from './helper';\nimport { applyTickSkipping } from './space-setter';\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 *\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 *\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n formatTickValue (val) {\n return this.scale().tickFormat()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return (ticks) => {\n const rawTicks = ticks.map(t => t.getTime());\n return (val, i) => tickFormat(this.formatTickValue(val), val.getTime(), i, rawTicks);\n };\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\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 *\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.renderConfig().tickValues || this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n *\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n applyTickSkipping () {\n applyTickSkipping(this);\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n setContinousAxisDomain(this, domainValue);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n\n resetTickInterval(this, domainValue);\n return this;\n }\n return this._domain;\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 }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\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 (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n\n tickValues && this.axis().tickValues(tickValues);\n\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n\n this.smartTicks(smartTicks);\n return this;\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, defaultValue } 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, defaultValue(Number(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 { InvalidAwareTypes, getObjProp } from 'muze-utils';\n\nexport const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => {\n if (domainVal instanceof InvalidAwareTypes) {\n return minDomainScaledVal;\n }\n return scaledVal;\n};\n\nexport const resolveAxisConfig = (propVal, defaultVal, context) => {\n const constructor = getObjProp(propVal, 'constructor');\n switch (constructor) {\n case Function:\n return propVal(defaultVal, context);\n case Array:\n return propVal;\n default:\n return defaultVal;\n }\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\nimport { treatNullMeasures } from '../helper';\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*\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 *\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 *\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 *\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(sanitizeDomainWhenEqual(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 *\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 *\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return treatNullMeasures(domainValue, scale(numVal), scale(0));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) => treatNullMeasures(domainValue, scale(domainValue),\n scale(domain[0]));\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) =>\n strategies()[`${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, defaultValue } 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, getActualHslColor } 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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n *\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 *\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n return strategyGetter(domainType, rangeType, schemeType);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n *\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 if (color) {\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 }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n *\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 = Math.min(defaultValue(color[3], 0), 1);\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = Math.min(a + transformationArr[3] || 0, 1);\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 getHslArray (color) {\n return getActualHslColor(color);\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';\nimport { treatNullMeasures } from '../helper';\n\n/**\n *\n *\n * @param {*} domain\n *\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 *\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n *\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 *\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 treatNullMeasures(domainValue, interpolator(numVal), interpolator(domain[0]));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\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, domain) =>\n treatNullMeasures(domainValue, scale(domainValue), scale(domain[0]));\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 *\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n *\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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\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, InvalidAwareTypes } 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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n *\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value || value instanceof InvalidAwareTypes) {\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 *\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 { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => mergeRecursive(context.config(), config),\n preset: (context, config) => {\n const { range, domain } = config;\n range && context.range(range);\n domain && context.domain(domain);\n }\n },\n domain: {},\n range: {}\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, Symbols, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_ANGLE_DOMAIN } from '../enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst { pie } = Symbols;\n\nconst createAngleValues = (context) => {\n const angleData = context._angleFn(context._domain);\n angleData.forEach((v) => {\n v.startAngle -= Math.PI / 2;\n v.endAngle -= Math.PI / 2;\n });\n context._angleValues = angleData.reduce((values, d) => {\n const key = d.data;\n !values[key] && (values[key] = []);\n values[key].push(d);\n return values;\n }, {});\n};\n\n/**\n* This class is used to instantiate a AngleAxis.\n* @class AngleAxis\n*/\nexport default class AngleAxis {\n\n /**\n * Creates an instance of AngleAxis.\n * @param {Object} config input parameters.\n * @memberof AngleAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._range = [0, 360];\n this._angleFn = pie()\n .value(d => (typeof d === 'string' ? 1 : d))\n .sortValues(null);\n this._angleValues = {};\n }\n\n static defaultConfig () {\n return {};\n }\n\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n getScaleValue (domainVal) {\n return this._angleValues[domainVal];\n }\n\n padAngle (angle) {\n this._angleFn = this._angleFn.padAngle(angle);\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n const domain = domainVal[0].length ? domainVal[0] : DEFAULT_ANGLE_DOMAIN;\n this._domain = resolveAxisConfig(customDomain, domain, this);\n createAngleValues(this);\n return this;\n }\n return this._domain;\n }\n\n range (...range) {\n if (range.length) {\n const { range: customRange } = this.config();\n this._range = resolveAxisConfig(customRange, range[0], this);\n const domain = this.domain();\n const [startAngle, endAngle] = this._range;\n this._angleFn\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180);\n if (domain && domain.length) {\n createAngleValues(this);\n }\n return this;\n }\n return this._range;\n }\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\nexport const ANGLE0 = 'angle0';\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 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 * Ordering type\n */\nexport const ASCENDING = 'asc';\n/**\n * Ordering type\n */\nexport const DESCENDING = 'desc';\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, mergeRecursive, generateGetterSetters, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { LINEAR } from '../../../visual-group/src/enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst adjustDomain = (context) => {\n const minOuterRadius = context.config().minOuterRadius;\n const domain = context._domain;\n if (context._range.length) {\n const scale = context._scale;\n const value = scale.invert(minOuterRadius) - scale.invert(0);\n context._domain = [domain[0] - value, domain[1]];\n scale.domain(context._domain);\n }\n};\n\n/**\n* This class is used to instantiate a RadiusAxis.\n* @class RadiusAxis\n*/\nexport default class RadiusAxis {\n\n /**\n * Creates an instance of RadiusAxis.\n * @param {Object} config input parameters.\n * @memberof RadiusAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._range = [];\n this._radiusFactor = 1;\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._scale = this.createScale({\n scale: LINEAR\n });\n }\n\n static defaultConfig () {\n return {\n padding: [0, 1],\n minOuterRadius: 10\n };\n }\n\n config (...params) {\n if (params.length) {\n const config = mergeRecursive(this.config(), params[0]);\n this._config = config;\n return this;\n }\n return this._config;\n }\n\n createScale (strategy) {\n return createScale({\n type: strategy.scale,\n range: this.range()\n });\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n let domain = resolveAxisConfig(customDomain, domainVal[0], this);\n domain = sanitizeDomainWhenEqual(domain);\n this._scale.domain(domain);\n this._domain = domain;\n adjustDomain(this);\n }\n return this._domain;\n }\n\n getInnerRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[0];\n }\n return this._scale(domainVal);\n }\n\n getOuterRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[1];\n }\n const radius = this._scale(domainVal) * this._radiusFactor;\n return radius;\n }\n\n range (...range) {\n if (range.length) {\n const { padding, range: customRange } = this.config();\n const sanitizedRange = range[0].map((v, i) => v + (i ? -padding[i] : padding[i]));\n const rangeVal = resolveAxisConfig(customRange, sanitizedRange, this);\n this._range = rangeVal;\n this._scale.range(rangeVal);\n adjustDomain(this);\n }\n return this._range;\n }\n\n setRadiusFactor (val) {\n this._radiusFactor = val;\n return this;\n }\n}\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n TEMPORAL: '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.TEMPORAL]: ScaleType.TIME\n};\n\n","import { nestCollection, InvalidAwareTypes } 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 const groupedData = nestCollection({\n keys: groupByIndices,\n data\n });\n\n groupedData.forEach((d) => {\n const key = d.key;\n if (InvalidAwareTypes.isInvalid(key)) {\n d.key = InvalidAwareTypes.getInvalidType(key);\n }\n });\n return groupedData;\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 retrieveNearestGroupByReducers,\n getObjProp,\n COORD_TYPES,\n CommonProps,\n defaultValue\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM, ASCENDING, TEXT } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\nconst { POLAR, CARTESIAN } = COORD_TYPES;\n\nconst transformColor = (colorAxis, datum, styleType, intensity) => {\n const meta = datum.meta;\n const stateColor = defaultValue(meta.stateColor[styleType], meta.originalColor[styleType]);\n const colorInfo = colorAxis.transformColor(stateColor, intensity);\n\n meta.stateColor[styleType] = colorInfo.hsla;\n return colorInfo;\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.forEach((elem) => {\n elem.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 = transformColor(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 transformColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor[styleType];\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a})`;\n }));\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 *\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\nexport const encodingFieldInfRetriever = {\n [POLAR]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.RADIUS, ENCODING.RADIUS0, ENCODING.ANGLE, ENCODING.ANGLE0, COLOR, SHAPE, SIZE, TEXT]\n .forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n });\n return encodingInf;\n },\n [CARTESIAN]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE, TEXT].forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n encodingInf[`${e}FieldType`] = getObjProp(fieldsConfig, field, 'def', 'type');\n encodingInf[`${e}FieldSubType`] = getObjProp(fieldsConfig, field, 'def', 'subtype');\n });\n\n return encodingInf;\n }\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n *\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\nconst dataNormalizers = {\n [POLAR]: (transformedData, encodingFieldInf, fieldsConfig) => {\n const {\n radiusFieldIndex,\n angleFieldIndex,\n radius0FieldIndex,\n angle0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map(data => data.map((d) => {\n const pointObj = {\n radius: d[radiusFieldIndex],\n angle: angleFieldIndex !== undefined ? d[angleFieldIndex] : 1,\n radius0: d[radius0FieldIndex],\n angle0: d[angle0FieldIndex]\n };\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n return pointObj;\n })).filter(d => d.length);\n },\n [CARTESIAN]: (transformedData, encodingFieldInf, fieldsConfig, transformType) => {\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 transformedData.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.source = tuple;\n pointObj.rowId = tuple[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = tuple[encodingFieldInf[`${enc}FieldIndex`]];\n });\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n }\n return pointObj;\n });\n }).filter(d => d.length);\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, context) => {\n const transformType = context.transformType();\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const encodingFieldInf = context.encodingFieldsInf();\n const fieldsConfig = context.data().getFieldsConfig();\n return dataNormalizers[context.coord()](transformedDataArr, encodingFieldInf, fieldsConfig, transformType);\n};\n\nexport const domainCalculator = {\n [POLAR]: (data, layerInst) => {\n const config = layerInst.config();\n const { sort } = config;\n let angleValues = data[0];\n const radius0Field = getObjProp(config.encoding.radius0, 'field');\n if (sort) {\n angleValues = angleValues.sort((a, b) => (sort === ASCENDING ? a.radius - b.radius : b.radius - a.radius));\n }\n const radiusDomain = getDomainFromData(data, [ENCODING.RADIUS, radius0Field ?\n ENCODING.RADIUS0 : ENCODING.RADIUS]);\n return {\n radius: radiusDomain,\n angle: angleValues.map(d => d.angle),\n angle0: angleValues.map(d => d.angle0)\n };\n },\n [CARTESIAN]: (data, layerInst) => {\n const transformType = layerInst.transformType();\n const encodingFieldInf = layerInst.encodingFieldsInf();\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};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d.rowId !== 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\nexport const renderLayer = (context) => {\n const mount = context.mount();\n if (mount) {\n context.render(mount);\n context.dependencies().throwback.commit(CommonProps.ON_LAYER_DRAW, true, context.metaInf().parentNamespace);\n }\n};\n\nconst transformResolverPredicates = (encodingFieldInf, context, groupByField) => {\n const fieldsConfig = context.data().getFieldsConfig();\n const { xField, yField, xFieldType, yFieldType } = encodingFieldInf;\n const dimensionField = ['xField', 'yField'].find(type =>\n encodingFieldInf[`${type}Type`] === FieldType.DIMENSION);\n\n return [\n !xField,\n !yField,\n !groupByField,\n getObjProp(fieldsConfig[groupByField], 'def', 'type') === FieldType.MEASURE,\n xFieldType === FieldType.DIMENSION && yFieldType === FieldType.DIMENSION,\n dimensionField && encodingFieldInf[dimensionField] === groupByField\n ];\n};\n\nexport const resolveInvalidTransformType = (context) => {\n const encodingFieldInf = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n\n if (transformResolverPredicates(encodingFieldInf, context, groupByField).some(value => value)) {\n return IDENTITY;\n }\n return null;\n};\n\nexport const getValidTransform = context => resolveInvalidTransformType(context) || context.config().transform.type;\n\nexport const getValidTransformForAggFn = (context) => {\n const resolvedInvalidTransformType = resolveInvalidTransformType(context);\n if (resolvedInvalidTransformType) {\n return resolvedInvalidTransformType;\n }\n\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const isCustomTransformTypeProvided = !!getObjProp(context._customConfig, 'transform', 'type');\n let transformType = context.config().transform.type;\n\n if (!isCustomTransformTypeProvided && groupByField && xFieldType !== yFieldType) {\n const measureField = xFieldType === FieldType.MEASURE ? xField : yField;\n const { [measureField]: aggFn } = retrieveNearestGroupByReducers(context.data(), measureField);\n transformType = aggFn === AGG_FN_SUM ? STACK : GROUP;\n }\n\n return transformType;\n};\n\nexport const getMarkId = (source, schema) => source.filter((val, i) => schema[i] &&\n schema[i].type === FieldType.DIMENSION).join();\n\nexport const resolveEncodingValues = (data, i, dataArr, layerInst) => {\n const transformedValues = {};\n const values = data.values;\n const encoding = layerInst.config().encoding;\n for (const key in values) {\n const value = getObjProp(encoding[key], 'value');\n if (value instanceof Function) {\n transformedValues[key] = value(values, i, dataArr, layerInst);\n } else {\n transformedValues[key] = values[key];\n }\n }\n return transformedValues;\n};\n\nexport const getColorMetaInf = (colorInf, colorAxis) => ({\n originalColor: Object.keys(colorInf).reduce((acc, key) => {\n if (colorInf[key]) {\n acc[key] = colorAxis.getHslArray(colorInf[key]);\n }\n return acc;\n }, {}),\n stateColor: {},\n colorTransform: {}\n});\n\nconst getCoordValue = (radius, trig, angle, offset) => radius * Math[trig](angle) + offset;\n\nconst coordValueGetter = (radius, angle, xOffset, yOffset) => ({\n x: getCoordValue(radius, 'cos', angle, xOffset),\n y: getCoordValue(radius, 'sin', angle, yOffset)\n});\n\nexport const toCartesianCoordinates = (points, measurement, rangePlot = false) => {\n const xOffset = measurement.width / 2;\n const yOffset = measurement.height / 2;\n for (let i = 0, len = points.length; i < len; i++) {\n const point = points[i];\n const { angle, radius, radius0, angle0 } = point.update;\n point.update = coordValueGetter(radius, angle, xOffset, yOffset);\n if (rangePlot) {\n const update = point.update = coordValueGetter(radius0, angle0, xOffset, yOffset);\n const { x: x0, y: y0 } = coordValueGetter(radius, angle, xOffset, yOffset);\n update.x0 = x0;\n update.y0 = y0;\n }\n }\n return points;\n};\n\nexport const sortData = (data, axes) => {\n const { x: xAxis, y: yAxis } = axes;\n const axisArr = [xAxis, yAxis];\n for (let i = 0, len = axisArr.length; i < len; i++) {\n const axis = axisArr[i];\n if (axis.constructor.type() === BAND) {\n const key = i ? 'y' : 'x';\n const dom = axis.domain();\n const indices = dom.reduce((acc, v, idx) => {\n acc[v] = idx;\n return acc;\n }, {});\n data.sort((a, b) => indices[a[key]] - indices[b[key]]);\n break;\n }\n }\n return data;\n};\n","import * as PROPS from '../enums/props';\n\nexport const localOptions = {\n [PROPS.DATA]: {\n value: null\n }\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\nimport * as PROPS from '../enums/props';\nimport { encodingFieldInfRetriever } from '../helpers';\n\nexport const listenerMap = [\n {\n props: [`${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${PROPS.DATA}`],\n type: 'registerImmediateListener',\n listener: (context, [, data]) => {\n const config = context.config();\n if (data && config) {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n const encodingValue = config.encoding;\n if (encodingValue) {\n const fieldsConfig = data.getFieldsConfig();\n const encodingFieldsInf = encodingFieldInfRetriever[context.coord()](encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.resolveTransformType();\n context._transformedData = context.getTransformedData(data, config,\n context.transformType(), encodingFieldsInf);\n context._normalizedData = context.getNormalizedData(context._transformedData, fieldsConfig);\n if (config.calculateDomain !== false) {\n const domain = context.calculateDomainFromData(context._normalizedData,\n context.encodingFieldsInf(), context.data().getFieldsConfig());\n context.domain(domain);\n }\n }\n }\n },\n namespace: context => context.metaInf().namespace\n }\n];\n","import {\n getUniqueId,\n mergeRecursive,\n FieldType,\n selectElement,\n ReservedFields,\n DataModel,\n clone,\n generateGetterSetters,\n STATE_NAMESPACES,\n COORD_TYPES,\n transactor,\n defaultValue,\n getObjProp\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport { props } from './props';\nimport {\n transformData,\n getNormalizedData,\n applyInteractionStyle,\n getValidTransform,\n domainCalculator,\n renderLayer\n} from '../helpers';\nimport { localOptions } from './local-options';\nimport { listenerMap } from './listener-map';\n\nconst layerNs = [STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * An abstract class which gives definition of common layer functionality like\n * - transforming data for various modes. Supported modes: identity, group and stack.\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 * @module BaseLayer\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n * @constructor\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.size 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} dependencies.smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies = {}) {\n super();\n\n generateGetterSetters(this, props);\n this.axes(axes);\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 this._animationDonePromises = [];\n this._graphicElems = {};\n this._customConfig = null;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys(localOptions).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getListeners () {\n return {\n store: [...listenerMap, {\n type: 'registerChangeListener',\n props: [`${layerNs[1]}.${PROPS.DATA}`,\n ...['x', 'y', 'radius'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context) => {\n renderLayer(context);\n },\n subNamespace: (context) => {\n const { unitRowIndex, unitColIndex, namespace } = context.metaInf();\n return {\n [`${layerNs[1]}.${PROPS.DATA}`]: namespace,\n [`${groupNs}.domain.x`]: `${unitColIndex}0`,\n [`${groupNs}.domain.y`]: `${unitRowIndex}0`,\n [`${groupNs}.domain.radius`]: `${unitRowIndex}-${unitColIndex}`\n };\n }\n }],\n throwback: []\n };\n }\n\n static getQualifiedStateProps () {\n const layerState = BaseLayer.getState();\n return layerState.map((state, i) => Object.keys(state).map(prop => `${layerNs[i]}.${prop}`));\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { namespace } = this.metaInf();\n store.addSubNamespace(namespace, BaseLayer.formalName(), this);\n\n transactor(this, localOptions, store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}`\n });\n return this;\n }\n return this._store;\n }\n\n domain (...dom) {\n const prop = `${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`;\n const store = this.store();\n if (dom.length) {\n const { parentNamespace, namespace } = this.metaInf();\n const domain = defaultValue(store.get(prop, parentNamespace), {});\n domain[namespace] = dom[0];\n this.store().commit(prop, domain, parentNamespace);\n return this;\n }\n return this.store().get(prop, this.metaInf().namespace);\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 * .layers([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @return {string} name of layer\n */\n static formalName () {\n return 'base';\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 *\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 * @public\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 * @public\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Returns the transformed data based on given transform type.\n * It first 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 */\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 categorical 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 = domainCalculator[this.coord()](data, this);\n }\n return domains;\n }\n\n static 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 { parentNamespace, namespace } = this.metaInf();\n const domains = getObjProp(this.store()\n .get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, parentNamespace), namespace);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Normalizes the transformed data and returns it.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData) {\n return getNormalizedData(transformedData, this);\n }\n\n /**\n * Gets the nearest point closest to the given x and y coordinate. If no nearest point is found, then it returns\n * null.\n *\n * @public\n *\n * @param {number} x X Coordinate.\n * @param {number} y Y Coordinate.\n *\n * @return {Object} Information of the nearest point.\n * ```\n * {\n * // id property contains the field names and their corresponding values in a 2d array. This is the data\n * // associated with the nearest point.\n * id: // Example data: [['Origin'], ['USA']],\n * dimensions: // Physical dimensions of the point.\n * layerId: // Id of the layer instance.\n * }\n * ```\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply, styles) {\n const interactionConfig = this.config().interaction || {};\n\n let interactionStyles = interactionConfig[interactionType];\n interactionStyles = styles || interactionStyles;\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n disableUpdate () {\n this._updateLock = true;\n return this;\n }\n\n enableUpdate () {\n this._updateLock = false;\n return this;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransform(this);\n }\n\n transformType () {\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 *\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer.\n *\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n const { namespace, parentNamespace } = this.metaInf();\n const store = this.store();\n store.removeSubNamespace(namespace, BaseLayer.formalName());\n const layersDomain = store.get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`);\n const unitDom = layersDomain[parentNamespace];\n unitDom && (delete unitDom[namespace]);\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 *\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 *\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getSchema();\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 hasPlotSpan () {\n return false;\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 * Returns the information of the marks corresponding to the supplied identifiers. Identifiers are a set of field\n * names and their corresponding values in an array. It can also be an instance of datamodel.\n *\n * For example,\n * ```\n * const identifiers = [\n * ['Origin', 'Cylinders'],\n * ['USA', '8']\n * ];\n * const points = barLayer.getPointsFromIdentifiers(identifiers);\n * ```\n * @public\n * @param {Array|DataModel} identifiers Identifiers of the marks.\n * @param {Object} config Optional configuration which describes how to get the information.\n * @param {boolean} config.getAllAttrs If true, then returns all the information of the points, else returns only\n * the positions of the points.\n * @param {boolean} config.getBBox If true, then returns the bounding box of all the marks.\n *\n * @return {Array} Array of points contains\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 { source, rowId } = 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] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -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._normalizedData;\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.source;\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.source;\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().getSchema()];\n }\n\n /**\n * Returns the dom elements associated with the supplied set of row ids.\n * Each element in the layer is mapped with a row of the datamodel. When given an array of row ids, it returns all\n * the elements which is mapped with those row ids.\n *\n * @public\n * @param {Array} set Array of row ids\n *\n * @return {Selection} D3 Selection of dom elements.\n */\n getPlotElementsFromSet (set) {\n const graphicElems = this._graphicElems;\n const elems = [];\n for (let i = 0, len = set.length; i < len; i++) {\n const elem = graphicElems[set[i]];\n if (elem) {\n elems.push(elem);\n }\n }\n return elems;\n }\n\n /**\n * Notifies when all animations/transitions of the layer are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n getRenderProps () {\n if (this.coord() === COORD_TYPES.POLAR) {\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`];\n }\n const { unitRowIndex: rowIndex, unitColIndex: colIndex } = this.metaInf();\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${rowIndex}0`,\n `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${colIndex}0`];\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\nconst filterFn = (d) => {\n const { update } = d;\n return update.y !== null && update.x !== null;\n};\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 { layer, 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(filterFn);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(filterFn);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', points.length ? [points[0].className] : []);\n element.attr('class', d => d);\n if (!transition.disabled) {\n element = element.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\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 InvalidAwareTypes,\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 {\n attachDataToVoronoi,\n animateGroup,\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\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 static formalName () {\n return 'line';\n }\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 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 static 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) {\n let points = [];\n const axes = this.axes();\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const { xFieldType, yFieldType } = 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 sortData(data, axes);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2;\n const color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color\n },\n data: d\n }, i, data, this);\n\n const point = {\n enter: {},\n update: {\n x: d.x instanceof InvalidAwareTypes ? null : resolvedEncodings.x,\n y: d.y instanceof InvalidAwareTypes ? null : resolvedEncodings.y\n },\n style: {\n stroke: resolvedEncodings.color,\n 'fill-opacity': 0\n },\n rowId: d.rowId,\n source: d.source,\n meta: getColorMetaInf({\n stroke: resolvedEncodings.color\n }, colorAxis)\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\n points = points.filter((point) => {\n const { update } = point;\n return !isNaN(update.x) && !isNaN(update.y);\n });\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 normalizedData = this._normalizedData;\n const transformedData = this._transformedData;\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);\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.source[colorFieldIndex] !== null &&\n d.source[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal.source[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n layer: this,\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].source[colorFieldIndex] || d[0].rowId);\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 { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\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 { layer, 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(points.length ? [points[0].className] : []);\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 .on('end', layer.registerAnimationDoneHook())\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n element.attr('class', d);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType, InvalidAwareTypes, getObjProp } 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 {\n getAxesScales,\n positionPoints,\n getIndividualClassName,\n getValidTransformForAggFn,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\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 *\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 && getObjProp(domains[type], 'length')) {\n domains[type][0] = Math.min(domains[type][0], 0);\n domains[type][1] = Math.max(0, domains[type][1]);\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) {\n let points = [];\n const transformType = this.transformType();\n const axes = this.axes();\n const colorAxis = axes.color;\n const config = this.config();\n const fieldsConfig = this.data().getFieldsConfig();\n const { xField, yField, y0Field } = this.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 const minYVal = yAxis.domain()[0];\n const basePos = minYVal < 0 ? yAxis.getScaleValue(0) : yAxis.getScaleValue(minYVal);\n sortData(data, axes);\n points = data.map((d, i) => {\n let color;\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) : basePos;\n color = colorAxis.getColor(d.color);\n const invalidY = d.y instanceof InvalidAwareTypes;\n const invalidY0 = d.y0 instanceof InvalidAwareTypes;\n const resolvedValues = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, this);\n color = resolvedValues.color;\n const style = {\n fill: color\n };\n\n const point = {\n enter: {\n x: xPx,\n y: invalidY ? null : basePos,\n y0: invalidY0 ? null : basePos\n },\n update: {\n x: xPx,\n y: invalidY ? null : resolvedValues.y,\n y0: invalidY0 ? null : resolvedValues.y0\n },\n source: d.source,\n rowId: d.rowId,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta: getColorMetaInf(style, colorAxis)\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 points = points.filter((point) => {\n const update = point.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(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 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 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 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 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 Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport { getIndividualClassName, resolveEncodingValues, getColorMetaInf } from '../../helpers';\nimport { tweenPie, tweenExitPie, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates.\n *\n * @public\n *\n * @class\n * @module ArcLayer\n * @extends BaseLayer\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 static formalName () {\n return 'arc';\n }\n\n elemType () {\n return 'path';\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 { source, rowId } = dataPoint;\n return {\n id: this.getIdentifiersFromData(source, rowId),\n layerId: this.id()\n };\n }\n return null;\n }\n\n translatePoints (data) {\n const { angle, color: colorAxis, radius: radiusAxis } = this.axes();\n const pieIndex = {};\n const prevData = this._points[0] || [];\n const points = [];\n const angleV = {};\n\n this._prevPieData = {};\n prevData.forEach((e, index) => {\n this._prevPieData[e.rowId] = [e, index];\n pieIndex[e.index] = e;\n });\n data.forEach((d, i) => {\n const angles = angle.getScaleValue(d.angle);\n if (angles) {\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const uid = d.rowId;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n radius: radiusAxis.getOuterRadius(d.radius),\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color: colorAxis.getColor(d.color),\n angle0: startAngle,\n angle: endAngle,\n startAngle,\n endAngle,\n startAngle0: startAngle,\n endAngle0: endAngle\n },\n data: d\n }, i, data, this);\n const color = resolvedEncodings.color;\n points.push({\n source: d.source,\n index: i,\n enter: {},\n update: {\n angle0: resolvedEncodings.angle0,\n angle: resolvedEncodings.angle,\n radius0: resolvedEncodings.radius0,\n radius: resolvedEncodings.radius\n },\n color,\n meta: getColorMetaInf({\n fill: color\n }, colorAxis),\n rowId: uid,\n _previousInfo: this._prevPieData[uid] ? this._prevPieData[uid][0] :\n getPreviousPoint(pieIndex, i, this)\n });\n }\n });\n return points;\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const measurement = this.measurement();\n const {\n classPrefix,\n defClassName,\n cornerRadius,\n padAngle,\n padRadius,\n transition\n } = this.config();\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // This returns a function that generates the arc path based on the datum provided\n const path = this._arcFn = arc()\n .cornerRadius(cornerRadius)\n .startAngle(d => d.update.angle0 + Math.PI / 2)\n .endAngle(d => d.update.angle + Math.PI / 2)\n .padAngle(padAngle)\n .padRadius(padRadius)\n .outerRadius(d => d.update.radius)\n .innerRadius(d => d.update.radius0);\n\n this._points = this._normalizedData.map(arr => this.translatePoints(arr));\n const graphicElems = this._graphicElems = {};\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', this._points, `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${measurement.width / 2},\n ${measurement.height / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', d => [d], `${qualClassName[0]}-path`)\n .style('fill', d => d.color)\n .each(function (d) {\n graphicElems[d.rowId] = selectElement(this);\n })\n .transition()\n .duration(transition.duration)\n .on('end', this.registerAnimationDoneHook())\n .attrTween('d', (...params) => tweenPie(path, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, this._points, 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', d => d, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, path);\n return this;\n }\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 { source, rowId } = tData;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const measurement = this.measurement();\n const centroid = this._arcFn.centroid(pieSliceInf);\n return [{\n x: centroid[0] + measurement.width / 2,\n y: centroid[1] + measurement.height / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\nexport const getPreviousPoint = (prevData, currIndex, context) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n const [startAngle, endAngle] = context.axes().angle.range();\n if (prevArc && nextArc) {\n return {\n update: {\n angle0: getObjProp(prevArc, 'update', 'angle'),\n angle: getObjProp(nextArc, 'update', 'angle0')\n }\n };\n } else if (!nextArc) {\n return {\n update: {\n angle0: (endAngle - 90) * Math.PI * 2 / 360,\n angle: (endAngle - 90) * Math.PI * 2 / 360\n }\n };\n }\n return {\n update: {\n angle0: (startAngle - 90) * Math.PI * 2 / 360,\n angle: (startAngle - 90) * Math.PI * 2 / 360\n }\n };\n};\n\nexport const tweenPie = (path, b) => {\n const datum = b[0];\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\nexport const tweenExitPie = (consecutiveExits, transition, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.update.angle0;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.update.angle;\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 return path(interpolator()(datum, {\n update: {\n angle0: mid,\n angle: mid,\n radius: datum.radius,\n radius0: datum.radius0\n }\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, layerInst) => {\n const selection = selectElement(container).selectAll('g').data(data);\n const { smartLabel } = layerInst._dependencies;\n const graphicElems = layerInst._graphicElems;\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 graphicElems[dataObj.rowId] = element;\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 textEl.attr('alignment-baseline', dataObj['alignment-baseline']);\n textEl.attr('transform', `rotate(${dataObj.rotation} ${update.x} ${update.y})`);\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 size: {},\n radius: {},\n angle: {},\n text: {\n value: '',\n formatter: (val, i, data, context) => {\n const valueParser = context.valueParser();\n return valueParser(val);\n },\n background: {\n padding: 10\n }\n },\n rotation: {\n value: 0\n },\n 'alignment-baseline': {\n value: 'middle'\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 { positionPoints, getIndividualClassName, resolveEncodingValues, getColorMetaInf, toCartesianCoordinates }\n from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\n\nimport './styles.scss';\n\nconst defaultEncoding = defaultConfig.encoding;\nconst alignmentBaseLine = defaultEncoding['alignment-baseline'].value;\nconst defRotation = defaultEncoding.rotation.value;\n\nconst pointTranslators = {\n polar: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { radius: radiusAxis, color: colorAxis, angle: angleAxis } = axes;\n const { formatter: textFormatter } = textEncoding;\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const angleV = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const source = d.source;\n const text = d.text;\n\n const color = colorAxis.getColor(d.color);\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n\n const angle = (startAngle + endAngle) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n angle,\n radius,\n color,\n text,\n startAngle,\n endAngle,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n angle: resolvedVal.angle,\n radius: resolvedVal.radius\n },\n text: textFormatter ? textFormatter(text, i, data, layerInst) : resolvedVal.text,\n color: resolvedVal.color,\n rotation: resolvedVal.rotation,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedVal['alignment-baseline'],\n meta: getColorMetaInf({\n fill: resolvedVal.color\n }, colorAxis),\n style: {},\n source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = toCartesianCoordinates(positionPoints(layerInst, points), layerInst.measurement());\n\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n },\n cartesian: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const colorAxis = axes.color;\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\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.source;\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 = colorAxis.getColor(d.color, colorAxis);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n text: textValue,\n color,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n },\n text: textFormatter(resolvedEncodings.text, i, data, layerInst),\n color: resolvedEncodings.color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedEncodings['alignment-baseline'],\n rotation: resolvedEncodings.rotation,\n meta: getColorMetaInf({\n fill: resolvedEncodings.color\n }, colorAxis),\n style: {},\n source: d.source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = positionPoints(layerInst, points);\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n};\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\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 getPointTranslator (val) {\n return pointTranslators[val];\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, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\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 const config = this.config();\n const normalizedData = this._normalizedData;\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n this._graphicElems = {};\n\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group) => {\n const node = group.node();\n const points = this.translatePoints(dataArr, {}, this);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this);\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 *\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, groupElement) {\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, groupElement);\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 makeElement(groupElement, () => newShape, [1]);\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, groupElement);\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 const { layer, container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n const graphicElems = layer._graphicElems;\n mount.attr('class', className);\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const { enter } = d;\n group.attr('transform', `translate(${enter.x},${enter.y})`);\n },\n update: (group, d) => {\n createShape(d, group);\n graphicElems[d.rowId] = group;\n const { update, style } = d;\n objectIterator(style, key => group.style(key, style[key]));\n group.attr('class', className);\n group.classed(d.className, true);\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n group.attr('transform', `translate(${update.x},${update.y})`);\n },\n exit: (exitGroup) => {\n if (!disabled) {\n exitGroup.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', () => exitGroup.remove())\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroup.remove();\n }\n }\n }, params.keyFn);\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: 'stroke',\n intensity: [0, 0, 0, +1]\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 stroke: {\n value: 'hsla(0,0%,0%,0)'\n },\n fill: {},\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 {\n attachDataToVoronoi,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName,\n getMarkId,\n getColorMetaInf,\n resolveEncodingValues\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to create various symbols for each data point. This is commonly used in\n * scatterplot visualizations. The mark type of this layer is ```point```.\n *\n * @public\n *\n * @class\n * @module PointLayer\n * @extends BaseLayer\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 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 static formalName () {\n return 'point';\n }\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, config = {}) {\n let points = [];\n const encoding = this.config().encoding;\n const axes = this.axes();\n const {\n x,\n y\n } = encoding;\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 measurement = this.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const stroke = encoding.stroke.value;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const size = sizeAxis.getSize(d.size);\n const shape = shapeAxis.getShape(d.shape);\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 let color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color,\n shape,\n size,\n data: d\n },\n data: d\n }, i, data, this);\n color = resolvedEncodings.color;\n\n const style = {\n fill: color,\n stroke\n };\n const pos = {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: pos,\n update: pos,\n shape: resolvedEncodings.shape,\n size: Math.abs(resolvedEncodings.size),\n meta: getColorMetaInf(style, colorAxis),\n style,\n source: d.source,\n rowId: d.rowId\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._transformedData.map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._normalizedData;\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 this._graphicElems = {};\n\n const schema = this.data().getSchema();\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 layer: this,\n container: group.node(),\n points,\n interpolate: config.interpolate,\n className: seriesClassName,\n transition,\n keyFn: v => getMarkId(v.source, schema)\n });\n }\n }, data => data[0].rowId);\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 [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, 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 { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\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 = (layer, elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n\n const selTransition = disabled ? selection :\n selection.transition()\n .duration(duration)\n .ease(easeFns[effect])\n .on('end', layer.registerAnimationDoneHook());\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 { layer, points, container, keyFn } = params;\n const graphicElems = layer._graphicElems;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) {\n graphicElems[d.rowId] = elem;\n transitionBars(layer, elem, d, i, params);\n }\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 { MeasureSubtype, DimensionSubtype } from 'muze-utils';\nimport { STACK } from '../../enums/constants';\nimport { positionPoints, getIndividualClassName, getColorMetaInf, resolveEncodingValues } from '../../helpers';\n\nconst positionRetriever = {\n x: (xPx, isNegativeVal, barBasePos) => (isNegativeVal ? [xPx, barBasePos] : [barBasePos, xPx]),\n y: (yPx, isNegativeVal, barBasePos) => (isNegativeVal ? [barBasePos, yPx] : [yPx, barBasePos])\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n *\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 === MeasureSubtype.CONTINUOUS || 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 minDomVal = axis.domain()[0];\n const barBasePos = minDomVal < 0 ? axis.getScaleValue(0) : axis.getScaleValue(minDomVal);\n pos = axis.getScaleValue(data[type]);\n let endPos = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n const isNegativeVal = data[type] < 0;\n if (transformType !== STACK) {\n [pos, endPos] = positionRetriever[type](pos, isNegativeVal, barBasePos);\n }\n space = Math.abs(pos - endPos);\n enter = barBasePos;\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 *\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 sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context.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\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\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 let color = colorAxis.getColor(d.color);\n\n const update = dimensions.update;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: update.x,\n y: update.y,\n width: update.width,\n height: update.height,\n color\n },\n data: d\n }, i, data, context);\n color = resolvedEncodings.color;\n const { x, y, width, height } = resolvedEncodings;\n const style = {\n fill: color\n };\n\n if (!isNaN(x) && !isNaN(y) && d.rowId !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update: {\n x,\n y,\n width,\n height\n },\n source: d.source,\n rowId: d.rowId,\n style,\n meta: getColorMetaInf(style, colorAxis)\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 getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n Scales,\n getNearestValue,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getPlotMeasurement, getValidTransformForAggFn } 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 rectangle marks. The mark type of this layer is ```bar```. This layer can be used\n * to create stacked or grouped bars, range bars, heatmap plots and also reference bands by using\n * the encoding properties.\n *\n * @public\n *\n * @class\n * @module BarLayer\n * @extends BaseLayer\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 *\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n *\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 *\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 *\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 && getObjProp(domain[d], 'length')) {\n if (encodingFieldInf[`${d}0Field`]) {\n domain[d] = domain[d].sort((a, b) => a - b);\n } else {\n domain[d][0] = Math.min(domain[d][0], 0);\n domain[d][1] = Math.max(0, domain[d][1]);\n }\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 normalizedDataArr = this._normalizedData;\n const transformedData = this._transformedData;\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 this._graphicElems = {};\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 layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d.source[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n *\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 resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\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 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 === MeasureSubtype.CONTINUOUS) {\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 value = getNearestValue(filterData, value);\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.source;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound.rowId);\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 hasPlotSpan () {\n return true;\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 interpolate: 'linear',\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n radius: {},\n radius0: {},\n angle: {},\n angle0: {},\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\n","import { selectElement, Symbols, pathInterpolators } from 'muze-utils';\n\nconst line = Symbols.line;\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, interpolate, layer } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n const graphicElems = layer._graphicElems;\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 graphicElems[d.rowId] = selection;\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 curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(e => e[0])\n .y(e => e[1]);\n d.className && selection.classed(d.className, true);\n selection.attr('d', linepath([[update.x, update.y], [x0, y0]]));\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 { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, positionPoints, getIndividualClassName,\n getColorMetaInf, resolveEncodingValues, toCartesianCoordinates } from '../../helpers';\n\nconst pointTranslators = {\n polar: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { radius: radiusAxis, angle: angleAxis, angle0: angle0Axis } = axes;\n const measurement = layerInst.measurement();\n\n const colorAxis = axes.color;\n const angleV = {};\n const angle0V = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const color = colorAxis.getColor(d.color);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const angles0 = angle0Axis.getScaleValue(d.angle0);\n !angle0V[d.angle0] && (angle0V[d.angle0] = 0);\n const { startAngle: startAngle0, endAngle: endAngle0 } = angles0[angle0V[d.angle0]++];\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angle = (startAngle + endAngle) / 2;\n const angle0 = (startAngle0 + endAngle0) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n radius,\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color,\n angle,\n angle0,\n startAngle,\n endAngle,\n startAngle0,\n endAngle0\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedVal.color\n };\n\n const point = {\n enter: {},\n update: {\n radius: resolvedVal.radius,\n radius0: resolvedVal.radius0,\n angle: resolvedVal.angle,\n angle0: resolvedVal.angle0\n },\n style,\n source: d.source,\n rowId: d.rowId,\n meta: getColorMetaInf(style, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n points = toCartesianCoordinates(positionPoints(layerInst, points), measurement, true);\n return points;\n },\n cartesian: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = layerInst.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 measurement = layerInst.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.source;\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 color = colorAxis.getColor(d.color);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedEncodings.color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y,\n x0: resolvedEncodings.x0,\n y0: resolvedEncodings.y0\n },\n style,\n source: row,\n rowId: d.rowId,\n meta: getColorMetaInf(style, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @staticg\n *\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n *\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, config) {\n return pointTranslators[this.coord()](data, config, this);\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","export 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 { 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. It also registers the definition of composite layers.\n *\n * @public\n *\n * @module LayerFactory\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, ...params) => {\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(...params);\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n getLayerClass: mark => factoryObj._layerRegistry[mark],\n /**\n * Registers a new composite layer definition in the layer factory.\n *\n * @public\n *\n * @param {string} layerType Mark type of the new composite layer.\n * @param {Array} layerDefs Layer definitions of the composite layer.\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 layerFactory from './layer-factory';\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 LAYER_TYPES from './enums/layer-types';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [LAYER_TYPES.AREA_LAYER]: AreaLayer,\n [LAYER_TYPES.ARC_LAYER]: ArcLayer,\n [LAYER_TYPES.LINE_LAYER]: LineLayer,\n [LAYER_TYPES.TEXT_LAYER]: TextLayer,\n [LAYER_TYPES.POINT_LAYER]: PointLayer,\n [LAYER_TYPES.TICK_LAYER]: TickLayer,\n [LAYER_TYPES.BAR_LAYER]: BarLayer,\n [LAYER_TYPES.BASE_LAYER]: BaseLayer\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\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 * @module\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 { 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","import {\n FieldType,\n getDependencyOrder,\n getObjProp,\n defaultValue,\n objectIterator,\n unionDomain,\n makeElement,\n DimensionSubtype,\n toArray,\n MeasureSubtype,\n getNearestValue\n} from 'muze-utils';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\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 (getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION && measures.length) {\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, namespaces) => {\n let instances = existingLayer;\n const dependencies = context._dependencies;\n const metaInf = context.metaInf();\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n toArray(instances).forEach((inst, i) => {\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: namespaces[i],\n parentNamespace: metaInf.namespace\n })\n .dependencies(dependencies)\n .store(context.store());\n });\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.coord(context.coord());\n instance.config(def);\n instance.valueParser(context.valueParser());\n instance.dataProps({\n timeDiffs: context._timeDiffs\n });\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 sanitizeLayerDef = (layerDefs) => {\n const sanitizedDefs = [];\n layerDefs.forEach((layerDef, i) => {\n const def = layerDef.def;\n const mark = layerDef.mark;\n if (!def) {\n const sConf = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n if (!sConf.name) {\n sConf.name = `${mark}-${i}`;\n }\n sanitizedDefs.push({\n mark: layerDef.mark,\n def: sConf\n });\n } else {\n if (!def.name) {\n def.name = `${mark}-${i}`;\n }\n sanitizedDefs.push(layerDef);\n }\n });\n return sanitizedDefs;\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) :\n (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 const axisArr = axes[key] || [];\n const axisIndex = axisInf[key] >= 0 ? axisInf[key] : axisArr.length - 1;\n axes[key] && (axesObj[key] = defaultValue(axes[key][axisIndex]));\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nconst { X, Y, RADIUS, ANGLE, ANGLE0, RADIUS0 } = ENCODING;\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, ANGLE, ANGLE0, RADIUS].forEach((type) => {\n let index;\n const specificField = getObjProp(encoding, type, 'field');\n const encodingField = type === RADIUS ? defaultValue(specificField, getObjProp(encoding, RADIUS0, 'field'))\n : getObjProp(encoding, type, 'field');\n const field = defaultValue(getObjProp(axis, type), encodingField);\n if (fields[type] && fields[type].length) {\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\nconst getValidDomain = (domain, domain1, encodingType, fieldType) => {\n if (encodingType === ANGLE || encodingType === ANGLE0) {\n return domain.concat(domain1.filter(d => domain.indexOf(d) === -1));\n }\n return unionDomain([domain, domain1], fieldType);\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 domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const field = getObjProp(axisFields, encodingType, axisIndex);\n !fieldDomain[encodingType] && (fieldDomain[encodingType] = {});\n const encodingDomain = fieldDomain[encodingType];\n if (field) {\n const fieldStr = `${field}`;\n encodingDomain[fieldStr] = encodingDomain[fieldStr] || [];\n encodingDomain[fieldStr] = getValidDomain(encodingDomain[fieldStr],\n domain[1], encodingType, fieldsConfig[field.getMembers()[0]].def.subtype);\n }\n return fieldDomain;\n }, domains);\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 const layerDepOrder = getDependencyOrder(context._layerDepOrder);\n const groups = {};\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n groups[layer.alias()] = {\n group,\n layer\n };\n }\n });\n\n const layerSeq = layerDepOrder.map(name => groups[name]);\n layerSeq.forEach((o) => {\n const layer = o.layer;\n const group = o.group;\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context._timeDiffs\n });\n layer.config().render !== false && layer.mount(group.node());\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].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\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 !== MeasureSubtype.CONTINUOUS && yFieldType !== MeasureSubtype.CONTINUOUS)) {\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 = getNearestValue(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 createRenderPromise = (unit) => {\n const renderedPromise = unit._renderedPromise;\n renderedPromise.then(() => {\n unit._renderedPromise = new Promise((resolve) => {\n unit._renderedResolve = resolve;\n });\n createRenderPromise(unit);\n });\n};\n\nexport const getRadiusRange = (width, height, config = {}) => {\n const {\n innerRadius,\n outerRadius\n } = config;\n\n return [innerRadius || 0, outerRadius || Math.min(height,\n width) / 2];\n};\n\nexport const setAxisRange = (context) => {\n const axes = context.axes();\n const { radius: radiusAxes } = axes;\n if (radiusAxes) {\n radiusAxes.forEach((axis) => {\n axis.range(getRadiusRange(context.width(), context.height()));\n });\n }\n};\n\nexport const isXandYMeasures = (context) => {\n const { x: xFields, y: yFields } = context.fields();\n const [xMeasures, yMeasures] = [xFields, yFields].map(fields => fields\n .every(field => field.type() === FieldType.MEASURE));\n return xMeasures && yMeasures;\n};\n\nconst getKey = (arr, row) => {\n let key = row[arr[0]];\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${row[arr[i]]}`;\n }\n return key;\n};\n\nexport const getValuesMap = (model, context) => {\n const valuesMap = {};\n const { data: dataArr, schema, uids } = model.getData();\n const fieldsConfig = model.getFieldsConfig();\n const fieldIndices = isXandYMeasures(context) ? schema.map((d, i) => i) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldsConfig[d].index);\n dataArr.forEach((row, i) => {\n const key = getKey(fieldIndices, row);\n valuesMap[key] = uids[i];\n });\n return valuesMap;\n};\n\nexport const getSelectionRejectionModel = (model, propModel, measures, propValuesMap) => {\n let rejectionModel;\n const { data, schema } = propModel.getData();\n const entryRowIds = [];\n const exitRowIds = [];\n\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n const rowIdsObj = {};\n const filteredSchema = measures ? schema.map((d, idx) => idx) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldMap[d].index);\n data.forEach((row) => {\n const key = getKey(filteredSchema, row);\n const id = propValuesMap[key];\n if (key in propValuesMap) {\n entryRowIds.push(id);\n rowIdsObj[id] = 1;\n }\n });\n rejectionModel = model.select((fields, i) => {\n if (!rowIdsObj[i]) {\n exitRowIds.push(i);\n return true;\n }\n return false;\n }, {\n saveChild: false\n });\n } else {\n rejectionModel = propModel;\n }\n\n return {\n model: [propModel, rejectionModel],\n entryRowIds,\n exitRowIds\n };\n};\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRID_LINE_PARENT_GROUP_CLASS = 'grid-lines';\nexport const GRID_BAND_PARENT_GROUP_CLASS = 'grid-bands';\nexport const GRID_PARENT_GROUP = 'grid-parent-group';\nexport const BAND = 'band';\nexport const TICK = 'tick';\nexport const GRID_BAND = 'gridBands';\nexport const GRID_LINE = 'gridLines';\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","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel, createSelection } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer';\nimport {\n GRID_BAND,\n GRID_LINE,\n GRID_BAND_PARENT_GROUP_CLASS,\n GRID_LINE_PARENT_GROUP_CLASS,\n GRID_PARENT_GROUP\n} from '../enums/constants';\n\nconst { BAR_LAYER, TICK_LAYER } = LAYER_TYPES;\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 === GRID_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 === GRID_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 === GRID_BAND) {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n const { color, shape, size } = context.axes();\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n name: orientation,\n calculateDomain: false,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== GRID_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 === GRID_BAND ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis,\n color: color[0],\n shape: shape[0],\n size: size[0]\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 axes = context.axes();\n if (!axes[axisType]) {\n return null;\n }\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, axes[axisType][0]));\n\n return show ? getLayerDefinition(context, axes, type, axisType) : null;\n}).filter(d => d !== null);\n\nconst dimensionSubTypes = Object.values(DimensionSubtype).reduce((acc, v) => {\n acc[v] = 1;\n return acc;\n}, {});\nconst getValidSubtype = subtype => (!dimensionSubTypes[subtype] ? DimensionSubtype.CATEGORICAL : subtype);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n\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: getValidSubtype(subtype)\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype: getValidSubtype(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) => {\n const vuConf = context.config();\n const metaInf = context.metaInf();\n const store = context.store();\n const timeDiffs = context._timeDiffs;\n [GRID_BAND, GRID_LINE].forEach((type) => {\n let mark;\n let config;\n if (type === GRID_BAND) {\n mark = BAR_LAYER;\n config = vuConf.gridBands;\n } else {\n mark = TICK_LAYER;\n config = vuConf.gridLines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n const sel = `_${type}Selection`;\n context[sel] = createSelection(context[sel], (atomicDef) => {\n const inst = layerFactory.getLayerInstance({ mark });\n inst.dependencies(context._dependencies);\n const name = atomicDef.definition.name;\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: `${metaInf.namespace}${type}${name}`,\n parentNamespace: metaInf.namespace\n })\n .store(store);\n return inst;\n }, definitions, atomicDef => atomicDef.definition.name);\n context[sel].each((layer, atomicDef) => {\n const definition = atomicDef.definition;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n const axesObj = atomicDef.axes;\n layer.config(sConf)\n .dataProps({\n timeDiffs\n })\n .axes(axesObj);\n });\n context[`_${type}`] = context[sel].getObjects();\n });\n};\n\nexport const attachDataToGridLineLayers = (context) => {\n const axes = context.axes();\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n if (gridLines.length || gridBands.length) {\n const gridLayerData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n [].concat(...gridBands, ...gridLines).forEach((inst) => {\n inst.data(inst.axes().x ? gridLayerData.x : gridLayerData.y);\n });\n }\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const config = context.config();\n const classPrefix = config.classPrefix;\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n const gridLineParentGroup = makeElement(container, 'g', [1], `${classPrefix}-${GRID_PARENT_GROUP}`);\n\n [[gridLines, `${classPrefix}-${GRID_LINE_PARENT_GROUP_CLASS}`],\n [gridBands, `${classPrefix}-${GRID_BAND_PARENT_GROUP_CLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(gridLineParentGroup, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.dataProps({ timeDiffs: context._timeDiffs })\n .measurement(measurement)\n .mount(group.node());\n }\n });\n });\n};\n","import { STATE_NAMESPACES, temporalFields, getObjProp, defaultValue } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers\n} from './helper';\n\nimport { createGridLineLayer } from './helper/grid-lines';\n\nconst removeExitLayers = (layerDefs, context) => {\n const layersMap = context._layersMap;\n const markSet = {};\n layerDefs.forEach((layerDef, i) => {\n const id = defaultValue(layerDef.name, `${layerDef.mark}-${i}`);\n markSet[id] = true;\n });\n\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};\n\nexport const calculateDomainListener = (context) => {\n const { namespace } = context.metaInf();\n const domain = unionDomainFromLayers(context.layers(), context.fields(), context._layerAxisIndex,\n context.data().getFieldsConfig());\n context.store().commit(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, domain, namespace);\n};\n\nexport const listenerMap = [\n {\n type: 'registerImmediateListener',\n props: [PROPS.LAYERDEFS],\n listener: (context, [, layerDefs]) => {\n const fieldsVal = context.fields();\n if (layerDefs && fieldsVal) {\n removeExitLayers(layerDefs, context);\n const queuedLayerDefs = context._queuedLayerDefs;\n let layerDefArr = layerDefs;\n queuedLayerDefs.forEach((defFn) => {\n layerDefArr = [...layerDefArr, ...defFn(layerDefs)];\n });\n context.addLayer(layerDefArr);\n const adjustRange = context.layers().some(inst => inst.hasPlotSpan());\n ['x', 'y'].forEach((type) => {\n const axisArr = defaultValue(getObjProp(context.axes(), type), []);\n axisArr.forEach((axis) => {\n axis.config({\n adjustRange\n });\n });\n });\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'initialized',\n formalName: 'layer'\n });\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA],\n listener: (context, [, dataModel]) => {\n if (dataModel) {\n const axesObj = context.axes();\n const timeDiffs = {};\n const timeDiffsByField = {};\n\n Object.entries(temporalFields(dataModel)).forEach(([fieldName, fieldObj]) => {\n timeDiffsByField[fieldName] = fieldObj.minimumConsecutiveDifference();\n });\n\n Object.entries(context.fields()).forEach(([type, [field]]) => {\n if (field) {\n const timeDiff = timeDiffsByField[`${field}`];\n if (timeDiff) {\n timeDiffs[type] = timeDiff;\n axesObj[type].forEach(axis => axis.minDiff(timeDiff));\n }\n }\n });\n\n context._timeDiffsByField = timeDiffsByField;\n context._timeDiffs = timeDiffs;\n const firebolt = context.firebolt();\n const originalData = context.cachedData()[0];\n firebolt.createSelectionSet(context.data().getUids());\n firebolt.attachPropagationListener(originalData);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: (context, [, config]) => {\n if (config) {\n context.firebolt().config(config.interaction);\n createGridLineLayer(context);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA, PROPS.TRANSFORM],\n listener: (context, [, dataModel], [, transform]) => {\n if (dataModel) {\n const dataModels = transformDataModels(transform, dataModel);\n const metaInf = context.metaInf();\n context.store().commit(`${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${PROPS.TRANSFORMEDDATA}`,\n dataModels, metaInf.namespace);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.TRANSFORMEDDATA, PROPS.LAYERS],\n listener: (context, [, transformedData], [, layers]) => {\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = context.axes();\n const dataModel = context.data();\n if (transformedData && layers && axesVal && layerAxisIndexVal) {\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModel, transformedData);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModel.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n }\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 TRANSFORM = 'transform';\nexport const TRANSFORMEDDATA = 'transformedData';\nexport const DATADOMAIN = 'dataDomain';\nexport const FIELDS = 'fields';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\nexport const LAYERS = 'layers';\nexport const DOMAIN = 'domain';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [CACHED_DATA]: {},\n detailFields: {},\n axes: {\n defaultValue: {\n x: [],\n y: []\n }\n },\n fields: {\n defaultValue: {\n x: [],\n y: []\n },\n sanitization: (context, value) => mergeRecursive({\n x: [],\n y: []\n }, value)\n },\n metaInf: {},\n registry: {},\n parentContainerInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {}\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 derivedSchema = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION,\n subtype: d.subtype()\n }));\n const dataAtFirstPos = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n derivedSchema.forEach((obj, i) => {\n tuple[obj.name] = dataAtFirstPos[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...derivedSchema]);\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, intersect } from 'muze-utils';\nimport { Firebolt, SIDE_EFFECTS } from '@chartshq/muze-firebolt';\nimport { isXandYMeasures, getSelectionRejectionModel } from '../helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\nconst sideEffectPolicy = (propPayload, context, propagationInf) => {\n const { sourceIdentifiers, propagationData } = propagationInf;\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig).filter(field =>\n fieldsConfig[field].def.type !== FieldType.MEASURE);\n const propFields = Object.keys(propagationData[0].getFieldsConfig());\n const hasCommonCanvas = propPayload.sourceCanvas === context.parentAlias();\n return intersect(sourceIdentifierFields, propFields).length || hasCommonCanvas;\n};\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 const {\n TOOLTIP,\n HIGHLIGHTER,\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS\n } = SIDE_EFFECTS;\n\n const disabledSideEffects = [TOOLTIP, HIGHLIGHTER, ANCHORS, BRUSH_ANCHORS, PERSISTENT_ANCHORS];\n disabledSideEffects.forEach((sideEffect) => {\n this.changeSideEffectStateOnPropagation(sideEffect, sideEffectPolicy, 'sourceTargetPolicy');\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 sideEffectCheckers = Object.values(sourceSideEffects[se.name || se] || {});\n const { sourceIdentifiers, data: propagationData } = propagationInf;\n return sideEffectCheckers.length ? sideEffectCheckers.every(checker =>\n checker(propagationInf.propPayload, context, {\n sourceIdentifiers,\n propagationData\n })) : 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 isMutableAction = false;\n const context = this.context;\n if (!context.mount()) {\n return;\n }\n const {\n model: propagationData,\n entryRowIds,\n exitRowIds\n } = getSelectionRejectionModel(context.data(), data, isXandYMeasures(context), context._cachedValuesMap());\n const {\n enabled: enabledFn,\n sourceIdentifiers,\n action,\n payload: propPayload\n } = config;\n\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n const payload = payloadFn(context, propagationData, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFns = Object.values(sourceBehaviours[action] || sourceBehaviours['*'] || {});\n let enabled = filterFns.every(fn => fn(propPayload || {}, context, {\n sourceIdentifiers,\n propagationData\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: propagationData,\n entryRowIds,\n exitRowIds,\n propPayload,\n sourceIdentifiers,\n persistent: false,\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 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 { SpawnableSideEffect } from '@chartshq/muze-firebolt';\n\nexport const initSideEffects = (sideEffects, firebolt) => {\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = firebolt.context;\n return context.getDrawingContext();\n });\n sideEffects[key].valueParser(firebolt.context.valueParser());\n }\n }\n};\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","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 minOuterRadius: 10,\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","import { mergeRecursive, DataModel } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props';\nimport { sanitizeLayerDef, getValuesMap } from './helper';\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 meta: {\n preset: layerDef => sanitizeLayerDef(layerDef)\n }\n },\n [TRANSFORM]: {\n value: null\n },\n [LAYERS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n preset: (data, context) => {\n context._cachedValuesMap = ((model) => {\n let valuesMap = null;\n return () => {\n if (valuesMap) {\n return valuesMap;\n }\n valuesMap = getValuesMap(model, context);\n return valuesMap;\n };\n })(data);\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.cachedData()[0];\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n },\n [TRANSFORMEDDATA]: {\n value: null\n },\n width: {\n value: null\n },\n height: {\n value: null\n }\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n makeElement,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n CommonProps,\n toArray,\n STATE_NAMESPACES\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 getLayerAxisIndex,\n sanitizeLayerDef,\n createSideEffectGroup,\n resolveEncodingTransform,\n createRenderPromise,\n setAxisRange\n} from './helper';\nimport { renderGridLineLayers, attachDataToGridLineLayers } from './helper/grid-lines';\nimport { calculateDomainListener, listenerMap } from './listener-map';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport { initSideEffects, dispatchQueuedSideEffects, clearActionHistory } from './firebolt/helper';\nimport './styles.scss';\nimport localOptions from './local-options';\nimport { WIDTH, HEIGHT } from './enums/reactive-props';\n\nconst FORMAL_NAME = 'unit';\nconst unitNs = [STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * Visual Unit is hierarchical component created by {@link VisualGroup}. This component accepts layer definitions\n * and creates concrete layer instances from them, binds data and attaches axis to them. It also retreives the domain\n * from the layers and unions them and sets them on corresponding axis instances. This also creates the parent svg\n * groups for all the layers and delegates the rendering to all the layers.\n *\n * @public\n * @module VisualUnit\n * @class\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit.\n *\n * @param {Object} registry Component registry\n * @param {Object} dependencies Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n createRenderPromise(this);\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridLinesSelection = null;\n this._gridBandsSelection = null;\n this._gridLines = [];\n this._gridBands = [];\n this._layerAxisIndex = {};\n this._queuedLayerDefs = [];\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.registry(registry);\n this.cachedData([]);\n }\n\n static formalName () {\n return FORMAL_NAME;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys((localOptions)).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getQualifiedStateProps () {\n const unitState = VisualUnit.getState();\n return unitState.map((state, i) => Object.keys(state).map(prop => `${unitNs[i]}.${prop}`));\n }\n\n static getListeners () {\n return {\n store: [...listenerMap.map((d) => {\n const o = Object.assign({}, d);\n const localNs = unitNs[1];\n o.props = o.props.map(prop => `${localNs}.${prop}`);\n return o;\n }), {\n type: 'registerImmediateListener',\n props: [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`],\n listener: calculateDomainListener\n }, {\n type: 'registerImmediateListener',\n props: [`${unitNs[1]}.${WIDTH}`,\n `${unitNs[1]}.${HEIGHT}`,\n ...['x', 'y'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context, [, width], [, height]) => {\n if (width && height) {\n attachDataToGridLineLayers(context);\n }\n },\n subNamespace: (context) => {\n const { rowIndex, colIndex, namespace } = context.metaInf();\n return {\n [`${unitNs[1]}.${WIDTH}`]: namespace,\n [`${unitNs[1]}.${HEIGHT}`]: namespace,\n [`${groupNs}.domain.x`]: `${colIndex}0`,\n [`${groupNs}.domain.y`]: `${rowIndex}0`\n };\n }\n }],\n throwback: [\n {\n type: 'registerChangeListener',\n props: [CommonProps.ON_LAYER_DRAW],\n listener: (context, [, drawn]) => {\n if (drawn) {\n const firebolt = context.firebolt();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n context._renderedResolve();\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'drawn',\n formalName: 'layer'\n });\n }\n }\n ]\n };\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { throwback, fireboltDeps } = this._dependencies;\n const { namespace } = this.metaInf();\n\n store.addSubNamespace(namespace, FORMAL_NAME, this);\n throwback.addSubNamespace(namespace, FORMAL_NAME, this);\n transactor(this, localOptions, store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}`\n });\n\n this.firebolt(new UnitFireBolt(this, {\n physical: Object.assign({}, physicalActions, fireboltDeps.physicalActions),\n behavioural: Object.assign({}, behaviouralActions, fireboltDeps.behaviouralActions),\n physicalBehaviouralMap: actionBehaviourMap\n }, Object.assign({}, sideEffects, fireboltDeps.sideEffects), behaviourEffectMap));\n return this;\n }\n return this._store;\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 * Returns the instance of firebolt associated with this visual unit. Firebolt dispatches the behavioural actions\n * when any physical action happens on the elements of visual unit.\n *\n * @public\n *\n * @return {Firebolt} Instance of firebolt.\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 * Returns the unique id of this visual unit.\n *\n * @public\n * @return {string} Unique identifier.\n */\n id () {\n return this._id;\n }\n\n lockModel () {\n this.store().lockModel();\n return this;\n }\n\n unlockModel () {\n this.store().unlockModel();\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 *\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\n setAxisRange(this);\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n const firebolt = this.firebolt();\n initSideEffects(firebolt.sideEffects(), firebolt);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Caches all the datamodels in an array from the next `data()` call on visual unit until `clearCaching()` or\n * `resetData()` is called on it.\n *\n * @public\n * @return {VisualUnit} Instance of visual unit.\n */\n\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n * Clears all the previous cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n * Returns the drawing information from visual unit.Drawing context contains the dimensions of unit and the svg\n * container of the visual unit.\n *\n * @public\n *\n * @return {Object} Drawing information.\n * ```\n * {\n * htmlContainer: // Html container of svg container of the visual unit\n * svgContainer: // Root svg container\n * width: // Width of the visual unit\n * height: // Height of the visual unit\n * sideEffectGroup: // Svg group for drawing side effect elements.\n * parentContainer: // Parent html container of the visual unit.\n * xOffset: // x offset space from the starting x position of the container,\n * yOffset: // y offset space from the starting y position of the container\n * }\n * ```\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n const { el, dimensions } = this.parentContainerInf();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: el,\n parentContainerDimensions: dimensions,\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n *\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.axes().map(axis => axis.serialize())\n };\n }\n\n mount (...mount) {\n if (mount.length) {\n this._mount = mount[0];\n this.render(mount[0]);\n this.firebolt().mapActionsAndBehaviour();\n return this;\n }\n return this._mount;\n }\n\n /**\n * Adds a new layer to the visual unit. It takes a layer definition and creates layer instances from them. It does\n * not render the layers. It returns the layer instances in an array. If the layer definition is a composite layer,\n * then multiple layer instances will be returned in the array.\n *\n * To add a layer in the unit,\n * ```\n * unit.addLayer({\n * name: 'bullet',\n * mark: 'bar',\n * encoding: {\n * x: 'Year',\n * y: 'Acceleration',\n * color: 'Origin'\n * }\n * });\n * ```\n * @public\n * @param {Object} layerDef Definition of new layer.\n *\n * @return {Array} Array of layer instances.\n */\n addLayer (layerDefinition) {\n if (layerDefinition instanceof Function) {\n this._queuedLayerDefs.push(layerDefinition);\n return this;\n }\n const layerDefinitions = sanitizeLayerDef(toArray(layerDefinition));\n\n const layersMap = this._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: this\n }\n };\n let layerIndex = 0;\n const metaInf = this.metaInf();\n const layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef) => {\n const definition = layerDef.def;\n const markId = definition.name;\n const defArr = toArray(definition);\n const namespaces = [];\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n const namespace = `${metaInf.namespace}-${def.mark}-${getUniqueId()}`;\n namespaces.push(namespace);\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(this, definition, layersMap[markId], namespaces);\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\n store.unit = this;\n const layerdeps = {};\n const layersArr = [].concat(...Object.values(this._layersMap));\n layersArr.forEach((layer) => {\n const alias = layer.alias();\n store.layers[alias] = layer;\n layerdeps[alias] = [];\n });\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n this._layerDepOrder = layerdeps;\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, getLayerAxisIndex(layers, this.fields()));\n this.layers(layersArr);\n return layers;\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n remove () {\n const formalName = this.constructor.formalName();\n const { lifeCycleManager, throwback } = this._dependencies;\n const { namespace } = this.metaInf();\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n const layers = this.layers();\n this.store().removeSubNamespace(namespace, formalName);\n throwback.removeSubNamespace(namespace, FORMAL_NAME);\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: layers, action: 'beforeremove', formalName: 'layer' });\n [...layers, ...this._gridLines, ...this._gridBands].forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: 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 *\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 * Resets the data of visual unit to original data model. It also clears the cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n *\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 getDataDomain () {\n return this.store().get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`, this.metaInf().namespace);\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n * Returns an array of layer instances which matches the supplied mark type.\n *\n * @public\n *\n * @param {string} type Mark type of layer.\n *\n * @return {Array} Array of layer instances.\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n * Returns the layer instance which matches the supplied layer name. If no layer is found, then it returns\n * undefined.\n *\n * @public\n * @param {string} name Name of layer.\n *\n * @return {VisualUnit} Layer instance.\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n * Returns the point located nearest to the supplied x and y position. It returns the unique identifiers of the\n * point. This function also accepts an additional configuration `getAllPoints` inside `config` object in the third\n * argument which if set to true, then it returns the identifiers of all the points which falls on the nearest\n * x value or y value if any one of the field is a dimension. Additionally, a target property is also returned\n * which contains the identifier of the nearest point. If no nearest point is found, then it returns identifier\n * as null.\n *\n * @public\n *\n * @param {number} x X Position of the point from where nearest point is to be found.\n * @param {number} y Y Position of the point from where nearest point is to be found.\n * @param {Object} config Additional configuration options.\n * @param {boolean} config.getAllPoints If true, then returns all the points nearest to the x value or y value if\n * it is dimension.\n * @param {Object} config.data Data associated with the nearest point.\n * @return {Object} Nearest point information\n * ```\n * {\n * id: [['Origin'], ['USA'], ['Japan']], // Identifiers of all the points closest to the x value.\n * target: [['Origin'], ['Japan']] // Identifier of the nearest point.\n * }\n * ```\n */\n getNearestPoint (x, y, config) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && config.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, config);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, config) || { 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 * Get the information of all the marks such as x, y position and size from supplied identifiers. It\n * returns an array of points whose data matches the given identifiers.\n *\n * @public\n *\n * @param {Array|Object} identifiers Field names and their corresponding values.\n * ```\n * identifiers can be given in an array of array,\n * ['Origin', 'Name'], // Names of the fields supplied in first array\n * ['USA', 'ford'], // Data values of each field supplied in rest of the arrays.\n * ['Japan', 'ford']\n * or in an object,\n * {\n * Origin: ['USA']\n * }\n * ```\n * @param {Object} config Optional configurations which decides which information of the mark will\n * be retrieved.\n * @param {boolean} [config.getAllAttrs = false] If true, then returns all the information of each mark.\n * @param {boolean} [config.getBBox = false] If true, then returns the bounding box of each mark.\n *\n * @return {Array} Array of objects containing the information of each point.\n * ```\n * By default, the method returns the array of points in this structure,\n * [\n * {\n * x: 20,\n * y: 100,\n * width: 200,\n * height: 100\n * }\n * ]\n * If 'config.getAllAttrs' is true, then it returns all the information of each mark,\n * [\n * // Positions of mark on initial state of transition.\n * enter: {\n * x: 0,\n * y: 0\n * },\n * // Final positions of the mark\n * update: {\n * x: 20,\n * y: 10\n * },\n * style: // css styles of each mark\n * source: [200, 'USA'] // Row information of each mark\n * id: 20 // Row id of each mark\n * ]\n * ```\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 * Removes the layer instance which matches the supplied layer name.\n *\n * @public\n * @param {string} name Name of layer\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n * Removes all the layer instances which matches the supplied mark type.\n *\n * @public\n * @param {string} type Mark type of layer.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n}\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 * This is a wrapper on top of multiple variables which are of same type but they are shown in the same axis.This is\n * required in case of range plots or ohlc plots where one plot is mapped to multiple measure fields. At that time,\n * we need to create a composed variable from multiple variables. This class just wraps them into one variable instance\n * and provides methods to get the type and other common functionalities which can be performed on a simple variable\n * instance.\n *\n * @public\n * @class ComposeVars\n */\nclass ComposedVars extends Variable {\n\n /**\n * Creates an instance of ComposeVars.\n *\n * @param {Array} vars Array of SimpleVars.\n */\n constructor (...vars) {\n super();\n this.vars(vars);\n }\n\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n * Get all the field names from composed variable instance.\n *\n * @public\n * @return {Array} Array of field names.\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n * Type of field associated with this composed variable.\n *\n * @return {string} Type of variable (Measure/Dimension).\n */\n type () {\n return this.vars()[0].type();\n }\n\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n * Returns the number formatter function of the variable.\n *\n * @return {Function} Number formatter function of the variable.\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n format (values) {\n return this.vars()[0].format(values);\n }\n\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.vars()[0]].def;\n }\n\n /**\n * Returns the subtype of the fields associated with this variable instance.\n *\n * @public\n * @return {string} Subtype of the variable.\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n * Returns the consecutive minimum difference of the field values.\n *\n * @public\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n\n /**\n * Returns the display name of the fields.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return this.vars().map(d => d.displayName()).join(',');\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter, retrieveFieldDisplayName, DimensionSubtype } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n * This is a wrapper on top of fields passed in rows or columns in canvas. This is used to get the type of field or\n * get min difference from the field values.\n *\n * @public\n * @class SimpleVariable\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n * Creates an instance of simple variable instance.\n *\n * @param {string} name Field name.\n */\n constructor (name) {\n super();\n this.oneVar(name);\n }\n\n /**\n * Gets the field name associated with this variable instance.\n *\n * @public\n * @return {string} Name of the field.\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n toString () {\n return this.oneVar();\n }\n\n /**\n * Gets the number formatter function of this variable.\n *\n * @public\n * @return {Function} Number formatter function.\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()];\n return formatter.numberFormat();\n } return val => val;\n }\n\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n * Returns a formatter function which transforms the input value to its original form.\n *\n * @public\n * @return {Function} Returns raw formatter function.\n */\n rawFormat () {\n if (this.subtype() === DimensionSubtype.TEMPORAL) {\n const dateFormat = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n return val => DateTimeFormatter.formatAs(val, dateFormat);\n }\n return val => val;\n }\n\n /**\n * Return the field names associated with this variable instance.\n *\n * @public\n * @return {Array} Array of fields.\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n * Returns the type of the variable. Whether it is measure or dimension.\n *\n * @public\n * @return {string} Type of variable.\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n * Returns the subtype of the variable. Subtype can be categorical or temporal. If no subtype is found, then it\n * returns the type of the variable.\n *\n * @public\n * @return {string} Subtype of variable.\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n * Returns the minimum consecutive difference between the data values of this variable.\n *\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].minimumConsecutiveDifference();\n }\n\n /**\n * Returns true if two variable instances are same.If both variable has the same field names, they are equal.\n *\n * @return {Boolean} Whether two variable instances are same.\n */\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n\n /**\n * Returns the display name of the field.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return retrieveFieldDisplayName(this.data(), this.oneVar());\n }\n\n /**\n * Returns the schema defination of the field.\n *\n * @return {Object} schema def\n */\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.oneVar()].def;\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 *\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 *\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 *\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 *\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 *\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 *\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 temporal: ScaleType.TIME,\n measure: ScaleType.LINEAR,\n continuous: ScaleType.LINEAR\n};\n","import { mergeRecursive, getObjProp } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { ENCODING } from '@chartshq/visual-layer';\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, COLOR, SHAPE, SIZE, ANGLE0 } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst getAxisConfig = (axisInfo, field, axesCreators, indices, facetFields) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const { rowIndex, columnIndex } = indices;\n const rawUserAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n\n // Change config object to a function if not already one\n const userAxisConfigFn = typeof rawUserAxisConfig !== 'function' ?\n () => rawUserAxisConfig : rawUserAxisConfig;\n const userAxisConfig = userAxisConfigFn(rowIndex, columnIndex, {\n axisFields: field.getMembers(),\n facetFields\n });\n\n // If current config does not specifes config for an axis, retain old config\n if (!userAxisConfig) {\n return {};\n }\n\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.displayName(),\n field: field.toString(),\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n showAxisName: true,\n show: true,\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 *\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\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 [min[0], max[0]],\n [min[1], max[1]]\n ];\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n *\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo, indices, facetFields) => {\n let axisKey;\n const { groupAxes, valueParser } = axesInfo;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n const commonAxisKey = getAxisKey(axisType, index);\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators, indices, facetFields);\n\n let axis;\n if (!map.has(axisKey)) {\n axis = createSimpleAxis(axisConfig, field, axesCreators);\n } else {\n axis = map.get(axisKey);\n axis._rotationLock = false;\n axis.config(axisConfig);\n }\n axis.valueParser(valueParser);\n currentAxes.push(axis);\n map.set(axisKey, axis);\n });\n\n if (currentAxes.length) {\n map.set(commonAxisKey, currentAxes);\n groupAxes.add(commonAxisKey);\n }\n\n return currentAxes;\n};\n\nexport const sanitizeIndividualLayerConfig = (encodingConfigs, def) => {\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\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 }\n });\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 *\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 *\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 *\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\nexport const resolveAxisConfig = (context, fieldInf, axisInfo) => {\n const { rowIndex, columnIndex, axesObj } = axisInfo;\n const { config, facetFields, resolver } = context;\n const resolverAxes = resolver.axes();\n const { RADIUS, ANGLE } = ENCODING;\n [RADIUS, ANGLE, ANGLE0].forEach((enc) => {\n const axesArr = resolverAxes[enc];\n if (!axesArr[rowIndex]) {\n axesArr[rowIndex] = [];\n }\n axesArr[rowIndex][columnIndex] = axesObj[enc];\n const axisConfig = getObjProp(config.axes, enc) || {};\n\n axesObj[enc].forEach((axis, i) => {\n let userConfig = axisConfig;\n if (axisConfig instanceof Function) {\n userConfig = axisConfig(rowIndex, columnIndex, {\n axisFields: [fieldInf[enc][i]],\n facetFields\n });\n }\n axis.config(userConfig);\n });\n });\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n unionDomain,\n COORD_TYPES,\n toArray,\n sortCategoricalField\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport {\n generateAxisFromMap,\n getDefaultMark,\n getIndex,\n getLayerConfFromFields,\n getAdjustedDomain,\n sanitizeIndividualLayerConfig\n} from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\nconst CARTESIAN = COORD_TYPES.CARTESIAN;\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n *\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\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 { resolver, facetFields, geomCell } = context;\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, {\n groupAxes: axis === X ? xAxes : yAxes,\n valueParser: resolver.valueParser()\n }, indices, facetFields);\n });\n geomCell.axes(geomCellAxes);\n return geomCellAxes;\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const resolver = context.resolver();\n const units = resolver.units();\n const domains = {\n 0: {},\n 1: {}\n };\n const config = context.config();\n const fieldsObj = {\n 0: {},\n 1: {}\n };\n\n for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) {\n const unitsArr = units[rIdx];\n for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) {\n const unit = unitsArr[cIdx];\n const axisFields = unit.fields();\n const encodingDomains = unit.getDataDomain();\n ['x', 'y'].forEach((axisType, axisTypeIndex) => {\n const fieldArr = axisFields[axisType];\n fieldArr.forEach((field, axisIndex) => {\n const key = !axisTypeIndex ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`;\n const dom = encodingDomains[axisType];\n const typeOfField = field.subtype();\n fieldsObj[axisTypeIndex][key] = field;\n\n if (dom && Object.keys(dom).length !== 0) {\n domains[axisTypeIndex][key] = unionDomain([(domains[axisTypeIndex] &&\n domains[axisTypeIndex][key]) || [], dom[`${field}`]], typeOfField);\n }\n });\n });\n }\n }\n\n const { x: xAxes, y: yAxes } = resolver.axes();\n store.lockModel();\n [xAxes, yAxes].forEach((axesArr, axisType) => {\n axesArr.forEach((axes, idx) => {\n let key;\n let domain = [];\n let adjustedDomain = [];\n const min = [];\n const max = [];\n const typeOfAxis = axes[0].constructor.type();\n\n if (axes.length > 1 && typeOfAxis === ScaleType.LINEAR && axes[0].config().alignZeroLine) {\n axes.forEach((axis, i) => {\n key = !axisType ? `0${idx}${i}` : `${idx}0${i}`;\n domain = domains[axisType][key];\n min[i] = domain[0];\n max[i] = domain[1];\n });\n adjustedDomain = getAdjustedDomain(max, min);\n } else if (typeOfAxis === ScaleType.BAND) {\n /* Sort categorical fields to ensure consistency across all rows\n only if sorted by user */\n key = !axisType ? `0${idx}0` : `${idx}00`;\n const currentFieldName = fieldsObj[axisType][key].oneVar();\n const sortingOrder = config.sort && config.sort[currentFieldName];\n\n if (sortingOrder) {\n domains[axisType][key].sort((a, b) => sortCategoricalField(sortingOrder, a, b));\n }\n }\n\n axes.forEach((axis, index) => {\n key = !axisType ? `0${idx}${index}` : `${idx}0${index}`;\n domain = adjustedDomain[index] || domains[axisType][key];\n\n domain && axis.domain(domain);\n const type = !axisType ? 'x' : 'y';\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}`, domain, `${idx}${index}`);\n });\n });\n });\n store.unlockModel();\n }\n\n /**\n *\n *\n * @param {*} fields\n *\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 *\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n *\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 sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\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 this.sanitizeLayerConfig(retinalConfig, layerConfig);\n }\n}\n","import { AngleAxis, RadiusAxis } from '@chartshq/muze-axis';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n GROUP_BY_FUNCTIONS,\n COORD_TYPES,\n toArray,\n getObjProp,\n defaultValue\n} from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { SIZE, MEASURE, ARC, COLOR } from '../enums/constants';\nimport { sanitizeIndividualLayerConfig, resolveAxisConfig } from './encoder-helper';\nimport { SimpleVariable } from '../variable';\n\nconst POLAR = COORD_TYPES.POLAR;\nconst { RADIUS, ANGLE, ANGLE0 } = ENCODING;\n\nconst axesCls = {\n [RADIUS]: RadiusAxis,\n [ANGLE]: AngleAxis,\n [ANGLE0]: AngleAxis\n};\n\nconst getSizeMultiplier = (sizeVal, sizeAxis) => {\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n return sizeMultiplier;\n};\n\nconst setRadiusFactor = (context) => {\n const data = context.data();\n const sizeField = context.retinalFields().size.field;\n const { radius, size } = context.axes();\n\n if (sizeField && radius && radius.length) {\n const sizeFieldIndex = data.getFieldsConfig()[sizeField].index;\n const sizeVal = data.getData().data.reduce((acc, val) => acc + val[sizeFieldIndex], 1);\n const sizeMultiplier = getSizeMultiplier(sizeVal, size[0]);\n radius.forEach(axis => axis.setRadiusFactor(sizeMultiplier));\n }\n};\n\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 *\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\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 const axesObj = {};\n const { geomCell, resolver } = context;\n const layers = resolver.matrixLayers();\n const resolverAxes = resolver.axes();\n const cellLayers = layers[rowIndex][columnIndex];\n const fields = {\n radius: {},\n angle: {},\n angle0: {}\n };\n\n cellLayers.forEach((layerConf) => {\n const def = layerConf.def;\n [ANGLE, ANGLE0, RADIUS].forEach((enc) => {\n const field = getObjProp(def.encoding, enc, 'field');\n field && (fields[enc][field] = 0);\n });\n });\n const fieldInf = {};\n const varInstances = {};\n\n for (const encType in fields) {\n fieldInf[encType] = Object.keys(fields[encType]);\n axesObj[encType] = [];\n varInstances[encType] = [];\n fieldInf[encType].forEach((field, i) => {\n varInstances[encType][i] = new SimpleVariable(field);\n axesObj[encType][i] = new axesCls[encType]();\n });\n axesObj[encType][axesObj[encType].length] = new axesCls[encType]();\n }\n resolveAxisConfig(context, fieldInf, {\n axesObj,\n rowIndex,\n columnIndex\n });\n geomCell.axes(axesObj)\n .fields(Object.assign({}, varInstances, geomCell.fields()));\n resolverAxes.pie = pieAxes;\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n *\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 unionUnitDomains (context) {\n const store = context.store();\n store.lockModel();\n const domainProps = {\n radius: [],\n angle: [],\n angle0: []\n };\n const axes = context.resolver().axes();\n context.matrixInstance().value.each((cell, rIdx, cIdx) => {\n const unit = cell.valueOf();\n const unitDomains = unit.getDataDomain();\n const fields = unit.fields();\n setRadiusFactor(unit);\n [RADIUS, ANGLE, ANGLE0].forEach((encType) => {\n const encodingFields = fields[encType];\n const domains = unitDomains[encType] || {};\n encodingFields.forEach((field, i) => {\n !domainProps[encType][rIdx] && (domainProps[encType][rIdx] = []);\n !domainProps[encType][rIdx][cIdx] && (domainProps[encType][rIdx][cIdx] = []);\n domainProps[encType][rIdx][cIdx][i] = domains[`${field}`] || [];\n });\n });\n });\n\n for (const key in domainProps) {\n const specificAxes = axes[key];\n specificAxes.forEach((axesArr, rIdx) => {\n axesArr.forEach((axisArr, cIdx) => {\n axisArr.forEach((axis, i) => {\n axis.domain(defaultValue(getObjProp(domainProps[key], rIdx, cIdx, i), []));\n\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${key}`, domainProps[key],\n `${rIdx}-${cIdx}`);\n });\n });\n });\n }\n store.unlockModel();\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n *\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.groupedModel;\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]: GROUP_BY_FUNCTIONS.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 *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\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 const sanitizedConfig = this.sanitizeLayerConfig(retinalConfig, layerConfig);\n this.layers(sanitizedConfig);\n return sanitizedConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n *\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 sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n def.forEach((conf) => {\n const encoding = conf.encoding || (conf.encoding = {});\n !encoding.angle && (encoding.angle = {});\n const angleField = getObjProp(encoding.angle, 'field');\n const angle0Field = getObjProp(encoding.angle0, 'field');\n if (!angleField) {\n Object.assign(encoding.angle, {\n field: encodingConfigs.color && encodingConfigs.color.field\n });\n }\n if (!angle0Field) {\n !encoding.angle0 && (encoding.angle0 = {});\n Object.assign(encoding.angle0, {\n field: encoding.angle.field\n });\n }\n });\n\n layerConfig.push(config);\n });\n return layerConfig;\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 *\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 *\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} context\n *\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, FieldType, COORD_TYPES, getObjProp, DataModel } from 'muze-utils';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\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 ARC,\n RADIUS,\n ANGLE\n} from '../enums/constants';\n\nconst POLAR = COORD_TYPES.POLAR;\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, ...params) => `${axisName}-axis-${params.join('-')}`;\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 *\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 *\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 *\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager }) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({\n type: HEADER,\n className: `${classPrefix}-grid-headers`\n }, {\n 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 *\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 *\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d.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\nconst hasPolarEncodings = layerConf => layerConf.mark === ARC || [RADIUS, ANGLE].some(field =>\n getObjProp(layerConf.encoding, field));\n\n/**\n *\n *\n * @param {*} layers\n *\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers.length) {\n // Figuring out the kind of layers the group will have\n encoder = layers.some(layerConf => hasPolarEncodings(layerConf)) ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n *\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 *\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\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/**\n * This method sorts the facets fields inplace if field is of categorical type\n * @param {Object} facets Array of facets\n * @param {Array} keys Array of the facet field values\n * @param {Object} config configuration object\n * @return {Array} Returns sorted facets\n */\nexport const sortFacetFields = (facets, keys, config) => {\n /**\n * Check if the facet sorted by the user is plotted\n * If an incorrect field is sorted, return the keys as is\n */\n const schema = [];\n const facetNames = [];\n const sortInfo = [];\n const sortConfig = config.sort;\n\n facets.forEach((facet) => {\n const name = `${facet}`;\n const facetSortConfig = sortConfig[name];\n\n if (facetSortConfig) {\n sortInfo.push([name, facetSortConfig]);\n } else {\n sortInfo.push([name, null]);\n }\n schema.push(facet.getSchemaDef());\n });\n\n return new DataModel([facetNames, ...keys], schema).getData({ sort: sortInfo }).data;\n};\n\nexport const removeExitCells = (resolver) => {\n const exitCells = resolver.cacheMaps().exitCellMap;\n const store = resolver.store();\n const qualifiedStateProps = [].concat(...VisualUnit.getQualifiedStateProps(),\n ...BaseLayer.getQualifiedStateProps());\n store.lockCommits(qualifiedStateProps);\n exitCells.forEach((placeholder) => {\n placeholder.remove();\n });\n store.unlockCommits(qualifiedStateProps);\n};\n","import { DataModel } from 'muze-utils';\nimport { sortFacetFields } from './group-utils';\n\n/**\n* Gets name of fields form the variables\n*\n* @param {*} fields1\n* @param {*} [fields2=[]]\n*\n*/\nconst getFieldNames = fieldVar => fieldVar.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []);\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareProjectionInfo = (fieldInfo) => {\n const {\n colProjections,\n rowProjections\n } = fieldInfo;\n const uniqueFields = [];\n let indices = [];\n let projections = [];\n\n rowProjections.forEach((rowProj, rIndex) => {\n const newRIndex = rIndex;\n colProjections.forEach((colProj, cIndex) => {\n const newCIndex = cIndex;\n const newRowProj = getFieldNames(rowProj);\n const newColProj = getFieldNames(colProj);\n\n uniqueFields.push([...newRowProj, ...newColProj]);\n indices.push({ rowIndex: newRIndex, colIndex: newCIndex });\n projections.push({ rowFields: rowProj, columnFields: colProj });\n });\n });\n indices = indices.length ? indices : [{ rowIndex: 0, colIndex: 0 }];\n projections = projections.length ? projections : [{ rowFields: [], columnFields: [] }];\n return { uniqueFields, indices, projections };\n};\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareFacetInfo = (fieldInfo) => {\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const rowFacetNames = getFieldNames(rowFacets);\n const colFacetNames = getFieldNames(colFacets);\n const allFacets = [...rowFacetNames, ...colFacetNames];\n\n return { rowFacetNames, colFacetNames, allFacets, rowFacets, colFacets };\n};\n\n/**\n*\n*\n* @param {*} context\n* @param {*} facetNames\n* @param {*} hashMap\n* @param {*} keys\n* @param {*} index\n* @returns\n*/\nconst prepareHashMaps = (context, facetNames, hashMap, keys, index) => {\n const rowKey = [];\n facetNames.forEach((name) => {\n const key = context._derivation[context._derivation.length - 1].meta.keys[name];\n\n rowKey.push(key);\n });\n\n const joinedRowKey = rowKey.join(',');\n\n if (hashMap[joinedRowKey] === undefined) {\n hashMap[joinedRowKey] = index++;\n keys.push(rowKey);\n }\n return rowKey;\n};\n\nconst createJoinedKeys = keys => keys.map(e => ({\n keyArr: e,\n joinedKey: e.join(',')\n}));\n\n/**\n*\n*\n* @param {*} splitModels\n* @param {*} facetInfo\n* @returns\n*/\nconst getSplitModelHashMap = (splitModels, facetInfo, config) => {\n const {\n rowFacetNames,\n colFacetNames,\n rowFacets,\n colFacets\n } = facetInfo;\n\n const rowKeyHashMap = {};\n const colKeyHashMap = {};\n\n const rowKeys = [];\n const colKeys = [];\n const rowIndex = 0;\n\n const splitModelsHashMap = {};\n\n splitModels.forEach((splitContext) => {\n const rowKey = prepareHashMaps(splitContext, rowFacetNames, rowKeyHashMap, rowKeys, rowIndex);\n const colKey = prepareHashMaps(splitContext, colFacetNames, colKeyHashMap, colKeys, 1);\n\n splitModelsHashMap[`${rowKey}-${colKey}`] = splitContext;\n });\n\n return {\n splitModelsHashMap,\n rowKeys: createJoinedKeys(sortFacetFields(rowFacets, rowKeys, config)),\n colKeys: createJoinedKeys(sortFacetFields(colFacets, colKeys, config))\n };\n};\n\n/**\n * Formats row or columns keys with the provided formatter.\n *\n * @param {Array} keys - The collection of row or column keys.\n * @param {Array} formatterList - The list of corresponding formatter.\n */\nconst formatKeys = (keys, formatterList) => {\n const formattedKeys = [];\n keys.forEach((rKeys, rIdx) => {\n formattedKeys[rIdx] = [];\n rKeys.forEach((key, idx) => {\n formattedKeys[rIdx][idx] = formatterList[idx](key);\n });\n });\n return formattedKeys;\n};\n\n/**\n*\n*\n* @param {Object} context\n* @param {Object} fieldInfo\n* @returns\n*/\nconst splitByColumn = (context, optionalProjections) => {\n const {\n matrix,\n dataModel,\n rowIndex,\n colIndex,\n facetInfo,\n projectionInfo,\n geomCellCreator\n } = context;\n const {\n indices,\n uniqueFields,\n projections\n } = projectionInfo;\n\n const commonFields = optionalProjections;\n\n dataModel.splitByColumn(uniqueFields, commonFields).forEach((model, i) => {\n let { rowIndex: row, colIndex: col } = indices[i];\n row += rowIndex;\n col += colIndex;\n\n matrix[row] = matrix[row] || [];\n\n const projectionIndexObject = {\n indices: {\n rowIndex: row,\n columnIndex: col\n },\n projections: projections[i]\n };\n\n matrix[row][col] = geomCellCreator(model, projectionIndexObject, facetInfo);\n });\n const lastIndex = indices[indices.length - 1];\n\n return {\n rowIndex: lastIndex.rowIndex + rowIndex,\n colIndex: lastIndex.colIndex + colIndex\n };\n};\n\nconst createColumnDataModels = (colContext, fieldInfo, sourceDM) => {\n let context = {};\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n const {\n rowKeyArr,\n rowKey,\n colKeyObj,\n newRowIndex,\n splitModelsHashMap,\n currentColumnIndex\n } = colContext;\n\n const { keyArr: colKeyArr, joinedKey: colKey } = colKeyObj;\n const hashMapKey = splitModelsHashMap[`${rowKey}-${colKey}`];\n\n if (hashMapKey) {\n context = { dataModel: hashMapKey };\n } else {\n const emptyDm = new DataModel([], sourceDM.getData().schema);\n context = { dataModel: emptyDm };\n }\n\n context = {\n ...context,\n ...colContext,\n facetInfo: {\n rowFacets: [rowFacets, rowKeyArr],\n colFacets: [colFacets, colKeyArr]\n },\n rowIndex: newRowIndex,\n colIndex: currentColumnIndex\n };\n const dataModels = splitByColumn(context, fieldInfo.optionalProjections);\n\n return {\n columnIndex: dataModels.colIndex + 1,\n rowIndex: dataModels.rowIndex\n };\n};\n\nconst createRowDataModels = (rowContext, fieldInfo, sourceDM) => {\n let currentColumnIndex = 0;\n let rowIndexForCurrentKey = 0;\n const {\n colKeys,\n rowKeyObj,\n currentRowIndex\n } = rowContext;\n const newRowIndex = currentRowIndex;\n const { keyArr: rowKeyArr, joinedKey: rowKey } = rowKeyObj;\n const colContext = {\n ...rowContext,\n rowKeyArr,\n rowKey,\n newRowIndex\n };\n rowIndexForCurrentKey = currentRowIndex;\n if (colKeys.length) {\n colKeys.forEach((colKeyObj) => {\n colContext.colKeyObj = colKeyObj;\n colContext.currentColumnIndex = currentColumnIndex;\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n });\n } else {\n colContext.colKeyObj = { keyArr: [], joinedKey: '' };\n colContext.currentColumnIndex = currentColumnIndex;\n\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n }\n return {\n rowIndex: ++rowIndexForCurrentKey\n };\n};\n\n/**\n* Gets Matrixes for corresponding datamodel, facets and projections\n*\n* @param {Object} dataModel input datamodel\n* @param {Object} fieldInfo Information about the fields\n* @param {Function} geomCellCreator 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, geomCellCreator, globalConfig) => {\n let currentRowIndex = 0;\n const matrix = [];\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const projectionInfo = prepareProjectionInfo(fieldInfo);\n const facetInfo = prepareFacetInfo(fieldInfo);\n const allSplitModels = dataModel.splitByRow(facetInfo.allFacets);\n\n const {\n splitModelsHashMap,\n rowKeys,\n colKeys\n } = getSplitModelHashMap(allSplitModels, facetInfo, globalConfig);\n\n const generalContext = {\n matrix,\n geomCellCreator,\n projectionInfo,\n splitModelsHashMap,\n colKeys\n };\n if (rowKeys.length) {\n rowKeys.forEach((rowKeyObj) => {\n const rowContext = {\n ...generalContext,\n rowKeyObj,\n currentRowIndex\n };\n const { rowIndex } = createRowDataModels(rowContext, fieldInfo, dataModel);\n\n currentRowIndex = rowIndex;\n });\n } else if (colKeys.length) {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n\n colKeys.forEach((colKeyObj) => {\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj,\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n });\n } else {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj: { keyArr: [], joinedKey: '' },\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n }\n\n const formattedColKeys = formatKeys(colKeys.map(e => e.keyArr),\n colFacets.map(facetField => facetField.rawFormat()));\n const formattedRowKeys = formatKeys(rowKeys.map(e => e.keyArr),\n rowFacets.map(facetField => facetField.rawFormat()));\n\n // Getting column keys\n const transposedColKeys = formattedColKeys.length > 0 ? formattedColKeys[0].map((col, i) =>\n formattedColKeys.map(row => row[i])) : formattedColKeys;\n\n return { matrix, rowKeys: formattedRowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport {\n getObjProp,\n FieldType,\n retrieveNearestGroupByReducers,\n mergeRecursive,\n createSelection,\n DataModel\n} from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n getFieldsFromSuppliedLayers,\n extractFields,\n removeExitCells\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP,\n BOTTOM, PRIMARY, SECONDARY, X, Y, TEMPORAL } from '../enums/constants';\nimport { SimpleVariable } from '../variable';\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 *\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 sortedFields = config.sort;\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || [],\n context.retinalConfig);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const facetFields = allFacets.slice();\n facetFields[0] = facetFields[0].map(facetField => facetField.oneVar());\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\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n // Sort datamodel if user has sorted a field\n const sortConfig = Object.keys(sortedFields).map(field => [field, sortedFields[field]]);\n if (sortConfig.length) {\n datamodel = datamodel.sort(sortConfig, { saveChild: true });\n }\n\n geomCell.data(datamodel)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n\n encoder.createAxis(axesCreators, fieldInfo, Object.assign({}, context, { geomCell, facetFields }));\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\nconst extractAxisIndex = id => getObjProp(id.match(/^[0-9]*?(?=-)/g), 0);\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 */\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((currObj, 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 }).sort((a, b) => extractAxisIndex(a[0]) - extractAxisIndex(b[0]));\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.rowsSecondary = createAxisCells(selObj.rowSec, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n selObj.columnsSecondary = createAxisCells(selObj.colSec, 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) => {\n const textCell = new cells.TextCell({}, { labelManager });\n textCell.source(label);\n return textCell;\n }, headers, (key, i) => key + i);\n\nconst extractFacetIndex = id => id.split('-').pop();\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n *\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facet\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n\n const selObjUpdater = createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys,\n (keySet, i) => `${keySet.join(',')}-${i}`)\n .sort((a, b) => extractFacetIndex(a[0]) - extractFacetIndex(b[0]));\n\n return selObjUpdater.map((keySet, data) => {\n let textCells = createTextCells(null, data, cells, labelManager);\n textCells = textCells.map((cell, k) => cell.source(k).config(facet));\n return textCells;\n });\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 facet,\n encoders,\n resolver\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 keys = keys.map(arr => arr.map(val => resolver.valueParser()(val)));\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.facet = facet.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facet = facet.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n\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 facet,\n encoders,\n resolver\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\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]\n .map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n let rowPriority = rowSec.length ? 1 : -1;\n rowPrime.length && rowPriority++;\n let colPriority = colSec.length ? 1 : -1;\n colPrime.length && colPriority++;\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 colPriority,\n rowPriority\n };\n};\n\nconst getAxisFields = (projections, fieldHolder = []) =>\n projections.reduce((acc, item) =>\n [...acc, ...item.reduce((ac, field) =>\n (field instanceof SimpleVariable ? [...ac, field.oneVar()] : ac), [])], fieldHolder);\n\nconst sortDmTemporalFields = (resolver, datamodel) => {\n let axisFields = [];\n const projections = resolver.projections();\n axisFields = getAxisFields(projections.rowProjections, getAxisFields(projections.colProjections));\n\n const fieldConfig = datamodel.getFieldsConfig();\n const temporalFields = axisFields.reduce((acc, field) =>\n ((fieldConfig[field].def.subtype === TEMPORAL) ? [...acc, [field]] : acc), []);\n return temporalFields.length ? datamodel.sort(temporalFields, { saveChild: true }) : datamodel;\n};\n\nconst transformDataModel = (dataModel, config, resolver) => {\n let groupedModel;\n\n const fieldsConfig = dataModel.getFieldsConfig();\n const resolvedData = resolver.data();\n const { groupBy, suppliedLayers, facetsAndProjections } = config;\n\n if (resolvedData instanceof DataModel) {\n resolvedData.dispose();\n }\n groupedModel = dataModel.project(dataModel.getSchema().map(d => d.name));\n resolver.data(groupedModel);\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(suppliedLayers, groupedModel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n const dimensions = allFields.filter(field =>\n getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n const measureNames = Object.keys(groupedModel.getFieldspace().getMeasure());\n const nearestAggFns = retrieveNearestGroupByReducers(groupedModel, ...measureNames);\n const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns);\n\n groupedModel = groupedModel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns)\n .project(allFields);\n }\n // sort temporal fields if any in the given rows and columns\n groupedModel = sortDmTemporalFields(resolver, groupedModel);\n return groupedModel;\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 facet: globalConfig.facet || {},\n axisFrom: globalConfig.axisFrom || {},\n selection,\n resolver\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 retinalConfig: {\n color: config.color,\n size: config.size,\n shape: config.shape\n }\n };\n\n const groupedModel = transformDataModel(datamodel, {\n facetsAndProjections,\n suppliedLayers: valueCellContext.suppliedLayers,\n groupBy\n }, resolver);\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, globalConfig);\n\n removeExitCells(resolver);\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n resolver.createUnits(componentRegistry, config);\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const {\n rows,\n columns,\n selectionObj,\n rowPriority,\n colPriority\n } = 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 priority: {\n row: rowPriority,\n col: colPriority\n },\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","export const RESOLVER_PROPS = {\n dependencies: {},\n units: {},\n datamodelTransform: {},\n layerConfig: {},\n matrixLayers: {},\n colCells: {},\n rowCells: {},\n rowMatrix: {},\n columnMatrix: {},\n valueMatrix: {},\n encoder: {},\n valueParser: {},\n data: {}\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { generateGetterSetters, STATE_NAMESPACES, getUniqueId } from 'muze-utils';\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';\nimport { RESOLVER_PROPS } from './resolver-props';\n\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 = { rowFacets: [], colFacets: [] };\n this._projections = { rowProjections: [], colProjections: [] };\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._fireboltDeps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: [],\n radius: [],\n angle: [],\n angle0: []\n };\n generateGetterSetters(this, RESOLVER_PROPS);\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 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 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 *\n *\n * @param {*} facets\n *\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 *\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 *\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 *\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 radius: [],\n angle: [],\n angle0: [],\n pie: []\n });\n }\n\n setFireboltDependencies (prop, deps) {\n Object.assign(this._fireboltDeps, {\n [prop]: deps\n });\n return this;\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 coord\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager,\n throwback\n } = this.dependencies();\n const fireboltDeps = this._fireboltDeps;\n\n // Provide the source for the matrix\n const units = [[]];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n const store = this.store();\n store.lockModel();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n const namespace = `unit${i}-${j}-${getUniqueId()}`;\n\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager,\n throwback,\n fireboltDeps\n });\n unit.metaInf({\n rowIndex: i,\n colIndex: j,\n namespace\n });\n unit.store(store);\n unit.coord(coord);\n el.source(unit);\n }\n !units[i] && (units[i] = []);\n units[i][j] = unit;\n unit.parentAlias(alias)\n .valueParser(this.valueParser())\n .coord(coord);\n el.config(unitConfig);\n });\n store.unlockModel();\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 resetFacetsAndProjections () {\n this._facets = {};\n this._projections = {};\n return this;\n }\n\n /**\n *\n *\n *\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 *\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 const props = [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`,\n `${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`];\n const store = this.store();\n store.lockCommits(props);\n store.lockModel();\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(Object.assign(el.axes(), retinalAxes));\n el.source() && el.source().retinalFields(config);\n el.layerDef(matrixLayers[i][j]);\n el.updateModel();\n\n units.push(el.source());\n });\n store.unlockModel()\n .unlockCommits([props[0]])\n .unlockCommits([props[1]]);\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n *\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 {\n showHeaders,\n classPrefix\n } = config;\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], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager }),\n right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell,\n { classPrefix, 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 *\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 store (...params) {\n if (params.length) {\n this._store = params[0];\n return this;\n }\n return this._store;\n }\n\n clear () {\n const cacheMaps = this._cacheMaps;\n for (const key in cacheMaps) {\n cacheMaps[key].clear();\n }\n }\n\n}\n","/**\n * This is a wrapper class over the matrix of cells which gets created in visual group. Visual Group creates left,\n * right, bottom and top and center matrices and wraps them using this class.\n *\n * @public\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n * Creates an instance of ValueMatrix.\n *\n * @param {Array} matrixArr Matrix array.\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 instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n * Returns the array of matrices contained in this instance.\n *\n * @public\n * @return {Array} Array of matrices.\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 * Sets a filter criteria. This filter criteria gets applied when each function is called.\n *\n * @public\n * @param {Function} fn Filter function.\n *\n * @return {ValueMatrix} Instance of value matrix.\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 * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\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 * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\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 * Iterates through the two dimensional matrix array and calls the given callback function with the cell instance,\n * row index, column index and the matrix array.\n *\n * @param {Function} fn Callback function which will get called for every cell.\n * @return {ValueMatrix} Instance of the value matrix.\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 findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n clear () {\n this.each(cell => cell.remove());\n this.matrix([]);\n }\n}\n\nexport default ValueMatrix;\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { getEncoder, getBorders } from '../group-helper';\nimport { RetinalEncoder } from '../encoder';\nimport { registerDomainChangeListener, unsubscribeChangeListeners } from './change-listener';\nimport ValueMatrix from './value-matrix';\n\nexport const createUnitState = (context) => {\n const [globalState, localState] = VisualUnit.getState();\n const store = context.store();\n store.append(STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE, localState);\n};\n\nexport const initializeGlobalState = (context) => {\n const globalState = context.constructor.getState()[0];\n const store = context.store();\n store.append(STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const createLayerState = (context) => {\n const [globalState, localState] = BaseLayer.getState();\n context.store().append(STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE, localState);\n};\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\nexport const setMatrixInstances = (context, placeholder) => {\n let {\n values,\n rows,\n columns\n } = placeholder;\n values = values || [];\n rows = rows || [];\n columns = columns || [];\n context._composition.matrices = {\n value: new ValueMatrix(values),\n left: new ValueMatrix(rows[0]),\n right: new ValueMatrix(rows[1]),\n top: new ValueMatrix(columns[0]),\n bottom: new ValueMatrix(columns[1])\n };\n\n context._dependencies.throwback.commit(CommonProps.MATRIX_CREATED, true);\n return context;\n};\n\nexport const createMatrices = (context) => {\n const rows = context.rows();\n const columns = context.columns();\n const color = context.color();\n const datamodel = context.data();\n const size = context.size();\n const detail = context.detail();\n const layers = context.layers();\n const transform = context.transform();\n const config = context.config();\n const shape = context.shape();\n\n // Get the resolver for the matrices\n const resolver = context.resolver();\n resolver.store(context.store());\n resolver.valueParser(context.valueParser());\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config || {},\n rows,\n columns,\n detail,\n layers,\n transform\n };\n\n unsubscribeChangeListeners(context);\n\n const retinalConfig = sanitizeRetinalConfig({\n color,\n shape,\n size\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);\n matrixConfig.coord = encoders.simpleEncoder.constructor.type();\n resolver.encoder(encoders.simpleEncoder);\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 ? config.axisFrom : {}, fields);\n // Setting layers for the code\n layers && resolver.layerConfig(layers);\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));\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 resolver.encoder().unionUnitDomains(context);\n\n registerDomainChangeListener(context);\n return context;\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\n\nimport { STATE_NAMESPACES } from 'muze-utils';\n\nexport const setupChangeListeners = (context) => {\n const store = context.store();\n const stores = {\n throwback: context._dependencies.throwback,\n store\n };\n\n ['x', 'y'].forEach((axisType) => {\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${axisType}`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes[axisType].forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n });\n\n [VisualUnit, BaseLayer].forEach((comp) => {\n const formalName = comp.formalName();\n ['store', 'throwback'].forEach((type) => {\n const listeners = comp.getListeners()[type];\n const storeInst = stores[type];\n listeners.forEach((listenerInf) => {\n storeInst[listenerInf.type](listenerInf.props, listenerInf.listener, false, {\n namespace: formalName,\n subNamespace: listenerInf.subNamespace\n });\n });\n });\n });\n};\n\nexport const registerDomainChangeListener = (context) => {\n const store = context.store();\n store.registerChangeListener([`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`], () => {\n context.resolver().encoder().unionUnitDomains(context);\n }, false, {\n key: 'unionDomain'\n });\n};\n\nexport const unsubscribeChangeListeners = (context) => {\n context.store().unsubscribe({\n key: 'unionDomain'\n });\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\nexport const PROPS = {\n alias: {},\n data: {},\n cornerMatrices: {\n defaultValue: {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: []\n }\n },\n groupType: {},\n\n metaData: {\n defaultValue: {\n border: {}\n }\n },\n placeholderInfo: {\n defaultValue: {}\n },\n resolver: {},\n valueParser: {\n defaultValue: val => val\n },\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 [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n findInGroup\n} from '../group-helper';\nimport { createUnitState, initializeGlobalState, setMatrixInstances, createMatrices, createLayerState } from './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 * VisualGroup is instantiated by canvas for creating {@link VisualUnit} and axes instances.It creates the\n * the matrix of visual units and axes. It also creates the layout instance which manages the allocation\n * of space of matrices.\n *\n * To get instance of visual group,\n * ```\n * const visualGroup = canvas.composition().visualGroup;\n * ```\n * @public\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 *\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 generateGetterSetters(this, localOptions);\n // Populate the store with default values\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n // matrix instance store each of the matrices\n setMatrixInstances(this, {});\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n }\n\n static getState () {\n return [{\n domain: {\n x: null,\n y: null,\n radius: null,\n angle: null,\n angle0: null\n }\n }, {}];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n initializeGlobalState(this);\n createUnitState(this);\n createLayerState(this);\n // Register listeners\n setupChangeListeners(this);\n return this;\n }\n return this._store;\n }\n\n /**\n * Return the instances of matrices created by the visual group.\n *\n * @return {Object} Instance of matrices.\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 visual group.\n *\n * @public\n *\n * @return {Object} Composition of visual group. It contains instance of matrices {@link ValueMatrix}\n * and instances of axis.\n * ```\n * {\n * matrices: {\n * value: // Instance of center value matrix.\n * left: // Instance of left value matrix\n * right: // Instance of right value matrix\n * bottom: // Instance of bottom value matrix\n * top: // Instance of top value matrix.\n * },\n * axes: {\n * x: // Array of x axis.\n * y: // Array of y axis\n * color: // Array of color axis\n * shape: // Array of shape axis\n * size: // Array of size axis.\n * }\n * }\n * ```\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 */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n * Returns the channel name of the variable. Channels are rows, columns, color, shape and size.\n *\n * @public\n * @param {string} variable Name of the variable.\n *\n * @return {string} Name of the channel.\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n * Gets the axis instances of the visual group based on the given axis type.\n *\n * @public\n * @param {string} type Type of axis. X,Y or retinal axes.\n *\n * @return {Array} Array of axis instances.\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n * Returns the instances of cells based on the given type. Type can be given as `row' or `col`.\n *\n * @public\n * @return {Array} Two dimensional array of cells.\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n return channel === Y ? rowProjections : colProjections;\n }\n\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\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 /**\n * Returns the grouped datamodel prepared by visual group. If there is no group by performed, then it returns the\n * original data model passed to visual group.\n *\n * @return {DataModel} Grouped data model.\n */\n getGroupByData () {\n return this._groupedDataModel;\n }\n\n createMatrices () {\n createMatrices(this);\n }\n\n remove () {\n this.matrixInstance().value.clear();\n this.resolver().clear();\n const info = this.placeholderInfo();\n info.rows = null;\n info.columns = null;\n info.values = null;\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 MAXWIDTH = 'max-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 context = firebolt.context;\n const type = context.constructor.type();\n const payload = config.payload;\n const data = context.data();\n const metaData = context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = 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.rawVal);\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].internalValue >= values[i][0] && fields[field].internalValue <= 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 === 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.rawVal) !== -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","import { getEvent } from 'muze-utils';\n\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 event = getEvent();\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 const event = getEvent();\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 labelManager: {},\n minTickDistance: {},\n valueParser: {\n defaultValue: val => val\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, i, data, context) => context.valueParser()(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 MAXWIDTH\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n *\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 * Function to recompute the stops in array in case to left and right alignment of legend.\n *\n * @param {string} param - parameter to measure\n * @param {Object} requiredMeasure - required measure parameters\n * @param {Object} availableMeasure - available meassure parameters\n * @param {Array} domainForLegend - array\n * @param {Object} smartLabelCalc - smartLabel Manager\n * @return {Array} - Array\n */\nconst getcomputedArray = (computationhelper, requiredMeasure, availableMeasure, domainForLegend) => {\n // declaring Current and Next Tick Value variable\n let currentTickValue;\n let nextTickValue;\n const upperBound = domainForLegend[domainForLegend.length - 1];\n const param = computationhelper.measureParam;\n const smartLabelCalc = computationhelper.smartLabelCalc;\n\n // calculating pixel required per Tick Values\n const pixelPerTick = (availableMeasure[param] / upperBound);\n\n // checking if available max width is smaller than required width for legend.\n if (availableMeasure[param] >= requiredMeasure[param]) {\n return domainForLegend;\n }\n\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[0]))[param]);\n for (let i = 1; i < domainForLegend.length - 1; i++) {\n nextTickValue = Math.floor((currentTickValue / pixelPerTick) + domainForLegend[i - 1]);\n if (domainForLegend[i] < nextTickValue) {\n domainForLegend.splice(i, 1);\n i -= 1;\n }\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[i]))[param]);\n }\n return domainForLegend;\n};\n\n/**\n * function to recompute the Stops Array provided to prevent the Overlapping of values\n * @param {Array} domainForLegend - Stops Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - modified Stops Array\n */\nexport const getInterpolatedArrayData = (domainForLegend, scaleParams) => {\n // defining param for height/width selector\n let measureParam;\n\n // declaring variable for required Width\n let requiredWidth;\n\n // declaring variable for required height\n let requiredHeight;\n\n // declaring the variable for upperbound\n let upperBound = domainForLegend[domainForLegend.length - 1];\n\n // Initializing Minimum Tick Difference Variable and checking if it's less than 1 or not\n let minTickDiff = Math.ceil(domainForLegend[1] - domainForLegend[0]);\n\n // calculating max tick difference\n const maxTickDiff = Math.ceil(upperBound - domainForLegend[0]);\n\n // gradient Alignment\n const { alignment } = scaleParams;\n\n // getting SmartLabel Manager to calculate tick Params\n const smartLabelCalc = scaleParams.smartLabel;\n\n // scale Measurements (i.e MaxWidth and MaxHeight available)\n const availableSpace = scaleParams.measures;\n\n // getting minimum Tick size (i.e height and width)\n const minimumTickSize = scaleParams.minTickDistance;\n\n // getting domain upperbound dimensions\n const { height: tickDimHeight, width: tickDimWidth } = smartLabelCalc.getOriSize((upperBound));\n\n /* Checking if UpperBound of Domain is Floating or Not.\n In case of floating constricting it to 2 decimals after point. */\n if (!Number.isInteger(upperBound)) {\n upperBound = ((upperBound).toFixed(2));\n }\n\n // Calculating minimum tick difference\n minTickDiff = minTickDiff < 1 ? 1 : minTickDiff;\n\n // required width to render legend\n requiredWidth = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * (tickDimWidth + (minimumTickSize.width));\n\n requiredWidth -= Math.abs(maxTickDiff);\n\n // require height to render legend\n requiredHeight = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * tickDimHeight;\n\n requiredHeight -= Math.abs(maxTickDiff);\n\n // checking the alignment of legend\n if (alignment === TOP || alignment === BOTTOM) {\n measureParam = WIDTH;\n } else {\n measureParam = HEIGHT;\n }\n\n // calculating computed array\n domainForLegend = getcomputedArray({\n smartLabelCalc,\n measureParam\n }, {\n height: requiredHeight,\n width: requiredWidth\n }, {\n height: availableSpace.maxHeight,\n width: availableSpace.maxWidth\n }, domainForLegend);\n\n return domainForLegend;\n};\n\n/**\n * function to recalculate steps on providing more number of stops than canvas can accomodate.\n * @param {Array} domain - Array\n * @param {Array} steps - Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - recalculated Step Array\n */\nexport const getInterpolatedData = (domain, steps, scaleParams) => {\n // declaring recomputeSteps Variable\n let recomputeSteps = 0;\n\n const getTickMeasure = scaleParams.smartLabel;\n const { maxWidth, maxHeight } = scaleParams.measures;\n const { alignment } = scaleParams;\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n // getting tick measure(i.e height and width)\n const tickValue = getTickMeasure.getOriSize(domain[1].toFixed(2));\n\n // To round the floating values to Integer and checking if value is 1.\n steps = Math.round(steps);\n steps = steps < 1 ? (steps + 1) : steps;\n\n // checking alignment of the Axis\n if (alignment === TOP || alignment === BOTTOM) {\n recomputeSteps = Math.floor(maxWidth / (tickValue.width));\n } else {\n recomputeSteps = Math.floor(maxHeight / (tickValue.height));\n }\n steps = Math.min(steps, recomputeSteps);\n\n // scaling the axis based on steps provided\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 titleWidth = Math.min(measurement.maxWidth, measurement.width);\n\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${titleWidth}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, `${titleWidth}px`)\n .style(MAXWIDTH, `${titleWidth}px`)\n .style(HEIGHT, '100%')\n .style('line-height', 1)\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .style('overflow-x', 'scroll')\n .node();\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\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 *\n */\nexport const getItemMeasures = (context, prop, formatter) => {\n const space = [];\n const data = context.data();\n const labelManager = context._labelManager;\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value, index, data, context));\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 *\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);\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 const labelWidth = labelSpaces[i].width;\n const newLabelWidth = (maxItemSpaces.width - maxIconWidth);\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = Math.max(labelWidth, newLabelWidth);\n totalWidth = Math.max(totalWidth, itemSpace.width);\n }\n }\n });\n totalWidth = Math.ceil(Math.max(totalWidth, titleWidth)) + effPadding;\n totalHeight += titleHeight + effPadding;\n totalHeight = Math.ceil(totalHeight);\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n *\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, RIGHT, LEFT, TOP, BOTTOM } 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 const dist = dependencies.labelManager.getOriSize('w');\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\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 *\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\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 *\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 *\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 *\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, VALUE, 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());\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 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, maxWidth } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n maxWidth,\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 position\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 let marginPosition;\n switch (position) {\n case TOP:\n marginPosition = `margin-${BOTTOM}`;\n break;\n case LEFT:\n marginPosition = `margin-${RIGHT}`;\n break;\n case BOTTOM:\n marginPosition = `margin-${TOP}`;\n break;\n default:\n marginPosition = `margin-${LEFT}`;\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(`${marginPosition}`, `${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 *\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.rawVal]];\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\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 *\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 *\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 *\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 const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context))\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 const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import {\n FieldType,\n DimensionSubtype,\n formatTemporal\n} from 'muze-utils';\nimport 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 *\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof DiscreteLegend\n */\n dataFromScale () {\n const scale = this.scale();\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const field = this.metaData().getFieldspace().fields[0];\n const { type, subtype } = field.schema();\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n const rawVal = domainForLegend[i];\n if (type === FieldType.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 let domainVal = rawVal;\n if (subtype === DimensionSubtype.TEMPORAL) {\n domainVal = formatTemporal(domainForLegend[i], field.minimumConsecutiveDifference());\n }\n value = domainVal;\n range = [domainVal];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range,\n rawVal\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 *\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 *\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\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0]) || 1}%`)\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 labels: {\n rotation: null\n }\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 *\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 axis.source().render();\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().tickDimensions;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxItemSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(Math.min(height, maxHeight) - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(Math.min(width, maxWidth) - (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\n applyStyle(legendContainer, {\n height: `${maxItemSpaces.height + border + padding}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\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${maxWidth}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, getInterpolatedArrayData } 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 *\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n *\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 *\n * @memberof GradientLegend\n */\n dataFromScale () {\n let domainForLegend = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\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 // Sorting the domain Array\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n domainForLegend = getInterpolatedArrayData(domainForLegend, scaleParams);\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1, scaleParams);\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 *\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 *\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 *\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 *\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof StepLegend\n */\n dataFromScale () {\n let domainLeg = [];\n const scale = this.scale();\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 // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\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, scaleParams);\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 } else if (domainLeg.length === 1) {\n value = ele.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\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\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 *\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 *\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';\nexport const MUZE_PREFIX = 'muze';\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';\nexport const HORIZONTAL_CENTER = 'h-center';\nexport const VERTICAL_CENTER = 'v-center';\nexport const HIDDEN = 'hidden';\nexport const OVERFLOW = 'overflow';\nexport const OVERFLOW_X = 'overflow-x';\nexport const OVERFLOW_Y = 'overflow-y';\nexport const AUTO = 'auto';\nexport const VISIBLE = 'visible';\nexport const VERTICAL_SCROLL_BAR = 'verticalScrollBar';\nexport const HORIZONTAL_SCROLL_BAR = 'horizontalScrollBar';\nexport const GRID = 'grid';\nexport const MESSAGE = 'message';\nexport const NO_DATA_MESSAGE = 'No data to display';\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. This is required when we have multiple\n * variables on a single axis and the union of domain of all the variables needs to be set on the axis.\n *\n * To create a new composed variable from multiple fields,\n * ```\n * const sharedVar = share('open', 'high', 'low', 'close');\n * canvas.rows([sharedVar])\n * .columns(['date']);\n * ```\n *\n * @module Operators\n * @public\n * @function share\n * @param {Array} vars Variable names.\n *\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 *\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 string according to the allowed html tags.\n * This is used to render html in canvas components like title and tooltip.\n *\n * To render html in canvas components,\n * ```\n * canvas.title(html`TITLE`);\n * ```\n *\n * @public\n * @module Operators\n * @function html\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n *\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, CommonProps } 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\nconst listenerFn = (canvas, fn) => () => {\n const valueMatrix = canvas.composition().visualGroup.matrixInstance().value;\n valueMatrix.each(cell => fn(cell.valueOf().firebolt()));\n};\n\nconst canvasIterator = (canvases, iteratorFn, cFn) => {\n canvases.forEach((canvas) => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => iteratorFn(cell.valueOf().firebolt()));\n cFn && cFn(canvas);\n // Also register actions on canvas update\n const throwback = canvas._throwback;\n\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED],\n listenerFn(canvas, iteratorFn));\n });\n};\n\nconst registerActions = (context, type, fnName, deps) => {\n const canvases = context._registrableComponents;\n\n canvases.forEach((canvas) => {\n const vGroup = canvas.composition().visualGroup;\n\n vGroup.resolver().setFireboltDependencies(type, deps);\n canvas.firebolt()[fnName](deps);\n });\n};\n\n/**\n * This class is initiated only once in lifecycle and is reponsible for regisration of physical and behavioural\n * actions and side effects and the mapping between them.\n *\n * To get the instance of action model\n * ```\n * const ActionModel = muze.ActionModel;\n * ```\n *\n * @public\n * @module ActionModel\n */\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n /**\n * Takes an array of canvases on which the physical and behavioural actions will get registered.\n *\n * @public\n * @param {Canvas} components Array of canvases\n *\n * @return {ActionModel} Instance of action model.\n */\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n /**\n * Registers physical actions on the canvases. It takes an object with key as the name of action and value having\n * the definition of the action.\n *\n * To register a {@link PhysicalAction},\n * ```\n * const ActionModel = muze.ActionModel;\n * ActionModel\n * // Physical actions will be registered on these canvases.\n * .for(canvas)\n * .registerPhysicalActions({\n * // Key is the name of physical action.\n * ctrlClick: (firebolt) => (targetEl, behaviours) => {\n * targetEl.on('click', function (data) {\n * const event = utils.getEvent();\n * const pos = utils.getClientPoint(event, this);\n * // Get the data point nearest to the mouse position.\n * const nearestPoint = firebolt.context.getNearestPoint(pos, {\n * data\n * });\n * // Prepare the payload\n * const payload = {\n * criteria: nearestPoint.id\n * };\n * behaviours.forEach((behaviour) => firebolt.dispatchBehaviour(behaviour, payload));\n * });\n * }\n * });\n * ```\n * @public\n *\n * @param {Object} action Names of physical actions and their definitions.\n *\n * @return {ActionModel} Instance of the action model.\n */\n registerPhysicalActions (action) {\n registerActions(this, 'physicalActions', 'registerPhysicalActions', action);\n return this;\n }\n\n /**\n * Registers behavioural actions on the canvases. It takes definitions of the behavioural actions and registers\n * them on the canvases. Every behavioural action must inherit the {@link GenericBehaviour} class.\n *\n * To register a behavioural action\n * ```\n * // Define a new behavioural action\n * class SingleSelectBehaviour extends GenericBehaviour {\n * static formalName () {\n * return 'singleSelect';\n * }\n *\n * setSelectionSet (addSet, selectionSet) {\n * if (addSet === null) {\n * selectionSet.reset();\n * } else if (addSet.length) {\n * const existingAddSet = selectionSet.getExistingEntrySet(addSet);\n * if (existingAddSet.length){\n * selectionSet.reset();\n * } else {\n * selectionSet.add(addSet);\n * }\n * } else {\n * selectionSet.reset();\n * }\n * }\n * }\n * muze.ActionModel.registerBehaviouralActions(SingleSelectBehaviour);\n * ```\n *\n * @public\n *\n * @param {GenericBehaviour} actions Definition of behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerBehaviouralActions (...actions) {\n registerActions(this, 'behaviouralActions', 'registerBehaviouralActions', actions);\n return this;\n }\n\n /**\n * Registers the mapping of physical and behavioural actions. This mapping is used to establish which behavioural\n * actions should be dispatched on any triggering of physical actions.\n *\n * To map physical actions with behavioural actions,\n * ```\n * muze.ActionModel.registerPhysicalBehaviouralMap({\n * ctrlClick: {\n * behaviours: ['select'] // This array must be the formal names of the behavioural actions.\n * }\n * });\n * ```\n *\n * @public\n * @param {Object} map Contains the physical and behavioural action map.\n * ```\n * {\n * // Name of the physical action\n * click: {\n * // Target element selector. This is an optional field. If not passed, then by default takes the\n * // container element of visual unit.\n * target: '.muze-layers-area path',\n * // Behaviours which should be dispatched on triggering of the mapped physical action.\n * behaviours: ['select']\n * }\n * }\n * ```\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPhysicalBehaviouralMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalBehaviouralMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalBehaviouralMap(map);\n });\n return this;\n }\n\n /**\n * Registers what behaviour to propagate on dispatch of a certain behavioural action. By default, when any\n * behavioural action is dispatched, then the same behavioural action gets propagated to all the other canvases.\n * This can be changed using this api.\n *\n * To register what behaviour should be propagated on dispatch of any behavioural action,\n * ```\n * ActionModel.for(canvas1, canvas2).registerPropagationBehaviourMap({\n * select: 'filter',\n * brush: 'filter'\n * });\n * ```\n *\n * @public\n * @param {Object} map Propagation behaviour map.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPropagationBehaviourMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPropagationBehaviourMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPropagationBehaviourMap(map);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of side effects and behavioural actions. It takes an object which contains key as the\n * name of behavioural action and the side effects which will be linked to it.\n *\n * To map side effects to select behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: ['infoBox'] // This array must be the formal names of the side effects\n * });\n * ```\n *\n * To map side effects to select behaviour, but disable all the default side effects attached with this behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: {\n * effects: ['infoBox'],\n * preventDefaultActions: true\n * }\n * });\n * @public\n * @param {Object} map Mapping of behavioural actions and side effects.\n * ```\n * {\n * select: ['infoBox']\n * }\n * ```\n * @return {ActionModel} Instance of action model.\n */\n mapSideEffects (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.mapSideEffects(map);\n }, (canvas) => {\n canvas.firebolt().mapSideEffects(map);\n });\n return this;\n }\n\n /**\n * Registers the side effects on the registered canvases. It takes definitions of side effects and registers them\n * on the canvases. Every side effect must inherit the base class {@link GenericSideEffect} or\n * {@link SpawnableSideEffect} or {@link SurrogateSideEffect} class.\n *\n * ```\n * // Define a custom side effect\n * class InfoBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'infoBox';\n * }\n *\n * apply (selectionSet) {\n * }\n * }\n * muze.ActionModel.registerSideEffects(InfoBox);\n * ```\n * @public\n * @param {GenericSideEffect} sideEffects Definition of side effects.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerSideEffects (...sideEffects) {\n registerActions(this, 'sideEffects', 'registerSideEffects', sideEffects);\n return this;\n }\n\n /**\n * Breaks the link between behavioural actions and physical actions. It takes an array of behavioural action\n * and it's physical action.\n *\n * To dissociate behavioural actions from physical actions\n * ```\n * muze.ActionModel.dissociateBehaviour(['select', 'click'], ['highlight', 'hover']);\n * ```\n * @public\n * @param {Array} maps Array of behavioural action and physical action.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateBehaviour (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateBehaviour(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateBehaviour(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * Breaks the link between side effects and behavioural actions. It takes an array of formal names of the side\n * effects and it's linked behavioural action.\n *\n * To dissociate side effects from behavioural actions\n * ```\n * muze.ActionModel.dissociateSideEffect(['crossline', 'highlight'], ['selectionBox', 'brush']);\n * ```\n * @public\n * @param {Array} maps Array of side effects and behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateSideEffect (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateSideEffect(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateSideEffect(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * By default cross interactivity is disabled between canvases. This enables cross interaction between the canvases\n * so that any action happening in one canvas gets dispatched on other canvases as well. An optional policy can also\n * be passed in this method. The policy can be used to control on which canvases the behavioural actions and\n * side effects gets dispatched.\n *\n * To just enable cross interactivity between two canvases,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity();\n * ```\n *\n * To enable cross interactivity but enable any behavioural action only when it is triggered from canvas1.\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * behaviours: {\n * // Here * stands for any behavioural action name. We can also give any name of behavioural action\n * // in place of this.\n * '*': (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n *\n * To enable cross interactivity but enable tooltip effect if the action is propagated from canvas1,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * sideEffects: {\n * tooltip: (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n * @public\n * @param {Object} policy Policy definition.\n *\n * @return {ActionModel} Instance of action model.\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","import { MUZE_PREFIX } from '../constants';\n\nexport const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 4,\n className: `${MUZE_PREFIX}-title-container`\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16,\n maxLines: 2,\n className: `${MUZE_PREFIX}-subtitle-container`\n};\n\nexport const MESSAGE_CONFIG = {\n className: `${MUZE_PREFIX}-message-container`\n};\n\nexport const CANVAS = 'canvas';\n","import { mergeRecursive } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\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 * @module LocalOptions\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' || !config) {\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' || !config) {\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' || !config) {\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: [],\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};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([title, titleConfig]) => {\n let t = title;\n if (typeof title === 'string' || !title) {\n t = () => title;\n }\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return [t, mergeRecursive(defConfig, titleConfig)];\n }\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([subtitle, subtitleConfig]) => {\n let sub = subtitle;\n if (typeof subtitle === 'string' || !subtitle) {\n sub = () => subtitle;\n }\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return [sub, mergeRecursive(defConfig, subtitleConfig)];\n }\n }\n }\n};\n","export default class LayoutComponent {\n constructor (name, dimensions, seed) {\n this._seed = seed;\n this._boundBox = {\n height: dimensions.height,\n width: dimensions.width,\n top: null,\n left: null\n };\n this._renderAt = null;\n this._alignWith = null;\n this._alignment = null;\n this._target = null;\n this._position = null;\n this._componentName = name;\n this._className = null;\n }\n\n getLogicalSpace () {\n throw new Error('getLogicalSpace is not defined');\n }\n\n setSpatialConfig () {\n throw new Error('setSpatialSpace is not defined');\n }\n\n name (param) {\n if (param) {\n this._componentName = param;\n }\n return this._componentName;\n }\n\n target (param) {\n if (param) {\n this._target = param;\n }\n return this._target;\n }\n\n position (param) {\n if (param) {\n this._position = param;\n }\n return this._position;\n }\n\n alignment (param) {\n if (param) {\n this._alignment = param;\n }\n return this._alignment;\n }\n\n alignWith (param) {\n if (param) {\n this._alignWith = param;\n }\n return this._alignWith;\n }\n\n renderAt (param) {\n if (param) {\n this._renderAt = param;\n }\n return this._renderAt;\n }\n\n boundBox (param) {\n if (param) {\n Object.assign(this._boundBox, param);\n }\n return this._boundBox;\n }\n\n className (param) {\n if (param) {\n this._className = param;\n }\n return this._className;\n }\n\n draw () {\n throw new Error('draw is not defined');\n }\n\n attachListener () {\n return this;\n }\n }\n\n","import LayoutComponent from './layoutComponent';\n\nclass DummyComponent extends LayoutComponent {\n getLogicalSpace () {\n return {\n width: this.boundBox().width,\n height: this.boundBox().height\n };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n return this;\n }\n\n draw () {\n if (!this.component) {\n throw new Error(`Component not set for ${this.componentName}`);\n }\n this.component.mount(document.getElementById(this.renderAt)); // Change the draw method to component draw\n return this;\n }\n}\n\nexport default DummyComponent;\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n pagination: 'scroll',\n scrollBar: {\n thickness: 10,\n speed: 2,\n vertical: {\n align: 'right'\n },\n horizontal: {\n align: 'bottom'\n }\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 facet: {\n rows: {\n minCharacters: 3\n },\n columns: {\n maxLines: 2,\n verticalAlign: 'middle',\n minCharacters: 1\n }\n },\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 invalidValues: {},\n sort: {}\n};\n","import { DEFAULT_CONFIG } from '../../../../muze/src/defaults';\n\nconst DEFAULT_WIDTH = 600;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_CLASS_NAME = `${DEFAULT_CONFIG.classPrefix}-layout-container-component`;\nconst NODE_PREFIX = `${DEFAULT_CONFIG.classPrefix}-layout-container`;\n\nexport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n DEFAULT_CLASS_NAME,\n NODE_PREFIX\n};\n","export default class DefinitionModel {\n constructor (config) {\n this._host = config.host || null;\n this._cut = config.cut || null;\n this._ratioWeight = config.ratioWeight === 0 ? 0 : config.ratioWeight || 1;\n this._preferred = config.preferred || false;\n this._lanes = config.lanes || [];\n this._remainingHeight = 0;\n this._remainingWidth = 0;\n }\n\n host (host) {\n if (host) {\n this._host = host;\n }\n return this._host;\n }\n\n preferred (preferred) {\n if (preferred) {\n this._preferred = preferred;\n }\n return this._preferred;\n }\n\n cut (cut) {\n if (cut) {\n this._cut = cut;\n }\n return this._cut;\n }\n\n ratioWeight (ratioWeight) {\n if (ratioWeight) {\n this._ratioWeight = ratioWeight;\n }\n return this._ratioWeight;\n }\n\n lanes (lanes) {\n if (lanes) {\n this._lanes = lanes;\n }\n return this._lanes;\n }\n\n remainingHeight (remainingHeight) {\n if (remainingHeight) {\n this._remainingHeight = remainingHeight;\n }\n return this._remainingHeight;\n }\n\n remainingWidth (remainingWidth) {\n if (remainingWidth) {\n this._remainingWidth = remainingWidth;\n }\n return this._remainingWidth;\n }\n}\n","import { NODE_PREFIX } from '../../constants/defaults';\nimport DefinitionModel from '../definition-manager/definitionModel';\nimport DummyComponent from '../../layout-component/dummy-component';\n/**\n * Compares two strings in lowercase\n *\n * @export\n * @param {string} value the value to be compared\n * @param {string} compareTo whom the value would be compared\n * @return {boolean} true if values are equal\n */\nexport function isEqual (value, compareTo) {\n if (typeof value !== 'string' || typeof compareTo !== 'string') {\n throw new TypeError('value and compareTo must be string');\n }\n return value.toLowerCase() === compareTo.toLowerCase();\n}\n\nexport const getNodeId = (() => {\n let _uid = 0;\n return () => `${NODE_PREFIX}-${++_uid}`;\n})();\n\nexport function yExtraSpace (node) {\n let smallestHeight = 0;\n if (node.getCutType() === 'v') {\n smallestHeight = smallestExtraHeightHorizontally(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'h') {\n node.children().forEach((child) => {\n smallestHeight += yExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerHeight = node.boundBox().height;\n const hostHeight = node.model().host().getLogicalSpace().height;\n\n smallestHeight = containerHeight - hostHeight;\n if (smallestHeight < 0) {\n smallestHeight = 0;\n }\n } else {\n smallestHeight = 0;\n }\n return smallestHeight;\n}\n\nexport function smallestExtraHeightHorizontally (node) {\n let smallestHeight = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const h = yExtraSpace(child);\n if (h < smallestHeight) {\n smallestHeight = h;\n }\n });\n return smallestHeight;\n}\n\nexport function xExtraSpace (node) {\n let smallestWidth = 0;\n if (node.getCutType() === 'h') {\n smallestWidth = smallestExtraWidthVertically(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'v') {\n node.children().forEach((child) => {\n smallestWidth += xExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerWidth = node.boundBox().width;\n const hostWidth = node.model().host().getLogicalSpace().width;\n smallestWidth = containerWidth - hostWidth;\n if (smallestWidth < 0) {\n smallestWidth = 0;\n }\n } else {\n smallestWidth = 0;\n }\n return smallestWidth;\n}\n\nexport function smallestExtraWidthVertically (node) {\n let smallestWidth = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const w = xExtraSpace(child);\n if (w < smallestWidth) {\n smallestWidth = w;\n }\n });\n return smallestWidth;\n}\n\nexport function determineBoundBox (bb, i, arr, instance) {\n if (i) {\n // if not first sibling, take boundbox from previous sibling\n const lastSibling = arr[i - 1];\n const { top: _top, left: _left, height: _height, width: _width } = lastSibling.boundBox();\n return {\n width: bb.width,\n height: bb.height,\n\n top: instance.parentCut() === 'h'\n ? _top + _height : _top,\n\n left: instance.parentCut() === 'h'\n ? _left : _left + _width\n };\n }\n // if first sibling, take boundbox from parent\n const { top: _top, left: _left } = instance.parent().boundBox();\n return {\n width: bb.width,\n height: bb.height,\n top: _top,\n left: _left\n };\n}\n\n// prepares the targetComponent Map for target Mapping ie. where a component should lie\nexport function prepareTargetComponentMap (context) {\n context.targetComponentMap(new Map());\n context.componentMap().forEach((value) => {\n if (context.targetComponentMap().has(value.target())) {\n context.targetComponentMap().get(value.target()).push(value);\n } else {\n const temp = [];\n temp.push(value);\n context.targetComponentMap().set(value.target(), temp);\n }\n });\n}\n\nexport function getComponent (canvasComponent, componentName) {\n const comp = canvasComponent.find(component => component.name() === componentName);\n return (comp && comp !== -1) ? comp : null;\n}\nexport function createPlaceHolderComponent (height, width, position) {\n const comp = new DummyComponent(0, { height, width });\n comp.name('placeHolder');\n comp.position(position);\n return comp;\n}\n\nexport function placeComponent (definitionModel, component, isPreferred = false, isGridComponent = false) {\n let cut = '';\n let componentRatioWidth = 1;\n let leftOvercomponentRationWidth = 1;\n let leftHeight = 0;\n let leftWidth = 0;\n\n if (!component) {\n return { first: definitionModel, second: definitionModel };\n }\n\n const { height: componentHeight, width: componentWidth } = component.getLogicalSpace();\n const position = component.position();\n if (position === 'top' || position === 'bottom') {\n cut = 'h';\n componentRatioWidth = componentHeight / definitionModel.remainingHeight();\n leftHeight = definitionModel.remainingHeight() - componentHeight;\n leftWidth = definitionModel.remainingWidth();\n } else {\n cut = 'v';\n componentRatioWidth = componentWidth / definitionModel.remainingWidth();\n leftWidth = definitionModel.remainingWidth() - componentWidth;\n leftHeight = definitionModel.remainingHeight();\n }\n leftOvercomponentRationWidth = 1 - componentRatioWidth;\n\n// update parentModel\n definitionModel.cut(cut);\n const firstLaneConfig = {\n host: component.name(),\n cut: null,\n ratioWeight: componentRatioWidth,\n preferred: isGridComponent ? false : isPreferred,\n lanes: []\n };\n const firstLane = new DefinitionModel(firstLaneConfig);\n firstLane.remainingHeight(componentHeight);\n firstLane.remainingWidth(componentWidth);\n\n const secondLaneConfig = {\n host: null,\n cut: null,\n ratioWeight: leftOvercomponentRationWidth,\n preferred: isGridComponent ? false : !isPreferred,\n lanes: []\n };\n const secondLane = new DefinitionModel(secondLaneConfig);\n secondLane.remainingHeight(leftHeight);\n secondLane.remainingWidth(leftWidth);\n if (isPreferred) {\n definitionModel.lanes([firstLane]);\n } else if (position === 'top' || position === 'left') {\n definitionModel.lanes([firstLane, secondLane]);\n } else {\n definitionModel.lanes([secondLane, firstLane]);\n }\n return { first: firstLane, second: secondLane };\n}\n\nexport function placeGridComponent (definitionModel, gridComponents) {\n let tempDefModel = definitionModel;\n const rows = gridComponents.length;\n const column = rows ? gridComponents[0].length : 0;\n const height = gridComponents.reduce((acc, val) => (acc + val[0].getLogicalSpace().height), 0);\n\n for (let i = 0; i < column; i++) {\n const iscolumnPreffered = i === column - 1;\n const columnPlaceHolderComponent = createPlaceHolderComponent(height,\n gridComponents[0][i].getLogicalSpace().width, 'left');\n const { first, second } = placeComponent(tempDefModel, columnPlaceHolderComponent, iscolumnPreffered);\n tempDefModel = first;\n for (let j = 0; j < rows; j++) {\n const rowpreffred = j === (rows - 1);\n tempDefModel = placeComponent(tempDefModel, gridComponents[j][i], rowpreffred, true).second;\n }\n tempDefModel = second;\n }\n return tempDefModel;\n}\n\nexport function negotiateDimension (node) {\n let preferred;\n let cumultiveExtraSpaceAmt = 0;\n let alteredDim;\n let nonAlteredDim;\n\n const childrenLength = node.children().length;\n\n for (let index = 0; index < childrenLength; index++) {\n let fn;\n let extraSpaceAmt;\n const child = node.children()[index];\n\n if (child.parentCut() === 'h') {\n fn = yExtraSpace;\n alteredDim = 'height';\n nonAlteredDim = 'width';\n } else {\n fn = xExtraSpace;\n alteredDim = 'width';\n nonAlteredDim = 'height';\n }\n // if vertical then get extra height from other node and push it to the preferred node.\n // for horizontal cut the same thing is to be done with width\n if (child.isPreferred()) {\n // push extra space in sink. Execute it when all non preferred space are computed.\n preferred = child;\n\n continue; // eslint-disable-line no-continue\n }\n // reduce own height and save it in a var\n cumultiveExtraSpaceAmt += (extraSpaceAmt = fn(child));\n child.boundBox()[alteredDim] -= extraSpaceAmt;\n // update nonaltered dim from parent for any change which happened during negotiation\n child.boundBox()[nonAlteredDim] = child.parent().boundBox()[nonAlteredDim];\n\n negotiateDimension(child);\n }\n\n if (preferred) {\n preferred.boundBox()[alteredDim] += cumultiveExtraSpaceAmt;\n preferred.boundBox()[nonAlteredDim] = preferred.parent().boundBox()[nonAlteredDim];\n negotiateDimension(preferred);\n }\n}\n\nexport function computePosition (node) {\n node.children().forEach((child, i, children) => {\n const boundBox = determineBoundBox(child.boundBox(), i, children, child);\n child.boundBox(boundBox);\n computePosition(child);\n });\n}\n\nexport function allocateBoundingBox (node) {\n const totalWeight = node.children()\n .map(child => child.model().ratioWeight())\n .reduce((carry, val) => carry + val, 0);\n\n node.children().forEach((child, i, children) => {\n const lastSibling = children[i - 1];\n const ratio = child.model().ratioWeight() / totalWeight;\n\n if (child.parentCut() === 'h') {\n child.boundBox({\n top: i ? lastSibling.boundBox().top + lastSibling.boundBox().height : 0,\n left: child.parent().boundBox().left,\n height: child.parent().boundBox().height * ratio,\n width: child.parent().boundBox().width\n });\n } else {\n child.boundBox({\n top: child.parent().boundBox().top,\n left: i ? lastSibling.boundBox().left + lastSibling.boundBox().width : 0,\n height: child.parent().boundBox().height,\n width: child.parent().boundBox().width * ratio\n });\n }\n allocateBoundingBox(child);\n });\n}\n\n","import { getNodeId } from '../helper';\nimport { LayoutComponent } from '../../layout-component';\n\nclass Node {\n constructor (data) {\n this._model = data;\n this._parent = null;\n this._children = [];\n this._parentCut = null;\n this._boundBox = {\n top: null,\n left: null,\n height: null,\n width: null\n };\n\n this._id = this._model.host() instanceof LayoutComponent && this._model.host().renderAt() ?\n this._model.host().renderAt() :\n getNodeId();\n }\n\n addChildren (entries) {\n this._children.push(...entries);\n entries.forEach((e) => { e.parent(this); });\n }\n\n isRoot () {\n return this._parent === null;\n }\n\n isLeaf () {\n return !this._children.length;\n }\n\n getCutType () {\n return this._model.cut();\n }\n\n isPreferred () {\n return !!this._model.preferred();\n }\n\n children (children) {\n if (children) {\n this._children = children;\n }\n return this._children;\n }\n\n parent (parent) {\n if (parent) {\n this._parent = parent;\n }\n return this._parent;\n }\n\n parentCut (parentCut) {\n if (parentCut) {\n this._parentCut = parentCut;\n }\n return this._parentCut;\n }\n\n id (id) {\n if (id) {\n this._id = id;\n }\n return this._id;\n }\n\n model (model) {\n if (model) {\n this._model = model;\n }\n return this._model;\n }\n\n boundBox (bound) {\n if (bound) {\n this._boundBox = {\n top: bound.top,\n left: bound.left,\n height: bound.height,\n width: bound.width\n };\n }\n return this._boundBox;\n }\n /**\n * function to search a node and update it with the config provided.\n * @param {Object} nodeconfig\n */\n updateNode (nodeconfig) {\n if (this._id === nodeconfig._id) {\n this._model.cut(nodeconfig.cut);\n this._model.ratioWeight(nodeconfig.ratioWeight);\n } else {\n this._children.forEach((node) => {\n if (node._id === nodeconfig._id) {\n node.model.cut(nodeconfig.cut);\n node.model.ratioWeight(nodeconfig.ratioWeight);\n return;\n }\n this.searchNode(node, nodeconfig);\n });\n }\n }\n\n // Recursive function to search a node\n searchNode (node, nodeconfig) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeconfig._id) {\n childNode.model().cut(nodeconfig.cut);\n childNode.model().ratioWeight(nodeconfig.ratioWeight);\n } else {\n this.searchNode(childNode, nodeconfig);\n }\n });\n }\n\n /**\n * function to delete a node from tree Structure.\n * @param {String} nodeId - node Id of the Node\n */\n delete (nodeId) {\n this._children.forEach((node) => {\n if (node.id() === nodeId) {\n const index = this._children.indexOf(node);\n this._model.lanes().splice(index, 1);\n }\n this.deleteSearchNode(node, nodeId);\n });\n }\n\n // Recursive function to search a node\n deleteSearchNode (node, nodeId) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeId) {\n const index = node.children().indexOf(childNode);\n node.model().lanes().splice(index, 1);\n } else {\n this.deleteSearchNode(childNode, nodeId);\n }\n });\n }\n}\n\nexport default Node;\n","import Node from '../tree';\nimport {\n allocateBoundingBox,\n negotiateDimension,\n computePosition\n} from '../helper';\n\nexport default class LayoutModel {\n constructor (measurements, config) {\n this._measurements = measurements;\n this._config = config;\n this._root = this.createTree(this._config, null);\n this.setBoundBox();\n }\n\n createTree (config, parent) {\n const node = new Node(config);\n if (parent) {\n node.parentCut(parent.getCutType());\n parent.addChildren([node]);\n } else {\n this._root = node;\n }\n for (const lane of config.lanes()) {\n this.createTree(lane, node);\n }\n\n return this._root;\n }\n\n setBoundBox () {\n this._root.boundBox({\n top: 0,\n left: 0,\n width: this._measurements.width,\n height: this._measurements.height\n });\n allocateBoundingBox(this._root);\n }\n\n setHostPosition (node) {\n node.children().forEach((child) => {\n LayoutModel.setHostSpatialConfig(child);\n this.setHostPosition(child);\n });\n }\n\n static setHostSpatialConfig (node) {\n const bb = node.boundBox();\n const host = node.model().host();\n if (host && host.setSpatialConfig) {\n const conf = {\n x: bb.left,\n y: bb.top,\n width: bb.width,\n height: bb.height,\n renderAt: node.id()\n };\n host.setSpatialConfig(conf);\n }\n }\n\n negotiate () {\n negotiateDimension(this._root);\n computePosition(this._root);\n return this;\n }\n\n broadcast () {\n this.setHostPosition(this._root);\n return this;\n }\n\n tree () {\n return this._root;\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\nexport const ROW_MATRIX_INDEX = {\n 0: 'top',\n 1: 'center',\n 2: 'bottom'\n};\n\nexport const COLUMN_MATRIX_INDEX = {\n 0: 'left',\n 1: 'middle',\n 2: 'right'\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';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const GRID = 'grid';\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n\nexport const PAGINATION = 'pagination';\nexport const BUFFER = 'buffer';\nexport const HOLISTIC = 'holistic';\nexport const SCROLL = 'scroll';\nexport const MIDDLE = 'middle';\nexport const NO_BORDERS = null;\n\nexport const MAX_WIDTH_AVAIL_FOR_COL_MATRIX = 'maxWidthAvailableForColumnMatrix';\nexport const COLUMN_MATRIX = 'columnMatrix';\nexport const MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX = 'maxHeightAvailableForRowMatrix';\nexport const ROW_MATRIX = 'rowMatrix';\n","/* eslint no-undef: \"off\" */\n/* eslint default-case: \"off\" */\nexport class Utils {\n static isDOMElement (element) {\n return element instanceof Element;\n }\n\n static getID (element) {\n return element.id;\n }\n\n static getElement (id) {\n return document.getElementById(id);\n }\n\n static findContainer (data) {\n return data.filter(coordinate => coordinate.parent == null)[0];\n }\n /**\n * static method to remove the div\n * @param {} divId - div ID to be removed.\n */\n static removeDiv (divId) {\n if (document.getElementById(divId) !== null) { document.getElementById(divId).remove(); }\n }\n}\n","import { DEFAULT_CLASS_NAME } from '../constants/defaults';\nimport { LayoutComponent } from '../layout-component';\n\nexport default class DataPoint {\n constructor (node) {\n this._node = node;\n this._className = node.model().host() instanceof LayoutComponent ?\n node.model().host().className() : DEFAULT_CLASS_NAME;\n }\n\n node () {\n return this._node;\n }\n\n hasHost () {\n return this._node.model().host() instanceof LayoutComponent;\n }\n\n className () {\n return this._className || DEFAULT_CLASS_NAME;\n }\n}\n","import { getnodePoints } from './helper';\n\nexport class DataParser {\n constructor (data) {\n this._data = data;\n }\n\n defaultDataPointLogic () {\n const nodepoints = [];\n getnodePoints(this._data, nodepoints);\n return nodepoints;\n }\n\n}\n","import DataPoint from './data-point';\n\nexport const getnodePoints = (node, nodepoints) => {\n const datapoint = new DataPoint(node);\n nodepoints.push(datapoint);\n node.children().forEach((child) => {\n getnodePoints(child, nodepoints);\n });\n};\n","import { DataParser } from './data-parser';\n\nexport class HTMLDataAdapter extends DataParser {\n getCoordinates () {\n return super.defaultDataPointLogic();\n }\n}\n","export class Renderer {\n\n initRenderer (node, tree) {\n node.__logicalTree = tree;\n }\n}\n","import { HTMLDataAdapter } from '../data-adapters/html-data';\nimport { Utils } from '../utils';\nimport { Renderer } from './renderer';\n\nexport class HTMLRenderer extends Renderer {\n constructor (data) {\n super();\n this._data = data;\n this._coordinates = new HTMLDataAdapter(this._data).getCoordinates();\n }\n\n createhtml (mount, className) {\n const mainDiv = mount;\n super.initRenderer(mainDiv, this._data); // Initialise node with layout id\n this.parentDiv = this.createAndCustomiseParent(className);\n this._coordinates.forEach((node) => {\n if (node.hasHost()) {\n const host = node.node();\n this.parentDiv.appendChild(this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: node.className() }));\n }\n });\n mainDiv.appendChild(this.parentDiv);\n }\n\n createAndPositionDiv (config) {\n const { top, left, height, width, className, id } = config;\n const existingDiv = document.getElementById(id);\n const div = existingDiv || document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = `${left}px`;\n div.style.top = `${top}px`;\n div.style.height = `${height}px`;\n div.style.width = `${width}px`;\n div.id = id;\n div.className = className;\n return div;\n }\n\n createAndCustomiseParent (className) {\n const container = Utils.findContainer(this._coordinates);\n const host = container.node();\n const parentDiv = this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: container.className() });\n parentDiv.className = className;\n parentDiv.style.position = 'relative';\n return parentDiv;\n }\n\n coordinates () {\n return this._coordinates;\n }\n}\n","import { selectElement } from 'muze-utils';\nimport { HTMLRenderer } from '../renderers/html-renderer';\nimport { LayoutComponent } from '../layout-component';\n\nexport const getChildNode = (context, config) =>\n context.renderer().createAndPositionDiv(config);\n\nexport const findNode = (context, nodeID) =>\n context.renderer().coordinates().find(point => point.node().id() === nodeID);\n\nexport const renderHTML = (context) => {\n context.renderer(new HTMLRenderer(context.data()));\n context.renderer().createhtml(context.mount(), context.className());\n};\n\nexport const drawLayout = context => renderHTML(context);\n\nexport const drawComponent = (componentData) => {\n componentData.children().forEach((node) => {\n const host = node.model().host();\n if (host instanceof LayoutComponent) {\n host.draw();\n }\n drawComponent(node);\n });\n};\n\nexport const removeElement = (elemID) => {\n if (elemID) {\n selectElement(`#${elemID}`).remove();\n }\n};\n\nconst setAlignConfig = (alignment, params) => {\n let newNodeConfig = {};\n const { node, refNode } = params;\n switch (alignment) {\n case 'left':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(refNode.left - node.left))\n };\n break;\n\n case 'right':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(node.left + node.width - (refNode.left + refNode.width)))\n };\n break;\n\n case 'top':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: Math.abs(node.height - Math.abs(refNode.top - node.top)),\n width: node.width\n };\n break;\n\n case 'bottom':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: Math.abs(node.top - refNode.top + refNode.height),\n width: node.width\n };\n break;\n\n case 'h-center':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: refNode.width\n };\n break;\n\n case 'v-center':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: refNode.top,\n width: node.width\n };\n break;\n default:\n break;\n }\n return newNodeConfig;\n};\n\nexport const resolveAligment = (context, componentData) => {\n componentData.children().forEach((component) => {\n const host = component.model().host();\n\n if (host instanceof LayoutComponent && host.alignWith()) {\n const componentToAlign = context.componentMap().get(host.alignWith());\n\n if (componentToAlign) {\n const point = findNode(context, component.id()).node();\n const node = point.boundBox();\n const refNode = findNode(context, componentToAlign.renderAt())\n .node()\n .boundBox();\n const newNodeConfig = setAlignConfig(host.alignment(), { node, refNode });\n\n // check if model in parent component\n Object.assign(newNodeConfig, { id: point.id(), className: host.className() });\n context.renderer().createAndPositionDiv(newNodeConfig);\n context.componentMap().get(host.name()).setSpatialConfig({\n x: newNodeConfig.left,\n y: newNodeConfig.top,\n height: newNodeConfig.height,\n width: newNodeConfig.width\n\n });\n }\n }\n\n resolveAligment(context, component);\n });\n};\n","import { Utils } from '../utils';\nimport { drawLayout, resolveAligment, drawComponent } from './helper';\n\nexport class DrawingManager {\n constructor (data, renderer, container) {\n this._data = data.tree;\n this._componentMap = data.componentMap;\n this._layoutClassName = data.layoutClassName;\n this._renderer = renderer;\n this._mount = Utils.isDOMElement(container) ? container : Utils.getElement(container);\n }\n\n draw () {\n drawLayout(this);\n resolveAligment(this, this._data);\n drawComponent(this._data);\n return this;\n }\n\n data (data) {\n if (data) {\n this._data = data;\n }\n return this._data;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n className (param) {\n if (param) {\n this._layoutClassName = param;\n }\n return this._layoutClassName;\n }\n\n renderer (param) {\n if (param) {\n this._renderer = param;\n }\n return this._renderer;\n }\n\n mount (param) {\n if (param) {\n this._mount = param;\n }\n return this._mount;\n }\n}\n","import DefinitionModel from './definitionModel';\nimport { prepareTargetComponentMap, getComponent, placeComponent, placeGridComponent } from '../helper';\n\nexport default class DefinitionManager {\n constructor (componentMap, sequence, totalHeight, totalWidth) {\n this._componentMap = componentMap;\n this._prioritySequence = sequence;\n this._totalHeight = totalHeight;\n this._totalWidth = totalWidth;\n this._targetComponentMap = null;\n }\n\n // create the config model\n generateConfigModel () {\n prepareTargetComponentMap(this);\n const canvasComponent = this._targetComponentMap.get('canvas');\n const definitionModel = new DefinitionModel({});\n let tempDefModel = definitionModel;\n definitionModel.remainingHeight(this._totalHeight);\n definitionModel.remainingWidth(this._totalWidth);\n\n let componentRef = null;\n\n this._prioritySequence.forEach((name) => {\n componentRef = getComponent(canvasComponent, name);\n if (name !== 'grid') {\n tempDefModel = placeComponent(tempDefModel, componentRef).second;\n } else {\n tempDefModel = placeGridComponent(tempDefModel, componentRef.component);\n }\n });\n return definitionModel;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n targetComponentMap (param) {\n if (param) {\n this._targetComponentMap = param;\n }\n return this._targetComponentMap;\n }\n}\n","import { sanitizeConfig } from './helper';\n\nexport class LayoutDef {\n constructor () {\n this._componentMap = new Map();\n this._layoutDefinition = null;\n }\n\n addComponent (component) {\n this._componentMap.set(component.name(), component);\n }\n\n layoutDefinition (def) {\n if (def) {\n this._layoutDefinition = def;\n }\n return this._layoutDefinition;\n }\n\n addMultipleComponent (componentArray) {\n componentArray.forEach((comp) => {\n this.addComponent(comp);\n });\n }\n\n sanitizedDefinition () {\n sanitizeConfig(this, this._layoutDefinition);\n return this.layoutDefinition();\n }\n\n componentMap () {\n return this._componentMap;\n }\n resetComponentMap () {\n this._componentMap.clear();\n }\n}\n","import DefinitionManager from '../layout-definition/definition-manager';\n\nexport function sanitizeConfig (context, hostObj) {\n const hostID = hostObj.host();\n if (hostObj.lanes() && hostObj.lanes().length) {\n hostObj.lanes().forEach(childHost => sanitizeConfig(context, childHost));\n }\n if (hostID != null && typeof (hostID) === 'string') {\n if (context.componentMap().get(hostID) !== undefined) {\n hostObj.host(context.componentMap().get(hostID));\n }\n }\n}\n\nexport function calLayOutDef (context) {\n const { height, width } = context.dimension();\n const defManager = new DefinitionManager(context.layoutDef().componentMap(),\n context.prioritySequence(),\n height,\n width);\n const genLayoutdef = defManager.generateConfigModel();\n return genLayoutdef;\n}\n","import {\n LayoutModel\n} from '../layout-definition';\n\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT\n} from '../constants/defaults';\n\nimport {\n GRID\n} from '../../enums/constants';\n\nimport { DrawingManager } from '../drawing-manager';\nimport { removeElement } from '../drawing-manager/helper';\nimport { Utils } from '../utils';\nimport { LayoutDef } from './layout-def';\nimport { calLayOutDef } from './helper';\n\nexport default class LayoutManager {\n constructor (conf) {\n this._renderAt = conf.renderAt;\n this._layoutClassName = conf.className;\n this._dimension = {\n width: conf.width || DEFAULT_WIDTH,\n height: conf.height || DEFAULT_HEIGHT\n };\n\n this._skeletonType = conf.skeletonType || 'html';\n this._layoutDefinition = null;\n this._layoutDef = new LayoutDef();\n this._drawingManager = null;\n this._prioritySequence = [];\n this.tree = null;\n this._rootNodeID = null;\n }\n\n layoutDef (param) {\n if (param) {\n this._layoutDef = param;\n }\n return this._layoutDef;\n }\n\n prioritySequence (param) {\n if (param) {\n this._prioritySequence = param;\n }\n return this._prioritySequence;\n }\n\n dimension (param) {\n if (param) {\n Object.assign(this._dimension, param);\n }\n return this._dimension;\n }\n\n addComponent (component) {\n this._layoutDef.addComponent(component);\n }\n\n addMultipleComponent (componentArray) {\n this._layoutDef.addMultipleComponent(componentArray);\n }\n\n resetNode (node) {\n if (this.con) {\n this.con.resetNode(node);\n }\n }\n\n /**\n * function to update the node and rerender the layout.\n * @param {} config - node configuration to change.\n */\n updateNode (config) {\n this.tree.updateNode(config);\n this._layoutDefinition = this.tree.model;\n this.compute();\n }\n\n compute () {\n //----\n if (Utils.isDOMElement(this._renderAt)) {\n this._renderAt._layout = this;\n } else {\n document.getElementById(this._renderAt)._layout = this;\n }\n //-----\n this._layoutDefinition = calLayOutDef(this);\n this._layoutDef.layoutDefinition(this._layoutDefinition);\n this._layoutDefinition = this._layoutDef.sanitizedDefinition();\n this._layout = new LayoutModel({\n width: this._dimension.width,\n height: this._dimension.height\n },\n this._layoutDefinition);\n this.tree = this._layout.negotiate().tree();\n this._layout.broadcast();\n this._drawingManager = new DrawingManager({\n tree: this.tree,\n componentMap: this._layoutDef.componentMap(),\n layoutClassName: this._layoutClassName\n }, this._skeletonType, this._renderAt);\n\n if (this._rootNodeID) {\n this.tree.id(this._rootNodeID);\n } else {\n this._rootNodeID = this.tree.id();\n }\n // this will draw all the components by calling their draw method\n this._drawingManager.draw();\n }\n\n getRootNodeId () {\n return this._rootNodeID;\n }\n\n /**\n * This function takes the LayoutComponents and Register them in component store\n * @param {Array} layoutComponents\n */\n registerComponents (layoutComponents) {\n this._prioritySequence.length = 0;\n this._layoutDef.resetComponentMap();\n layoutComponents.forEach((container) => {\n if (container) {\n this._prioritySequence.push(container.name());\n this.addComponent(container);\n if (container.name() === 'grid') {\n container.component.forEach((componentArr) => {\n componentArr.forEach((compo) => {\n this.addComponent(compo);\n });\n });\n }\n }\n });\n return this;\n }\n\n getComponent (componentName) {\n return this._layoutDef.componentMap().get(componentName);\n }\n\n deleteElement (component, elementName) {\n this._layoutDef.componentMap().delete(elementName);\n const deleteElementId = component.renderAt();\n return removeElement(deleteElementId);\n }\n\n removeComponent (name) {\n const component = this.getComponent(name);\n if (component) {\n if (name === GRID) {\n return component.component.map(comp => comp.map(\n co => this.deleteElement(co, co.name())\n ));\n }\n return this.deleteElement(component, name);\n }\n return this;\n }\n\n renderAt (mount) {\n if (mount) {\n this._renderAt = mount;\n }\n return this._renderAt;\n }\n}\n","import { isEqual, STATE_NAMESPACES, selectElement, getValueParser } from 'muze-utils';\nimport { VisualGroup } from '@chartshq/visual-group';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, DATA, CONFIG, GRID }\n from '../constants';\nimport { canvasOptions } from './local-options';\nimport { LayoutManager } from '../../../layout/src/tree-layout';\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.} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, Object.assign({\n throwback: context._throwback\n }, context.dependencies()))];\n};\n\nexport const fixScrollBarConfig = (config) => {\n config.scrollBar.thickness = Math.min(50, Math.max(10, config.scrollBar.thickness));\n return config;\n};\n\nexport const setLayoutInfForUnits = (context) => {\n const layoutManager = context._layoutManager;\n const gridLayout = layoutManager.getComponent(GRID);\n const boundBox = gridLayout && gridLayout.getBoundBox();\n const valueMatrix = context.composition().visualGroup.matrixInstance().value;\n const parentContainer = selectElement(`#${layoutManager.getRootNodeId()}`).node();\n valueMatrix.each((cell) => {\n cell.valueOf().parentContainerInf({\n el: parentContainer,\n dimensions: boundBox\n });\n });\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 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 const { invalidValues } = context.config();\n\n visualGroup.valueParser(getValueParser(invalidValues));\n visualGroup.createMatrices();\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\nconst equalityChecker = (props, params) => {\n let checker = () => false;\n return !props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n checker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n checker = isEqual('Object');\n break;\n default:\n checker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return checker(oldVal, newVal);\n });\n};\n\nconst updateChecker = (props, params) => props.every((option, i) => {\n const val = params[i][1];\n switch (option) {\n case ROWS:\n case COLUMNS:\n return val !== null;\n\n case DATA:\n return val && !val.isEmpty();\n\n default:\n return true;\n\n }\n});\n\nexport const notifyAnimationEnd = (context) => {\n const viewInfo = context.layout().viewInfo();\n const centerMatrix = viewInfo && viewInfo.viewMatricesInfo.matrices.center[1] || [];\n const promises = [];\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n promises.push(cell.valueOf().done());\n });\n });\n const lifeCycleManager = context.lifeCycle();\n if (promises.length) {\n Promise.all(promises).then(() => {\n // Update life cycle\n lifeCycleManager.notify({ client: context, action: 'drawn' });\n const animDonePromises = [];\n\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n cell.valueOf().layers().forEach((layer) => {\n animDonePromises.push(layer.animationDone());\n });\n });\n });\n\n [context.xAxes(), context.yAxes()].forEach((axisArr) => {\n axisArr = axisArr || [];\n axisArr.forEach((axes) => {\n axes.forEach((axisInst) => {\n animDonePromises.push(axisInst.animationDone());\n });\n });\n });\n\n Promise.all(animDonePromises).then(() => {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n });\n });\n } else {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n }\n};\n\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n const nameSpaceProps = [...allOptions, ...Object.keys(canvasOptions)].map(prop =>\n `${STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE}.${prop}`);\n store.registerChangeListener(nameSpaceProps, (...params) => {\n const equalityProps = equalityChecker(props, params);\n const updateProps = updateChecker(props, params);\n // inform attached board to rerender\n if (equalityProps && context.mount()) {\n if (updateProps) {\n dispatchProps(context);\n } else {\n context.composition().visualGroup.remove();\n }\n context.render();\n }\n notifyAnimationEnd(context);\n }, true);\n};\n\nexport const applyInteractionPolicy = (firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n if (visualGroup) {\n const valueMatrix = visualGroup.matrixInstance().value;\n const interactionPolicy = firebolt._interactionPolicy;\n interactionPolicy(valueMatrix, firebolt);\n const crossInteractionPolicy = firebolt._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\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/**\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 */\nexport const 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 const rotationVal = xAxes[i][j].renderConfig().labels.rotation;\n if (rotationVal && rotationVal !== 0) {\n rotation = rotationVal;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.renderConfig({ labels: { rotation } });\n axis.smartTicks(axis.setTickConfig());\n });\n });\n }\n};\n\nexport const createGroupState = (context) => {\n const [globalState, localState] = VisualGroup.getState();\n const store = context._store;\n store.append('app.group', globalState);\n store.append('local.group', localState);\n};\n\nexport const removeChild = (mount) => {\n while (mount.firstChild) {\n mount.removeChild(mount.firstChild);\n }\n};\n\nexport const createLayoutManager = () => {\n const layoutManager = new LayoutManager({\n className: 'muze-group-container'\n });\n return layoutManager;\n};\n","/**\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 * @module GlobalOptions\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { fixScrollBarConfig } from './canvas/helper';\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, null],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n takesMultipleParams: true,\n sanitization: ([config, auxConfig = {}], oldConfig) => {\n // Stores additional config, if passed\n const { reset = false } = auxConfig;\n let oldConf = {};\n\n if (!reset) {\n oldConf = mergeRecursive({}, config === null ? {} : oldConfig);\n }\n\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return fixScrollBarConfig(newConf);\n }\n\n }\n }\n};\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 *\n * @memberof GenericLayout\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 this._config.border.width = Math.max(0, this._config.border.width);\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.PAGINATION]: 'scroll',\n [FieldNames.BUFFER]: 20,\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","/**\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 *\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 *\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.setAvailableSpace();\n const space = placeholder.getLogicalSpace();\n const minSecondMeasure = placeholder.getMinMeasures(minMeasures[secondMeasure]);\n\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minSecondMeasure);\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\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\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\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, ERROR_MSG } from 'muze-utils';\nimport {\n createTree,\n combineMatrices,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { 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._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\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 computeLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n computeViewableSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getPriorityDistribution () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 redistributeSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n static defaultConfig () {\n return defaultConfig;\n }\n\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\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.redistributeSpaces(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 * 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 getViewableMatrices () {\n return this.viewableMatrix;\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","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n computeLogicalSpace,\n createMatrixEachLevel\n } from '../utils';\nimport { ROW_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class RowVisualMatrix extends 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 super(matrix, config);\n\n this._breakPointer = (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: ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\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 computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, false);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height\n } = measures;\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = [height, height];\n const columnMeasures = widths;\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\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 tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n let remainingAvailWidth;\n let remainingWidth;\n let cWidths = [];\n let conditions = [];\n let maxPrioritySpace = 0;\n const {\n matrix,\n width: availableWidth,\n maxMeasures: maxWidths,\n maxWidth: currentWidth,\n height\n } = measures;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length ? this.primaryMatrix()[0].length : 0;\n\n const dist = [];\n\n remainingAvailWidth = availableWidth;\n remainingWidth = currentWidth;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n // divider = Math.min(2, matrixLen);\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n // divider = Math.min(1, matrixLen);\n }\n conditions.forEach((i) => {\n dist[i] = maxWidths[i];\n maxPrioritySpace += maxWidths[i];\n remainingAvailWidth -= dist[i];\n remainingWidth -= dist[i];\n });\n matrix[0].forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n dist[i] = remainingAvailWidth * (maxWidths[i] / remainingWidth);\n }\n });\n matrix.forEach(row => row.forEach((col, cIdx) => {\n if (conditions.indexOf(cIdx) === -1) {\n col.setAvailableSpace(dist[cIdx], height);\n\n cWidths[cIdx] = Math.max(cWidths[cIdx] || 0, Math.floor(col.getLogicalSpace().width));\n } else {\n cWidths[cIdx] = 0;\n }\n }));\n\n const prioritySpace = availableWidth - cWidths.reduce((t, n) => t + n);\n if (prioritySpace < 0) {\n cWidths = cWidths.map(() => 0);\n } else {\n conditions.forEach((i) => {\n cWidths[i] = Math.floor(prioritySpace * (dist[i] / maxPrioritySpace || 1));\n });\n }\n return cWidths;\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 const { height } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n\n return Math.min(widthMeasures.length - 1, i);\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 redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const maxMeasures = this.maxMeasures();\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n const logicalWidths = this.getPriorityDistribution({\n matrix: this._layoutMatrix,\n maxWidth,\n maxMeasures,\n width,\n height\n });\n\n this.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, logicalWidths };\n const measures = this.redistributeViewSpaces(options);\n maxWidths = measures.maxWidths;\n maxHeights = measures.maxHeights;\n });\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, height, maxHeights, maxWidths, logicalWidths } = measures;\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n measures.maxMeasures = maxMeasures;\n measures.maxWidth = maxWidth;\n if (maxWidth > 0) {\n cWidths = logicalWidths;\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 if (maxWidths.length > 0) {\n cWidths = cWidths.map((e, i) => Math.max(e, maxWidths[0][i] || 0));\n }\n maxWidths.push(cWidths);\n for (let x = 0; x < maxWidths.length; x++) {\n maxWidths[x] = cWidths;\n }\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = measures;\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 cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n\n if (rIdx === 0 && cIdx < breakPointer) {\n columnWidths[0][cIdx] = colWidth;\n widths[0] = (widths[0] || 0) + colWidth;\n } else if (rIdx === 0 && cIdx >= breakPointer) {\n columnWidths[1][cIdx - breakPointer] = colWidth;\n widths[1] = (widths[1] || 0) + colWidth;\n }\n if (cIdx === this._lastLevelKey) {\n rowHeights[0][rIdx] = colHeight;\n rowHeights[1][rIdx] = colHeight;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n getDistributedWidth,\n spaceTakenByRow,\n createMatrixEachLevel,\n computeLogicalSpace\n } from '../utils';\nimport { COLUMN_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class ColumnVisualMatrix extends 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 super(matrix, config);\n\n this._breakPointer = matrix[0].length;\n\n // Create Tree\n this._tree = {\n key: COLUMN_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\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 computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, true);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height,\n width\n } = measures;\n\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i, height };\n const {\n heights,\n rowHeights,\n columnWidths\n } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = heights;\n const 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\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\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n const {\n height,\n maxHeights\n } = measures;\n let remainingHeight = height;\n let heightDist = [];\n let conditions = [];\n let divider = 2;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n divider = 2;\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n divider = 1;\n }\n maxHeights.forEach((heights, index) => {\n if (conditions.indexOf(index) === -1) {\n heightDist[index] = heights;\n remainingHeight -= heights;\n }\n });\n if (remainingHeight < 0) {\n heightDist = heightDist.map(() => 0);\n } else {\n conditions.forEach((condition) => {\n heightDist[condition] = Math.min(maxHeights[condition], (remainingHeight) / divider);\n });\n }\n return heightDist;\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) {\n let j;\n const { width } = this.availableSpace();\n\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, 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 redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n\n this.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 = this.redistributeViewSpaces(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let rHeights = [];\n const {\n matrix,\n width,\n maxHeights,\n maxWidths\n } = measures;\n const borderWidth = this.config().unitMeasures.border;\n\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();\n\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace.height);\n\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, Math.floor(col.getLogicalSpace().height));\n }));\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n maxHeights.push(rHeights);\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} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, height, maxWidths, maxHeights, matrixIndex } = measures;\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 const heightDistribution = this.getPriorityDistribution({ height, maxHeights: maxHeights[0] || [] });\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = heightDistribution[rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n\n if (cIdx === 0 && rIdx < breakPointer) {\n rowHeights[0][rIdx] = colHeight;\n heights[0] = (heights[0] || 0) + colHeight;\n } else if (cIdx === 0 && rIdx >= breakPointer) {\n rowHeights[1][rIdx - breakPointer] = colHeight;\n heights[1] = (heights[1] || 0) + colHeight;\n }\n if (rIdx === this._lastLevelKey) {\n columnWidths[0][cIdx] = colWidth;\n columnWidths[1][cIdx] = colWidth;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import {\n HEIGHT, WIDTH, COLUMN, ROW, HORIZONTAL, VERTICAL, HOLISTIC,\n MAX_WIDTH_AVAIL_FOR_COL_MATRIX, COLUMN_MATRIX, MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX, ROW_MATRIX, SCROLL\n} 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\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\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\nconst paginationDetailsMap = {\n column: {\n maxMeasure: MAX_WIDTH_AVAIL_FOR_COL_MATRIX,\n matrix: COLUMN_MATRIX,\n measureType: WIDTH,\n scrollType: HORIZONTAL\n },\n row: {\n maxMeasure: MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX,\n matrix: ROW_MATRIX,\n measureType: HEIGHT,\n scrollType: VERTICAL\n }\n};\n\n/**\n * This method provides the required width/height in the different pagination stages.\n * If the pagination is holistic, then only the max width/height will be provided for layouting\n * If scroll is enabled, then the entire width/height shall be provided for layouting\n * Note: width is required for scrolling the columns while height is required for scrolling rows\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {Object} measureDetails different measure details for row/column\n * @param {number} maxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst getMatrixMeasureForPagination = (layout, measureDetails, maxMeasure, buffer) => {\n const {\n pagination\n } = layout.config();\n const {\n matrix,\n measureType,\n scrollType\n } = measureDetails;\n\n switch (pagination) {\n case HOLISTIC:\n return maxMeasure;\n default: {\n const actualMeasure = getMatrixMeasurement(layout[matrix](), measureType) + buffer;\n\n if (actualMeasure > maxMeasure) {\n layout.scrollInfo({ [scrollType]: true });\n }\n return Math.max(maxMeasure, actualMeasure);\n }\n }\n};\n\n/**\n * This method uses the getMatrixMeasureForPagination function to calculate maximum measure\n * depending on the layouting algorithm used\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {string} matrixType row/column\n * @param {number} relatedMaxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst paginationMeasureGetter = (layout, matrixType, relatedMaxMeasure, buffer) =>\n getMatrixMeasureForPagination(layout, paginationDetailsMap[matrixType], relatedMaxMeasure, buffer);\n\nconst getMatrixWidthDetails = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const {\n width\n } = layout.measurement();\n const {\n border,\n buffer\n } = layout.config();\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Get maximum width allowed for the row matrix\n const maxRowMatrixWidth = Math.min(rowMatrixWidth + buffer, width / 2);\n\n // Get maximum width available for the column matrix\n const maxWidthAvailableForColumnMatrix = width - maxRowMatrixWidth - borderWidth;\n\n // Set width for column matrix\n const columnMatrixWidth = paginationMeasureGetter(layout, COLUMN, maxWidthAvailableForColumnMatrix, 0);\n\n return {\n rowMatrixWidth,\n maxRowMatrixWidth,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n\nconst getHeightRequiredByColMatrix = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const columnMatrix = layout.columnMatrix();\n\n // Get maximum allowed height for colum matrix\n const maxColumnMatrixHeight = Math.min(columnMatrix.getLogicalSpace().height, height / 2);\n\n // Set the computed width and max height to column matrix to determine the actual height\n // that will be taken by the column matrix\n columnMatrix.setAvailableSpace(columnMatrixWidth, maxColumnMatrixHeight);\n\n // Get the set of pages column view\n const columnViewPages = columnMatrix.getViewableSpaces();\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 return {\n columnMatrixHeight,\n maxColumnMatrixHeight\n };\n};\n\nconst getMatrixHeightDetails = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const {\n buffer\n } = layout.config();\n\n // Get actual height required by column matrix\n const { columnMatrixHeight, maxColumnMatrixHeight } = getHeightRequiredByColMatrix(layout, columnMatrixWidth);\n\n // Based on column height, compute max height available for row matrix\n const maxHeightAvailableForRowMatrix = height - Math.min(maxColumnMatrixHeight, columnMatrixHeight);\n\n // Get height for row matrix\n const rowMatrixHeight = paginationMeasureGetter(layout, ROW, maxHeightAvailableForRowMatrix, buffer);\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n };\n};\n\nconst setValueMatrixMeasurements = (layout, rowViewableSpaces, columnViewableSpaces) => {\n const centerMatrix = layout.centerMatrix();\n\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get the heights for each cell in the row matrix\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n\n // Get the widths for each of the row matrix cells(primary and secondary)\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n\n // Get the widths for each cell in the column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n\n // Get the widths for each of the column matrix cells(primary and secondary)\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix computed throught the row and\n // column matrices\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n\n // Set the heights and widths for the corner matrices namely:\n // TOP_LEFT\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n // TOP_RIGHT\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n // BOTTOM_LEFT\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n // BOTTOM_RIGHT\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n};\n\nconst bufferCondition = {\n isScroll: true,\n pagination: SCROLL\n};\n\nconst getBufferFromCondition = (layout, type) => {\n const scrollInfo = layout.scrollInfo();\n const {\n pagination\n } = layout.config();\n\n const currentBufferType = {\n pagination,\n isScroll: scrollInfo[type]\n };\n\n return Object.keys(bufferCondition).every(e => bufferCondition[e] === currentBufferType[e]);\n};\n\nconst getActualBufferFromConfig = (layout) => {\n const {\n buffer\n } = layout.config();\n const [horizontalBuffer, verticalBuffer] = [HORIZONTAL, VERTICAL].map((type) => {\n if (getBufferFromCondition(layout, type)) {\n return buffer;\n }\n return 0;\n });\n\n return {\n horizontalBuffer,\n verticalBuffer\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\n // Compute the widths of the row and column matrices\n const {\n rowMatrixWidth,\n maxRowMatrixWidth,\n maxWidthAvailableForColumnMatrix,\n columnMatrixWidth\n } = getMatrixWidthDetails(layout);\n\n // Compute the heights of the row and column matrices\n const {\n columnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n } = getMatrixHeightDetails(layout, columnMatrixWidth);\n\n const {\n horizontalBuffer,\n verticalBuffer\n } = getActualBufferFromConfig(layout);\n rowMatrix.setAvailableSpace(maxRowMatrixWidth - verticalBuffer, rowMatrixHeight - horizontalBuffer);\n\n // Get row and columns viewable spaces\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n\n // Set view spaces for row and columns\n setViewSpaces(layout, ROW, rowViewableSpaces);\n setViewSpaces(layout, COLUMN, columnViewableSpaces);\n\n // Set measures for each cell of the value matrix\n setValueMatrixMeasurements(layout, rowViewableSpaces, columnViewableSpaces);\n\n return {\n rowMatrixHeight: rowMatrixHeight - horizontalBuffer,\n rowMatrixWidth: rowMatrixWidth - verticalBuffer,\n maxHeightAvailableForRowMatrix: maxHeightAvailableForRowMatrix - horizontalBuffer,\n\n columnMatrixHeight,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\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.getViewableMatrices();\n const columnMatrices = columnMatrix.getViewableMatrices();\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\nconst measureSum = measureArr => measureArr.reduce((total, measure) => total + measure, 0);\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, maxRowHeight, maxColWidth) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowSpaces = rowMatrix.getViewableSpaces()[rowPointer];\n const colSpaces = columnMatrix.getViewableSpaces()[columnPointer];\n\n const {\n rowHeights,\n width: rowMatrixWidth\n } = rowSpaces;\n const {\n columnWidths,\n height: columnMatrixHeight\n } = colSpaces;\n\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = measureSum(rowHeights.primary);\n const centerWidth = measureSum(columnWidths.primary);\n const viewWidth = [leftWidth, Math.min(centerWidth, maxColWidth), rightWidth];\n const viewHeight = [topHeight, Math.min(centerHeight, maxRowHeight), bottomHeight];\n\n return {\n viewWidth,\n viewHeight,\n actualCenterMeasures: {\n height: centerHeight,\n width: centerWidth\n },\n totalMeasures: {\n width: measureSum(viewWidth),\n height: measureSum(viewHeight)\n },\n unitHeights: rowHeights,\n unitWidths: columnWidths\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, mergeRecursive } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements } from './computations';\nimport { getViewMeasurements, getViewMatrices } from './view-info-getter';\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 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 this._scrollInfo = { horizontal: false, vertical: false };\n }\n\n static defaultViewInfo () {\n return Object.assign({}, {\n layoutDimensions: {\n border: this.defaultConfig().border,\n viewHeight: [0, 0, 0],\n viewWidth: [0, 0, 0]\n },\n viewMatricesInfo: {\n columnPages: 0,\n rowPages: 0,\n matrices: { top: [], center: [], bottom: [] }\n }\n });\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 this.scrollInfo({ horizontal: false, vertical: false });\n const {\n maxHeightAvailableForRowMatrix,\n maxWidthAvailableForColumnMatrix\n } = computeLayoutMeasurements(this);\n\n this.setViewInformation(maxHeightAvailableForRowMatrix, maxWidthAvailableForColumnMatrix);\n return this;\n }\n\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.viewInfo();\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 pages (type) {\n const { viewMatricesInfo } = this.viewInfo();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n viewInfo (...viewInfo) {\n if (viewInfo.length) {\n this._viewInfo = viewInfo[0];\n return this;\n }\n return this._viewInfo;\n }\n\n scrollInfo (...scrollInfo) {\n if (scrollInfo.length) {\n this._scrollInfo = mergeRecursive(this._scrollInfo, scrollInfo[0]);\n return this;\n }\n return this._scrollInfo;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation (maxRowHeight, maxColWidth) {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this, maxRowHeight, maxColWidth);\n layoutDimensions.border = border;\n this.viewInfo({\n viewMatricesInfo,\n layoutDimensions\n });\n return this;\n }\n}\n","import RowMatrix from '../visual-matrix/row-matrix';\nimport ColumnMatrix from '../visual-matrix/column-matrix';\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 priority\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\n context.rowMatrix(new RowMatrix([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 priority: priority.row,\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 ColumnMatrix([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 priority: priority.col,\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import {\n TOP, BOTTOM, LEFT, RIGHT, CENTER, BLANK_BORDERS, COLUMN, ROW,\n VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS\n} from '../enums/constants';\n\nconst borderMap = {\n [`${TOP}-${LEFT}`]: NO_BORDERS,\n [`${TOP}-${MIDDLE}`]: COLUMN,\n [`${TOP}-${RIGHT}`]: NO_BORDERS,\n [`${CENTER}-${LEFT}`]: ROW,\n [`${CENTER}-${MIDDLE}`]: CENTER,\n [`${CENTER}-${RIGHT}`]: ROW,\n [`${BOTTOM}-${LEFT}`]: NO_BORDERS,\n [`${BOTTOM}-${MIDDLE}`]: COLUMN,\n [`${BOTTOM}-${RIGHT}`]: NO_BORDERS\n};\n\nconst applySpecificBorder = (cells, color, type, style) => {\n cells.style(`border-${type}`, `${style} ${color}`);\n};\n\nconst specificBorderApplier = (borderTypes, showBorders, cells, borderInfo) => {\n const {\n color,\n width,\n style\n } = borderInfo;\n const borderStyle = `${width}px ${style}`;\n\n borderTypes.forEach((borderType) => {\n applySpecificBorder(cells, showBorders[borderType] ? color : BLANK_BORDERS, borderType, borderStyle);\n });\n};\n\nconst borderApplier = (cells, borderInfo) => {\n const {\n showRowBorders,\n showColBorders,\n showValueBorders\n } = borderInfo;\n return {\n row: () => specificBorderApplier([TOP, BOTTOM], showRowBorders, cells, borderInfo),\n column: () => specificBorderApplier([LEFT, RIGHT], showColBorders, cells, borderInfo),\n center: () => specificBorderApplier([LEFT, RIGHT, TOP, BOTTOM], showValueBorders, cells, borderInfo)\n };\n};\n\nexport const applyBorders = (cells, border, row, column) => {\n const borderApplierFn = borderApplier(cells, border);\n const borderMapVal = borderMap[`${ROW_MATRIX_INDEX[VIEW_INDEX[row]]}-${COLUMN_MATRIX_INDEX[column]}`];\n if (borderMapVal) {\n borderApplierFn[borderMapVal]();\n }\n};\n","import { selectElement } from 'muze-utils';\nimport {\n TOP, BOTTOM, ROW_SPAN, COL_SPAN, CENTER, ROW, COLUMN\n} from '../enums/constants';\n\nconst orderMaker = arr => Array.from(Array(arr.length).keys());\n\nconst nestByStack = (stack, updateArr, optionalParams = {}) => {\n let {\n order,\n keyFn\n } = optionalParams;\n const arr = updateArr.slice();\n const currStack = stack.slice();\n const prevStack = currStack.slice();\n // Order in which element are to be checked for nesting, default normal looping\n // Order is always in the order of nest, i.e., left to right\n order = order || Array.from(Array(arr.length).keys());\n\n // Key function, if array of objects\n keyFn = keyFn || (v => v);\n\n // Return same array if stack is empty\n if (currStack.length === 0) {\n const newArr = [];\n order.forEach((e) => {\n newArr.push(arr[e]);\n });\n return { prevStack, currStack: arr, arr: newArr };\n }\n\n let arrVal = '';\n let stackVal = '';\n const newArr = [];\n\n // Loop in order\n for (let i = order.length - 1; i >= 0; i--) {\n // Get current element index from the order given\n const currElemIndex = order[i];\n\n // Crete a hashmap for the hierarchy by joining strings of the array for both stack and input array\n arrVal += keyFn(arr[currElemIndex]);\n stackVal += keyFn(currStack[currElemIndex]);\n\n // If the current value and value in stack is same, convert it to null\n if (arrVal === stackVal) {\n newArr[currElemIndex] = null;\n } else {\n stackVal = '';\n // Loop from the current index in order to the last element in order to change the\n // whole hierarchy\n for (let j = i; j < order.length; j++) {\n const newElem = order[j];\n const arrElem = arr[newElem];\n\n newArr[newElem] = arrElem;\n\n // Reset stack to new stack\n currStack[newElem] = arrElem;\n stackVal = arrVal;\n }\n }\n }\n const returnArr = [];\n order.forEach((e) => {\n returnArr.push(newArr[e]);\n });\n return { prevStack, currStack, arr: returnArr };\n};\n\nconst spanCalculator = (colData, colIdx, matrix, rIdx) => {\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData) {\n return () => null;\n }\n\n const conditions = {\n row: count => matrix[rIdx + count] && matrix[rIdx + count][colIdx],\n column: count => matrix[rIdx][colIdx + count]\n };\n\n return (type) => {\n let count = 1;\n let isNull = false;\n\n while (!isNull) {\n if (conditions[type](count) === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n };\n};\n\nconst maskCreator = (matrix, order) => ({\n row: () => {\n let stack = [];\n return matrix.map((e) => {\n const {\n currStack,\n arr\n } = nestByStack(stack, e, { keyFn: val => val.valueOf(), order });\n\n stack = currStack;\n return arr;\n });\n },\n column: () => {\n let stack = [];\n const viewMatrix = [];\n matrix.length && matrix[0].forEach((cell, colIndex) => {\n const hierarchy = [];\n matrix.forEach((row) => {\n hierarchy.push(row[colIndex]);\n });\n const {\n currStack,\n arr\n } = nestByStack(stack, hierarchy, { keyFn: val => val.valueOf(), order });\n stack = currStack;\n\n matrix.forEach((row, rowIndex) => {\n viewMatrix[rowIndex] = viewMatrix[rowIndex] || [];\n viewMatrix[rowIndex][colIndex] = arr[rowIndex];\n });\n });\n return viewMatrix;\n }\n});\n\nconst spanGenerator = viewMatrix => ({\n row: () => {\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 = spanCalculator(col, i, viewMatrix, ridx)('row');\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return spans;\n },\n column: () => viewMatrix.map((row, ridx) => row.map((col, i) => spanCalculator(col, i, viewMatrix, ridx)('column'))\n .filter(col => col !== null))\n});\n\nconst getOrder = () => ({\n row: matrix => orderMaker(matrix[0]),\n column: matrix => orderMaker(matrix)\n});\n\nconst matrixSpanGeneratorMap = {\n [`${TOP}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${BOTTOM}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${CENTER}-0`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n },\n [`${CENTER}-2`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n }\n};\n\nconst matrixSpanGenerator = (type) => {\n const generator = matrixSpanGeneratorMap[type];\n if (generator) {\n return generator;\n }\n return {\n orderGetter: () => null,\n viewMatrixMaker: matrix => () => matrix,\n spanMaker: () => () => null\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 spans = null;\n let viewMatrix = matrix;\n const {\n orderGetter,\n viewMatrixMaker,\n spanMaker\n } = matrixSpanGenerator(`${type}-${index}`);\n\n if (matrix.length) {\n const order = orderGetter(matrix);\n viewMatrix = viewMatrixMaker(matrix, order)();\n spans = spanMaker(viewMatrix)();\n }\n return { viewMatrix, spans };\n}\n\nconst spaceAllocationDueToSpan = (span = 1, placeholder, config, index) => {\n const height = placeholder.availHeight();\n const width = placeholder.availWidth();\n const borderWidth = config.border.width;\n const { unitWidths } = config.dimensions;\n const { col } = index;\n\n return {\n [ROW_SPAN] () {\n placeholder.setAvailableSpace(width, height * span);\n if (span === 1) {\n selectElement(this).style('height', `${height * span + borderWidth}px`);\n }\n },\n [COL_SPAN] () {\n const primaryUnitWidth = unitWidths.primary[col];\n if (span > 1) {\n let cumulativeWidth = 0;\n for (let i = col; i < col + span; i++) {\n cumulativeWidth += unitWidths.primary[i] - borderWidth;\n }\n placeholder.setAvailableSpace(cumulativeWidth + borderWidth, height);\n } else if (primaryUnitWidth) {\n placeholder.setAvailableSpace(primaryUnitWidth - borderWidth, height);\n }\n selectElement(this).style('height', `${height}px`);\n }\n };\n};\n\nconst spanApplier = (cells, spans, config, type) => {\n let cellCounter = 0;\n cells.attr(type, function (cell, colIndex) {\n if (colIndex === 0) {\n cellCounter = 0;\n }\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n const index = {\n row: cell.rowIndex,\n col: cellCounter\n };\n\n spaceAllocationDueToSpan(span, placeholder, config, index)[type].bind(this)();\n cellCounter += span;\n return span;\n });\n};\n\nconst spanApplierMap = {\n [`${TOP}-0`]: null,\n [`${TOP}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${TOP}-2`]: null,\n [`${CENTER}-0`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${CENTER}-1`]: null,\n [`${CENTER}-2`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${BOTTOM}-0`]: null,\n [`${BOTTOM}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${BOTTOM}-2`]: null\n};\n\nexport const applySpans = (cells, spans, config, type) => {\n const applier = spanApplierMap[type];\n if (applier) {\n applier(cells, spans, config);\n }\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 *\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';\nexport const MAX_LINES = 'maxLines';\nexport const MIN_CHARS = 'minCharacters';\nexport const ROTATION = 'rotation';\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 getMinMeasures (providedMinMeasure = 0) {\n return providedMinMeasure;\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]: null,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true,\n [CONSTANTS.MAX_LINES]: 0,\n [CONSTANTS.MIN_CHARS]: 0,\n [CONSTANTS.ROTATION]: null\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 minSpacing: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {},\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nconst textProps = {\n smartText: {}\n};\nexport const PROPS = {\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [TEXT]: mergeRecursive(textProps, 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, BOTTOM, TOP } 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\n if (width || height) {\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.source().logicalSpace(null);\n } else {\n this.source().resetLogicalSpace();\n }\n this.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 let actualWidth = 0;\n let actualHeight = 0;\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 orientation\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 selection.classed(`${CLASSPREFIX}-axis-container-${orientation}`, true);\n\n this.mount(mount);\n if (!availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (!availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n actualWidth = availWidth;\n actualHeight = availHeight;\n if (!show) {\n actualWidth = (orientation === TOP || orientation === BOTTOM) ? availWidth : 0;\n actualHeight = (orientation === TOP || orientation === BOTTOM) ? 0 : availHeight;\n }\n wrapperDiv.style(WIDTH, `${actualWidth}px`)\n .style(HEIGHT, `${actualHeight}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\n getMinMeasures () {\n return 0;\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\nconst setSmartText = (context) => {\n const source = context.source();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n rotation\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const labelManager = context.dependencies().labelManager;\n\n labelManager.setStyle(context._computedStyle);\n\n !rotation && context.smartText(labelManager.getSmartText(source, availWidth, availHeight, false));\n rotation && context.smartText(labelManager.getSmartText(source, availHeight, availWidth, true));\n\n return context;\n};\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 {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n show,\n maxLines,\n minCharacters\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const source = context.source();\n const space = context.smartText();\n const minText = new Array(minCharacters).fill('W').join('');\n const _minTextSpace = labelManager.getOriSize(minText);\n\n context.config({ rotation: false });\n if (space.width > (availWidth || 0) && maxLines) {\n space.height = space.oriTextHeight * maxLines;\n }\n if (availWidth && availWidth < space.width) {\n space.width = _minTextSpace.width;\n }\n if (availWidth && availWidth < Math.min(_minTextSpace.width, space.oriTextWidth)) {\n const smartSpace = labelManager.getSmartText(source, availHeight, _minTextSpace.height, true);\n space.width = smartSpace.height;\n space.height = smartSpace.width;\n context.config({ rotation: true });\n context.smartText(smartSpace);\n }\n\n if (show) {\n return {\n width: Math.ceil(space.width) + paddedWidth,\n height: Math.ceil(space.height) + paddedHeight\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 generateGetterSetters(this, PROPS[TEXT]);\n const space = this._dependencies.labelManager.getOriSize('w');\n this.minSpacing({ width: Math.floor(space.width * 3 / 4), height: Math.floor(space.height / 2) });\n setSmartText(this);\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 setSmartText(this);\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 availHeight = this.availHeight();\n const {\n margin,\n show,\n verticalAlign,\n textAlign,\n rotation\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 const vAlign = verticalAlign || rotation ? 'middle' : 'top';\n const {\n width,\n height\n } = this.smartText();\n const {\n height: minHeightSpace\n } = this.minSpacing();\n const translation = {\n top: width + minHeightSpace / 2,\n middle: width / 2 + minHeightSpace,\n bottom: minHeightSpace\n };\n\n container.style('vertical-align', vAlign);\n\n // Set class name\n elem.classed(this._className, true);\n\n // Apply styles\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n elem.style('transform', rotation ? `translate(${height / 2}px,\n ${translation[vAlign]}px) rotate(-90deg)` : '');\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n container.style(`margin-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n this._dependencies.labelManager.setStyle(this._computedStyle);\n elem.html(this._dependencies.labelManager.getSmartText(this.source(), availWidth, availHeight, true).text);\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.clearCaching();\n [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\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 .width(width).height(height - this.getCaptionSpace().height)\n .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';\nimport { TOP } from '../constants';\n\n/**\n *\n *\n * @param {*} rawContent\n *\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 *\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n let margin = {};\n const {\n content,\n classPrefix,\n maxLines\n } = config;\n const cell = prevCell || new TextCell(\n {\n type: cellType === 'title' ? 'header' : 'text',\n className: `${classPrefix}-${cellType}-cell`\n }, {\n labelManager\n })\n .config({ maxLines }).minSpacing({ width: 0, height: 0 });\n\n cell.source(content);\n cell._minTickDiff = { height: 0, width: 0 };\n\n if (config.position === TOP) {\n margin = { top: 0, bottom: config.padding };\n } else {\n margin = { top: config.padding, bottom: 0 };\n }\n cell.config({ margin });\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 *\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type,\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 const subtitle = context.subtitle();\n const isSubtitle = resolveTitleSubTitleContent(subtitle[0]);\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.height = context.height();\n config.classPrefix = context.config().classPrefix;\n config.content = content;\n config.padding = (type === 'title' && !isSubtitle.length) ? subtitle[1].padding : config.padding;\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;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport { getValueParser, retrieveFieldDisplayName, DataModel, getObjProp } from 'muze-utils';\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 *\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 && scale) {\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({\n scale,\n canvas,\n fieldName: scaleProps.field,\n title: retrieveFieldDisplayName(canvas.data(), scaleProps.field),\n LegendCls,\n scaleType\n });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n *\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 const { invalidValues } = canvas.config();\n\n const parser = getValueParser(invalidValues);\n legendInfo.forEach((dataInfo, index) => {\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n title: titleText,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || titleText;\n if (config.show) {\n config.position = position;\n config.align = align;\n let legend = getObjProp(prevLegends[scaleType], index);\n if (!legend) {\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 const metaData = legend.metaData();\n if (metaData instanceof DataModel) {\n metaData.dispose();\n }\n legend.scale(scale)\n .valueParser(parser)\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 *\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 *\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.composition().legend || {});\n};\n","import { LayoutComponent } from '../../../../layout/src/tree-layout';\n\nexport default class MuzeComponent extends LayoutComponent {\n getLogicalSpace () {\n const { width, height } = this.boundBox();\n return { width, height };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n }\n\n getBoundBox () {\n return this.boundBox();\n }\n\n updateWrapper () {\n throw Error('Update is not implemented');\n }\n\n setParams () {\n throw Error('set params is not implemented');\n }\n}\n","import { selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { LEFT } from '../../constants';\n\nexport default class HeaderComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n renderHeader (container) {\n const layoutConfig = this.params.config;\n container = selectElement(container);\n const { align } = layoutConfig;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([this.name]);\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 const { height, width } = this.boundBox();\n this.component.setAvailableSpace(width, height);\n\n this.component && this.component.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (layoutConfig && this.component) {\n cont.style('float', LEFT)\n .style('text-align', align);\n // .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n }\n\n draw (container) {\n this.renderHeader(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.setParams(params);\n this.name(params.name);\n this.boundBox(params.component.getLogicalSpace());\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y,\n left: conf.x,\n width: conf.width,\n height: conf.height });\n this.renderAt(conf.renderAt);\n }\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport {\n LEFT, RIGHT, VERTICAL, HORIZONTAL, TOP, BOTTOM, HORIZONTAL_CENTER, VERTICAL_CENTER\n} from '../../constants';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\nfunction defaultAlignmentHelper (position) {\n let alignment = null;\n const alignWith = `${ROW_MATRIX_INDEX[1]}-${COLUMN_MATRIX_INDEX[1]}`;\n switch (position) {\n case TOP:\n case BOTTOM:\n alignment = HORIZONTAL_CENTER;\n break;\n case LEFT:\n case RIGHT:\n alignment = VERTICAL_CENTER;\n break;\n default:\n alignment = VERTICAL_CENTER;\n }\n return { alignment, alignWith };\n}\nexport default class LegendComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.measurement.legendSpace, 0);\n this.setParams(params);\n }\n\n renderLegend (container) {\n container = selectElement(container);\n const sectionComponents = [];\n const { position, classPrefix } = this.params.config;\n const legendMount = makeElement(container, 'div', [this.components],\n `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = this.newDimensions.width;\n const legHeight = this.newDimensions.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 this.components.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 // mount.each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true));\n mount.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 mount.classed(`${classPrefix}-legend-horizontal-section`, true);\n mount.classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', this.components, `${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 draw (container) {\n this.renderLegend(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.measurement.legendSpace);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.components = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n const { alignWith, alignment } = defaultAlignmentHelper(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith || alignWith);\n this.alignment(params.config.alignment || alignment);\n }\n\n}\n","import {\n selectElement,\n makeElement,\n getD3Drag,\n getEvent,\n getWindow,\n hasTouch\n} from 'muze-utils';\nimport './scroll-bar.scss';\nimport { WIDTH, HEIGHT } from '../../../constants';\n\nconst d3Drag = getD3Drag();\n\nconst arrowSizeMap = {\n left: WIDTH,\n right: WIDTH,\n top: HEIGHT,\n bottom: HEIGHT\n};\n\nexport const getUnitPositions = (unitMeasures, totalLength, viewLength) => {\n let currentLen = 0;\n const measures = unitMeasures.primary && unitMeasures.primary.length ?\n unitMeasures.primary : unitMeasures.secondary;\n\n return measures.map((e) => {\n const unitPosition = currentLen * 100 / (totalLength - viewLength);\n currentLen += e;\n return unitPosition;\n });\n};\n\nexport const createScrollBarArrow = (mount, type, config) => {\n const {\n classPrefix,\n thickness\n } = config;\n const arrow = makeElement(mount, 'div', [type], `${classPrefix}-scroll-arrow-${type}`);\n\n arrow.classed(`${classPrefix}-scroll-arrow`, true);\n arrow.style(arrowSizeMap[type], `${thickness}px`);\n\n const chevron = makeElement(arrow, 'div', [1], `${classPrefix}-scroll-arrow-chevron`);\n\n chevron.attr('id', `${classPrefix}-scroll-arrow-chevron-${type}`);\n\n return arrow;\n};\n\nexport const createScrollBarRect = (mount, config) => {\n const {\n classPrefix\n } = config;\n const rect = makeElement(mount, 'div', [1], `${classPrefix}-scroll-rect`);\n const mover = makeElement(rect, 'div', [1], `${classPrefix}-scroll-mover`);\n\n return { rect, mover };\n};\n\nexport const applyRectClick = (scrollMaker, moverRect) => {\n const {\n rect\n } = moverRect;\n\n rect.on('click', () => {\n const event = getEvent();\n scrollMaker.emptyScrollAreaClick(event);\n });\n};\n\nconst applyMoverDrag = (scrollMaker, moverRect) => {\n let startPos = {};\n let moverStartPos = 0;\n let rectStartPos = 0;\n let endPos = {};\n const {\n mover,\n rect\n } = moverRect;\n\n mover.call(d3Drag()\n .on('start', () => {\n const event = getEvent();\n\n moverStartPos = mover.node().getBoundingClientRect();\n rectStartPos = rect.node().getBoundingClientRect();\n startPos = {\n x: event.x,\n y: event.y\n };\n })\n .on('drag', () => {\n const event = getEvent();\n const window = getWindow();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n const distanceMoved = {\n x: endPos.x - startPos.x,\n y: endPos.y - startPos.y\n };\n const actualPosition = {\n x: moverStartPos.x + distanceMoved.x - rectStartPos.x + window.pageXOffset,\n y: moverStartPos.y + distanceMoved.y - rectStartPos.y + window.pageYOffset\n };\n\n scrollMaker.changeMoverPosition(actualPosition);\n }));\n};\n\nconst applyScrollMouseDownAction = (moverRect, scrollMaker, speed) => {\n const {\n mover,\n rect\n } = moverRect;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n scrollMaker.changeMoverPosition({ x: x - rectX + speed, y: y - rectY + speed });\n};\n\nconst registerListenerOnArrow = (scrollMaker, moverRect, arrowType, speed) => {\n let timer = '';\n const arrow = scrollMaker._components[arrowType];\n const isTouchDevice = hasTouch();\n\n arrow.on(isTouchDevice ? 'touchstart' : 'mousedown', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n timer = setInterval(() => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n }, 100);\n }).on(isTouchDevice ? 'touchend' : 'mouseup', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n clearInterval(timer);\n }).on('click', () => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n });\n};\n\nexport const registerListeners = (scrollMaker) => {\n const {\n moverRect\n } = scrollMaker._components;\n\n const speed = scrollMaker.config().speed;\n\n registerListenerOnArrow(scrollMaker, moverRect, 'prevArrow', -speed);\n applyMoverDrag(scrollMaker, moverRect);\n applyRectClick(scrollMaker, moverRect);\n registerListenerOnArrow(scrollMaker, moverRect, 'nextArrow', speed);\n};\n\nexport const scrollContainerHelper = (mountPoint, config, dimensions, type) => {\n const {\n classPrefix\n } = config;\n const scrollBarContainer = makeElement(selectElement(mountPoint), 'div', [1], `#${classPrefix}-scroll-bar-${type}`);\n\n scrollBarContainer.classed(`${classPrefix}-scroll-bar`, true);\n scrollBarContainer.style(WIDTH, `${dimensions.width}px`);\n scrollBarContainer.style(HEIGHT, `${dimensions.height}px`);\n return scrollBarContainer;\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n\n config: {\n sanitization: (context, value) => {\n value = mergeRecursive(context._config, value);\n return value;\n }\n },\n manager: {},\n unitPositions: {},\n logicalSpace: {}\n};\n\n","import { ERROR_MSG, generateGetterSetters } from 'muze-utils';\nimport {\n scrollContainerHelper,\n registerListeners\n} from './helper';\nimport { PROPS } from './props';\n\nexport class ScrollMaker {\n\n constructor () {\n this._components = {};\n this._logicalSpace = {};\n this._attachedScrollAction = () => {};\n this._config = {\n thickness: 10,\n speed: 2\n };\n this._unitPositions = null;\n\n generateGetterSetters(this, PROPS);\n }\n\n static type () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n emptyScrollAreaClick () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n changeMoverPosition () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollDeltaTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n createScroll (mountPoint) {\n const config = this.config();\n\n return {\n scrollBarContainer: scrollContainerHelper(mountPoint, config, this.logicalSpace(), this.constructor.type())\n };\n }\n\n attachScrollAction (externalScrollAction) {\n this._attachedScrollAction = externalScrollAction;\n return this;\n }\n\n detachScrollAction () {\n this._attachedScrollAction = () => {};\n return this;\n }\n\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n registerListeners () {\n registerListeners(this);\n return this;\n }\n\n remove () {\n this._components.scrollBarContainer.remove();\n return this;\n }\n}\n\n","import MuzeComponent from './muze-chart-component';\nimport { HorizontalScrollMaker } from './scroll-bar-maker/horizontal-scroll-maker';\nimport { VerticalScrollMaker } from './scroll-bar-maker/vertical-scroll-maker';\n\nconst scrollMakerMap = {\n horizontal: HorizontalScrollMaker,\n vertical: VerticalScrollMaker\n};\n\n/**\n * Scroll Component acts as a wrapper over the scoll bars created using the respective Scroll Makers\n * This provides a consistent API for layouting using the tree layout system.\n *\n *\n * @class\n * @public\n * @module ScrollComponent\n */\nexport default class ScrollComponent extends MuzeComponent {\n\n constructor (params) {\n const ScrollMaker = scrollMakerMap[params.config.type];\n\n params.component = new ScrollMaker();\n params.component.config(params.config.scrollBarComponentConfig);\n params.component.logicalSpace(params.dimensions);\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n manager (...manager) {\n if (manager.length) {\n this.component.manager(manager[0]);\n return this;\n }\n return this.component.manager();\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollDeltaTo (delta) {\n this.component.scrollDeltaTo(delta);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollTo (scrollPercentage) {\n this.component.scrollTo(scrollPercentage);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page based on the unit index.\n * The input is provided as a number represting the index for the unit.\n * For vertical scroll, it's the row index that will be required.\n * For horizontal scroll, it's the column index that will be required\n *\n * @public\n *\n * @param {number} unitIndex Index of the unit appearing in the grid\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollToUnitIndex (unitIndex) {\n const unitPositions = this.component.unitPositions();\n const sanitizedUnitIndex = Math.min(Math.max(0, unitIndex), unitPositions.length - 1);\n this.component.scrollTo(unitPositions[sanitizedUnitIndex]);\n return this;\n }\n\n /**\n * Provides the positions of the units(either horizontal or vertical based on the type\n * of scroll bar it wraps) relative to it's container. The position of the first unit starts at 0\n *\n *\n * @public\n *\n * @return {Array} Positions of units either horizontal or vertical\n */\n getScrollPositionsForUnits () {\n return this.component.unitPositions();\n }\n\n draw (container) {\n this.component.createScroll(container || document.getElementById(this.renderAt()));\n return this;\n }\n\n /**\n * Can be used to attach a scroll action whenever scrolling occurs in the canvas\n *\n * @public\n * @param {number} externalAction Action to be attached during scroll\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n attachScrollAction (externalAction) {\n this.component.attachScrollAction(externalAction);\n return this;\n }\n\n /**\n * Can be used to detach the scroll action already bound to the scroll bar\n *\n * @public\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n detachScrollAction () {\n this.component.detachScrollAction();\n return this;\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.component.config(params.config.scrollBarComponentConfig);\n this.component.logicalSpace(params.dimensions);\n this.boundBox(this.component.getLogicalSpace());\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component || this.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n remove () {\n this.component.remove();\n }\n}\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { HORIZONTAL, HEIGHT, WIDTH, LEFT } from '../../../constants';\n\nexport class HorizontalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: horizontal\n */\n static type () {\n return HORIZONTAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, config, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'left', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'right', config);\n const {\n mover,\n rect\n } = moverRect;\n\n const { height, width, totalLength, viewLength, unitWidths } = this.logicalSpace();\n const scrollBarWithouArrowLength = width - height * 2;\n\n rect.style(WIDTH, `${dimensions.width - height * 2}px`);\n rect.style(HEIGHT, `${100}%`);\n mover.style(WIDTH, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(HEIGHT, `${100}%`);\n mover.style(LEFT, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n this.unitPositions(getUnitPositions(unitWidths, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n let positionAdjuster = speed * 10;\n if (event.x < x) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n const {\n totalLength\n } = this.logicalSpace();\n\n if (newPosition.x < 0) {\n currentPos = 0;\n } else if (newPosition.x + moverPos.width > rectStartPos.width) {\n currentPos = rectStartPos.width - moverPos.width;\n } else {\n currentPos = newPosition.x;\n }\n\n mover.style(LEFT, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: 0, x: moverPos.x - rectStartPos.x - delta });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {HorizontalScrollMaker} Instance of the HorizontalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.width)) / 100;\n\n this.changeMoverPosition({ y: 0, x: movement });\n return this;\n }\n\n}\n\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { VERTICAL, TOP, HEIGHT, WIDTH } from '../../../constants';\n\nexport class VerticalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: vertical\n */\n static type () {\n return VERTICAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'top', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'bottom', config);\n const {\n mover,\n rect\n } = moverRect;\n const { height, width, totalLength, viewLength, unitHeights } = this.logicalSpace();\n const scrollBarWithouArrowLength = height - width * 2;\n\n rect.style(HEIGHT, `${scrollBarWithouArrowLength}px`);\n rect.style(WIDTH, `${100}%`);\n mover.style(WIDTH, `${100}%`);\n mover.style(HEIGHT, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(TOP, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n\n this.unitPositions(getUnitPositions(unitHeights, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n let positionAdjuster = speed * 10;\n if (event.y < y) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const {\n totalLength\n } = this.logicalSpace();\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n\n if (newPosition.y < 0) {\n currentPos = 0;\n } else if (newPosition.y + moverPos.height > rectStartPos.height) {\n currentPos = rectStartPos.height - moverPos.height;\n } else {\n currentPos = newPosition.y;\n }\n mover.style(TOP, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: moverPos.y - rectStartPos.y - delta, x: 0 });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.height)) / 100;\n\n this.changeMoverPosition({ x: 0, y: movement });\n return this;\n }\n\n}\n","import { makeElement } from 'muze-utils';\nimport { cellSpanMaker, applySpans } from '../../../../layout/src/grid-layout/span-maker';\nimport { applyBorders } from '../../../../layout/src/grid-layout/border-helper';\n\nimport {\n TOP, CENTER\n} from '../../../../layout/src/enums/constants';\nimport MuzeComponent from './muze-chart-component';\nimport { WIDTH, HEIGHT, HIDDEN, OVERFLOW, AUTO, VISIBLE } from '../../constants';\n\nconst renderPlaceholders = (cells) => {\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder.render(this);\n });\n};\n\nexport default class MatrixComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n this.className(params.config.className);\n }\n\n applyScroll (container) {\n const row = this.params.config.row;\n const column = this.params.config.column;\n const { horizontal, vertical } = this.params.config.scrollInfo;\n container.style(OVERFLOW, VISIBLE);\n container.style(WIDTH, AUTO);\n container.style(HEIGHT, AUTO);\n\n if (horizontal && column === 1) {\n container.style(OVERFLOW, HIDDEN);\n container.style(WIDTH, '100%');\n }\n\n if (vertical && row === CENTER) {\n container.style(OVERFLOW, HIDDEN);\n container.style(HEIGHT, '100%');\n }\n }\n\n renderMatrix (mountPoint) {\n // Creating containers for each matrix individually\n const classPrefix = this.params.config.classPrefix;\n const row = this.params.config.row;\n const column = this.params.config.column;\n const dimensions = this.params.config.dimensions;\n const border = this.params.config.border;\n\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${row}-${column + 1}`)\n .classed(`${classPrefix}-grid-${row}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n this.applyScroll(containerForMatrix);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(this.component, row, column);\n\n // Rendering the table components\n const { cells } = this.renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n applySpans(cells, spans, { dimensions, border }, `${row}-${column}`);\n renderPlaceholders(cells);\n\n cells.exit().each((cell) => {\n cell.placeholder.remove();\n });\n\n applyBorders(cells, border, row, column);\n }\n\n 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\n draw (container) {\n this.renderMatrix(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(TOP);\n this.className(params.config.className);\n }\n}\n","import { selectElement, getEvent } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport MatrixComponent from './matrix-component';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\nimport { WHEEL_DELTA_MODIFIER } from '../../enums/constants';\n\n/**\n * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific\n * elements based on the scroll distance provided\n *\n *\n */\nconst applyScrollAction = (elem, classPrefix, scollDistance, type) => {\n selectElement(elem)\n .selectAll(`.${classPrefix}-grid`)\n .property(type, scollDistance);\n};\n\n/**\n * Applies the action of the scroll by actually scrolling the respective matrices based on the\n * type of scroll. It returns a function which has both the scroll methods available\n *\n * @return {Object} contains the horizontal and vertical scroll actions on the grid component\n */\nconst scrollActionApplier = (movement, context) => {\n const classPrefix = context.params.config.classPrefix;\n\n return {\n horizontal: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[e][1].renderAt()}`, classPrefix, movement, 'scrollLeft'));\n },\n vertical: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[1][e].renderAt()}`, classPrefix, movement, 'scrollTop'));\n }\n };\n};\n\nexport default class GridComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.gridComponents = [];\n this.setParams(params);\n }\n\n sanitizeGrid () {\n let height = 0;\n let width = 0;\n const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo();\n const scrollInfo = this.component.scrollInfo();\n const {\n viewHeight,\n viewWidth,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n\n for (let i = 0; i < 3; i++) {\n if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) {\n this.gridComponents[i] = [];\n }\n for (let j = 0; j < 3; j++) {\n const matrixDim = {\n height: viewHeight[i],\n width: viewWidth[j],\n unitHeights,\n unitWidths\n };\n const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j];\n const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`;\n const matrixConfig = {\n dimensions: matrixDim,\n border: layoutDimensions.border,\n classPrefix: this.params.config.classPrefix,\n scrollInfo,\n row: ROW_MATRIX_INDEX[i],\n column: j\n };\n if (this.gridComponents[i][j] instanceof MuzeComponent) {\n this.gridComponents[i][j].updateWrapper({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n } else {\n const matrixWrapper = new MatrixComponent({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n this.gridComponents[i].push(matrixWrapper);\n }\n if (i === 0) {\n width += matrixDim.width;\n }\n if (j === 0) {\n height += matrixDim.height;\n }\n }\n }\n this.boundBox({ height, width });\n\n this.component = this.gridComponents;\n this.allComponents = this.gridComponents;\n }\n\n scrollBarManager (...manager) {\n if (manager.length) {\n this._scrollBarManager = manager[0];\n return this;\n }\n return this._scrollBarManager;\n }\n\n /**\n * Attaches a mousewheel listener to the center matrix, based on which the scrolling can occur.\n * It uses the scroll component to change the position of the scroller, which ultimately scrolls the center matrix\n *\n *\n * @return {GridComponent} Instance of the GridComponent\n */\n attachScrollListener () {\n const scrollBarManager = this.scrollBarManager();\n selectElement(`#${this.component[1][1].renderAt()}`)\n .on('wheel', () => {\n const event = getEvent();\n const {\n wheelDeltaX,\n wheelDeltaY\n } = event;\n\n // Scrolling horizontally\n if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('horizontal', event)\n .triggerScrollBarAction('horizontal', wheelDeltaX / WHEEL_DELTA_MODIFIER);\n }\n\n // Scrolling Vertically\n if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('vertical', event)\n .triggerScrollBarAction('vertical', wheelDeltaY / WHEEL_DELTA_MODIFIER);\n }\n });\n return this;\n }\n\n performScrollAction (direction, movedView) {\n scrollActionApplier(movedView, this)[direction]();\n return this;\n }\n\n getBoundBox () {\n const { top, left } = this.component[0][0].boundBox();\n const { height, width } = this.boundBox();\n\n return {\n top,\n left,\n height,\n width\n };\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.className(params.config.className);\n this.sanitizeGrid();\n return this;\n }\n\n attachListener () {\n this.attachScrollListener();\n return this;\n }\n}\n","export const SIDE_EFFECT_COMMON = 'common';\nexport const SIDE_EFFECT_INDIVIDUAL = 'individual';\nexport const TOOLTIP_CONSOLIDATED = 'consolidated';\nexport const TOOLTIP_FRAGMENTED = 'fragmented';\nexport const WHEEL_DELTA_MODIFIER = 30;\n","import { selectElement, makeElement, applyStyle } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\n\nexport default class MessageComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n }\n\n render (container) {\n const parent = selectElement(container);\n\n const { config } = this.params;\n const { className } = config.classPrefix;\n\n const node = makeElement(parent, 'div', [1], className);\n const { height, width } = config.dimensions;\n const { message } = config;\n\n applyStyle(node, { width: `${width}px`, height: `${height}px` });\n\n const child = makeElement(node, 'div', [1], `${className}-child`);\n const textElement = makeElement(child, 'text', [1]);\n\n textElement.html(message);\n }\n\n draw (container) {\n this.render(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n const { target, className } = params.config;\n this.target(target);\n this.className(className);\n return this;\n }\n}\n","import {\n TITLE,\n SUB_TITLE,\n LEGEND, VERTICAL,\n HORIZONTAL,\n WIDTH,\n HEIGHT,\n TOP,\n LEFT,\n RIGHT,\n MESSAGE,\n GRID,\n NO_DATA_MESSAGE,\n HORIZONTAL_CENTER\n} from '../constants';\nimport HeaderComponent from './components/headerComponent';\nimport LegendComponent from './components/legendComponent';\nimport ScrollComponent from './components/scroll-component';\nimport GridComponent from './components/grid-component';\nimport MessageComponent from './components/message-component';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG, CANVAS, MESSAGE_CONFIG } from './defaults';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, CENTER } from '../../../layout/src/enums/constants';\n\n// Mapping between types of headers and their required configs for wrapper creation\nconst headerMap = {\n title: {\n headerCell: 'titleCell',\n configType: TITLE_CONFIG\n },\n subtitle: {\n headerCell: 'subtitleCell',\n configType: SUB_TITLE_CONFIG\n }\n};\n\n// Mapping of header alignment values\nconst headerAlignmentMap = {\n [LEFT]: LEFT,\n [RIGHT]: RIGHT,\n [CENTER]: HORIZONTAL_CENTER\n};\n\n/**\n * returns if data is Valid\n *\n *\n * @param {Object} params object where data has to be checked for validity\n * @return {Boolean} Returns true if all of the params are valid\n */\nconst checkParamsValidation = params => Object.keys(params).every((param => params[param]));\n\n/**\n * returns if message Component is needed or not\n *\n *\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Boolean} Returns if grid is present\n */\nconst isGridPresent = (renderDetails) => {\n const { rows, columns, values } = renderDetails.components;\n return checkParamsValidation({ rows, columns, values });\n};\n\n/**\n * Creates the wrapper for the header, i.e., title and subtitle to be used in the tree layout\n *\n *\n * @param {string} headerType type of header: title/subtite\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createHeaderWrapper = (headerType, layoutManager, renderDetails) => {\n let wrapper = null;\n\n const { components, layoutConfig } = renderDetails;\n const { headerCell, configType } = headerMap[headerType];\n const target = { target: CANVAS };\n\n if (components.headers && components.headers[headerCell]) {\n let headerConfig = layoutConfig[headerType];\n const header = components.headers[headerCell];\n\n headerConfig = Object.assign({}, headerConfig, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n alignWith: `${ROW_MATRIX_INDEX[0]}-${COLUMN_MATRIX_INDEX[1]}`,\n alignment: headerAlignmentMap[headerConfig.align],\n className: configType.className\n });\n\n const wrapperParams = {\n name: headerType,\n component: header,\n config: headerConfig\n };\n\n const existingComponent = layoutManager.getComponent(headerType);\n if (existingComponent) {\n wrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n wrapper = new HeaderComponent(wrapperParams);\n }\n }\n return wrapper;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} canvas canvas instance\n * @return {Instance} Returns the respective wrappers\n */\nconst createMessageWrapper = (layoutManager, canvas, renderDetails, renderGrid) => {\n const headerValues = Object.values(renderDetails.components.headers);\n let sum = 0;\n for (const val of headerValues) {\n sum += val.logicalSpace().height;\n }\n let messageWrapper = null;\n\n if (!renderGrid) {\n const defaultDimensions = { height: canvas.height() - sum, width: canvas.width() };\n const gridComponent = layoutManager.getComponent(GRID);\n const { height, width } = (gridComponent && gridComponent.getBoundBox()) || defaultDimensions;\n const target = { target: CANVAS };\n const config = {\n ...target,\n dimensions: { height, width },\n message: NO_DATA_MESSAGE,\n classPrefix: MESSAGE_CONFIG\n };\n const wrapperParams = {\n name: MESSAGE,\n component: null,\n config\n };\n const existingComponent = layoutManager.getComponent(MESSAGE);\n\n if (existingComponent) {\n messageWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n messageWrapper = new MessageComponent(wrapperParams);\n }\n return messageWrapper;\n }\n return null;\n};\n\n// Mapping between types of scrollBars and their required configs for wrapper creation\nconst scrollBarMap = config => ({\n vertical: {\n componentName: 'verticalScrollBar',\n width: 'thickness',\n height: 'layoutBasedMeasure',\n layoutBasedMeasure: HEIGHT,\n viewMeasure: 'viewHeight',\n rowAlign: 1,\n colAlign: config.align === 'right' ? 2 : 0,\n position: config.align,\n alignment: TOP\n },\n horizontal: {\n componentName: 'horizontalScrollBar',\n width: 'layoutBasedMeasure',\n layoutBasedMeasure: WIDTH,\n viewMeasure: 'viewWidth',\n height: 'thickness',\n rowAlign: config.align === 'top' ? 0 : 2,\n colAlign: 1,\n position: config.align,\n alignment: LEFT\n }\n});\n\n/**\n * Creates the wrapper for the scroller, i.e., horizontal and vertical to be used in the tree layout\n *\n *\n * @param {string} scrollBarType type of scrollbar: horizontal/vertical\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst createScrollBarWrapper = (scrollBarType, layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let scrollBarWrapper = null;\n const { layoutConfig } = renderDetails;\n const target = { target: CANVAS };\n const { scrollBar } = layoutConfig;\n const { layoutDimensions } = grid.viewInfo();\n const {\n actualCenterMeasures,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n const {\n componentName, layoutBasedMeasure, width, height, rowAlign, colAlign,\n viewMeasure, position, alignment\n } = scrollBarMap(scrollBar[scrollBarType])[scrollBarType];\n const dimensions = {\n thickness: scrollBar.thickness,\n layoutBasedMeasure: layoutDimensions[viewMeasure][1]\n };\n const isScroll = grid.scrollInfo()[scrollBarType];\n const totalLength = actualCenterMeasures[layoutBasedMeasure];\n const viewLength = layoutDimensions[viewMeasure][1];\n\n const scrollConfig = Object.assign({}, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n scrollBarComponentConfig: {\n ...scrollBar,\n classPrefix: layoutConfig.classPrefix\n },\n\n type: scrollBarType,\n alignWith: `${ROW_MATRIX_INDEX[rowAlign]}-${COLUMN_MATRIX_INDEX[colAlign]}`,\n alignment,\n position\n });\n\n const wrapperParams = {\n name: componentName,\n config: scrollConfig,\n dimensions: {\n width: dimensions[width],\n height: dimensions[height],\n totalLength,\n viewLength,\n unitHeights,\n unitWidths\n }\n };\n\n const existingComponent = layoutManager.getComponent(componentName);\n\n if (!isScroll) {\n existingComponent && existingComponent.remove();\n return null;\n }\n\n if (existingComponent) {\n scrollBarWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n scrollBarWrapper = new ScrollComponent(wrapperParams);\n }\n\n return scrollBarWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the legend to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createLegendWrapper = (layoutManager, renderDetails, renderGrid) => {\n if (renderGrid) {\n let legendWrapper = null;\n const { components, layoutConfig, measurement } = renderDetails;\n const target = { target: CANVAS };\n\n if (components.legends && components.legends.length) {\n const legendConfig = { ...layoutConfig.legend, ...target, measurement };\n const wrapperParams = {\n name: LEGEND,\n component: components.legends,\n config: legendConfig\n };\n\n const existingComponent = layoutManager.getComponent(LEGEND);\n\n if (existingComponent) {\n legendWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n legendWrapper = new LegendComponent(wrapperParams);\n }\n }\n return legendWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst gridLayoutWrapper = (layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let gridWrapper = null;\n const target = { target: CANVAS };\n const { layoutConfig } = renderDetails;\n\n const config = {\n ...target,\n pagination: layoutConfig.pagination,\n classPrefix: layoutConfig.classPrefix,\n dimensions: { height: 0, width: 0 }\n };\n const wrapperParams = {\n name: GRID,\n component: grid,\n config\n };\n const existingComponent = layoutManager.getComponent(GRID);\n if (existingComponent) {\n gridWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n gridWrapper = new GridComponent(wrapperParams);\n }\n return gridWrapper;\n }\n return null;\n};\n/**\n * Responsible for providing the wrapper creators for every component in Muze.\n * This function, when called, returns the set of components and their respective wrappers.\n *\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} grid Instance of the grid layout\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers for each component\n */\nexport const componentWrapperMaker = (canvas, grid, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const renderGrid = isGridPresent(renderDetails);\n return {\n title: createHeaderWrapper(TITLE, layoutManager, renderDetails),\n subtitle: createHeaderWrapper(SUB_TITLE, layoutManager, renderDetails),\n message: createMessageWrapper(layoutManager, canvas, renderDetails, renderGrid),\n legend: createLegendWrapper(layoutManager, renderDetails, renderGrid),\n grid: gridLayoutWrapper(layoutManager, renderDetails, grid, renderGrid),\n verticalScrollBar: createScrollBarWrapper(VERTICAL, layoutManager, renderDetails, grid, renderGrid),\n horizontalScrollBar: createScrollBarWrapper(HORIZONTAL, layoutManager, renderDetails, grid, renderGrid)\n };\n};\n","export class ScrollManager {\n\n constructor () {\n this._scrollBarComponents = {};\n this._attachedComponents = {};\n }\n\n scrollBarComponents (...sbc) {\n if (sbc.length) {\n this._scrollBarComponents = sbc[0];\n return this;\n }\n return this._scrollBarComponents;\n }\n\n attachedComponents (...abc) {\n if (abc.length) {\n this._attachedComponents = abc[0];\n return this;\n }\n return this._attachedComponents;\n }\n\n preventBrowserScroll (type, event) {\n if (this.scrollBarComponents()[type]) {\n // Prevent default behaviour and stop propagating\n event.preventDefault();\n event.stopPropagation();\n }\n return this;\n }\n\n performAttachedScrollFunction (type, movedViewLength) {\n Object.values(this.attachedComponents()).forEach((e) => {\n e.performScrollAction(type, movedViewLength);\n });\n return this;\n }\n\n triggerScrollBarAction (type, delta) {\n this.scrollBarComponents()[type] && this.scrollBarComponents()[type].scrollDeltaTo(delta);\n return this;\n }\n}\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { componentWrapperMaker } from './component-wrapper-maker';\nimport {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n TITLE,\n SUB_TITLE,\n LEGEND,\n VERTICAL_SCROLL_BAR,\n HORIZONTAL_SCROLL_BAR,\n GRID,\n MESSAGE\n} from '../constants';\nimport { ScrollManager } from './scroll-manager';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const prepareLayout = (layout, renderDetails) => {\n const { components, layoutConfig, measurement } = renderDetails;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n if (rows && columns) {\n layout.measurement(measurement)\n .config(layoutConfig)\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 *\n * @param {*} context\n * @param {*} mount\n *\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 priority,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend,\n pagination,\n scrollBar\n } = context.config();\n\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\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 buffer: scrollBar.thickness,\n pagination,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual,\n mount,\n priority\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n\nconst componentIndexes = {\n title: 0,\n subtitle: 1,\n legend: 2,\n verticalScrollBar: 3,\n horizontalScrollBar: 4,\n grid: 5,\n message: 6\n};\n\nconst componentNames = {\n 0: TITLE,\n 1: SUB_TITLE,\n 2: LEGEND,\n 3: VERTICAL_SCROLL_BAR,\n 4: HORIZONTAL_SCROLL_BAR,\n 5: GRID,\n 6: MESSAGE\n};\n\nconst attachListeners = (componentWrappers) => {\n componentWrappers.forEach((componentWrapper) => {\n if (componentWrapper) {\n componentWrapper.attachListener();\n }\n });\n};\n\n/**\n * Responsible for creating a scroll manager that manages interactions between the grid\n * component and the scroll bar components\n *\n * @param {Array} componentWrappers Contains the wrappers for all the components\n * @param {Canvas} canvas Instance of the current canvas\n * @return {Array} Positions of units either horizontal or vertical\n */\nconst createScrollManager = (componentWrappers, canvas) => {\n const {\n horizontalScrollBar,\n verticalScrollBar,\n grid\n } = componentIndexes;\n\n const horizontalScrollWrapper = componentWrappers[horizontalScrollBar];\n const verticalScrollWrapper = componentWrappers[verticalScrollBar];\n const gridWrapper = componentWrappers[grid];\n const scrollBarManager = new ScrollManager();\n const scrollBarComponents = {};\n\n verticalScrollWrapper && (scrollBarComponents.vertical = verticalScrollWrapper);\n horizontalScrollWrapper && (scrollBarComponents.horizontal = horizontalScrollWrapper);\n\n scrollBarManager\n .scrollBarComponents(scrollBarComponents)\n .attachedComponents({\n grid: gridWrapper\n });\n canvas.composition().hScrollBar = horizontalScrollWrapper;\n canvas.composition().vScrollBar = verticalScrollWrapper;\n\n [horizontalScrollWrapper, verticalScrollWrapper].forEach((wrapper) => {\n wrapper && wrapper.manager(scrollBarManager);\n });\n\n gridWrapper.scrollBarManager(scrollBarManager);\n};\n\nexport const renderLayout = (canvas, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const gridLayout = canvas.layout();\n const {\n\n grid\n } = componentIndexes;\n\n // Get the component wrappers\n const compWrappers = componentWrapperMaker(canvas, gridLayout, renderDetails);\n const componentWrappers = Object.keys(componentIndexes).map(e => compWrappers[e]);\n const gridWrapper = componentWrappers[grid];\n if (gridWrapper) {\n createScrollManager(componentWrappers, canvas);\n }\n\n componentWrappers.forEach((componentWrapper, index) => {\n if (!componentWrapper) {\n const deleteElementName = componentNames[index];\n layoutManager.removeComponent(deleteElementName);\n }\n });\n layoutManager.registerComponents(componentWrappers).compute();\n attachListeners(componentWrappers);\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive,\n isSimpleObject,\n CommonProps\n} from 'muze-utils';\nimport { Firebolt } from '@chartshq/muze-firebolt';\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 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 selectionBox: () => false\n }\n};\n\n/**\n * This class is responsible for dispatching any behavioural action to all the visual units housed by the canvas.\n * It is created by {@link Canvas}. This class does not handle any physical actions. Physical actions get triggered\n * in {@link VisualUnit} which is managed by it's own firebolt instance. The firebolt instance of canvas only\n * propagates the action to all the visual units in it's composition.\n *\n * To get the firebolt instance of {@link Canvas}\n * ```\n * const firebolt = canvas.firebolt();\n * ```\n *\n * @class GroupFireBolt\n * @public\n */\nexport default class GroupFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy());\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 const context = this.context;\n applyInteractionPolicy(this);\n context._throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => {\n applyInteractionPolicy(this);\n });\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n /**\n * Dispatches a behavioural action with a payload. It takes the name of the behavioural action and a payload\n * object which contains the criteria aend an array of side effects which determines what side effects are\n * going to be shown in each visual unit of the canvas. It prepares the datamodel from the given criteria\n * and initiates a propagation from the datamodel of canvas. Then all the visual units of canvas which listens\n * to the propagation gets informed on which rows got selected and dispatches the behavioural action sent during\n * propagation.\n *\n * To dispatch a behavioural action on the canvas\n * ```\n * // Get the firebolt instance of the canvas\n * const firebolt = canvas.firebolt();\n * // Dispatch a brush behaviour\n * firebolt.dispatchBehaviour('brush', {\n * // Selects all the rows with Horsepower having range between 100 and 200.\n * criteria: {\n * Horsepower: [100, 200]\n * }\n * });\n * // On dispatch of this behavioural action, a selection box gets created and plots gets faded out which are the\n * // default side effects mapped to this behavioural action.\n * ```\n *\n * ```\n * Additionally, it can also be passed an array of side effects in the payload.\n * // Dispatch a select behaviour with only crossline as side effect.\n * firebolt.dispatchBehaviour('select', {\n * criteria: {\n * Cylinders: ['8']\n * },\n * sideEffects: ['crossline']\n * });\n * ```\n *\n * @public\n *\n * @param {string} behaviour Name of the behavioural action\n * @param {Object} payload Object which contains the interaction information.\n * @param {Object | Array.} payload.criteria Identifiers by which the selection happens.\n * @param {Array.} payload.sideEffects Side effects which needs to be shown.\n *\n * @return {GroupFireBolt} Instance of firebolt.\n */\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.composition().visualGroup.getGroupByData();\n const fieldsConfig = data.getFieldsConfig();\n const model = getDataModelFromIdentifiers(data, criteria);\n const behaviouralAction = this._actions.behavioural[behaviour];\n\n if (behaviouralAction) {\n const fields = isSimpleObject(criteria) ? Object.keys(criteria) : (criteria ? criteria[0] : []);\n const validFields = fields.filter(field => field in fieldsConfig);\n const mutates = behaviouralAction.constructor.mutates();\n const propConfig = {\n payload: propPayload,\n action: behaviour,\n criteria: model,\n sourceId: this.context.alias(),\n isMutableAction: mutates,\n propagateInterpolatedValues: validFields.every(field => fieldsConfig[field].def.type ===\n FieldType.MEASURE)\n };\n data.propagate(model, propConfig, true);\n }\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","import GroupFireBolt from './group-firebolt';\n\nexport default GroupFireBolt;\n","export const APP_INITIAL_STATE = {\n app: {\n group: {},\n units: {},\n layers: {},\n canvas: {}\n },\n local: {\n canvas: {},\n group: {},\n units: {},\n layers: {}\n }\n};\n\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId, selectElement, STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout, renderLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { APP_INITIAL_STATE } from './app-state';\nimport { initCanvas,\n setupChangeListener,\n setLabelRotationForAxes,\n createGroupState,\n createLayoutManager,\n setLayoutInfForUnits\n} from './helper';\n/**\n * Canvas is a logical component which houses a visualization by taking multiple variable in different encoding channel.\n * Canvas manages lifecycle of many other logical component and exposes one consistent interface for creation of chart.\n * Canvas is intialized from environment with settings from environment and singleton dependencies.\n *\n * To create an instance of canvas\n * ```\n * const env = Muze();\n * const canvas = env.canvas()\n * ```\n *\n *\n * @class\n * @public\n * @module Canvas\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(APP_INITIAL_STATE);\n\n this._throwback = new Store({\n [CommonProps.MATRIX_CREATED]: false,\n [CommonProps.ON_LAYER_DRAW]: null\n });\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE;\n const allOptions = Object.assign({}, options, localOptions, canvasOptions);\n\n transactor(this, allOptions, this._store, {\n namespace\n });\n\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this, {\n behavioural: behaviouralActions,\n physical: physicalActions,\n physicalBehaviouralMap: {}\n }, sideEffects, behaviourEffectMap));\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 // init layoutManager\n this._layoutManager = createLayoutManager();\n }\n\n /**\n * Retrieves an instance of layout which is responsible for layouting. Layout is responsible for creating faceted\n * presentation using table layout.\n *\n * @public\n *\n * @return {GridLayout} Instance of layout attached to canvas.\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n * Retrieves the composition for a canvas\n *\n * @public\n *\n * @return {object} Instances of the components which canvas requires to draw the full visualization.\n * ```\n * {\n * layout: // Instance of {@link GridLayout}\n * legend: // Instance of {@link Legend}\n * subtitle: // Instance of {@link TextCell} using which the title is rendered\n * title: // Instance of {@link TextCell} using which the title is rendered\n * visualGroup: // Instance of {@link visualGroup}\n * }\n * ```\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 * Sets or gets the alias of the canvas. Alias is a name by which the canvas can be referred.\n *\n * When setter\n * @param {string} alias Name of the alias.\n *\n * @return {Canvas} Instance of the canvas.\n *\n * When getter\n *\n * @return {string} Alias of canvas.\n *\n * @public\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 *\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n * Returns the instance of firebolt associated with this canvas. The firebolt instance can be used to dispatch a\n * behaviour dynamically on the canvas. This firebolt does not handle any physical actions. It is just used to\n * propagate the action to all the visual units in it's composition.\n *\n * @public\n *\n * @return {GroupFireBolt} Instance of firebolt associated with 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 createGroupState(this);\n this.composition().visualGroup.alias(this.alias()).store(this._store);\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 *\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 * Returns a promise for various {@link LifecycleEvents} of the various components of canvas. The promise gets\n * resolved once the particular event gets completed.\n *\n * To use this,\n * ```\n * canvas.once('layer.drawn').then(() => {\n * // Do any post drawing work here.\n * });\n * ```\n * @public\n *\n * @param {string} eventName Name of the lifecycle event.\n *\n * @return {Promise} A pending promise waiting for resolve to be called.\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 // removeChild(mount);\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const renderDetails = getRenderDetails(this, mount);\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), renderDetails);\n\n this._layoutManager.dimension({\n height: renderDetails.measurement.canvasHeight,\n width: renderDetails.measurement.canvasWidth\n });\n\n this._layoutManager.renderAt(mount);\n\n // Render each component\n renderLayout(this, renderDetails);\n\n setLayoutInfForUnits(this);\n\n // setLabelRotation\n setLabelRotationForAxes(this);\n }\n\n /**\n * Returns the instances of x axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the top axis and the second element represents the bottom\n * // axis.\n * [\n * [X1, X2],\n * [X3, X4]\n * ]\n * ```\n * @public\n *\n * @return {Array.} Instances of x axis.\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n * Returns the instances of y axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the left axis and the second element represents the right\n * // axis.\n * [\n * [Y1, Y2],\n * [Y3, Y4]\n * ]\n * ```\n * @public\n * @return {Array.} Instances of y axis.\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n * Returns all the retinal axis of the canvas. Color, shape and size axis are combinedly called retinal axis.\n *\n * @public\n * @return {Object} Instances of retinal axis.\n * ```\n * {\n * color: [ColorAxis], // Array of color axis.\n * shape: [ShapeAxis], // Array of shape axis.\n * size: [SizeAxis] // Array of size axis.\n * }\n * ```\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n\n mount (...params) {\n if (params.length) {\n let value = params[0];\n if (typeof params[0] === 'string') {\n value = selectElement(params[0]).node();\n }\n this._mount = value;\n return this;\n }\n return this._mount;\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 Store\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};\nmuze.Model = new Store().model.constructor;\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/(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-utils/node_modules/hyperdis/dist/hyperdis.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/object.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/string.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/value.js","webpack://muze/./packages/muze-utils/node_modules/d3-interpolate/src/transform/parse.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/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/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/Accent.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/sequential-single/Blues.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-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/Oranges.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-multi/viridis.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/cubehelix.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/src/enums/namespace.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/src/enums/constants.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/DataSystem/selection.js","webpack://muze/./packages/muze-utils/src/enums/stack-config.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/src/DataSystem/dataSelect.js","webpack://muze/./packages/muze-utils/node_modules/d3-shape/src/symbol.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/join.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/style.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/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/transition/end.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/src/renderer-utils.js","webpack://muze/./packages/muze-utils/src/store.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-utils/src/lifecycle-manager/helper.js","webpack://muze/./packages/muze-utils/src/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/selection-set/selection-set.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/enums/side-effects.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/props.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/index.js","webpack://muze/./packages/muze-firebolt/src/side-effects/generic/generic-sideeffect.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/content.js","webpack://muze/./packages/muze-tooltip/src/tooltip.js","webpack://muze/./packages/muze-firebolt/src/enums/tooltip-strategies.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/base-layer/props.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/skip-ticks.js","webpack://muze/./packages/muze-axis/src/cartesian-axis/space-setter.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/helper.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/polar-axis/props.js","webpack://muze/./packages/muze-axis/src/polar-axis/angle-axis.js","webpack://muze/./packages/visual-group/src/enums/constants.js","webpack://muze/./packages/muze-axis/src/polar-axis/radius-axis.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/local-options.js","webpack://muze/./packages/visual-layer/src/base-layer/listener-map.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/enums/layer-types.js","webpack://muze/./packages/visual-layer/src/layer-factory/layer-factory.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/visual-group/local-options.js","webpack://muze/./packages/visual-group/src/simple-group/simple-group.js","webpack://muze/./packages/visual-unit/src/firebolt/action-behaviour-map.js","webpack://muze/./packages/visual-unit/src/helper/index.js","webpack://muze/./packages/visual-unit/src/enums/constants.js","webpack://muze/./packages/visual-unit/src/helper/grid-lines.js","webpack://muze/./packages/visual-unit/src/listener-map.js","webpack://muze/./packages/visual-unit/src/enums/reactive-props.js","webpack://muze/./packages/visual-unit/src/props.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/firebolt/helper.js","webpack://muze/./packages/visual-unit/src/default-config.js","webpack://muze/./packages/visual-unit/src/local-options.js","webpack://muze/./packages/visual-unit/src/visual-unit.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/group-helper/matrix-model.js","webpack://muze/./packages/visual-group/src/group-helper/cell-creator.js","webpack://muze/./packages/visual-group/src/group-helper/resolver-props.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/helper.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/canvas/defaults.js","webpack://muze/./packages/muze/src/canvas/local-options.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/layoutComponent.js","webpack://muze/./packages/layout/src/tree-layout/layout-component/dummy-component.js","webpack://muze/./packages/muze/src/defaults.js","webpack://muze/./packages/layout/src/tree-layout/constants/defaults.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/definitionModel.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/helper/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/tree/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/layout-model/index.js","webpack://muze/./packages/layout/src/enums/constants.js","webpack://muze/./packages/layout/src/tree-layout/utils/index.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-point.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/data-parser.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/helper.js","webpack://muze/./packages/layout/src/tree-layout/data-adapters/html-data.js","webpack://muze/./packages/layout/src/tree-layout/renderers/renderer.js","webpack://muze/./packages/layout/src/tree-layout/renderers/html-renderer.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/drawing-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-definition/definition-manager/index.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/layout-def.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/helper.js","webpack://muze/./packages/layout/src/tree-layout/layout-manager/index.js","webpack://muze/./packages/muze/src/canvas/helper.js","webpack://muze/./packages/muze/src/options.js","webpack://muze/./packages/layout/src/generic-layout/index.js","webpack://muze/./packages/layout/src/grid-layout/defaults.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/visual-matrix/row-matrix.js","webpack://muze/./packages/layout/src/visual-matrix/column-matrix.js","webpack://muze/./packages/layout/src/grid-layout/computations.js","webpack://muze/./packages/layout/src/grid-layout/view-info-getter.js","webpack://muze/./packages/layout/src/grid-layout/layout.js","webpack://muze/./packages/layout/src/grid-layout/layout-helper.js","webpack://muze/./packages/layout/src/grid-layout/border-helper.js","webpack://muze/./packages/layout/src/grid-layout/span-maker.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/components/muze-chart-component.js","webpack://muze/./packages/muze/src/canvas/components/headerComponent.js","webpack://muze/./packages/muze/src/canvas/components/legendComponent.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/helper.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/props.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-component.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/horizontal-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/scroll-bar-maker/vertical-scroll-maker.js","webpack://muze/./packages/muze/src/canvas/components/matrix-component.js","webpack://muze/./packages/muze/src/canvas/components/grid-component.js","webpack://muze/./packages/muze/src/enums/constants.js","webpack://muze/./packages/muze/src/canvas/components/message-component.js","webpack://muze/./packages/muze/src/canvas/component-wrapper-maker.js","webpack://muze/./packages/muze/src/canvas/scroll-manager.js","webpack://muze/./packages/muze/src/canvas/layout-maker.js","webpack://muze/./packages/muze/src/canvas/firebolt/group-firebolt.js","webpack://muze/./packages/muze/src/canvas/firebolt/index.js","webpack://muze/./packages/muze/src/canvas/app-state.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__","a","JSON","parse","u","f","rt","mt","yt","bt","un","cn","fn","ln","sn","dn","pn","hn","FLAT_JSON","DSV_STR","DSV_ARR","AUTO","CATEGORICAL","TEMPORAL","GEO","BINNED","CONTINUOUS","MEASURE","DIMENSION","NORMAL","INVERSE","ALL","SUM","AVG","MIN","MAX","FIRST","LAST","COUNT","STD","Date","h","this","format","dtParams","nativeDate","RegExp","escape","replace","TOKEN_PREFIX","DATETIME_PARAM_SEQUENCE","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","defaultNumberParser","isFinite","parseInt","defaultRangeParser","toLowerCase","length","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","Math","trunc","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","push","token","formatAs","String","extractTokenValue","noBreak","v","splice","checkIfOnlyYear","unshift","map","match","shift","getNativeDate","Number","Function","concat","Array","isArray","from","forEach","iterator","constructor","g","w","O","_","E","getTime","round","random","j","D","F","data","createNamespace","fields","fieldsObj","_cachedFieldsObj","getMeasure","_cachedMeasure","schema","type","getDimension","_cachedDimension","N","configurable","writable","k","TypeError","Qt","defineProperties","_value","_formattedValue","_internalValue","field","T","split","R","C","assign","_invalidAwareValsMap","invalidAwareVals","NULL","NA","NIL","invalid","nil","null","L","SELECT","PROJECT","GROUPBY","COMPOSE","CAL_VAR","BIN","SORT","U","CROSS","LEFTOUTER","RIGHTOUTER","NATURAL","FULLOUTER","G","getFieldspace","Error","_rowDiffset","partialField","rawValue","formattedValue","formattedData","At","detachedRoot","on","J","z","floor","next","done","W","X","q","Map","has","set","Z","label","reduce","$","Ht","slice","Q","ee","ne","uids","addUid","columnWise","te","filter","findIndex","pop","re","_colIdentifier","sort","ae","ie","oe","ue","ce","fe","le","se","de","pe","he","ve","me","isNaN","we","ye","min","max","sqrt","pow","ge","be","Oe","store","entries","__unregister","_e","Ee","je","internalValue","Se","yn","De","Fe","Ne","ke","rowDiffset","subtype","description","displayName","Te","Re","ReferenceError","__proto__","getPrototypeOf","setPrototypeOf","_cachedDomain","calculateDataDomain","Ce","Me","Set","add","Ie","Pe","_cachedMinDiff","POSITIVE_INFINITY","isInvalid","getInvalidType","xe","Le","bins","Ue","Ve","unit","defAggFn","numberFormat","Be","Ye","NEGATIVE_INFINITY","He","Ge","Je","ze","trim","Ke","We","_dtf","Xe","qe","parseFloat","Ze","$e","Qe","et","_sanitize","tt","nt","dataFormat","firstRowHeader","at","it","ot","ut","ct","ft","stringify","lt","st","pt","charCodeAt","dt","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","test","columns","parseRows","formatBody","formatRows","ht","vt","gt","fieldSeparator","FlatJSON","DSVStr","DSVArr","wt","Ot","_t","Et","Ft","St","_derivation","op","meta","criteria","Dt","_ancestorDerivation","Nt","diffIndex","calcDiff","kt","Tt","rejectRowDiffset","Ct","getPartialFieldspace","It","Pt","operation","filterByMeasure","Mt","clone","__calculateFieldspace","calculateFieldsConfig","getFieldsConfig","getData","domain","every","select","saveChild","some","xt","config","Lt","projField","actualProjField","Vt","Bt","Yt","as","_partialFieldspace","_cachedValueObjects","_dataFormat","Gt","getDerivations","groupByString","params","Jt","nonTraversingModel","excludeModels","handlePropagation","_children","Xt","propagationNameSpace","propagateToSource","sourceId","propagateInterpolatedValues","persistent","values","mutableActions","filterFn","applyOnSource","action","model","models","path","Wt","_parent","sourceIdentifiers","propagationSourceId","groupByModel","reverse","$t","search","en","tn","_fieldStoreName","_propagationNameSpace","immutableActions","_fieldspace","jt","setParent","_fieldConfig","def","removeChild","nn","rn","an","_onPropagation","order","withUid","getAllFields","fill","Ae","defaultReducer","resolve","fieldsArr","replaceVar","addField","isMutableAction","payload","Kt","zt","find","Zt","qt","propConfig","filterImmutableAction","buckets","binsCount","binSize","start","end","I","ceil","abs","x","binnedData","measureFieldName","binFieldName","serialize","getSchema","Rt","splitRowDiffset","dimensionMap","Ut","sum","avg","first","last","count","std","vn","compose","dispose","bin","project","groupBy","calculateVariable","crossProduct","difference","naturalJoin","leftOuterJoin","rightOuterJoin","fullOuterJoin","union","mn","version","Operators","Stats","DM_DERIVATIVES","DateTimeFormatter","DataFormat","FilteringMode","InvalidAwareTypes","webpackPolyfill","deprecate","paths","children","_interopRequireDefault","obj","default","_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","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","_set","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","__lastTime","__id","unique","qualifiedName","seed","dependencies","outgoingEdges","accumulate","identity","dep","edges","_seed","requireResolve","retriever","history","resolver","electricEdges","retrieveDetails","listeners","nextFrame","currentFrame","qualifiedNodeMap","_wholeSet","_propagate","propagationOverride","currentFrameListeners","nextFrameListeners","_schedule","flushTarget","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","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","mid","right","ascendingBisect","bisectRight","number","array","src_range","stop","step","range","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","scale","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_formatHex","rgb","formatHex","color_formatRgb","formatRgb","color","exec","Rgb","rgbn","rgba","hsla","rgbConvert","opacity","rgb_formatHex","hex","rgb_formatRgb","Hsl","hslConvert","hsl","hsl2rgb","m1","m2","channels","displayable","formatHsl","color_formatHsl","brighter","darker","deg2rad","PI","rad2deg","Xn","Yn","Zn","t0","t1","t2","t3","labConvert","Lab","Hcl","hcl2lab","rgb2lrgb","xyz2lab","lab","lab2xyz","lrgb2rgb","hclConvert","atan2","hcl","cos","sin","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","colorRgb","rgbSpline","spline","colors","rgbBasis","src_number","reA","reB","source","src_string","am","bm","bs","bi","lastIndex","one","zero","cssNode","cssRoot","cssView","svgNode","src_value","value_typeof","string","setTime","nb","na","valueOf","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","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","currencyPrefix","currency","currencySuffix","decimal","numerals","formatNumerals","percent","minus","nan","newFormat","prefix","suffix","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","Infinity","defaultLocale","formatLocale","src_tickFormat","precisionPrefix","precisionRound","precisionFixed","linearish","tickFormat","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","minute","hour","day","setHours","setDate","getTimezoneOffset","weekday","sunday","monday","tuesday","wednesday","thursday","friday","saturday","month","setMonth","year","setFullYear","utcMinute","setUTCSeconds","utcHour","setUTCMinutes","utcDay","setUTCHours","setUTCDate","utcWeekday","getUTCDay","utcSunday","utcMonday","utcTuesday","utcWednesday","utcThursday","utcFriday","utcSaturday","utcMonth","setUTCMonth","utcYear","setUTCFullYear","localDate","utcDate","UTC","newYear","timeFormat","utcFormat","utcParse","pads","-","0","numberRe","percentRe","requoteRe","pad","requote","formatRe","names","formatLookup","parseWeekdayNumberSunday","parseWeekdayNumberMonday","parseWeekNumberSunday","parseWeekNumberISO","V","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","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","magma","inferno","plasma","warm","cool","sequential_multi_rainbow","ts","UNIT_GLOBAL_NAMESPACE","UNIT_LOCAL_NAMESPACE","LAYER_LOCAL_NAMESPACE","LAYER_GLOBAL_NAMESPACE","GROUP_GLOBAL_NAMESPACE","GROUP_LOCAL_NAMESPACE","CANVAS_LOCAL_NAMESPACE","CANVAS_GLOBAL_NAMESPACE","ReservedFields","ROW_ID","CommonProps","ACTION_INF","ON_LAYER_DRAW","MATRIX_CREATED","COORD_TYPES","DATA_TYPE","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","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","Selection","idGetter","_classCallCheck","_dataObjects","_updateData","_enterData","_exitData","_idGetter","newData","val","entryData","exitdata","tempMap","duplicateData","updatedData","newSelection","callback","dataObjects","defaultValue","_mode","mergedObjects","mergedData","newdata","sortFn","updateData","sortSel","sortSelection","kA","kB","_toConsumableArray","objects","DimensionSubtype","STRING","FUNCTION","DataModel","isSimpleObject","HTMLElement","common_utils_typeof","getUniqueId","sanitizeIP","typeObj","nonExistentKeys","checkExistence","getMax","common_utils_toConsumableArray","getMin","getDomainFromData","fieldType","_ref","domArr","_loop","_fields","_slicedToArray","field0","field1","arr0","arr1","firstMin","secondMin","firstMax","secondMax","sanitizeDomainWhenEqual","unionDomain","domains","_ref2","dom","symbolFns","symbolCircle","cross","symbolCross","symbolDiamond","symbolSquare","symbolStar","symbolWye","symbolTriangle","easeFns","cubic","easeCubic","bounce","easeBounce","elastic","easeElastic","back","easeBack","poly","easePoly","circleInOut","getNearestValue","filterData","getWindow","getQualifiedClassName","cancelAnimationFrame","cls","param","objectIterator","Voronoi","common_utils_classCallCheck","_voronoi","_voronoiFn","getObjProp","retObj","_len","_key","intSanitizer","generateGetterSetters","props","propInfo","_propInfo$","sanitization","preset","onset","typeChecker","defVal","isEqual","oldVal","newVal","arraysEqual","arr2","is","ERROR_MSG","INTERFACE_IMPL","mergeRecursive","sink","createSelection","sel","appendObj","idFn","dataSelect","mergedSelection","exitSelection","getObjects","inst","numberInterpolator","interpolateNumber","piecewiseInterpolator","rgbToHsv","detectColor","col","getDataModelFromRange","dataModel","selFields","selFn","getDataModelFromIdentifiers","identifiers","filteredDataModel","fieldsConfig","dataArr","filteredSchema","include","propField","idx","isValidValue","getSymbol","stackOrders","_defineProperty","_stackOrders","stackOrderNone","stackOrderAscending","stackOffsets","_stackOffsets","yp","stackOffsetNone","s2","si","sij0","s3","sk","stack","orderNone","offsetNone","oz","kz","sz","sij","ki","d3Stack","nestCollection","nestFn","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","minDiff","timeFormats","timeDurations","formatTemporal","nearestInterval","getNearestInterval","getValueParser","retrieveNearestGroupByReducers","_len3","measureFieldNames","_key3","filteredReducers","derivations","getAncestorDerivations","nearestReducers","derv","measures","measureName","measureField","retrieveFieldDisplayName","dm","fieldName","sortOrderMap","_sortOrderMap","firstVal","secondVal","localeCompare","_accessors","fn1","fn2","xhtml","src_namespaces","xlink","xml","xmlns","src_namespace","namespaces","space","local","creator","fullname","namespace","creatorFixed","ownerDocument","creatorInherit","uri","namespaceURI","src_selector","selector","querySelector","selectorAll","querySelectorAll","matcher","matches","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","listener","contextListener","related","relatedTarget","compareDocumentPosition","event1","event0","onRemove","typename","__on","removeEventListener","capture","onAdd","wrap","addEventListener","customEvent","args","sourceEvent","dispatchEvent","CustomEvent","createEvent","initEvent","bubbles","cancelable","detail","groups","parents","_groups","_parents","subgroups","subnode","subgroup","enterGroup","updateGroup","_enter","_exit","onenter","onupdate","onexit","groups0","groups1","m0","merges","group0","group1","compareNode","sortgroups","sortgroup","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","ctrlKey","button","defaultContainer","defaultSubject","defaultTouchable","maxTouchPoints","src_drag","mousedownx","mousedowny","mousemoving","touchending","touchable","gestures","clickDistance2","drag","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","yesdrag","noclick","clearTimeout","sublisteners","clickDistance","taskHead","taskTail","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","string00","string10","interpolate0","string0","string1","value1","attrTweenNS","attrInterpolateNS","attrInterpolate","styleTween","styleNull","styleMaybeRemove","listener0","styleInterpolate","removeFunction","tweenRemove","tween0","tween1","tweenFunction","delayFunction","delayConstant","durationFunction","durationConstant","easeConstant","Promise","reject","cancel","interrupt","defaultTiming","easeCubicInOut","selectElement","element","makeElement","elemType","callbacks","keyFn","SVGElement","selectorVal","selectorType","actualSelector","enterSel","mergeSel","_len2","_key2","exitSel","applyStyle","setElementAttrs","attrs","setAttrs","setStyles","styles","createElements","getClientPoint","pos","clientPoint","getEvent","d3event","getD3Drag","d3drag","getSmartComputedStyle","css","textEl","mandatoryStyle","fill-opacity","renderer_utils_typeof","computedStyle","styleForSmartLabel","hasTouch","initProp","fetchPropValues","propNames","deps","setContexts","contexts","propObj","contextMap","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","depProps","err","registerListener","propList","callBack","instantCall","_options$","namespaceInf","callbackFn","namespaceVal","commits","_savedCommits","propListenerMap","_propListenerMap","listenersObj","_registeredListeners","_contextMap","contextsObj","commitsObj","subNamespaces","propDeps","nm","fnInf","fns","store_toConsumableArray","registerPropInMaps","registeredListeners","subNamespace","allProps","_fnCount","addListenerToNamespace","_listeners","namespaceListeners","listenerTypes","removePropValue","propInf","sns","Store","store_classCallCheck","Model","_commits","_queuedProps","_locked","store_createClass","lockModel","lock","unlockModel","unlock","lockCommits","_this","locked","queue","unlockCommits","_this2","queuedProps","_params","store_slicedToArray","propName","_params2","commit","addSubNamespace","propFns","acc","nsObj","retrieveNamespaces","disableListener","sanitizedVal","savedCommits","disabled","registerChangeListener","registerImmediateListener","_len4","_key4","computed","calculatedProp","_this$model","unsubscribeAll","unsubscribe","listenersMap","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","removeSubNamespace","listenerMap","snsMap","transactor","holder","conf","stateProps","nameSpaceProp","nsProp","_len5","_key5","_ref$takesMultiplePar","takesMultipleParams","prevVal","typeCheck","typeExpected","oldValues","events","EVENT_LIST","composition","resolveFn","notification","hasOwn","LifeCycleManager","lifecycle_manager_classCallCheck","_eventList","_promises","_notifiers","_lifeCycles","_unreleasedLifeCycles","_boot","_preparePromises","eventName","promise","_makeNotifierPromise","createPromise","then","prm","formalName","client","_releasePromisesFromCache","_notify","stage","_resolvePromise","retrieve","_callLifeCycleCallback","_cachePromise","_resetTargetPromise","_this3","lifeCycles","_this4","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","mergedEnter","SELECTION","mergedExit","complete","getSetInfo","selectionSet","propagationData","resetted","getModelFromSet","conditions","condition","Firebolt","actions","behaviourEffectMap","firebolt_classCallCheck","_sideEffectDefinitions","_sideEffects","_propagationInf","_actions","behavioural","physical","_selectionSet","_volatileSelectionSet","_propagationFields","_sourceSideEffects","_propagationBehaviourMap","_sourceBehaviours","_actionBehaviourMap","_config","_behaviourEffectMap","_entryExitSet","_actionHistory","_queuedSideEffects","mapSideEffects","registerBehaviouralActions","registerSideEffects","registerPhysicalBehaviouralMap","physicalBehaviouralMap","registerPhysicalActions","setSideEffectConfig","sideEffect","sideEffectConf","behEffectMap","preventDefaultActions","effectNames","effects","firebolt_toConsumableArray","behaviours","initializeBehaviouralActions","dispatchableBehaviours","Action","prepareSelectionSets","initializeSideEffects","sideEffectStore","actionHistory","queuedSideEffects","combinedSet","unionSets","behaviour","entryExitSet","existingModel","aggFns","effect","firebolt_typeof","sideEffectInstance","isEnabled","mutates","dispatchSideEffect","propagationInfo","propagate","getSideEffects","propagationSelectionSet","getPropagationSelectionSet","shouldApplySideEffects","sourceSelectionSet","applicableSideEffects","getApplicableSideEffects","applySideEffects","behaviourConditions","sideEffectConditions","physicalAction","actionBehaviourMap","behaviourMap","mapActionsAndBehaviour","onDataModelPropagation","propValue","dispatchBehaviour","uniqueIds","behaviouralActions","volatileSelectionSet","sideEffectDefinitions","sideEffectsMap","SideEffect","initedActions","initializePhysicalActions","physicalActions","phyAction","initedPhysicalActions","mapObj","getDefaultTargetContainer","bindActionWithBehaviour","targets","behaviourList","mount","propagationInf","entryRowIds","getUids","propagationSource","applicableSelectionSets","GenericBehaviour","firebolt","generic_classCallCheck","_enabled","selectionSets","getSelectionSets","_this$firebolt$getAdd","getAddSetFromCriteria","getPropagationInf","setSelectionSet","getEntryExitSet","_selectionSet$getSets","getSets","setConfig","getFullData","getSourceFields","VolatileBehaviour","reset","existingAddSet","updateExit","getCompleteSet","BRUSH","HIGHLIGHT","TOOLTIP","FILTER","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","MeasureSubtype","isXDimension","isYDimension","xRange","yRange","selectedDomains","rangeObj","xdom","ydom","snap","getNearestRange","attachDragEvent","targetEl","drawingInf","touchStart","d3Drag","getDrawingContext","getSourceInfo","beh","dragEnd","hover","interaction","tooltip","svgContainer","nearestPoint","getNearestPoint","getAllPoints","showInPosition","generatePayloadFromEvent","click","physical_defineProperty","_physicalActions","ACTIONNAMES","longtouch","touchEnd","touchdrag","ANCHORS","BRUSH_ANCHORS","PERSISTENT_ANCHORS","HIGHLIGHTER","CROSSLINE","PROPS","valueParser","GenericSideEffect","generic_sideeffect_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","x1Val","x2Val","bandScale","x1DomainIndex","x2DomainIndex","_sort2","helper_slicedToArray","getScaleValue","getUnitWidth","y1Val","y2Val","y1DomainIndex","y2DomainIndex","_sort4","_xDim","_yDim","dimension","show","selectionBox","selectionBoxDrag","onDrag","boxClassName","INITIAL_STYLE","connectorClassName","row","margin","content","iconContainerSize","iconScale","iconShape","iconColor","rowMargin","separator","parentClassName","arrow","getArrowPos","dim","measurement","arrowPos","boxHeight","boxWidth","arrowWidth","plotBottom","boxBottom","plotRight","boxRight","placeArrow","tooltipArrow","_tooltipArrow","tooltipBackground","_tooltipBackground","arrowConf","_arrowOrientation","Content","content_classCallCheck","_model","_formatter","item","ctx","_mount","displayFormat","table","tbody","rows","elemData","el","shape","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","HIGHLIGHT_SUMMARY","GROUP_BY_FUNCTIONS","formatters","strategies_defineProperty","getKeyValue","isSelected","removeKey","keyObj","valueObj","margin-left","generateRetinalFieldsValues","valueArr","retinalFields","dimensionMeasureMap","fieldInf","dataLen","colorAxis","shapeAxis","sizeAxis","retField","retIndex","retinalFieldValue","measuresArr","icon","getColor","getShape","getSize","_fieldInf$retField","formattedRetinalValue","hasMultipleMeasures","measure","measureIndex","_fieldInf$measure","dName","formatterFn","strategies_toConsumableArray","buildTooltipData","nestedDataObj","fieldValues","_dataModel$getData","fieldspace","_context$firebolt$con","detailFields","FieldType","containsDetailField","getFieldInf","timeDiffs","defFormatter","inf","nf","getTabularData","dataObj","fieldObj","indices","allMeasures","_construct","filteredMeasures","generateTooltipContent","nestedData","_nestedData$i","_fieldInf$field","_loop2","len2","_fieldInf$name","strategies","aggregatedModel","fieldsConf","measureNames","configResolvers","tooltip_defineProperty","_configResolvers","specificConf","_default","_getPrototypeOf2","side_effects_tooltip_classCallCheck","tooltip_possibleConstructorReturn","tooltip_getPrototypeOf","_tooltips","sanitizeConfig","strategyObj","sanitizedConf","setStrategy","totalHeight","totalWidth","isEmpty","tooltips","boundBox","dataModels","fragmented","showVertically","tooltipPos","boxes","tooltip_toConsumableArray","targetFields","sourceFields","plotDimensions","getPlotPointsFromIdentifiers","strategy","strategyConf","dataTransform","projectFields","plotDim","layoutContainer","parentContainerDimensions","layoutBoundBox","unitBoundBox","tooltipInst","TooltipRenderer","timeDiffsByField","strategyFn","positionRelativeTo","tooltipBoundBox","getContents","spaceOutBoxes","spaceOutIfOverlap","firstBox","secondBox","opposite","highlightSummary","selectionSummary","projectedFields","Crossline","bandWidth","_this$config","bandClass","lineClass","fieldIndex","axisIndex","fieldInst","xOffset","plotWidth","crossline_toConsumableArray","getPlotSpan","getPlotPadding","startPx","endPx","dataPoint","parentGroup","fade","fadeFn","focus","highlight","PlotHighlighter","plot_highlighter_classCallCheck","plot_highlighter_possibleConstructorReturn","plot_highlighter_getPrototypeOf","FilterEffect","entryModel","clearCaching","resetData","enableCaching","AnchorEffect","anchors_classCallCheck","anchors_possibleConstructorReturn","anchors_getPrototypeOf","_layersMap","addAnchorLayers","addLayer","layerRegistry","layerDefs","layerDef","mark","layerCls","shouldDrawAnchors","depLayerEncoding","encoding","defaultSizeValue","commonName","groupId","calculateDomain","getTransitionConfig","owner","registry","_linkedLayer$getTrans2","anchors_slicedToArray","getLayerByName","getTransformedDataFromIdentifiers","transformedData","transformedDataModel","PersistentAnchors","BrushAnchors","behaviour_effect_map_defineProperty","BEHAVIOURS","SIZE","COLOR","SHAPE","TEXT","ENCODING","X0","Y0","RADIUS","RADIUS0","ANGLE","ANGLE0","nearestPointThreshold","strokeOpacity","connectNullData","SimpleLayer","props_defineProperty","metaInf","coord","_customConfig","newConf","defaultPolicy","BOTTOM","TOP","LEFT","RIGHT","axisOrientationMap","axis_orientation_defineProperty","_axisOrientationMap","AxisOrientation","LINEAR","BAND","TIME","ORDINAL","QUANTIZE","QUANTILE","LOG","POW","IDENTITY","SEQUENTIAL","THRESHOLD","CONTINOUS","DISCRETE","HIDDEN","DEFAULT_ANGLE_DOMAIN","scaleLinear","scales","scaleThreshold","scaleLog","scalePow","scaleIdentity","scaleOrdinal","scaleSequential","scaleQuantize","scaleQuantile","scaleTime","scaleMap","scale_creator_defineProperty","_scaleMap","ScaleType","createScale","scaleFactory","adjustRange","axisName","axisNamePadding","fixedBaseline","labels","rotation","smartTicks","numberOfTicks","showAxisName","showInnerTicks","showOuterTicks","yOffset","rotateAxis","instance","tickText","labelManager","renderConfig","getTickSize","yShift","xShift","tickLabelDim","quadrant","rotationNormalizer","angleToRadian","angle","changeTickOrientation","selectContainer","axisInstance","_smartTicks","isSmartTicks","registerAnimationDoneHook","setFixedBaseline","setAxisNamePos","textNode","axisNameHeight","availableSpace","longestWord","quarter","halfYearly","mintues","seconds","getTickIntervalFnBasedOnNumberOfTicks","possibleTickLevelIndex","maxPossibleTicks","tickIntervalLevelInfo","tickIntervalInfo","numOfPossibleTicks","getActualTickInterval","noOfTicks","minWidthBetweenTicks","_minTickDistance","getTickIntervalBasedOnCurrentLevel","_dependencies","longestWordType","applyTickSkipping","minTickDistance","minTickSpace","_minTickSpace","minTickWidth","maxTicks","getSkippedTicks","actualNumberOfTicks","_minDiff","millisecondInterval","numOfTicksAccordingToMinDiff","adjustHorizontalRange","adjustVerticalRange","rangeAdjustmentMap","space_setter_defineProperty","_rangeAdjustmentMap","setAxisRange","rangeBounds","getAdjustedRange","getAxisOffset","timeDiff","avWidth","bars","spaceSetter","spaceConfig","heightForTicks","_context$availableSpa2","availWidth","availHeight","isOffset","_context$renderConfig2","_context$getAxisDimen","getAxisDimensions","tickDimensions","allTickDimensions","axisNameDimensions","tickDimHeight","tickDimWidth","namePadding","labelConfig","minTickHeight","getTickValues","tickShifter","maxTickSpaces","widthForTicks","totalTickWidth","getRotatedSpaces","rotatedHeight","rotatedWidth","setOffset","logicalSpace","getAxisComponentDimensions","axisTicks","largestTick","largestTickDimensions","smartTick","_context$renderConfig","labelFunc","_tickLabelStyle","originalLabel","getFormattedText","_axisNameStyle","getHorizontalAxisSpace","axisDimensions","_context$config2","axisDimHeight","minTickDiff","getMinTickDifference","cartesian_axis_helper_toConsumableArray","getVerticalAxisSpace","_context$config3","calculateBandSpace","largestDimHeight","_getHorizontalAxisSpa","_getVerticalAxisSpace","getValidDomain","userDom","setContinousAxisDomain","_domain","axisComponentDimensions","oldConfig","mockedOldConfig","shouldAxesScaleUpdate","hasAxesConfigChanged","obj1","properties","tickFormatter","sanitizeTickFormatter","_scale","_axis","createAxis","_tickFormatter","resetRenderConfig","_renderConfig","_maxTickSpaces","SimpleAxis","simple_axis_classCallCheck","_range","_domainLock","_axisDimensions","defCon","simpleConfig","bodyElem","dist","_animationDonePromises","domainValue","setAxisComponentDimensions","smartAxisName","axisClass","_objectSpread","setTickConfig","setSmartAxisName","_this$config2","dimType","widthDim","getSmartAxisName","oriSize","domainVal","computeAxisDimensions","_getAxisComponentDime","labelHeight","labelWidth","calculateContinousSpace","_context$renderConfig6","axisNameWidth","_getHorizontalAxisSpa2","_getVerticalAxisSpace2","renderAxis","tickLabelStyle","axisTickFormatter","labelProps","labelOffset","all","LinearInterpolator","LogInterpolator","PowInterpolator","interpolatorMap","continous_axis_defineProperty","_interpolatorMap","ContinousAxis","continous_axis_classCallCheck","continous_axis_possibleConstructorReturn","continous_axis_getPrototypeOf","InterpolatorCls","_interpolator","_this$renderConfig","sanitizeDomain","_get2","_get","_this$renderConfig2","newTickValues","tickSpace","getNumberOfTicks","labelDim","numberOfValues","tickLength","_this$smartTicks$","BandAxis","_this$maxTickSpaces","_getRotatedSpaces","paddingNormalized","formatTickValue","TimeAxis","time_axis_classCallCheck","time_axis_possibleConstructorReturn","time_axis_getPrototypeOf","time_axis_get","rawTicks","resetTickInterval","_context$config8","_context$availableSpa","adjustedRange","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","stops","getHslString","hslArr","convertToXllString","baseString","getActualHslColor","paletteColor","hexToHsv","props_toConsumableArray","newConfig","uniqueValues","treatNullMeasures","scaledVal","minDomainScaledVal","resolveAxisConfig","propVal","defaultVal","getStops","newStops","color_strategy_toConsumableArray","rangeStops","newStopsLength","newRange","hslInterpolator","interpolateHslLong","indexedDomain","uniqueVals","scaleDomain","indexedDomainMeasure","normalDomain","steppedDomain","_getStops","continousSteppedDomain","_getStops2","uniqueRange","indexedRange","numVal","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","size_strategy_defineProperty","size_strategy_strategies","pieceWiseRange","size_strategy_toConsumableArray","intervals","newIntervals","discreteRange","SizeAxis","size_axis_classCallCheck","_sizeStrategy","domainInfo","domainFn","generator","ShapeAxis","shape_axis_classCallCheck","_generatedShapes","shapeType","shapeGenerator","generatorFn","generatedShapes","createAngleValues","angleData","_angleFn","_angleValues","AngleAxis","angle_axis_classCallCheck","customDomain","customRange","_this$_range","angle_axis_slicedToArray","ROWS","COLUMNS","COL","ROW","CELL","X_AXES","Y_AXES","ENTRY_CELLS","EXIT_CELLS","PRIMARY","SECONDARY","adjustDomain","minOuterRadius","RadiusAxis","radius_axis_classCallCheck","_radiusFactor","sanitizedRange","rangeVal","DATA_TYPES","group_transform","data_type_scale_map_defineProperty","_dataTypeScaleMap","groupByIndices","groupedData","identityTransform","transformMap","transform_factory_defineProperty","_transformMap","uniqueField","valueField","normalizedData","normalizeData","uniqueFieldIndex","valueFieldIndex","seriesKeyIndex","seriesKeys","fieldNames","tuples","rowObj","_tuple","seriesKey","newArr","orderBy","orderIndex","groupByIndex","stackData","seriesData","transformFactory","POLAR","CARTESIAN","transformColor","styleType","intensity","stateColor","originalColor","colorInfo","interactionStyles","elements","getPlotElementsFromSet","_d$meta","colorTransform","helpers_slicedToArray","getAxesScales","_map2","_map4","xScale","yScale","encodingFieldInfRetriever","helpers_defineProperty","_encodingFieldInfRetr","encodingInf","getIndividualClassName","individualClassName","classNameStr","dataNormalizers","_dataNormalizers","encodingFieldInf","radiusFieldIndex","angleFieldIndex","radius0FieldIndex","angle0FieldIndex","fieldsLen","pointObj","radius0","angle0","enc","rowId","transformType","xFieldIndex","yFieldIndex","x0FieldIndex","y0FieldIndex","tuple","domainCalculator","_domainCalculator","layerInst","angleValues","radius0Field","encodingFieldsInf","xFieldSubType","yFieldSubType","x0Field","y0Field","yEnc","xEnc","attachDataToVoronoi","_ref3","helpers_toConsumableArray","updateStyle","positionPoints","positioner","encodingTransform","getPlotMeasurement","dimensionalValues","fieldInfo","_bandScale","span","groupSpan","offsetValues","actualGroupWidth","dataProps","innerPadding","getGroupSpan","isAxisBandScale","axisPadding","groupPadding","resolveInvalidTransformType","transformResolverPredicates","groupByField","dimensionField","getValidTransformForAggFn","resolvedInvalidTransformType","_context$encodingFiel","isCustomTransformTypeProvided","resolveEncodingValues","transformedValues","getColorMetaInf","colorInf","getHslArray","getCoordValue","trig","coordValueGetter","toCartesianCoordinates","rangePlot","_point$update","_coordValueGetter","sortData","axisArr","localOptions","local_options_defineProperty","STATE_NAMESPACES","listener_map_slicedToArray","_cacheEnabled","_cachedData","encodingValue","resolveTransformType","_transformedData","getTransformedData","_normalizedData","getNormalizedData","calculateDomainFromData","layerNs","groupNs","BaseLayer","base_layer_classCallCheck","base_layer_possibleConstructorReturn","base_layer_getPrototypeOf","base_layer_assertThisInitialized","alias","_points","_measurement","_graphicElems","_store","_this$metaInf2","parentNamespace","_encodingFieldsInf","_encodingTransform","_alias","transformData","encodingType","_this$metaInf3","transformedDataArr","_updateLock","_transformType","getValidTransform","_this$metaInf4","unitDom","pointMap","_pointMap","_dataProps","_this$encodingFieldsI","base_layer_slicedToArray","xMeasure","yMeasure","_identifiers$","_identifiers$2","xMeasureIndex","yMeasureIndex","getAllAttrs","filteredPoints","base_layer_toConsumableArray","sizeVal","_identifiers$getData","identifierData","identifierSchema","_this$encodingFieldsI2","tupleArr","transformedVal","graphicElems","elems","_this$metaInf5","rowIndex","unitRowIndex","colIndex","unitColIndex","renderLayer","throwback","_context$metaInf","base_layer_defineProperty","getState","base_layer_construct","userConf","drawLine","curveInterpolatorFn","linepath","LineLayer","line_classCallCheck","line_possibleConstructorReturn","line_getPrototypeOf","isXDim","isYDim","xPx","yPx","resolvedEncodings","stroke","cachePoint","seriesClassName","containerSelection","colorField","colorFieldIndex","animateGroup","groupTransition","groupAnimateStyle","stroke-opacity","getPathStyle","translatePoints","colorValFn","colorVal","getDrawFn","searchRadius","_point$data$data","getIdentifiersFromData","layerId","drawArea","easeEffect","renderer_slicedToArray","enterAreaPath","updateAreaPath","selectionEnter","AreaLayer","area_get","area_getPrototypeOf","_getAxesScales","classNameFn","minYVal","basePos","y0Px","invalidY","invalidY0","resolvedValues","stroke-width","stroke-linejoin","states","fadeout","selected","ArcLayer","arc_classCallCheck","arc_possibleConstructorReturn","arc_getPrototypeOf","_prevPieData","_this$axes","radiusAxis","pieIndex","prevData","angleV","angles","_angles","uid","getOuterRadius","getInnerRadius","startAngle0","endAngle0","_previousInfo","getPreviousPoint","currIndex","prevArc","nextArc","_context$axes$angle$r2","arc_helper_slicedToArray","qualClassName","_arcFn","consecutiveExits","exitCounter","tweenPie","individualClass","tweenExit","exitArr","oldExitCounter","tweenExitPie","consecutiveExitArr","gElem","pieSlices","pieSliceInf","tData","drawText","selectionMerge","backgroundVal","textanchor","textStyle","background","backgroundPadding","_smartLabel$getOriSiz","backgroundEl","alignment-baseline","defaultEncoding","alignmentBaseLine","defRotation","pointTranslators","polar","textEncoding","angleAxis","textFormatter","backgroundEncoding","backgroundValue","resolvedVal","cartesian","textField","textFieldIndex","textValue","text_slicedToArray","TextLayer","text-anchor","drawSymbols","createShape","groupElement","res","Element","newShape","nodeName","src","href","shapeElement","pathStr","checkPath","exitGroup","defColorStyle","fillOpacity","shapes","sizes","PointLayer","point_classCallCheck","point_possibleConstructorReturn","point_getPrototypeOf","_config$offset","offsetX","offsetY","point_slicedToArray","maxSize","generateDataPoints","point_toConsumableArray","drawFn","getMarkId","_maxSize","_getPlotMeasurement2","widthMetrics","heightMetrics","offsetXValues","offsetYValues","measurementConf","getMeasurementConfig","widthSpan","heightSpan","distanceLimit","drawRects","barEnterFn","transitionBars","selTransition","positionRetriever","isNegativeVal","barBasePos","resolveDimByField","axesInfo","spaceType","sizeEncoding","sizeConfig","sizeValue","enterSpace","minVal","maxVal","diffPx","minDomVal","_positionRetriever$ty2","bar_helper_slicedToArray","resolveDimensions","_resolveDimByField","enterWidth","enterX","xPos","_resolveDimByField2","enterHeight","BarLayer","bar_classCallCheck","bar_possibleConstructorReturn","bar_getPrototypeOf","_plotPadding","_plotSpan","bar_get","getTranslatedPoints","normalizedDataArr","clipElement","clipPathElement","bar_slicedToArray","barWidthMetrics","barHeightMetrics","barWidthOffsets","barHeightOffsets","barWidth","barWidthOffset","barHeight","barHeightOffset","uniqueFieldType","pointFound","bar_toConsumableArray","p2","tick_renderer","ticksEnter","angle0Axis","angle0V","angles0","_angles2","_layerInst$encodingFi","_config$span","xSpan","ySpan","x0Px","TickLayer","drawTicks","AREA_LAYER","ARC_LAYER","LINE_LAYER","TEXT_LAYER","POINT_LAYER","BAR_LAYER","TICK_LAYER","SIMPLE_LAYER","BASE_LAYER","sanitizeEncoding","layerFactory","compositeLayers","factoryObj","setLayerRegistry","reg","_layerRegistry","getSerializedConf","serializedDefs","defs","unitLayerDef","sDef","parseLayerDefinition","layerType","strs","layer_factory_toConsumableArray","getLayerInstance","instances","layerObj","layerConstructor","getLayerClass","composeLayers","sanitizeLayerConfig","DEFAULT_LAYERS","defaults_defineProperty","_DEFAULT_LAYERS","LAYER_TYPES","local_options","visual_group_local_options_defineProperty","_CONFIG$ROWS$COLUMNS$","SimpleGroup","action_behaviour_map_defineProperty","ACTIONS","sanitizeLayerDef","sanitizedDefs","sConf","unionDomainFromLayers","layerAxisIndex","getDataDomain","domainValues","layerDomain","fieldDomain","encodingDomain","fieldStr","domain1","renderLayers","_lifeCycleManager","notify","orderedLayers","layerParentGroup","layerDepOrder","getDependencyOrder","graph","dependencyOrder","visited","visit","_layerDepOrder","_timeDiffs","getLayersBy","searchBy","removeLayersBy","createRenderPromise","_renderedPromise","_renderedResolve","radiusAxes","getRadiusRange","isXandYMeasures","_context$fields","src_helper_slicedToArray","xMeasures","yMeasures","getKey","GRID_BAND","GRID_LINE","getGridLayerDefinitions","axisType","getDefaultVisibilty","getLayerDefinition","_definition","_axes","_encoding","gridLines","gridBands","gridLineColor","zeroLineColor","gridBandColor","isLinearScale","grid_lines_defineProperty","isNegativeDomain","_context$axes","dimensionSubTypes","getValidSubtype","attachDataToGridLineLayers","_gridLines","_gridBands","gridLayerData","getGridLayerData","gridData","jsonData","_jsonData$push","grid_lines_toConsumableArray","calculateDomainListener","_layerAxisIndex","src_listener_map_slicedToArray","fieldsVal","removeExitLayers","layersMap","markSet","queuedLayerDefs","_queuedLayerDefs","layerDefArr","defFn","listener_map_toConsumableArray","hasPlotSpan","axesObj","temporalFields","filteredFields","_ref5","_ref6","minimumConsecutiveDifference","_ref7","_ref8","_timeDiffsByField","originalData","cachedData","createSelectionSet","attachPropagationListener","_ref9","createGridLineLayer","vuConf","definitions","atomicDef","_ref11","_ref12","transformDataModels","transformVal","_ref15","_ref16","layerAxisIndexVal","axesVal","attachDataToLayers","transformedDataModels","dataSource","_dimensionMeasureMap","getDimensionMeasureMap","retinalEncodingsAndMeasures","_layer$encodingFields","sizeField","shapeField","_retinalEncodingsAndM","src_helper_toConsumableArray","attachAxisToLayers","axisInf","src_props_defineProperty","_PROPS","payloadGenerator","brush","selectionDataModel","propPayload","getRangeFromData","propCriteria","fieldMap","isDimension","payload_generator_toConsumableArray","__default","propagateValues","propagationFieldInf","propagationFields","sideEfffects","mergedModel","sourceUnit","sourceCanvas","parentAlias","propagationBehaviour","propFields","facetByFields","getModelWithFacetData","schema1","data1","derivedSchema","dataAtFirstPos","data_propagator_toConsumableArray","behaviourInstance","entry","propagationConf","sourceBehaviour","enabled","propConf","actionInf","sideEffectPolicy","sourceIdentifierFields","hasCommonCanvas","UnitFireBolt","src_firebolt_classCallCheck","firebolt_possibleConstructorReturn","firebolt_getPrototypeOf","SIDE_EFFECTS","changeSideEffectStateOnPropagation","unitId","aliasName","propagationSourceCanvas","sourceUnitId","sourceSideEffects","sideEffectInstances","actionOnSource","mappedEffects","sideEffectCheckers","checker","_getSelectionRejectio","getSelectionRejectionModel","propModel","propValuesMap","rejectionModel","_propModel$getData","exitRowIds","rowIdsObj","_cachedValuesMap","enabledFn","sourceBehaviours","trackerClassName","arcLayerClassName","sideEffectClassName","src_local_options","src_local_options_defineProperty","_CONFIG$LAYERDEFS$TRA","valuesMap","getValuesMap","_model$getData","fieldIndices","local_options_toConsumableArray","oldData","unitNs","VisualUnit","visual_unit_classCallCheck","lifeCycleManager","_gridLinesSelection","_gridBandsSelection","_this$_dependencies","fireboltDeps","_firebolt","_rootSvg","class","renderGridLineLayers","gridLineParentGroup","_entry","grid_lines_slicedToArray","parentGroupClass","_sideEffectGroup","createSideEffectGroup","initSideEffects","rootSvg","_this$parentContainer","parentContainerInf","layerDefinition","layerDefinitions","components","layerIndex","layersArr","_layersArr","markId","defArr","getLayerFromDef","existingLayer","instanceArr","instanceValues","visual_unit_toConsumableArray","layerdeps","depArr","resolveEncodingTransform","resolvable","resolved","getLayerAxisIndex","_layer$config","specificField","encodingField","_this$_dependencies2","parentModel","dimValue","getNearestDimensionalValue","entryVal","pointInf","getMarkInfFromLayers","markInf","parsedIdentifiers","transposeArray","getPointsFromIdentifiers","localNs","visual_unit_slicedToArray","visual_unit_defineProperty","dispatchQueuedSideEffects","firebolt_helper_toConsumableArray","clearActionHistory","visual_unit_construct","Variable","ComposedVars","composed_vars_classCallCheck","composed_vars_possibleConstructorReturn","composed_vars_getPrototypeOf","vars","_vars","_data","member","getMinDiff","SimpleVariable","simple_var_classCallCheck","simple_var_possibleConstructorReturn","simple_var_getPrototypeOf","oneVar","_oneVar","dtFormat","dateFormat","fieldDef","varInst","convertToVar","datamodel","transformFields","field_sanitizer_slicedToArray","normalizedFields","normalizeFields","norFields","orderFields","fieldArray","dimensionArr","measureArr","temporalArr","categoricalArr","fieldList","numOfMeasures","allDimensions","field_sanitizer_toConsumableArray","temporal","categorical","rowsInfo","columnsInfo","rowDimensions","rowMeasures","rowTemporalFields","rowCategoricalFields","columnDimensions","columnMeasures","columnTemporalFields","columnCategoricalFields","VisualEncoder","_fieldInfo","_axisFrom","_headerFrom","__headerFrom","axisFrom","_getHeaderAxisFrom2","visual_encoder_slicedToArray","getHeaderAxisFrom","rowHeader","rowAxis","_getHeaderAxisFrom4","colHeader","colAxis","column","headerFrom","scaleMaps","dataTypeScaleMap","generateAxisFromMap","axesCreators","facetFields","axisKey","groupAxes","currentAxes","cacheMaps","commonAxisKey","getAxisKey","axisConfig","getAxisConfig","axisInfo","axisOrientation","columnIndex","rawUserAxisConfig","userAxisConfig","_rotationLock","createSimpleAxis","Cls","sanitizeIndividualLayerConfig","encodingConfigs","getIndex","arrIndex","CartesianEncoder","geomCellAxes","projections","rowFields","columnFields","geomCell","xAxes","yAxes","units","1","rIdx","unitsArr","cIdx","encodingDomains","axisTypeIndex","typeOfField","_resolver$axes","axesArr","adjustedDomain","typeOfAxis","alignZeroLine","getAdjustedDomain","y1ratio","y2ratio","allSameSign","currentFieldName","sortingOrder","sortCategoricalField","sortOrder","sortOrderType","facets","counter","primaryFacets","secondaryFacets","primaryFields","secondaryFields","primaryLen","secondaryLen","projArr","primaryField","secondaryField","facet","existIndex","axisFromIndex","cartesian_encoder_get","cartesian_encoder_getPrototypeOf","groupedModel","encodingObj","retriveDomainFromData","layerArray","serializedLayers","userLayerConfig","layerConfig","retinalConfig","colField","colFieldName","rowField","configs","rowFieldName","rowFieldType","getDefaultMark","colFieldType","defConfigs","layerConfigs","getLayerConfFromFields","colFields","encodingArr","encoder_helper_toConsumableArray","xFields","yFields","colFieldExist","rowFieldExist","layerConf","mergedLayerConf","serializedLayerConfig","cartesian_encoder_toConsumableArray","axesCls","polar_encoder_defineProperty","_axesCls","PolarEncoder","pieAxes","matrixLayers","resolverAxes","varInstances","encType","userConfig","domainProps","matrixInstance","unitDomains","setRadiusFactor","sizeFieldIndex","sizeMultiplier","getSizeMultiplier","sizeAxisDomain","encodingFields","_layers","sanitizedRows","sanitizedColumns","polar_encoder_get","polar_encoder_getPrototypeOf","sanitizedFields","typeIndex","fieldSet","polar_encoder_toConsumableArray","layerEncoding","sanitizedConfig","angleField","angle0Field","RetinalEncoder","newAxes","createRetinalAxis","fieldProps","getAxisType","isDistributionEqual","group_utils_toConsumableArray","rowType","initializeCacheMaps","cellMap","xAxesMap","yAxesMap","entryCellMap","exitCellMap","headerCreator","fieldHeaders","TextCell","getHeaderText","headers","rowLength","header","getEncoder","encoder","hasPolarEncodings","userAxisFromConfig","group_utils_slicedToArray","firstField","secondField","firstFieldType","secondFieldType","setFacetsAndProjections","_encoder$simpleEncode","simpleEncoder","getFacetsAndProjections","group_utils_defineProperty","getBorders","matrices","showRowBorders","showColBorders","showValueBorders","valueMatrix","_rows","leftRows","rightRows","_columns","topColumns","bottomColumns","_encoder$fieldInfo","allDimensionLength","allMeasuresLength","allTemporalFieldsLength","getRowBorders","borders","getColumnsBorders","getValueBorders","borderTypeRow","borderTypeCol","sortFacetFields","sortInfo","sortConfig","facetSortConfig","getSchemaDef","getFieldNames","fieldVar","matrix_model_toConsumableArray","prepareHashMaps","facetNames","hashMap","rowKey","joinedRowKey","createJoinedKeys","keyArr","joinedKey","formatKeys","formatterList","formattedKeys","rKeys","createColumnDataModels","colContext","sourceDM","rowFacets","colFacets","rowKeyArr","colKeyObj","newRowIndex","splitModelsHashMap","currentColumnIndex","colKeyArr","colKey","hashMapKey","splitByColumn","optionalProjections","facetInfo","projectionInfo","geomCellCreator","uniqueFields","commonFields","_indices$i","projectionIndexObject","matrix_model_objectSpread","getMatrixModel","globalConfig","currentRowIndex","prepareProjectionInfo","colProjections","rowProjections","rowProj","rIndex","newRIndex","colProj","cIndex","newCIndex","newRowProj","newColProj","prepareFacetInfo","rowFacetNames","colFacetNames","allFacets","_getSplitModelHashMap","getSplitModelHashMap","splitModels","rowKeyHashMap","colKeyHashMap","rowKeys","colKeys","splitContext","splitByRow","generalContext","rowKeyObj","createRowDataModels","rowContext","rowIndexForCurrentKey","_createColumnDataMode","_createColumnDataMode2","_createColumnDataMode3","_createColumnDataMode4","formattedColKeys","facetField","rawFormat","columnKeys","createValueCells","suppliedLayers","GeomCell","horizontalAxis","verticalAxis","datamodelTransform","sortedFields","layerConfigArr","getLayerConfig","normalizedColumns","normalizedRows","cell_creator_toConsumableArray","geomCellKey","getCellKey","columnId","updateCells","facetKey","extractAxisIndex","createAxisCells","currObj","axisInst","_axisInst$config","AxisCell","BlankCell","extractFacetIndex","headerPlaceholderGn","selectionObj","selectionKeys","keySet","textCells","createTextCells","textCell","generatePlaceholders","facetsAndProjections","encoders","valuesMatrix","takeAxisFrom","takeHeaderFrom","axisPlaceholderGn","selObj","axesMatrix","selObjProp","axesForDraw","rowsPrimary","rowPrime","rowsSecondary","rowSec","columnsPrimary","colPrime","columnsSecondary","colSec","_selectionObj","section","hContext","getAxisFields","fieldHolder","ac","transformDataModel","resolvedData","allFields","extractFields","layerFields","_ref4","flattenArray","getFieldsFromSuppliedLayers","suppliedLayerConfig","aggregationFns","nearestAggFns","resolvedAggFns","sortDmTemporalFields","fieldConfig","computeMatrices","componentRegistry","autoGroupBy","otherEncodings","matrixGnContext","getCellDef","isRowSizeEqual","isColumnSizeEqual","colCells","rowCells","resetSimpleAxes","newCacheMap","valueCellContext","serializeLayerConfig","cellCreator","valueCellsCreator","valueMatrixInfo","removeExitCells","exitCells","qualifiedStateProps","getQualifiedStateProps","placeholder","_mutateAxesFromMap","mutateAxesFromMap","xAxisSet","yAxisSet","axisId","createUnits","_generateMatrices","generateMatrices","leftHeaders","topHeaders","bottomHeaders","rightHeaders","cell_creator_slicedToArray","leftFacets","rightFacets","rowPriority","colPriority","leftMatrix","rightMatrix","topMatrix","bottomMatrix","currentBottomLength","setAvailableSpace","rowMatrix","columnMatrix","RESOLVER_PROPS","MatrixResolver","matrix_resolver_classCallCheck","_registry","_layerConfig","_matrixLayers","_rowMatrix","_columnMatrix","_valueMatrix","_facets","_projections","_datamodelTransform","_units","_cacheMaps","_fireboltDeps","maps","matrix_resolver_toConsumableArray","_horizontalAxis","_verticalAxis","matrixType","matrix_resolver_defineProperty","_this5","sideEffectRegistry","_this$dependencies","unitConfig","extractUnitConfig","_this$getAllFields","retContext","getRetinalFieldsDomain","retinalEncoder","setCommonDomain","_this6","retinalAxes","updateModel","placeholders","bottomLeft","bottomRight","_this$dependencies3","showHeaders","matrix_resolver_slicedToArray","topCols","bottomCols","rowHeaders","blankCellCreator","footers","topLeft","topRight","ValueMatrix","matrixArr","value_matrix_classCallCheck","instancesById","cellValue","_instancesById","_matrix","_filterFn","rowWidth","currentRowWidth","getLogicalSpace","rowHeight","currentRowHeight","setMatrixInstances","_composition","createMatrices","matrixConfig","unsubscribeChangeListeners","sanitizeRetinalConfig","retinalConf","confValue","groupType","fieldSanitizer","setAxisAndHeaders","placeholderInfo","getMatrices","_groupedDataModel","createRetinalAxes","setDomains","cornerMatrices","createHeaders","metaData","border","unionUnitDomains","registerDomainChangeListener","visual_group_props_defineProperty","visual_group_props_PROPS","cellRegistry","VisualGroup","visual_group_classCallCheck","visual_group_possibleConstructorReturn","visual_group_getPrototypeOf","componentSubRegistry","visual_group_assertThisInitialized","_selection","initializeGlobalState","globalState","createUnitState","_VisualUnit$getState2","visual_group_helper_slicedToArray","localState","createLayerState","_BaseLayer$getState2","setupChangeListeners","stores","comp","getListeners","storeInst","listenerInf","variable","findInGroup","channel","group_utils_this","facetType","projType","getRetinalAxes","getSimpleAxes","_this$resolver$getAll","visual_group_defineProperty","info","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","rawVal","check","assembleModelFromIdentifiers","temp","fieldVal","src_firebolt_helper_toConsumableArray","LegendFireBolt","_Firebolt","legend_firebolt_classCallCheck","legend_firebolt_possibleConstructorReturn","legend_firebolt_getPrototypeOf","legend_firebolt_inherits","legend_firebolt_createClass","behaviourName","getCriteriaFromData","firebolt_physical_defineProperty","physical_physicalActions","boundingBox","gradientDimensions","axisScale","rangeShifter","drag_defineProperty","getSelectionCriteria","selectionBoxMeasure","drawingInfMeasure","subjectStartPoint","gradientDimension","legendGradContainer","legendSelGroup","enterFn","getMousePos","boundingClientRect","selection_box_drag_defineProperty","fadeOut","brighten","LegendHighlighter","legend_highlighter_classCallCheck","legend_highlighter_possibleConstructorReturn","legend_highlighter_getPrototypeOf","legendContainer","resetLogicalSpace","title","_title","ALIGN","DEFAULT_MEASUREMENT","LEGEND_TITLE","borderStyle","borderColor","bounds","upper","ICON_MAP","getScaleInfo","scaleType","steps","scaleFn","getInterpolatedArrayData","domainForLegend","scaleParams","requiredWidth","requiredHeight","upperBound","maxTickDiff","alignment","smartLabelCalc","minimumTickSize","_smartLabelCalc$getOr","isInteger","getcomputedArray","computationhelper","requiredMeasure","availableMeasure","currentTickValue","nextTickValue","measureParam","pixelPerTick","getInterpolatedData","recomputeSteps","getTickMeasure","_scaleParams$measures","interpolatedFn","tickValue","getDomainBounds","domainBounds","domainLeg","ele","legend_helper_defineProperty","getScaleFactor","SimpleLegend","simple_legend_classCallCheck","_metaData","_fieldName","_labelManager","_cells","defaultMeasurement","_computedStyle","legendBehaviours","_canvasAlias","getItemMeasures","_labelManager$getOriS","_this$measurement","effPadding","effBorder","effMargin","dataFromScale","titleSpace","getTitleSpace","titleHeight","titleWidth","labelSpaces","getLabelSpaces","_computeItemSpaces","computeItemSpaces","maxItemSpaces","textOrientation","itemSpaces","iconSpaces","maxIconWidth","labelSpace","itemSpace","iconSpace","newLabelWidth","titleSpaces","_this$measurement2","_this$config3","titleCreator","titleContainer","marginPosition","_this$config4","_this$measurement3","renderTitle","simple_legend_defineProperty","legendOrientation","position_config_defineProperty","_legendOrientation","datasets","itemContainerMeasures","getStepSpacesInfo","iconHeight","iconWidth","stepPadding","horizontal","vertical","positionConfig","_positionConfig","alignmentMap","_alignmentMap","itemStack","_itemStack","createLegendSkeleton","gradWidth","gradHeight","maxGradHeight","maxGradWidth","legendBody","legendItem","getItemContainers","legendInstance","positionObj","createItemSkeleton","_context$config","itemSkeleton","alignClass","applyItemStyle","measureType","stepColorCheck","_context$measurement","renderIcon","defaultIcon","DiscreteLegend","_getScaleInfo","discrete_legend_toConsumableArray","_field$schema","discrete_legend_defineProperty","discrete_legend_get","discrete_legend_getPrototypeOf","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","gradient_legend_get","gradient_legend_getPrototypeOf","renderGradient","_createLegendSkeleton","StepLegend","step_legend_toConsumableArray","step_legend_defineProperty","lowerBounds","upperBounds","step_legend_get","step_legend_getPrototypeOf","stepData","renderStepItem","_context$measurement3","_item$icon2","_positionConfig$posit","PADDING","BORDER","MARGIN","TITLE_TEMPLATE_NOT_ALLOWED_TAGS","LEGEND_TYPE_MAP","constants_defineProperty","_LEGEND_TYPE_MAP","HORIZONTAL_CENTER","VERTICAL_CENTER","share","operators_construct","operators_toConsumableArray","strings","htmlCode","expLn","frag","createDocumentFragment","treeShakeNode","nodeType","Node","ELEMENT_NODE","tagName","childNodes","canvasIterator","canvases","iteratorFn","cFn","canvas","visualGroup","_throwback","listenerFn","registerActions","fnName","_registrableComponents","setFireboltDependencies","actionModel","ActionModel","action_model_classCallCheck","registerPropagationBehaviourMap","dissociateBehaviour","dissociateSideEffect","policy","registrableComponents","mergedPolicy","aliases","*","propagationPayload","propagationCanvas","crossInteractionPolicy","TITLE_CONFIG","SUB_TITLE_CONFIG","maxLines","MESSAGE_CONFIG","canvas_local_options_defineProperty","_localOptions","canvasOptions","_canvasOptions","local_options_slicedToArray","arg1","arg2","local_options_typeof","titleConfig","defConfig","subtitle","subtitleConfig","sub","LayoutComponent","layoutComponent_classCallCheck","_boundBox","_renderAt","_alignWith","_alignment","_componentName","_className","DummyComponent","newDimensions","renderAt","component","componentName","pagination","scrollBar","thickness","speed","legend","minHeight","minCharacters","verticalAlign","collapse","invalidValues","DEFAULT_WIDTH","DEFAULT_HEIGHT","DEFAULT_CLASS_NAME","NODE_PREFIX","DefinitionModel","definitionModel_classCallCheck","_host","host","_cut","cut","_ratioWeight","ratioWeight","_preferred","preferred","_lanes","lanes","_remainingHeight","_remainingWidth","remainingHeight","remainingWidth","getNodeId","_uid","yExtraSpace","smallestHeight","getCutType","smallestExtraHeightHorizontally","MAX_SAFE_INTEGER","containerHeight","hostHeight","xExtraSpace","smallestWidth","smallestExtraWidthVertically","containerWidth","hostWidth","createPlaceHolderComponent","placeComponent","definitionModel","leftOvercomponentRationWidth","isPreferred","isGridComponent","componentRatioWidth","leftHeight","leftWidth","_component$getLogical","componentHeight","componentWidth","firstLaneConfig","firstLane","secondLane","tree_classCallCheck","_parentCut","_this$_children","tree_toConsumableArray","parentCut","bound","nodeconfig","searchNode","childNode","nodeId","deleteSearchNode","LayoutModel","measurements","layout_model_classCallCheck","_measurements","_root","createTree","setBoundBox","addChildren","lane","allocateBoundingBox","totalWeight","carry","lastSibling","ratio","setHostSpatialConfig","setHostPosition","negotiateDimension","alteredDim","nonAlteredDim","cumultiveExtraSpaceAmt","childrenLength","extraSpaceAmt","computePosition","determineBoundBox","bb","_lastSibling$boundBox","_top","_left","_height","_width","_instance$parent$boun","setSpatialConfig","VIEW_INDEX","ROW_MATRIX_INDEX","2","COLUMN_MATRIX_INDEX","HEIGHT","ROW_ROOT","COLUMN_ROOT","VERTICAL","HORIZONTAL","Utils","utils_classCallCheck","utils_createClass","isDOMElement","getID","getElement","findContainer","coordinate","removeDiv","divId","DataPoint","data_point_classCallCheck","DataParser","data_parser_classCallCheck","data_parser_createClass","defaultDataPointLogic","nodepoints","getnodePoints","datapoint","HTMLDataAdapter","_DataParser","html_data_classCallCheck","html_data_possibleConstructorReturn","html_data_getPrototypeOf","html_data_inherits","html_data_createClass","getCoordinates","html_data_get","Renderer","renderer_classCallCheck","renderer_createClass","initRenderer","__logicalTree","HTMLRenderer","_Renderer","html_renderer_classCallCheck","html_renderer_possibleConstructorReturn","html_renderer_getPrototypeOf","_coordinates","html_renderer_inherits","html_renderer_createClass","createhtml","mainDiv","html_renderer_get","parentDiv","createAndCustomiseParent","hasHost","createAndPositionDiv","html_renderer_objectSpread","div","coordinates","findNode","nodeID","renderer","drawLayout","renderHTML","resolveAligment","componentData","alignWith","componentToAlign","componentMap","refNode","newNodeConfig","setAlignConfig","DrawingManager","drawing_manager_classCallCheck","_componentMap","_layoutClassName","layoutClassName","_renderer","drawing_manager_createClass","drawComponent","DefinitionManager","definition_manager_classCallCheck","_prioritySequence","_totalHeight","_totalWidth","_targetComponentMap","prepareTargetComponentMap","targetComponentMap","canvasComponent","tempDefModel","componentRef","getComponent","placeGridComponent","gridComponents","iscolumnPreffered","_placeComponent","rowpreffred","LayoutDef","layout_def_classCallCheck","_layoutDefinition","layout_def_createClass","addComponent","layoutDefinition","addMultipleComponent","componentArray","sanitizedDefinition","hostObj","hostID","childHost","resetComponentMap","LayoutManager","layout_manager_classCallCheck","_dimension","_skeletonType","skeletonType","_layoutDef","_drawingManager","_rootNodeID","con","resetNode","updateNode","compute","_layout","calLayOutDef","_context$dimension","layoutDef","prioritySequence","generateConfigModel","negotiate","broadcast","layoutComponents","componentArr","compo","elementName","removeElement","elemID","co","deleteElement","setupChangeListener","allOptions","_allOptions","canvas_helper_toConsumableArray","nameSpaceProps","equalityProps","equalityChecker","option","updateProps","updateChecker","dispatchProps","_cachedProps","notifyAnimationEnd","viewInfo","layout","centerMatrix","viewMatricesInfo","promises","cellArr","lifeCycle","animDonePromises","animationDone","applyInteractionPolicy","interactionPolicy","_interactionPolicy","_crossInteractionPolicy","unitFireBolt","changeBehaviourStateOnPropagation","createLayoutManager","src_options","minUnitWidth","minUnitHeight","options_slicedToArray","_ref2$","_auxConfig$reset","oldConf","fixScrollBarConfig","GenericLayout","generic_layout_classCallCheck","_matrices","_centerMatrix","_mountPoint","DEFAULT_CONFIGURATION","grid_layout_defaults_defineProperty","_DEFAULT_CONFIGURATIO","_FieldNames$BORDER","DEFAULT_MEASUREMENTS","_DEFAULT_MEASUREMENTS","findInPage","page","combineMatrices","isTransposed","joinedMatrix","utils_toConsumableArray","rowData","computeLogicalSpace","maxMeasures","_config$isTransposed","unitMeasures","_getMeasureInfo","getMeasureInfo","firstMeasure","secondMeasure","minMeasures","getMinMeasures","_logicalSpace","utils_defineProperty","valueItem","maxMeasure","firstMeasureValue","secondMeasureValue","valueArray","_item$space","fMeasure","sMeasure","minSecondMeasure","createMatrixEachLevel","_arr$i","extraCellsRemover","beg","distribution","extraCellLengths","VisualMatrix","visual_matrix_classCallCheck","_lastLevelKey","_primaryMatrix","_secondaryMatrix","_maxMeasures","_availableSpace","_layoutMatrix","_tree","_createTree2","matrixTree","lastLevelKey","layoutMatrix","primaryMatrix","secondaryMatrix","breakPage","primaryMatrixLength","newMatrix","keyLength","heightMeasures","populateMaxMeasures","widthMeasures","calculateDepth","viewableMatrix","createViewPortMatrix","viewableMeasures","redistributeSpaces","childDepth","createMatrixInstances","matrixInfo","breakPointer","_breakPointer","brokenMatrix","breakMatrix","nextLevel","removeExtraCells","RowVisualMatrix","row_matrix_classCallCheck","row_matrix_possibleConstructorReturn","row_matrix_getPrototypeOf","maxHeights","maxWidths","matrixInst","cellDimOptions","matrixIndex","_this2$getCellDimensi","getCellDimensions","widths","rowHeights","columnWidths","primary","secondary","begCellLen","endCellLen","remainingAvailWidth","cWidths","maxPrioritySpace","availableWidth","currentWidth","prioritySpace","logicalWidths","getPriorityDistribution","mWidth","mHeight","redistributeViewSpaces","computeViewableSpaces","rHeights","gutter","spaceTakenByColumn","spaces","getDistributedHeight","heightWithoutGutter","distSum","gutterSum","availableHeight","colLen","distHeight","borderWidth","colHeight","colWidth","heights","ColumnVisualMatrix","column_matrix_classCallCheck","column_matrix_possibleConstructorReturn","column_matrix_getPrototypeOf","heightDist","divider","spaceTakenByRow","getDistributedWidth","layoutConfig","distWidth","rowLen","oldLogicalSpace","heightDistribution","getMatrixMeasurement","setViewSpaces","pointerType","viewSpaces","pointer","computations_defineProperty","paginationDetailsMap","scrollType","paginationMeasureGetter","relatedMaxMeasure","getMatrixMeasureForPagination","measureDetails","actualMeasure","scrollInfo","getMatrixHeightDetails","columnMatrixWidth","_getHeightRequiredByC","getHeightRequiredByColMatrix","maxColumnMatrixHeight","columnViewSpace","getViewableSpaces","columnPointer","columnMatrixHeight","maxHeightAvailableForRowMatrix","rowMatrixHeight","bufferCondition","isScroll","getActualBufferFromConfig","computations_slicedToArray","getBufferFromCondition","currentBufferType","horizontalBuffer","verticalBuffer","computeLayoutMeasurements","_getMatrixWidthDetail","getMatrixWidthDetails","_layout$config3","rowMatrixWidth","maxRowMatrixWidth","maxWidthAvailableForColumnMatrix","_getMatrixHeightDetai","_getActualBufferFromC","rowViewableSpaces","columnViewableSpaces","setValueMatrixMeasurements","computations_toConsumableArray","rowWidthsPrimary","rowWidthsSecondary","columnHeightsPrimary","columnHeightsSecondary","measureSum","total","GridLayout","layout_classCallCheck","layout_possibleConstructorReturn","layout_getPrototypeOf","_layoutId","_scrollInfo","generateVisualMatrices","begColCells","endColCells","gutterSpace","layout_helper_slicedToArray","_center","_bottom","layout_helper_toConsumableArray","RowMatrix","ColumnMatrix","layout_get","_computeLayoutMeasure","setViewInformation","pageNumber","pageType","totalPages","layout_defineProperty","renderGrid","currentPage","_viewInfo","maxRowHeight","maxColWidth","rowPointer","getViewMatrices","rowMatrices","getViewableMatrices","columnMatrices","centralMatrixPointer","rowMatrixLen","columnMatrixLen","rowPages","columnPages","layoutDimensions","getViewMeasurements","_layout$config","rowSpaces","colSpaces","rightWidth","topHeight","bottomHeight","centerHeight","centerWidth","viewWidth","viewHeight","actualCenterMeasures","totalMeasures","unitHeights","unitWidths","borderMap","border_helper_defineProperty","_borderMap","specificBorderApplier","borderTypes","showBorders","borderInfo","borderType","applySpecificBorder","applyBorders","borderApplierFn","borderApplier","borderMapVal","orderMaker","nestByStack","updateArr","optionalParams","currStack","prevStack","arrVal","stackVal","currElemIndex","newElem","arrElem","returnArr","spanCalculator","colData","colIdx","isNull","maskCreator","_nestByStack","viewMatrix","hierarchy","_nestByStack2","spanGenerator","spans","ridx","currSpan","getOrder","matrixSpanGeneratorMap","span_maker_defineProperty","_matrixSpanGeneratorM","orderGetter","viewMatrixMaker","spanMaker","matrixSpanGenerator","spanApplier","cellCounter","spaceAllocationDueToSpan","primaryUnitWidth","cumulativeWidth","spanApplierMap","_spanApplierMap","TransactionSupport","INTERFACE_IMPl","CLASSPREFIX","HEADER","DATA","AXES","FACET_BY_FIELDS","FIELDS","TRANSFORM","LAYER_DEF","CONFIG","DETAIL_FIELDS","AXIS","GEOM","BLANK","SimpleCell","simple_cell_classCallCheck","enums_defaults_defineProperty","_DEFAULT_CONFIG","_CONSTANTS$MARGIN","CONSTANTS","DEFAULT_PROPS","minSpacing","visual_cell_src_props_defineProperty","visual_cell_src_props_PROPS","caption","smartText","axis_cell_classCallCheck","axis_cell_possibleConstructorReturn","axis_cell_getPrototypeOf","_availHeight","_availWidth","axis_cell_assertThisInitialized","computeAxisSpace","logicalWidth","logicalHeight","spaceFixer","_axis$getLogicalSpace","actualWidth","actualHeight","_axis$config2","wrapperDiv","blank_cell_classCallCheck","blank_cell_possibleConstructorReturn","blank_cell_getPrototypeOf","blank_cell_assertThisInitialized","setSmartText","_context$minSpacing","minHeightSpace","minWidthSpace","paddedHeight","paddedWidth","text_cell_classCallCheck","text_cell_possibleConstructorReturn","text_cell_getPrototypeOf","text_cell_assertThisInitialized","computeTextSpace","_context$minSpacing2","minText","_minTextSpace","smartSpace","textAlign","vAlign","_this$smartText","translation","middle","geom_cell_classCallCheck","geom_cell_possibleConstructorReturn","geom_cell_getPrototypeOf","_unit","_datamodel","_facetByFields","_transform","_caption","geom_cell_assertThisInitialized","captionSpace","computeGeomSpace","getCaptionSpace","captionDom","DEFAULT_PLACEHOLDERS","src_defaults_defineProperty","_DEFAULT_PLACEHOLDERS","resolveTitleSubTitleContent","rawContent","escapeHTML","htmlEscapes","&","<",">","\"","'","/","createHeading","prevCell","cellType","_minTickDiff","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendInfo","legendCreator","LegendCls","dataset","scaleProps","_scale$config","stepMapper","dataInfo","legendMeasures","titleText","getGroupByData","setLegendMeasures","MuzeComponent","_this$boundBox","HeaderComponent","headerComponent_classCallCheck","headerComponent_possibleConstructorReturn","headerComponent_getPrototypeOf","setParams","cont","renderHeader","LegendComponent","legendComponent_classCallCheck","legendComponent_possibleConstructorReturn","legendComponent_getPrototypeOf","legendSpace","sectionComponents","_this$params$config","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","legendHeight","legendWidth","renderLegend","_defaultAlignmentHelp","defaultAlignmentHelper","arrowSizeMap","getUnitPositions","totalLength","viewLength","currentLen","unitPosition","createScrollBarArrow","createScrollBarRect","mover","applyScrollMouseDownAction","moverRect","scrollMaker","_mover$node$getBoundi","_rect$node$getBoundin","rectX","rectY","changeMoverPosition","registerListenerOnArrow","arrowType","_components","isTouchDevice","registerListeners","applyMoverDrag","moverStartPos","rectStartPos","distanceMoved","actualPosition","pageXOffset","pageYOffset","applyRectClick","emptyScrollAreaClick","manager","unitPositions","ScrollMaker","scroll_maker_classCallCheck","_attachedScrollAction","_unitPositions","scroll_maker_createClass","scrollTo","scrollDeltaTo","createScroll","scrollBarContainer","scrollContainerHelper","attachScrollAction","externalScrollAction","detachScrollAction","scrollMakerMap","_ScrollMaker","HorizontalScrollMaker","horizontal_scroll_maker_classCallCheck","horizontal_scroll_maker_possibleConstructorReturn","horizontal_scroll_maker_getPrototypeOf","horizontal_scroll_maker_inherits","horizontal_scroll_maker_createClass","horizontal_scroll_maker_get","prevArrow","nextArrow","_this$logicalSpace","scrollBarWithouArrowLength","_scrollBarWithouArrowLength","_this$_components$mov","positionAdjuster","newPosition","currentPos","_this$_components$mov2","moverPos","movedViewLength","performAttachedScrollFunction","delta","_this$_components$mov3","scrollPercentage","movement","VerticalScrollMaker","vertical_scroll_maker_classCallCheck","vertical_scroll_maker_possibleConstructorReturn","vertical_scroll_maker_getPrototypeOf","vertical_scroll_maker_inherits","vertical_scroll_maker_createClass","vertical_scroll_maker_get","ScrollComponent","scroll_component_classCallCheck","scrollBarComponentConfig","scroll_component_possibleConstructorReturn","scroll_component_getPrototypeOf","unitIndex","sanitizedUnitIndex","externalAction","MatrixComponent","matrix_component_classCallCheck","matrix_component_possibleConstructorReturn","matrix_component_getPrototypeOf","_this$params$config$s","containerForMatrix","applyScroll","_cellSpanMaker","cellSpanMaker","_matrixSpanGenerator","renderTable","applySpans","applier","renderPlaceholders","renderMatrix","applyScrollAction","scollDistance","GridComponent","grid_component_classCallCheck","grid_component_possibleConstructorReturn","grid_component_getPrototypeOf","_this$component$viewI","matrixDim","matrixName","updateWrapper","matrixWrapper","allComponents","_scrollBarManager","scrollBarManager","wheelDeltaX","wheelDeltaY","preventBrowserScroll","triggerScrollBarAction","movedView","scrollActionApplier","_this$component$0$0$b","sanitizeGrid","attachScrollListener","MessageComponent","message_component_classCallCheck","message_component_possibleConstructorReturn","message_component_getPrototypeOf","_config$dimensions","message","_params$config","headerMap","headerCell","configType","headerAlignmentMap","component_wrapper_maker_defineProperty","_headerAlignmentMap","isGridPresent","renderDetails","_renderDetails$compon","checkParamsValidation","createHeaderWrapper","headerType","layoutManager","_headerMap$headerType","headerConfig","wrapperParams","component_wrapper_maker_objectSpread","existingComponent","createScrollBarWrapper","scrollBarType","grid","_scrollBarMap$scrollB","scrollBarMap","layoutBasedMeasure","viewMeasure","rowAlign","colAlign","componentWrapperMaker","_layoutManager","createMessageWrapper","_i","_headerValues","defaultDimensions","gridComponent","getBoundBox","createLegendWrapper","legendWrapper","gridLayoutWrapper","verticalScrollBar","horizontalScrollBar","ScrollManager","scroll_manager_classCallCheck","_scrollBarComponents","_attachedComponents","scroll_manager_createClass","scrollBarComponents","attachedComponents","performScrollAction","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","titleLayouts","component_resolver_defineProperty","legendLayouts","titlePosition","subtitlePosition","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","isSubtitle","headerOptions","_createHeading","createLegend","getLegendSpace","mountSpace","componentIndexes","componentNames","3","4","5","6","renderLayout","gridLayout","compWrappers","componentWrappers","createScrollManager","horizontalScrollWrapper","verticalScrollWrapper","gridWrapper","hScrollBar","vScrollBar","componentWrapper","deleteElementName","removeComponent","registerComponents","attachListeners","attachListener","defaultInteractionPolicy","isMeasure","group_firebolt_toConsumableArray","getFieldsFromChannel","colDim","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","GroupFireBolt","group_firebolt_classCallCheck","group_firebolt_possibleConstructorReturn","group_firebolt_getPrototypeOf","behaviouralAction","validFields","APP_INITIAL_STATE","app","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","canvas_getPrototypeOf","canvas_defineProperty","canvas_assertThisInitialized","initedComponents","initCanvas","createGroupState","_VisualGroup$getState2","canvas_helper_slicedToArray","register","prepareLayout","triggerReflow","setLayoutInfForUnits","getRootNodeId","setLabelRotationForAxes","rotationVal","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","Smartlabel","SideEffects","standards","Behaviours","pkg","operators","utils","lookupWhat","lookupDetails","lookupTarget"],"mappings":"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AIi/B,+BAES0W,cAAKK,aCZTA,YAAS,IAAIz1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,+BAES0W,cAAKK,aCALL,cAZK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,gCCES0W,cAZK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,gCCES0W,cAZK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,gCCES0W,gBAZK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,gCCES0W,gBAZK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,gCCES0W,kBAZK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAN,IAAIi/B,gCCAS0W,gBAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,eAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,iBAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,iBAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,cAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCTN,SAAS0W,aAAK5pB,OACZ,IAAIx0B,EAAIw0B,MAAM1vB,OACd,OAAO,SAASrF,GACd,OAAO+0B,MAAM/tB,KAAKmK,IAAI,EAAGnK,KAAKkK,IAAI3Q,EAAI,EAAGyG,KAAKsH,MAAMtO,EAAIO,OAI7Co+C,0CAAK1W,8BAAO,qgDAEhBiX,cAAQP,aAAK1W,8BAAO,qgDAEpBkX,gBAAUR,aAAK1W,8BAAO,qgDAEtBmX,eAAST,aAAK1W,8BAAO,qgDCZrBoX,aAAOX,cAAyBhY,qBAAW,IAAK,IAAM,KAAOA,oBAAU,GAAI,IAAM,KAEjF4Y,aAAOZ,cAAyBhY,oBAAU,IAAK,IAAM,KAAOA,oBAAU,GAAI,IAAM,KAEvFvnC,UAAIunC,sBAEO6Y,yBAAA,SAASv/C,IAClBA,EAAI,GAAKA,EAAI,KAAGA,GAAKgH,KAAKsH,MAAMtO,IACpC,IAAIw/C,GAAKx4C,KAAKiY,IAAIjf,EAAI,IAItB,OAHAb,UAAE4E,EAAI,IAAM/D,EAAI,IAChBb,UAAE4B,EAAI,IAAM,IAAMy+C,GAClBrgD,UAAEJ,EAAI,GAAM,GAAMygD,GACXrgD,UAAI,ICZEu/C,yCAAyBhY,oBAAU,IAAK,GAAK,GAAMA,qBAAW,IAAK,GAAK,ICUxEiY,cAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,cAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,cAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,cAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,gBAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,cAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,cAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,cAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,gBAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,cAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,gBAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCES0W,gBAVK,IAAIp1C,MAAM,GAAGD,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAN,IAAIi/B,gCCXOwX,sBAAwB,YACxBC,qBAAuB,cACvBC,sBAAwB,eACxBC,uBAAyB,aACzBC,uBAAyB,YACzBC,sBAAwB,cACxBC,uBAAyB,eACzBC,wBAA0B,aCHxBC,iBAHXC,OAAQ,UCKGC,cALXC,WAAY,YACZC,cAAe,cACfC,eAAgB,iBCHPC,kBACF,QADEA,sBAEE,YAEFC,mBACC,WADDA,iBAED,SCNDpxC,gBAAQ7F,MAAM3I,UAAUwO,MCApBqxC,qBAAA,SAASvhC,GACtB,OAAOA,GCEL+N,SAAM,EACNsH,WAAQ,EACRmsB,YAAS,EACTvsB,UAAO,EACPwsB,QAAU,KAEd,SAAS/W,WAAW1qB,GAClB,MAAO,cAAgBA,EAAI,IAAO,MAGpC,SAAS2qB,WAAW/iC,GAClB,MAAO,gBAAkBA,EAAI,IAAO,IAiBtC,SAAS85C,WACP,OAAQ58C,KAAK68C,OAGf,SAASC,UAAKC,OAAQvpB,OACpB,IAAIwpB,iBACAC,WAAa,KACbrQ,WAAa,KACbsQ,cAAgB,KAChBC,cAAgB,EAChBC,cAAgB,EAChBC,YAAc,EACd/1C,EAAIy1C,SAAW9zB,UAAO8zB,SAAW5sB,WAAQ,EAAI,EAC7CjV,EAAI6hC,SAAW5sB,WAAQ4sB,SAAWxsB,WAAQ,IAAM,IAChD0W,UAAY8V,SAAW9zB,UAAO8zB,SAAWL,YAAS9W,WAAaC,WAEnE,SAASiX,KAAK95B,SACZ,IAAIxL,OAAuB,MAAdylC,WAAsBzpB,MAAMpC,MAAQoC,MAAMpC,MAAM/zB,MAAMm2B,MAAOwpB,eAAiBxpB,MAAMhe,SAAYynC,WACzGh9C,OAAuB,MAAd2sC,WAAsBpZ,MAAMoZ,WAAapZ,MAAMoZ,WAAWvvC,MAAMm2B,MAAOwpB,eAAiBnxB,qBAAY+gB,WAC7G0Q,QAAUt6C,KAAKmK,IAAIgwC,cAAe,GAAKE,YACvCtsB,MAAQyC,MAAMzC,QACdwsB,QAAUxsB,MAAM,GAAK,GACrBysB,QAAUzsB,MAAMA,MAAM1vB,OAAS,GAAK,GACpC2nB,UAAYwK,MAAMG,UA/B1B,SAAS8pB,YAAOjqB,OACd,IAAI4a,OAASprC,KAAKmK,IAAI,EAAGqmB,MAAMG,YAAc,GAAK,EAElD,OADIH,MAAMrtB,UAASioC,OAASprC,KAAKmD,MAAMioC,SAChC,SAAShzC,GACd,OAAQo4B,MAAMp4B,GAAKgzC,SAVvB,SAAS1d,YAAO8C,OACd,OAAO,SAASp4B,GACd,OAAQo4B,MAAMp4B,MAmCqCo4B,MAAMC,QACrDiqB,UAAY16B,QAAQ06B,UAAY16B,QAAQ06B,YAAc16B,QACtDjL,KAAO2lC,UAAUC,UAAU,WAAWn3C,MAAM,OAC5Co3C,KAAOF,UAAUC,UAAU,SAASn3C,KAAKgR,OAAQgc,OAAOja,QACxDskC,SAAWD,KAAKE,OAChBC,UAAYH,KAAKI,QAAQvwB,OAAO,KAAKwwB,KAAK,QAAS,QACnDC,KAAON,KAAKloC,OAAO,QACnBgL,KAAOk9B,KAAKloC,OAAO,QAEvBqC,KAAOA,KAAKomC,MAAMpmC,KAAKimC,QAAQI,OAAO,OAAQ,SACzCH,KAAK,QAAS,UACdA,KAAK,SAAU,SAEpBL,KAAOA,KAAKO,MAAMJ,WAElBG,KAAOA,KAAKC,MAAMJ,UAAUtwB,OAAO,QAC9BwwB,KAAK,SAAU,QACfA,KAAK/iC,EAAI,IAAK5T,EAAI61C,gBAEvBz8B,KAAOA,KAAKy9B,MAAMJ,UAAUtwB,OAAO,QAC9BwwB,KAAK,OAAQ,QACbA,KAAK/iC,EAAG5T,EAAIg2C,SACZW,KAAK,KAAMlB,SAAW9zB,SAAM,MAAQ8zB,SAAWL,YAAS,SAAW,WACnEx8B,MAAM,YAAag9B,eAEpBl6B,UAAY06B,YACd3lC,KAAOA,KAAKsmC,WAAWr7B,SACvB46B,KAAOA,KAAKS,WAAWr7B,SACvBk7B,KAAOA,KAAKG,WAAWr7B,SACvBtC,KAAOA,KAAK29B,WAAWr7B,SAEvB66B,SAAWA,SAASQ,WAAWr7B,SAC1Bi7B,KAAK,UAAWtB,SAChBsB,KAAK,YAAa,SAAS7iD,GAAK,OAAO6F,SAAS7F,EAAI4tB,SAAS5tB,IAAM6rC,UAAU7rC,GAAK4E,KAAKs+C,aAAa,eAEzGP,UACKE,KAAK,UAAWtB,SAChBsB,KAAK,YAAa,SAAS7iD,GAAK,IAAI0B,EAAIkD,KAAK8nB,WAAW+0B,OAAQ,OAAO5V,UAAUnqC,GAAKmE,SAASnE,EAAIA,EAAE1B,IAAM0B,EAAIksB,SAAS5tB,OAG/HyiD,SAAS5rB,SAETla,KACKkmC,KAAK,IAAKlB,SAAW5sB,WAAQ4sB,QAAUxsB,WAClC,IAAMjpB,EAAI81C,cAAgB,IAAMG,OAAS,QAAUC,OAAS,IAAMl2C,EAAI81C,cACtE,IAAMG,OAAS,IAAMj2C,EAAI81C,cAAgB,QAAUI,OAAS,IAAMl2C,EAAI81C,eAEhFQ,KACKK,KAAK,UAAW,GAChBA,KAAK,YAAa,SAAS7iD,GAAK,OAAO6rC,UAAUje,SAAS5tB,MAE/D8iD,KACKD,KAAK/iC,EAAI,IAAK5T,EAAI61C,eAEvBz8B,KACKu9B,KAAK/iC,EAAG5T,EAAIg2C,SACZ58B,KAAKzgB,QAEVy9C,UAAU9xC,OAAOgxC,UACZqB,KAAK,OAAQ,QACbA,KAAK,YAAa,IAClBA,KAAK,cAAe,cACpBA,KAAK,cAAelB,SAAWxsB,WAAQ,QAAUwsB,SAAW5sB,UAAO,MAAQ,UAEhFutB,UACK1rB,KAAK,WAAahyB,KAAK68C,OAAS7zB,WA2CvC,OAxCA8zB,KAAKtpB,MAAQ,SAASxtB,GACpB,OAAO9B,UAAU7C,QAAUmyB,MAAQxtB,EAAG82C,MAAQtpB,OAGhDspB,KAAKI,cAAgB,SAASl3C,GAC5B,OAAO9B,UAAU7C,QAAU67C,cAAgBl3C,EAAG82C,MAAQI,eAGxDJ,KAAK1rB,MAAQ,WACX,OAAO4rB,cAAgB5xC,gBAAMnQ,KAAKiJ,WAAY44C,MAGhDA,KAAKE,cAAgB,SAASh3C,GAC5B,OAAO9B,UAAU7C,QAAU27C,cAAqB,MAALh3C,KAAiBoF,gBAAMnQ,KAAK+K,GAAI82C,MAAQE,cAAc5xC,SAGnG0xC,KAAKG,WAAa,SAASj3C,GACzB,OAAO9B,UAAU7C,QAAU47C,WAAkB,MAALj3C,EAAY,KAAOoF,gBAAMnQ,KAAK+K,GAAI82C,MAAQG,YAAcA,WAAW7xC,SAG7G0xC,KAAKlQ,WAAa,SAAS5mC,GACzB,OAAO9B,UAAU7C,QAAUurC,WAAa5mC,EAAG82C,MAAQlQ,YAGrDkQ,KAAKyB,SAAW,SAASv4C,GACvB,OAAO9B,UAAU7C,QAAU87C,cAAgBC,eAAiBp3C,EAAG82C,MAAQK,eAGzEL,KAAKK,cAAgB,SAASn3C,GAC5B,OAAO9B,UAAU7C,QAAU87C,eAAiBn3C,EAAG82C,MAAQK,eAGzDL,KAAKM,cAAgB,SAASp3C,GAC5B,OAAO9B,UAAU7C,QAAU+7C,eAAiBp3C,EAAG82C,MAAQM,eAGzDN,KAAKO,YAAc,SAASr3C,GAC1B,OAAO9B,UAAU7C,QAAUg8C,aAAer3C,EAAG82C,MAAQO,aAGhDP,KClKT,IAAI0B,GAAKx7C,KAAKg+B,GACVyd,IAAM,EAAID,GAEVE,WAAaD,IADH,KAGd,SAASE,OACP3+C,KAAK4+C,IAAM5+C,KAAK6+C,IAChB7+C,KAAK8+C,IAAM9+C,KAAK++C,IAAM,KACtB/+C,KAAKgG,EAAI,GAGX,SAAS+R,YACP,OAAO,IAAI4mC,KAGbA,KAAK/hD,UAAYmb,UAAKnb,WACpBgJ,YAAa+4C,KACbK,OAAQ,SAAAA,OAAS9jC,EAAGpY,GAClB9C,KAAKgG,GAAK,KAAOhG,KAAK4+C,IAAM5+C,KAAK8+C,KAAO5jC,GAAK,KAAOlb,KAAK6+C,IAAM7+C,KAAK++C,KAAOj8C,IAE7Em8C,UAAW,SAAAA,YACQ,OAAbj/C,KAAK8+C,MACP9+C,KAAK8+C,IAAM9+C,KAAK4+C,IAAK5+C,KAAK++C,IAAM/+C,KAAK6+C,IACrC7+C,KAAKgG,GAAK,MAGdk5C,OAAQ,SAAAA,OAAShkC,EAAGpY,GAClB9C,KAAKgG,GAAK,KAAOhG,KAAK8+C,KAAO5jC,GAAK,KAAOlb,KAAK++C,KAAOj8C,IAEvDq8C,iBAAkB,SAAAA,iBAASnS,GAAIoS,GAAIlkC,EAAGpY,GACpC9C,KAAKgG,GAAK,MAAQgnC,GAAM,MAAQoS,GAAM,KAAOp/C,KAAK8+C,KAAO5jC,GAAK,KAAOlb,KAAK++C,KAAOj8C,IAEnFu8C,cAAe,SAAAA,cAASrS,GAAIoS,GAAIE,GAAIC,GAAIrkC,EAAGpY,GACzC9C,KAAKgG,GAAK,MAAQgnC,GAAM,MAAQoS,GAAM,MAAQE,GAAM,MAAQC,GAAM,KAAOv/C,KAAK8+C,KAAO5jC,GAAK,KAAOlb,KAAK++C,KAAOj8C,IAE/G08C,MAAO,SAAAA,MAASxS,GAAIoS,GAAIE,GAAIC,GAAI3jD,GAC9BoxC,IAAMA,GAAIoS,IAAMA,GAAIE,IAAMA,GAAIC,IAAMA,GAAI3jD,GAAKA,EAC7C,IAAImxC,GAAK/sC,KAAK8+C,IACVW,GAAKz/C,KAAK++C,IACVW,IAAMJ,GAAKtS,GACX2S,IAAMJ,GAAKH,GACXQ,IAAM7S,GAAKC,GACX6S,IAAMJ,GAAKL,GACXU,MAAQF,IAAMA,IAAMC,IAAMA,IAG9B,GAAIjkD,EAAI,EAAG,MAAM,IAAI+N,MAAM,oBAAsB/N,GAGjD,GAAiB,OAAboE,KAAK8+C,IACP9+C,KAAKgG,GAAK,KAAOhG,KAAK8+C,IAAM9R,IAAM,KAAOhtC,KAAK++C,IAAMK,SAIjD,GAAMU,MApDD,KAyDL,GAAM98C,KAAKiY,IAAI4kC,IAAMH,IAAMC,IAAMC,KAzD5B,MAyDgDhkD,EAKrD,CACH,IAAImkD,IAAMT,GAAKvS,GACXiT,IAAMT,GAAKE,GACXQ,MAAQP,IAAMA,IAAMC,IAAMA,IAC1BO,MAAQH,IAAMA,IAAMC,IAAMA,IAC1BG,IAAMn9C,KAAKoK,KAAK6yC,OAChBG,IAAMp9C,KAAKoK,KAAK0yC,OAChB/kD,EAAIa,EAAIoH,KAAKw7B,KAAKggB,GAAKx7C,KAAKq9C,MAAMJ,MAAQH,MAAQI,QAAU,EAAIC,IAAMC,OAAS,GAC/EE,IAAMvlD,EAAIqlD,IACVG,IAAMxlD,EAAIolD,IAGVn9C,KAAKiY,IAAIqlC,IAAM,GA1EX,OA2ENtgD,KAAKgG,GAAK,KAAOgnC,GAAKsT,IAAMV,KAAO,KAAOR,GAAKkB,IAAMT,MAGvD7/C,KAAKgG,GAAK,IAAMpK,EAAI,IAAMA,EAAI,WAAaikD,IAAME,IAAMH,IAAMI,KAAQ,KAAOhgD,KAAK8+C,IAAM9R,GAAKuT,IAAMb,KAAO,KAAO1/C,KAAK++C,IAAMK,GAAKmB,IAAMZ,UApBtI3/C,KAAKgG,GAAK,KAAOhG,KAAK8+C,IAAM9R,IAAM,KAAOhtC,KAAK++C,IAAMK,WAuBxDoB,IAAK,SAAAA,IAAStlC,EAAGpY,EAAGlH,EAAG6kD,GAAIC,GAAIC,KAC7BzlC,GAAKA,EAAGpY,GAAKA,EAAW69C,MAAQA,IAChC,IAAIC,IADYhlD,GAAKA,GACRoH,KAAKq/B,IAAIoe,IAClBI,GAAKjlD,EAAIoH,KAAKs/B,IAAIme,IAClB1T,GAAK7xB,EAAI0lC,GACTnB,GAAK38C,EAAI+9C,GACTC,GAAK,EAAIH,IACTI,GAAKJ,IAAMF,GAAKC,GAAKA,GAAKD,GAG9B,GAAI7kD,EAAI,EAAG,MAAM,IAAI+N,MAAM,oBAAsB/N,GAGhC,OAAboE,KAAK8+C,IACP9+C,KAAKgG,GAAK,IAAM+mC,GAAK,IAAM0S,IAIpBz8C,KAAKiY,IAAIjb,KAAK8+C,IAAM/R,IAnGnB,MAmGoC/pC,KAAKiY,IAAIjb,KAAK++C,IAAMU,IAnGxD,QAoGRz/C,KAAKgG,GAAK,IAAM+mC,GAAK,IAAM0S,IAIxB7jD,IAGDmlD,GAAK,IAAGA,GAAKA,GAAKtC,IAAMA,KAGxBsC,GAAKrC,WACP1+C,KAAKgG,GAAK,IAAMpK,EAAI,IAAMA,EAAI,QAAUklD,GAAK,KAAO5lC,EAAI0lC,IAAM,KAAO99C,EAAI+9C,IAAM,IAAMjlD,EAAI,IAAMA,EAAI,QAAUklD,GAAK,KAAO9gD,KAAK8+C,IAAM/R,IAAM,KAAO/sC,KAAK++C,IAAMU,IAIrJsB,GAnHC,OAoHR/gD,KAAKgG,GAAK,IAAMpK,EAAI,IAAMA,EAAI,SAAWmlD,IAAMvC,IAAO,IAAMsC,GAAK,KAAO9gD,KAAK8+C,IAAM5jC,EAAItf,EAAIoH,KAAKq/B,IAAIqe,KAAO,KAAO1gD,KAAK++C,IAAMj8C,EAAIlH,EAAIoH,KAAKs/B,IAAIoe,QAGlJM,KAAM,SAAAA,KAAS9lC,EAAGpY,EAAGgD,EAAG/F,GACtBC,KAAKgG,GAAK,KAAOhG,KAAK4+C,IAAM5+C,KAAK8+C,KAAO5jC,GAAK,KAAOlb,KAAK6+C,IAAM7+C,KAAK++C,KAAOj8C,GAAK,MAAQgD,EAAK,MAAQ/F,EAAK,KAAQ+F,EAAK,KAEzH/D,SAAU,SAAAA,WACR,OAAO/B,KAAKgG,IAID+R,uBCjIAkpC,sBAAA,SAAS/lC,GACtB,OAAO,SAASsoB,WACd,OAAOtoB,ICFAD,IAAMjY,KAAKiY,IACXknB,MAAQn/B,KAAKm/B,MACbE,IAAMr/B,KAAKq/B,IACXl1B,SAAMnK,KAAKmK,IACXD,SAAMlK,KAAKkK,IACXo1B,IAAMt/B,KAAKs/B,IACXl1B,UAAOpK,KAAKoK,KAEZuvC,aAAU,MACV6B,QAAKx7C,KAAKg+B,GACVkgB,OAAS1C,QAAK,EACdC,SAAM,EAAID,QAMd,SAAS2C,KAAKjmC,GACnB,OAAOA,GAAK,EAAIgmC,OAAShmC,IAAM,GAAKgmC,OAASl+C,KAAKm+C,KAAKjmC,GCdzD,SAASkmC,eAAehmD,GACtB,OAAOA,EAAEimD,YAGX,SAASC,eAAelmD,GACtB,OAAOA,EAAEmmD,YAGX,SAASC,cAAcpmD,GACrB,OAAOA,EAAEqmD,WAGX,SAASC,YAAYtmD,GACnB,OAAOA,EAAEumD,SAGX,SAASC,YAAYxmD,GACnB,OAAOA,GAAKA,EAAEymD,SAchB,SAASC,eAAe/U,GAAI0S,GAAIzS,GAAIoS,GAAI/qB,GAAI0tB,GAAIjB,IAC9C,IAAIlB,IAAM7S,GAAKC,GACX6S,IAAMJ,GAAKL,GACXhvB,IAAM0wB,GAAKiB,IAAMA,IAAM30C,UAAKwyC,IAAMA,IAAMC,IAAMA,KAC9CmC,GAAK5xB,GAAKyvB,IACVoC,IAAM7xB,GAAKwvB,IACXsC,IAAMnV,GAAKiV,GACXG,IAAM1C,GAAKwC,GACXG,IAAMpV,GAAKgV,GACXK,IAAMjD,GAAK6C,GACXK,KAAOJ,IAAME,KAAO,EACpBG,KAAOJ,IAAME,KAAO,EACpBzB,GAAKwB,IAAMF,IACXrB,GAAKwB,IAAMF,IACXK,GAAK5B,GAAKA,GAAKC,GAAKA,GACpBjlD,EAAIy4B,GAAK0tB,GACTz7C,EAAI47C,IAAMG,IAAMD,IAAMD,IACtB/mD,GAAKylD,GAAK,GAAK,EAAI,GAAKzzC,UAAKD,SAAI,EAAGvR,EAAIA,EAAI4mD,GAAKl8C,EAAIA,IACrDm8C,KAAOn8C,EAAIu6C,GAAKD,GAAKxlD,GAAKonD,GAC1BE,MAAQp8C,EAAIs6C,GAAKC,GAAKzlD,GAAKonD,GAC3BG,KAAOr8C,EAAIu6C,GAAKD,GAAKxlD,GAAKonD,GAC1BI,MAAQt8C,EAAIs6C,GAAKC,GAAKzlD,GAAKonD,GAC3BK,IAAMJ,IAAMH,IACZQ,IAAMJ,IAAMH,IACZQ,IAAMJ,IAAML,IACZU,IAAMJ,IAAML,IAMhB,OAFIM,IAAMA,IAAMC,IAAMA,IAAMC,IAAMA,IAAMC,IAAMA,MAAKP,IAAME,IAAKD,IAAME,MAGlEK,GAAIR,IACJS,GAAIR,IACJ9C,KAAMoC,GACNnC,KAAMoC,GACNC,IAAKO,KAAOpuB,GAAKz4B,EAAI,GACrBumD,IAAKO,KAAOruB,GAAKz4B,EAAI,ICxEzB,SAASunD,OAAOngC,SACdhjB,KAAK+iB,SAAWC,QAGlBmgC,OAAOvmD,WACLwmD,UAAW,SAAAA,YACTpjD,KAAKqjD,MAAQ,GAEfC,QAAS,SAAAA,UACPtjD,KAAKqjD,MAAQtzB,KAEfwzB,UAAW,SAAAA,YACTvjD,KAAKwjD,OAAS,GAEhBC,QAAS,SAAAA,WACHzjD,KAAKqjD,OAAyB,IAAfrjD,KAAKqjD,OAA+B,IAAhBrjD,KAAKwjD,SAAexjD,KAAK+iB,SAASk8B,YACzEj/C,KAAKqjD,MAAQ,EAAIrjD,KAAKqjD,OAExBK,MAAO,SAAAA,MAASxoC,EAAGpY,GAEjB,OADAoY,GAAKA,EAAGpY,GAAKA,EACL9C,KAAKwjD,QACX,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAGxjD,KAAKqjD,MAAQrjD,KAAK+iB,SAASm8B,OAAOhkC,EAAGpY,GAAK9C,KAAK+iB,SAASi8B,OAAO9jC,EAAGpY,GAAI,MAC/F,KAAK,EAAG9C,KAAKwjD,OAAS,EACtB,QAASxjD,KAAK+iB,SAASm8B,OAAOhkC,EAAGpY,MAKxB,IAAA6gD,aAAA,SAAS3gC,SACtB,OAAO,IAAImgC,OAAOngC,UC7Bb,SAAS9H,QAAEpe,GAChB,OAAOA,EAAE,GAGJ,SAASgG,QAAEhG,GAChB,OAAOA,EAAE,GCAI,IAAA8mD,SAAA,WACb,IAAI1oC,EAAI2oC,QACJ/gD,EAAIghD,QACJC,QAAUvgB,uBAAS,GACnBxgB,QAAU,KACVghC,MAAQC,aACRnb,OAAS,KAEb,SAASoV,KAAK13C,MACZ,IAAI1L,EAEAM,EAEA8oD,OAHA3nD,EAAIiK,KAAKnF,OAET8iD,UAAW,EAKf,IAFe,MAAXnhC,UAAiB8lB,OAASkb,MAAME,OAASnsC,aAExCjd,EAAI,EAAGA,GAAKyB,IAAKzB,IACdA,EAAIyB,GAAKwnD,QAAQ3oD,EAAIoL,KAAK1L,GAAIA,EAAG0L,SAAW29C,YAC5CA,UAAYA,UAAUrb,OAAOya,YAC5Bza,OAAO2a,WAEVU,UAAUrb,OAAO4a,OAAOxoC,EAAE9f,EAAGN,EAAG0L,OAAQ1D,EAAE1H,EAAGN,EAAG0L,OAGtD,GAAI09C,OAAQ,OAAOpb,OAAS,KAAMob,OAAS,IAAM,KAuBnD,OApBAhG,KAAKhjC,EAAI,SAASlV,GAChB,OAAO9B,UAAU7C,QAAU6Z,EAAiB,mBAANlV,EAAmBA,EAAIw9B,uBAAUx9B,GAAIk4C,MAAQhjC,GAGrFgjC,KAAKp7C,EAAI,SAASkD,GAChB,OAAO9B,UAAU7C,QAAUyB,EAAiB,mBAANkD,EAAmBA,EAAIw9B,uBAAUx9B,GAAIk4C,MAAQp7C,GAGrFo7C,KAAK6F,QAAU,SAAS/9C,GACtB,OAAO9B,UAAU7C,QAAU0iD,QAAuB,mBAAN/9C,EAAmBA,EAAIw9B,wBAAWx9B,GAAIk4C,MAAQ6F,SAG5F7F,KAAK8F,MAAQ,SAASh+C,GACpB,OAAO9B,UAAU7C,QAAU2iD,MAAQh+C,EAAc,MAAXgd,UAAoB8lB,OAASkb,MAAMhhC,UAAWk7B,MAAQ8F,OAG9F9F,KAAKl7B,QAAU,SAAShd,GACtB,OAAO9B,UAAU7C,QAAe,MAAL2E,EAAYgd,QAAU8lB,OAAS,KAAOA,OAASkb,MAAMhhC,QAAUhd,GAAIk4C,MAAQl7B,SAGjGk7B,MC/CMkG,SAAA,WACb,IAAIrX,GAAK8W,QACL7W,GAAK,KACLyS,GAAKjc,sBAAS,GACd4b,GAAK0E,QACLC,QAAUvgB,uBAAS,GACnBxgB,QAAU,KACVghC,MAAQC,aACRnb,OAAS,KAEb,SAASub,KAAK79C,MACZ,IAAI1L,EACAuL,EACAiB,EAEAlM,EAEA8oD,OAHA3nD,EAAIiK,KAAKnF,OAET8iD,UAAW,EAEXG,IAAM,IAAI/+C,MAAMhJ,GAChBgoD,IAAM,IAAIh/C,MAAMhJ,GAIpB,IAFe,MAAXymB,UAAiB8lB,OAASkb,MAAME,OAASnsC,aAExCjd,EAAI,EAAGA,GAAKyB,IAAKzB,EAAG,CACvB,KAAMA,EAAIyB,GAAKwnD,QAAQ3oD,EAAIoL,KAAK1L,GAAIA,EAAG0L,SAAW29C,SAChD,GAAIA,UAAYA,SACd99C,EAAIvL,EACJguC,OAAOsa,YACPta,OAAOya,gBACF,CAGL,IAFAza,OAAO2a,UACP3a,OAAOya,YACFj8C,EAAIxM,EAAI,EAAGwM,GAAKjB,IAAKiB,EACxBwhC,OAAO4a,MAAMY,IAAIh9C,GAAIi9C,IAAIj9C,IAE3BwhC,OAAO2a,UACP3a,OAAOwa,UAGPa,WACFG,IAAIxpD,IAAMiyC,GAAG3xC,EAAGN,EAAG0L,MAAO+9C,IAAIzpD,IAAM2kD,GAAGrkD,EAAGN,EAAG0L,MAC7CsiC,OAAO4a,MAAM1W,IAAMA,GAAG5xC,EAAGN,EAAG0L,MAAQ89C,IAAIxpD,GAAIskD,IAAMA,GAAGhkD,EAAGN,EAAG0L,MAAQ+9C,IAAIzpD,KAI3E,GAAIopD,OAAQ,OAAOpb,OAAS,KAAMob,OAAS,IAAM,KAGnD,SAASM,WACP,OAAOtG,WAAO6F,QAAQA,SAASC,MAAMA,OAAOhhC,QAAQA,SAoDtD,OAjDAqhC,KAAKnpC,EAAI,SAASlV,GAChB,OAAO9B,UAAU7C,QAAU0rC,GAAkB,mBAAN/mC,EAAmBA,EAAIw9B,uBAAUx9B,GAAIgnC,GAAK,KAAMqX,MAAQtX,IAGjGsX,KAAKtX,GAAK,SAAS/mC,GACjB,OAAO9B,UAAU7C,QAAU0rC,GAAkB,mBAAN/mC,EAAmBA,EAAIw9B,uBAAUx9B,GAAIq+C,MAAQtX,IAGtFsX,KAAKrX,GAAK,SAAShnC,GACjB,OAAO9B,UAAU7C,QAAU2rC,GAAU,MAALhnC,EAAY,KAAoB,mBAANA,EAAmBA,EAAIw9B,uBAAUx9B,GAAIq+C,MAAQrX,IAGzGqX,KAAKvhD,EAAI,SAASkD,GAChB,OAAO9B,UAAU7C,QAAUo+C,GAAkB,mBAANz5C,EAAmBA,EAAIw9B,uBAAUx9B,GAAIo5C,GAAK,KAAMiF,MAAQ5E,IAGjG4E,KAAK5E,GAAK,SAASz5C,GACjB,OAAO9B,UAAU7C,QAAUo+C,GAAkB,mBAANz5C,EAAmBA,EAAIw9B,uBAAUx9B,GAAIq+C,MAAQ5E,IAGtF4E,KAAKjF,GAAK,SAASp5C,GACjB,OAAO9B,UAAU7C,QAAU+9C,GAAU,MAALp5C,EAAY,KAAoB,mBAANA,EAAmBA,EAAIw9B,uBAAUx9B,GAAIq+C,MAAQjF,IAGzGiF,KAAKI,OACLJ,KAAKK,OAAS,WACZ,OAAOF,WAAWtpC,EAAE6xB,IAAIjqC,EAAE28C,KAG5B4E,KAAKM,OAAS,WACZ,OAAOH,WAAWtpC,EAAE6xB,IAAIjqC,EAAEs8C,KAG5BiF,KAAKO,OAAS,WACZ,OAAOJ,WAAWtpC,EAAE8xB,IAAIlqC,EAAE28C,KAG5B4E,KAAKN,QAAU,SAAS/9C,GACtB,OAAO9B,UAAU7C,QAAU0iD,QAAuB,mBAAN/9C,EAAmBA,EAAIw9B,wBAAWx9B,GAAIq+C,MAAQN,SAG5FM,KAAKL,MAAQ,SAASh+C,GACpB,OAAO9B,UAAU7C,QAAU2iD,MAAQh+C,EAAc,MAAXgd,UAAoB8lB,OAASkb,MAAMhhC,UAAWqhC,MAAQL,OAG9FK,KAAKrhC,QAAU,SAAShd,GACtB,OAAO9B,UAAU7C,QAAe,MAAL2E,EAAYgd,QAAU8lB,OAAS,KAAOA,OAASkb,MAAMhhC,QAAUhd,GAAIq+C,MAAQrhC,SAGjGqhC,MC3GMQ,eAAA,SAAStnD,EAAGoF,GACzB,OAAOA,EAAIpF,GAAK,EAAIoF,EAAIpF,EAAI,EAAIoF,GAAKpF,EAAI,EAAIwyB,KCDhC+0B,sBAAA,SAAS1pD,GACtB,OAAOA,GCCsB2pD,YAAYd,cAE3C,SAASe,OAAOhB,OACdhkD,KAAKilD,OAASjB,MAqBD,SAASe,YAAYf,OAElC,SAASkB,OAAOliC,SACd,OAAO,IAAIgiC,OAAOhB,MAAMhhC,UAK1B,OAFAkiC,OAAOD,OAASjB,MAETkB,OA1BTF,OAAOpoD,WACLwmD,UAAW,SAAAA,YACTpjD,KAAKilD,OAAO7B,aAEdE,QAAS,SAAAA,UACPtjD,KAAKilD,OAAO3B,WAEdC,UAAW,SAAAA,YACTvjD,KAAKilD,OAAO1B,aAEdE,QAAS,SAAAA,UACPzjD,KAAKilD,OAAOxB,WAEdC,MAAO,SAAAA,MAASnmD,EAAG3B,GACjBoE,KAAKilD,OAAOvB,MAAM9nD,EAAIoH,KAAKs/B,IAAI/kC,GAAI3B,GAAKoH,KAAKq/B,IAAI9kC,MCNtC,IChBJ6N,yBAAQ7F,MAAM3I,UAAUwO,MCEpB,IAAA+5C,eACbC,KAAM,SAAAA,KAASpiC,QAASlC,MACtB,IAAIllB,EAAIoH,KAAKoK,KAAK0T,KAAO09B,SACzBx7B,QAAQg8B,OAAOpjD,EAAG,GAClBonB,QAAQw9B,IAAI,EAAG,EAAG5kD,EAAG,EAAG6iD,YCNb4G,cACbD,KAAM,SAAAA,KAASpiC,QAASlC,MACtB,IAAIllB,EAAIoH,KAAKoK,KAAK0T,KAAO,GAAK,EAC9BkC,QAAQg8B,QAAQ,EAAIpjD,GAAIA,GACxBonB,QAAQk8B,QAAQtjD,GAAIA,GACpBonB,QAAQk8B,QAAQtjD,GAAI,EAAIA,GACxBonB,QAAQk8B,OAAOtjD,GAAI,EAAIA,GACvBonB,QAAQk8B,OAAOtjD,GAAIA,GACnBonB,QAAQk8B,OAAO,EAAItjD,GAAIA,GACvBonB,QAAQk8B,OAAO,EAAItjD,EAAGA,GACtBonB,QAAQk8B,OAAOtjD,EAAGA,GAClBonB,QAAQk8B,OAAOtjD,EAAG,EAAIA,GACtBonB,QAAQk8B,QAAQtjD,EAAG,EAAIA,GACvBonB,QAAQk8B,QAAQtjD,EAAGA,GACnBonB,QAAQk8B,QAAQ,EAAItjD,EAAGA,GACvBonB,QAAQi8B,cCfRqG,MAAQtiD,KAAKoK,KAAK,EAAI,GACtBm4C,QAAkB,EAARD,MAECE,SACbJ,KAAM,SAAAA,KAASpiC,QAASlC,MACtB,IAAIhe,EAAIE,KAAKoK,KAAK0T,KAAOykC,SACrBrqC,EAAIpY,EAAIwiD,MACZtiC,QAAQg8B,OAAO,GAAIl8C,GACnBkgB,QAAQk8B,OAAOhkC,EAAG,GAClB8H,QAAQk8B,OAAO,EAAGp8C,GAClBkgB,QAAQk8B,QAAQhkC,EAAG,GACnB8H,QAAQi8B,cCRRwG,GAAKziD,KAAKs/B,IAAIkc,QAAK,IAAMx7C,KAAKs/B,IAAI,EAAIkc,QAAK,IAC3CkH,GAAK1iD,KAAKs/B,IAAImc,SAAM,IAAMgH,GAC1BE,IAAM3iD,KAAKq/B,IAAIoc,SAAM,IAAMgH,GAEhBG,MACbR,KAAM,SAAAA,KAASpiC,QAASlC,MACtB,IAAIllB,EAAIoH,KAAKoK,KAPR,kBAOa0T,MACd5F,EAAIwqC,GAAK9pD,EACTkH,EAAI6iD,GAAK/pD,EACbonB,QAAQg8B,OAAO,GAAIpjD,GACnBonB,QAAQk8B,OAAOhkC,EAAGpY,GAClB,IAAK,IAAIhI,EAAI,EAAGA,EAAI,IAAKA,EAAG,CAC1B,IAAIyC,EAAIkhD,SAAM3jD,EAAI,EACdK,EAAI6H,KAAKq/B,IAAI9kC,GACbR,EAAIiG,KAAKs/B,IAAI/kC,GACjBylB,QAAQk8B,OAAOniD,EAAInB,GAAIT,EAAIS,GAC3BonB,QAAQk8B,OAAO/jD,EAAI+f,EAAIne,EAAI+F,EAAG/F,EAAIme,EAAI/f,EAAI2H,GAE5CkgB,QAAQi8B,cCrBG4G,QACbT,KAAM,SAAAA,KAASpiC,QAASlC,MACtB,IAAIhb,EAAI9C,KAAKoK,KAAK0T,MACd5F,GAAKpV,EAAI,EACbkd,QAAQg+B,KAAK9lC,EAAGA,EAAGpV,EAAGA,KCJtBggD,MAAQ9iD,KAAKoK,KAAK,GAEP24C,UACbX,KAAM,SAAAA,KAASpiC,QAASlC,MACtB,IAAIhe,GAAKE,KAAKoK,KAAK0T,MAAgB,EAARglC,QAC3B9iC,QAAQg8B,OAAO,EAAO,EAAJl8C,GAClBkgB,QAAQk8B,QAAQ4G,MAAQhjD,GAAIA,GAC5BkgB,QAAQk8B,OAAO4G,MAAQhjD,GAAIA,GAC3BkgB,QAAQi8B,cCPRliD,MAAIiG,KAAKoK,KAAK,GAAK,EACnB9F,MAAI,EAAItE,KAAKoK,KAAK,IAClB7P,MAAkB,GAAb+J,MAAI,EAAI,GAEF0+C,KACbZ,KAAM,SAAAA,KAASpiC,QAASlC,MACtB,IAAIllB,EAAIoH,KAAKoK,KAAK0T,KAAOvjB,OACrBwvC,GAAKnxC,EAAI,EACT6jD,GAAK7jD,EAAI0L,MACT0lC,GAAKD,GACLqS,GAAKxjD,EAAI0L,MAAI1L,EACb0jD,IAAMtS,GACNuS,GAAKH,GACTp8B,QAAQg8B,OAAOjS,GAAI0S,IACnBz8B,QAAQk8B,OAAOlS,GAAIoS,IACnBp8B,QAAQk8B,OAAOI,GAAIC,IACnBv8B,QAAQk8B,QAjBJ,GAiBenS,GAAKhwC,MAAI0iD,GAAI1iD,MAAIgwC,IAjBhC,GAiByC0S,IAC7Cz8B,QAAQk8B,QAlBJ,GAkBelS,GAAKjwC,MAAIqiD,GAAIriD,MAAIiwC,IAlBhC,GAkByCoS,IAC7Cp8B,QAAQk8B,QAnBJ,GAmBeI,GAAKviD,MAAIwiD,GAAIxiD,MAAIuiD,IAnBhC,GAmByCC,IAC7Cv8B,QAAQk8B,QApBJ,GAoBenS,GAAKhwC,MAAI0iD,IApBxB,GAoBgCA,GAAK1iD,MAAIgwC,IAC7C/pB,QAAQk8B,QArBJ,GAqBelS,GAAKjwC,MAAIqiD,IArBxB,GAqBgCA,GAAKriD,MAAIiwC,IAC7ChqB,QAAQk8B,QAtBJ,GAsBeI,GAAKviD,MAAIwiD,IAtBxB,GAsBgCA,GAAKxiD,MAAIuiD,IAC7Ct8B,QAAQi8B,cCvBGgH,KAAA,aCAR,SAASvC,OAAMwC,KAAMhrC,EAAGpY,GAC7BojD,KAAKnjC,SAASs8B,eACX,EAAI6G,KAAKtH,IAAMsH,KAAKpH,KAAO,GAC3B,EAAIoH,KAAKrH,IAAMqH,KAAKnH,KAAO,GAC3BmH,KAAKtH,IAAM,EAAIsH,KAAKpH,KAAO,GAC3BoH,KAAKrH,IAAM,EAAIqH,KAAKnH,KAAO,GAC3BmH,KAAKtH,IAAM,EAAIsH,KAAKpH,IAAM5jC,GAAK,GAC/BgrC,KAAKrH,IAAM,EAAIqH,KAAKnH,IAAMj8C,GAAK,GAI7B,SAASqjD,MAAMnjC,SACpBhjB,KAAK+iB,SAAWC,QAGlBmjC,MAAMvpD,WACJwmD,UAAW,SAAAA,YACTpjD,KAAKqjD,MAAQ,GAEfC,QAAS,SAAAA,UACPtjD,KAAKqjD,MAAQtzB,KAEfwzB,UAAW,SAAAA,YACTvjD,KAAK4+C,IAAM5+C,KAAK8+C,IAChB9+C,KAAK6+C,IAAM7+C,KAAK++C,IAAMhvB,IACtB/vB,KAAKwjD,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQzjD,KAAKwjD,QACX,KAAK,EAAGE,OAAM1jD,KAAMA,KAAK8+C,IAAK9+C,KAAK++C,KACnC,KAAK,EAAG/+C,KAAK+iB,SAASm8B,OAAOl/C,KAAK8+C,IAAK9+C,KAAK++C,MAE1C/+C,KAAKqjD,OAAyB,IAAfrjD,KAAKqjD,OAA+B,IAAhBrjD,KAAKwjD,SAAexjD,KAAK+iB,SAASk8B,YACzEj/C,KAAKqjD,MAAQ,EAAIrjD,KAAKqjD,OAExBK,MAAO,SAAAA,MAASxoC,EAAGpY,GAEjB,OADAoY,GAAKA,EAAGpY,GAAKA,EACL9C,KAAKwjD,QACX,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAGxjD,KAAKqjD,MAAQrjD,KAAK+iB,SAASm8B,OAAOhkC,EAAGpY,GAAK9C,KAAK+iB,SAASi8B,OAAO9jC,EAAGpY,GAAI,MAC/F,KAAK,EAAG9C,KAAKwjD,OAAS,EAAG,MACzB,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAGxjD,KAAK+iB,SAASm8B,QAAQ,EAAIl/C,KAAK4+C,IAAM5+C,KAAK8+C,KAAO,GAAI,EAAI9+C,KAAK6+C,IAAM7+C,KAAK++C,KAAO,GACzG,QAAS2E,OAAM1jD,KAAMkb,EAAGpY,GAE1B9C,KAAK4+C,IAAM5+C,KAAK8+C,IAAK9+C,KAAK8+C,IAAM5jC,EAChClb,KAAK6+C,IAAM7+C,KAAK++C,IAAK/+C,KAAK++C,IAAMj8C,ICzCpC,SAASsjD,YAAYpjC,SACnBhjB,KAAK+iB,SAAWC,QAGlBojC,YAAYxpD,WACVwmD,UAAW6C,KACX3C,QAAS2C,KACT1C,UAAW,SAAAA,YACTvjD,KAAK4+C,IAAM5+C,KAAK8+C,IAAM9+C,KAAKqmD,IAAMrmD,KAAKsmD,IAAMtmD,KAAKumD,IACjDvmD,KAAK6+C,IAAM7+C,KAAK++C,IAAM/+C,KAAKwmD,IAAMxmD,KAAKymD,IAAMzmD,KAAK0mD,IAAM32B,IACvD/vB,KAAKwjD,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQzjD,KAAKwjD,QACX,KAAK,EACHxjD,KAAK+iB,SAASi8B,OAAOh/C,KAAKqmD,IAAKrmD,KAAKwmD,KACpCxmD,KAAK+iB,SAASk8B,YACd,MAEF,KAAK,EACHj/C,KAAK+iB,SAASi8B,QAAQh/C,KAAKqmD,IAAM,EAAIrmD,KAAKsmD,KAAO,GAAItmD,KAAKwmD,IAAM,EAAIxmD,KAAKymD,KAAO,GAChFzmD,KAAK+iB,SAASm8B,QAAQl/C,KAAKsmD,IAAM,EAAItmD,KAAKqmD,KAAO,GAAIrmD,KAAKymD,IAAM,EAAIzmD,KAAKwmD,KAAO,GAChFxmD,KAAK+iB,SAASk8B,YACd,MAEF,KAAK,EACHj/C,KAAK0jD,MAAM1jD,KAAKqmD,IAAKrmD,KAAKwmD,KAC1BxmD,KAAK0jD,MAAM1jD,KAAKsmD,IAAKtmD,KAAKymD,KAC1BzmD,KAAK0jD,MAAM1jD,KAAKumD,IAAKvmD,KAAK0mD,OAKhChD,MAAO,SAAAA,MAASxoC,EAAGpY,GAEjB,OADAoY,GAAKA,EAAGpY,GAAKA,EACL9C,KAAKwjD,QACX,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAGxjD,KAAKqmD,IAAMnrC,EAAGlb,KAAKwmD,IAAM1jD,EAAG,MACrD,KAAK,EAAG9C,KAAKwjD,OAAS,EAAGxjD,KAAKsmD,IAAMprC,EAAGlb,KAAKymD,IAAM3jD,EAAG,MACrD,KAAK,EAAG9C,KAAKwjD,OAAS,EAAGxjD,KAAKumD,IAAMrrC,EAAGlb,KAAK0mD,IAAM5jD,EAAG9C,KAAK+iB,SAASi8B,QAAQh/C,KAAK4+C,IAAM,EAAI5+C,KAAK8+C,IAAM5jC,GAAK,GAAIlb,KAAK6+C,IAAM,EAAI7+C,KAAK++C,IAAMj8C,GAAK,GAAI,MACjJ,QAAS4gD,OAAM1jD,KAAMkb,EAAGpY,GAE1B9C,KAAK4+C,IAAM5+C,KAAK8+C,IAAK9+C,KAAK8+C,IAAM5jC,EAChClb,KAAK6+C,IAAM7+C,KAAK++C,IAAK/+C,KAAK++C,IAAMj8C,IC3CpC,SAAS6jD,UAAU3jC,SACjBhjB,KAAK+iB,SAAWC,QAGlB2jC,UAAU/pD,WACRwmD,UAAW,SAAAA,YACTpjD,KAAKqjD,MAAQ,GAEfC,QAAS,SAAAA,UACPtjD,KAAKqjD,MAAQtzB,KAEfwzB,UAAW,SAAAA,YACTvjD,KAAK4+C,IAAM5+C,KAAK8+C,IAChB9+C,KAAK6+C,IAAM7+C,KAAK++C,IAAMhvB,IACtB/vB,KAAKwjD,OAAS,GAEhBC,QAAS,SAAAA,WACHzjD,KAAKqjD,OAAyB,IAAfrjD,KAAKqjD,OAA+B,IAAhBrjD,KAAKwjD,SAAexjD,KAAK+iB,SAASk8B,YACzEj/C,KAAKqjD,MAAQ,EAAIrjD,KAAKqjD,OAExBK,MAAO,SAAAA,MAASxoC,EAAGpY,GAEjB,OADAoY,GAAKA,EAAGpY,GAAKA,EACL9C,KAAKwjD,QACX,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAG,MACzB,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAG,MACzB,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAG,IAAIzW,IAAM/sC,KAAK4+C,IAAM,EAAI5+C,KAAK8+C,IAAM5jC,GAAK,EAAGukC,IAAMz/C,KAAK6+C,IAAM,EAAI7+C,KAAK++C,IAAMj8C,GAAK,EAAG9C,KAAKqjD,MAAQrjD,KAAK+iB,SAASm8B,OAAOnS,GAAI0S,IAAMz/C,KAAK+iB,SAASi8B,OAAOjS,GAAI0S,IAAK,MACvL,KAAK,EAAGz/C,KAAKwjD,OAAS,EACtB,QAASE,OAAM1jD,KAAMkb,EAAGpY,GAE1B9C,KAAK4+C,IAAM5+C,KAAK8+C,IAAK9+C,KAAK8+C,IAAM5jC,EAChClb,KAAK6+C,IAAM7+C,KAAK++C,IAAK/+C,KAAK++C,IAAMj8C,IC9BpC,SAAS8jD,OAAO5jC,QAAS6jC,MACvB7mD,KAAK8mD,OAAS,IAAIX,MAAMnjC,SACxBhjB,KAAK+mD,MAAQF,KAGfD,OAAOhqD,WACL2mD,UAAW,SAAAA,YACTvjD,KAAKgnD,MACLhnD,KAAKinD,MACLjnD,KAAK8mD,OAAOvD,aAEdE,QAAS,SAAAA,UACP,IAAIvoC,EAAIlb,KAAKgnD,GACTlkD,EAAI9C,KAAKinD,GACT5gD,EAAI6U,EAAE7Z,OAAS,EAEnB,GAAIgF,EAAI,EAQN,IAPA,IAKIrK,EALA+wC,GAAK7xB,EAAE,GACPukC,GAAK38C,EAAE,GACP89C,GAAK1lC,EAAE7U,GAAK0mC,GACZ8T,GAAK/9C,EAAEuD,GAAKo5C,GACZ3kD,GAAK,IAGAA,GAAKuL,GACZrK,EAAIlB,EAAIuL,EACRrG,KAAK8mD,OAAOpD,MACV1jD,KAAK+mD,MAAQ7rC,EAAEpgB,IAAM,EAAIkF,KAAK+mD,QAAUha,GAAK/wC,EAAI4kD,IACjD5gD,KAAK+mD,MAAQjkD,EAAEhI,IAAM,EAAIkF,KAAK+mD,QAAUtH,GAAKzjD,EAAI6kD,KAKvD7gD,KAAKgnD,GAAKhnD,KAAKinD,GAAK,KACpBjnD,KAAK8mD,OAAOrD,WAEdC,MAAO,SAAAA,MAASxoC,EAAGpY,GACjB9C,KAAKgnD,GAAG1iD,MAAM4W,GACdlb,KAAKinD,GAAG3iD,MAAMxB,MAIH,SAAUokD,OAAOL,MAE9B,SAASM,OAAOnkC,SACd,OAAgB,IAAT6jC,KAAa,IAAIV,MAAMnjC,SAAW,IAAI4jC,OAAO5jC,QAAS6jC,MAO/D,OAJAM,OAAON,KAAO,SAASA,MACrB,OAAOK,QAAQL,OAGVM,QAVM,CAWZ,KCvDI,SAASzD,eAAMwC,KAAMhrC,EAAGpY,GAC7BojD,KAAKnjC,SAASs8B,cACZ6G,KAAKpH,IAAMoH,KAAKkB,IAAMlB,KAAKG,IAAMH,KAAKtH,KACtCsH,KAAKnH,IAAMmH,KAAKkB,IAAMlB,KAAKM,IAAMN,KAAKrH,KACtCqH,KAAKG,IAAMH,KAAKkB,IAAMlB,KAAKpH,IAAM5jC,GACjCgrC,KAAKM,IAAMN,KAAKkB,IAAMlB,KAAKnH,IAAMj8C,GACjCojD,KAAKG,IACLH,KAAKM,KAIF,SAASa,SAASrkC,QAASskC,SAChCtnD,KAAK+iB,SAAWC,QAChBhjB,KAAKonD,IAAM,EAAIE,SAAW,EAG5BD,SAASzqD,WACPwmD,UAAW,SAAAA,YACTpjD,KAAKqjD,MAAQ,GAEfC,QAAS,SAAAA,UACPtjD,KAAKqjD,MAAQtzB,KAEfwzB,UAAW,SAAAA,YACTvjD,KAAK4+C,IAAM5+C,KAAK8+C,IAAM9+C,KAAKqmD,IAC3BrmD,KAAK6+C,IAAM7+C,KAAK++C,IAAM/+C,KAAKwmD,IAAMz2B,IACjC/vB,KAAKwjD,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQzjD,KAAKwjD,QACX,KAAK,EAAGxjD,KAAK+iB,SAASm8B,OAAOl/C,KAAKqmD,IAAKrmD,KAAKwmD,KAAM,MAClD,KAAK,EAAG9C,eAAM1jD,KAAMA,KAAK8+C,IAAK9+C,KAAK++C,MAEjC/+C,KAAKqjD,OAAyB,IAAfrjD,KAAKqjD,OAA+B,IAAhBrjD,KAAKwjD,SAAexjD,KAAK+iB,SAASk8B,YACzEj/C,KAAKqjD,MAAQ,EAAIrjD,KAAKqjD,OAExBK,MAAO,SAAAA,MAASxoC,EAAGpY,GAEjB,OADAoY,GAAKA,EAAGpY,GAAKA,EACL9C,KAAKwjD,QACX,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAGxjD,KAAKqjD,MAAQrjD,KAAK+iB,SAASm8B,OAAOhkC,EAAGpY,GAAK9C,KAAK+iB,SAASi8B,OAAO9jC,EAAGpY,GAAI,MAC/F,KAAK,EAAG9C,KAAKwjD,OAAS,EAAGxjD,KAAK8+C,IAAM5jC,EAAGlb,KAAK++C,IAAMj8C,EAAG,MACrD,KAAK,EAAG9C,KAAKwjD,OAAS,EACtB,QAASE,eAAM1jD,KAAMkb,EAAGpY,GAE1B9C,KAAK4+C,IAAM5+C,KAAK8+C,IAAK9+C,KAAK8+C,IAAM9+C,KAAKqmD,IAAKrmD,KAAKqmD,IAAMnrC,EACrDlb,KAAK6+C,IAAM7+C,KAAK++C,IAAK/+C,KAAK++C,IAAM/+C,KAAKwmD,IAAKxmD,KAAKwmD,IAAM1jD,KAI1C,SAAUokD,OAAOI,SAE9B,SAASC,SAASvkC,SAChB,OAAO,IAAIqkC,SAASrkC,QAASskC,SAO/B,OAJAC,SAASD,QAAU,SAASA,SAC1B,OAAOJ,QAAQI,UAGVC,UAVM,CAWZ,GCzDI,SAASC,eAAexkC,QAASskC,SACtCtnD,KAAK+iB,SAAWC,QAChBhjB,KAAKonD,IAAM,EAAIE,SAAW,EAG5BE,eAAe5qD,WACbwmD,UAAW6C,KACX3C,QAAS2C,KACT1C,UAAW,SAAAA,YACTvjD,KAAK4+C,IAAM5+C,KAAK8+C,IAAM9+C,KAAKqmD,IAAMrmD,KAAKsmD,IAAMtmD,KAAKumD,IAAMvmD,KAAKynD,IAC5DznD,KAAK6+C,IAAM7+C,KAAK++C,IAAM/+C,KAAKwmD,IAAMxmD,KAAKymD,IAAMzmD,KAAK0mD,IAAM1mD,KAAK0nD,IAAM33B,IAClE/vB,KAAKwjD,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQzjD,KAAKwjD,QACX,KAAK,EACHxjD,KAAK+iB,SAASi8B,OAAOh/C,KAAKsmD,IAAKtmD,KAAKymD,KACpCzmD,KAAK+iB,SAASk8B,YACd,MAEF,KAAK,EACHj/C,KAAK+iB,SAASm8B,OAAOl/C,KAAKsmD,IAAKtmD,KAAKymD,KACpCzmD,KAAK+iB,SAASk8B,YACd,MAEF,KAAK,EACHj/C,KAAK0jD,MAAM1jD,KAAKsmD,IAAKtmD,KAAKymD,KAC1BzmD,KAAK0jD,MAAM1jD,KAAKumD,IAAKvmD,KAAK0mD,KAC1B1mD,KAAK0jD,MAAM1jD,KAAKynD,IAAKznD,KAAK0nD,OAKhChE,MAAO,SAAAA,MAASxoC,EAAGpY,GAEjB,OADAoY,GAAKA,EAAGpY,GAAKA,EACL9C,KAAKwjD,QACX,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAGxjD,KAAKsmD,IAAMprC,EAAGlb,KAAKymD,IAAM3jD,EAAG,MACrD,KAAK,EAAG9C,KAAKwjD,OAAS,EAAGxjD,KAAK+iB,SAASi8B,OAAOh/C,KAAKumD,IAAMrrC,EAAGlb,KAAK0mD,IAAM5jD,GAAI,MAC3E,KAAK,EAAG9C,KAAKwjD,OAAS,EAAGxjD,KAAKynD,IAAMvsC,EAAGlb,KAAK0nD,IAAM5kD,EAAG,MACrD,QAAS4gD,eAAM1jD,KAAMkb,EAAGpY,GAE1B9C,KAAK4+C,IAAM5+C,KAAK8+C,IAAK9+C,KAAK8+C,IAAM9+C,KAAKqmD,IAAKrmD,KAAKqmD,IAAMnrC,EACrDlb,KAAK6+C,IAAM7+C,KAAK++C,IAAK/+C,KAAK++C,IAAM/+C,KAAKwmD,IAAKxmD,KAAKwmD,IAAM1jD,KAI1C,SAAUokD,OAAOI,SAE9B,SAASC,SAASvkC,SAChB,OAAO,IAAIwkC,eAAexkC,QAASskC,SAOrC,OAJAC,SAASD,QAAU,SAASA,SAC1B,OAAOJ,QAAQI,UAGVC,UAVM,CAWZ,GC1DI,SAASI,aAAa3kC,QAASskC,SACpCtnD,KAAK+iB,SAAWC,QAChBhjB,KAAKonD,IAAM,EAAIE,SAAW,EAG5BK,aAAa/qD,WACXwmD,UAAW,SAAAA,YACTpjD,KAAKqjD,MAAQ,GAEfC,QAAS,SAAAA,UACPtjD,KAAKqjD,MAAQtzB,KAEfwzB,UAAW,SAAAA,YACTvjD,KAAK4+C,IAAM5+C,KAAK8+C,IAAM9+C,KAAKqmD,IAC3BrmD,KAAK6+C,IAAM7+C,KAAK++C,IAAM/+C,KAAKwmD,IAAMz2B,IACjC/vB,KAAKwjD,OAAS,GAEhBC,QAAS,SAAAA,WACHzjD,KAAKqjD,OAAyB,IAAfrjD,KAAKqjD,OAA+B,IAAhBrjD,KAAKwjD,SAAexjD,KAAK+iB,SAASk8B,YACzEj/C,KAAKqjD,MAAQ,EAAIrjD,KAAKqjD,OAExBK,MAAO,SAAAA,MAASxoC,EAAGpY,GAEjB,OADAoY,GAAKA,EAAGpY,GAAKA,EACL9C,KAAKwjD,QACX,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAG,MACzB,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAG,MACzB,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAGxjD,KAAKqjD,MAAQrjD,KAAK+iB,SAASm8B,OAAOl/C,KAAKqmD,IAAKrmD,KAAKwmD,KAAOxmD,KAAK+iB,SAASi8B,OAAOh/C,KAAKqmD,IAAKrmD,KAAKwmD,KAAM,MAC3H,KAAK,EAAGxmD,KAAKwjD,OAAS,EACtB,QAASE,eAAM1jD,KAAMkb,EAAGpY,GAE1B9C,KAAK4+C,IAAM5+C,KAAK8+C,IAAK9+C,KAAK8+C,IAAM9+C,KAAKqmD,IAAKrmD,KAAKqmD,IAAMnrC,EACrDlb,KAAK6+C,IAAM7+C,KAAK++C,IAAK/+C,KAAK++C,IAAM/+C,KAAKwmD,IAAKxmD,KAAKwmD,IAAM1jD,KAI1C,SAAUokD,OAAOI,SAE9B,SAASC,SAASvkC,SAChB,OAAO,IAAI2kC,aAAa3kC,QAASskC,SAOnC,OAJAC,SAASD,QAAU,SAASA,SAC1B,OAAOJ,QAAQI,UAGVC,UAVM,CAWZ,GC7CI,SAAS7D,iBAAMwC,KAAMhrC,EAAGpY,GAC7B,IAAIkqC,GAAKkZ,KAAKpH,IACVM,GAAK8G,KAAKnH,IACVO,GAAK4G,KAAKG,IACV9G,GAAK2G,KAAKM,IAEd,GAAIN,KAAK0B,OAASjL,aAAS,CACzB,IAAIp/C,EAAI,EAAI2oD,KAAK2B,QAAU,EAAI3B,KAAK0B,OAAS1B,KAAK4B,OAAS5B,KAAK6B,QAC5DxrD,EAAI,EAAI2pD,KAAK0B,QAAU1B,KAAK0B,OAAS1B,KAAK4B,QAC9C9a,IAAMA,GAAKzvC,EAAI2oD,KAAKtH,IAAMsH,KAAK6B,QAAU7B,KAAKG,IAAMH,KAAK2B,SAAWtrD,EACpE6iD,IAAMA,GAAK7hD,EAAI2oD,KAAKrH,IAAMqH,KAAK6B,QAAU7B,KAAKM,IAAMN,KAAK2B,SAAWtrD,EAGtE,GAAI2pD,KAAK8B,OAASrL,aAAS,CACzB,IAAIh6C,EAAI,EAAIujD,KAAK+B,QAAU,EAAI/B,KAAK8B,OAAS9B,KAAK4B,OAAS5B,KAAK6B,QAC5D7sD,EAAI,EAAIgrD,KAAK8B,QAAU9B,KAAK8B,OAAS9B,KAAK4B,QAC9CxI,IAAMA,GAAK38C,EAAIujD,KAAKpH,IAAMoH,KAAK+B,QAAU/sC,EAAIgrC,KAAK6B,SAAW7sD,EAC7DqkD,IAAMA,GAAK58C,EAAIujD,KAAKnH,IAAMmH,KAAK+B,QAAUnlD,EAAIojD,KAAK6B,SAAW7sD,EAG/DgrD,KAAKnjC,SAASs8B,cAAcrS,GAAIoS,GAAIE,GAAIC,GAAI2G,KAAKG,IAAKH,KAAKM,KAG7D,SAAS0B,WAAWllC,QAASmlC,OAC3BnoD,KAAK+iB,SAAWC,QAChBhjB,KAAKooD,OAASD,MAGhBD,WAAWtrD,WACTwmD,UAAW,SAAAA,YACTpjD,KAAKqjD,MAAQ,GAEfC,QAAS,SAAAA,UACPtjD,KAAKqjD,MAAQtzB,KAEfwzB,UAAW,SAAAA,YACTvjD,KAAK4+C,IAAM5+C,KAAK8+C,IAAM9+C,KAAKqmD,IAC3BrmD,KAAK6+C,IAAM7+C,KAAK++C,IAAM/+C,KAAKwmD,IAAMz2B,IACjC/vB,KAAK4nD,OAAS5nD,KAAK8nD,OAAS9nD,KAAKgoD,OACjChoD,KAAK6nD,QAAU7nD,KAAK+nD,QAAU/nD,KAAKioD,QACnCjoD,KAAKwjD,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQzjD,KAAKwjD,QACX,KAAK,EAAGxjD,KAAK+iB,SAASm8B,OAAOl/C,KAAKqmD,IAAKrmD,KAAKwmD,KAAM,MAClD,KAAK,EAAGxmD,KAAK0jD,MAAM1jD,KAAKqmD,IAAKrmD,KAAKwmD,MAEhCxmD,KAAKqjD,OAAyB,IAAfrjD,KAAKqjD,OAA+B,IAAhBrjD,KAAKwjD,SAAexjD,KAAK+iB,SAASk8B,YACzEj/C,KAAKqjD,MAAQ,EAAIrjD,KAAKqjD,OAExBK,MAAO,SAAAA,MAASxoC,EAAGpY,GAGjB,GAFAoY,GAAKA,EAAGpY,GAAKA,EAET9C,KAAKwjD,OAAQ,CACf,IAAI6E,IAAMroD,KAAKqmD,IAAMnrC,EACjBotC,IAAMtoD,KAAKwmD,IAAM1jD,EACrB9C,KAAKgoD,OAAShlD,KAAKoK,KAAKpN,KAAKioD,QAAUjlD,KAAKqK,IAAIg7C,IAAMA,IAAMC,IAAMA,IAAKtoD,KAAKooD,SAG9E,OAAQpoD,KAAKwjD,QACX,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAGxjD,KAAKqjD,MAAQrjD,KAAK+iB,SAASm8B,OAAOhkC,EAAGpY,GAAK9C,KAAK+iB,SAASi8B,OAAO9jC,EAAGpY,GAAI,MAC/F,KAAK,EAAG9C,KAAKwjD,OAAS,EAAG,MACzB,KAAK,EAAGxjD,KAAKwjD,OAAS,EACtB,QAASE,iBAAM1jD,KAAMkb,EAAGpY,GAG1B9C,KAAK4nD,OAAS5nD,KAAK8nD,OAAQ9nD,KAAK8nD,OAAS9nD,KAAKgoD,OAC9ChoD,KAAK6nD,QAAU7nD,KAAK+nD,QAAS/nD,KAAK+nD,QAAU/nD,KAAKioD,QACjDjoD,KAAK4+C,IAAM5+C,KAAK8+C,IAAK9+C,KAAK8+C,IAAM9+C,KAAKqmD,IAAKrmD,KAAKqmD,IAAMnrC,EACrDlb,KAAK6+C,IAAM7+C,KAAK++C,IAAK/+C,KAAK++C,IAAM/+C,KAAKwmD,IAAKxmD,KAAKwmD,IAAM1jD,IAI1C,IAAAylD,iBAAA,SAAUrB,OAAOiB,OAE9B,SAASK,WAAWxlC,SAClB,OAAOmlC,MAAQ,IAAID,WAAWllC,QAASmlC,OAAS,IAAId,SAASrkC,QAAS,GAOxE,OAJAwlC,WAAWL,MAAQ,SAASA,OAC1B,OAAOjB,QAAQiB,QAGVK,WAVM,CAWZ,ICnFH,SAASC,iBAAiBzlC,QAASmlC,OACjCnoD,KAAK+iB,SAAWC,QAChBhjB,KAAKooD,OAASD,MAGhBM,iBAAiB7rD,WACfwmD,UAAW6C,KACX3C,QAAS2C,KACT1C,UAAW,SAAAA,YACTvjD,KAAK4+C,IAAM5+C,KAAK8+C,IAAM9+C,KAAKqmD,IAAMrmD,KAAKsmD,IAAMtmD,KAAKumD,IAAMvmD,KAAKynD,IAC5DznD,KAAK6+C,IAAM7+C,KAAK++C,IAAM/+C,KAAKwmD,IAAMxmD,KAAKymD,IAAMzmD,KAAK0mD,IAAM1mD,KAAK0nD,IAAM33B,IAClE/vB,KAAK4nD,OAAS5nD,KAAK8nD,OAAS9nD,KAAKgoD,OACjChoD,KAAK6nD,QAAU7nD,KAAK+nD,QAAU/nD,KAAKioD,QACnCjoD,KAAKwjD,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQzjD,KAAKwjD,QACX,KAAK,EACHxjD,KAAK+iB,SAASi8B,OAAOh/C,KAAKsmD,IAAKtmD,KAAKymD,KACpCzmD,KAAK+iB,SAASk8B,YACd,MAEF,KAAK,EACHj/C,KAAK+iB,SAASm8B,OAAOl/C,KAAKsmD,IAAKtmD,KAAKymD,KACpCzmD,KAAK+iB,SAASk8B,YACd,MAEF,KAAK,EACHj/C,KAAK0jD,MAAM1jD,KAAKsmD,IAAKtmD,KAAKymD,KAC1BzmD,KAAK0jD,MAAM1jD,KAAKumD,IAAKvmD,KAAK0mD,KAC1B1mD,KAAK0jD,MAAM1jD,KAAKynD,IAAKznD,KAAK0nD,OAKhChE,MAAO,SAAAA,MAASxoC,EAAGpY,GAGjB,GAFAoY,GAAKA,EAAGpY,GAAKA,EAET9C,KAAKwjD,OAAQ,CACf,IAAI6E,IAAMroD,KAAKqmD,IAAMnrC,EACjBotC,IAAMtoD,KAAKwmD,IAAM1jD,EACrB9C,KAAKgoD,OAAShlD,KAAKoK,KAAKpN,KAAKioD,QAAUjlD,KAAKqK,IAAIg7C,IAAMA,IAAMC,IAAMA,IAAKtoD,KAAKooD,SAG9E,OAAQpoD,KAAKwjD,QACX,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAGxjD,KAAKsmD,IAAMprC,EAAGlb,KAAKymD,IAAM3jD,EAAG,MACrD,KAAK,EAAG9C,KAAKwjD,OAAS,EAAGxjD,KAAK+iB,SAASi8B,OAAOh/C,KAAKumD,IAAMrrC,EAAGlb,KAAK0mD,IAAM5jD,GAAI,MAC3E,KAAK,EAAG9C,KAAKwjD,OAAS,EAAGxjD,KAAKynD,IAAMvsC,EAAGlb,KAAK0nD,IAAM5kD,EAAG,MACrD,QAAS4gD,iBAAM1jD,KAAMkb,EAAGpY,GAG1B9C,KAAK4nD,OAAS5nD,KAAK8nD,OAAQ9nD,KAAK8nD,OAAS9nD,KAAKgoD,OAC9ChoD,KAAK6nD,QAAU7nD,KAAK+nD,QAAS/nD,KAAK+nD,QAAU/nD,KAAKioD,QACjDjoD,KAAK4+C,IAAM5+C,KAAK8+C,IAAK9+C,KAAK8+C,IAAM9+C,KAAKqmD,IAAKrmD,KAAKqmD,IAAMnrC,EACrDlb,KAAK6+C,IAAM7+C,KAAK++C,IAAK/+C,KAAK++C,IAAM/+C,KAAKwmD,IAAKxmD,KAAKwmD,IAAM1jD,KAI1C,SAAUokD,OAAOiB,OAE9B,SAASK,WAAWxlC,SAClB,OAAOmlC,MAAQ,IAAIM,iBAAiBzlC,QAASmlC,OAAS,IAAIX,eAAexkC,QAAS,GAOpF,OAJAwlC,WAAWL,MAAQ,SAASA,OAC1B,OAAOjB,QAAQiB,QAGVK,YAVM,CAWZ,ICtEH,SAASE,eAAe1lC,QAASmlC,OAC/BnoD,KAAK+iB,SAAWC,QAChBhjB,KAAKooD,OAASD,MAGhBO,eAAe9rD,WACbwmD,UAAW,SAAAA,YACTpjD,KAAKqjD,MAAQ,GAEfC,QAAS,SAAAA,UACPtjD,KAAKqjD,MAAQtzB,KAEfwzB,UAAW,SAAAA,YACTvjD,KAAK4+C,IAAM5+C,KAAK8+C,IAAM9+C,KAAKqmD,IAC3BrmD,KAAK6+C,IAAM7+C,KAAK++C,IAAM/+C,KAAKwmD,IAAMz2B,IACjC/vB,KAAK4nD,OAAS5nD,KAAK8nD,OAAS9nD,KAAKgoD,OACjChoD,KAAK6nD,QAAU7nD,KAAK+nD,QAAU/nD,KAAKioD,QACnCjoD,KAAKwjD,OAAS,GAEhBC,QAAS,SAAAA,WACHzjD,KAAKqjD,OAAyB,IAAfrjD,KAAKqjD,OAA+B,IAAhBrjD,KAAKwjD,SAAexjD,KAAK+iB,SAASk8B,YACzEj/C,KAAKqjD,MAAQ,EAAIrjD,KAAKqjD,OAExBK,MAAO,SAAAA,MAASxoC,EAAGpY,GAGjB,GAFAoY,GAAKA,EAAGpY,GAAKA,EAET9C,KAAKwjD,OAAQ,CACf,IAAI6E,IAAMroD,KAAKqmD,IAAMnrC,EACjBotC,IAAMtoD,KAAKwmD,IAAM1jD,EACrB9C,KAAKgoD,OAAShlD,KAAKoK,KAAKpN,KAAKioD,QAAUjlD,KAAKqK,IAAIg7C,IAAMA,IAAMC,IAAMA,IAAKtoD,KAAKooD,SAG9E,OAAQpoD,KAAKwjD,QACX,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAG,MACzB,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAG,MACzB,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAGxjD,KAAKqjD,MAAQrjD,KAAK+iB,SAASm8B,OAAOl/C,KAAKqmD,IAAKrmD,KAAKwmD,KAAOxmD,KAAK+iB,SAASi8B,OAAOh/C,KAAKqmD,IAAKrmD,KAAKwmD,KAAM,MAC3H,KAAK,EAAGxmD,KAAKwjD,OAAS,EACtB,QAASE,iBAAM1jD,KAAMkb,EAAGpY,GAG1B9C,KAAK4nD,OAAS5nD,KAAK8nD,OAAQ9nD,KAAK8nD,OAAS9nD,KAAKgoD,OAC9ChoD,KAAK6nD,QAAU7nD,KAAK+nD,QAAS/nD,KAAK+nD,QAAU/nD,KAAKioD,QACjDjoD,KAAK4+C,IAAM5+C,KAAK8+C,IAAK9+C,KAAK8+C,IAAM9+C,KAAKqmD,IAAKrmD,KAAKqmD,IAAMnrC,EACrDlb,KAAK6+C,IAAM7+C,KAAK++C,IAAK/+C,KAAK++C,IAAM/+C,KAAKwmD,IAAKxmD,KAAKwmD,IAAM1jD,KAI1C,SAAUokD,OAAOiB,OAE9B,SAASK,WAAWxlC,SAClB,OAAOmlC,MAAQ,IAAIO,eAAe1lC,QAASmlC,OAAS,IAAIR,aAAa3kC,QAAS,GAOhF,OAJAwlC,WAAWL,MAAQ,SAASA,OAC1B,OAAOjB,QAAQiB,QAGVK,YAVM,CAWZ,IC3DH,SAASG,aAAa3lC,SACpBhjB,KAAK+iB,SAAWC,QAGlB2lC,aAAa/rD,WACXwmD,UAAW6C,KACX3C,QAAS2C,KACT1C,UAAW,SAAAA,YACTvjD,KAAKwjD,OAAS,GAEhBC,QAAS,SAAAA,UACHzjD,KAAKwjD,QAAQxjD,KAAK+iB,SAASk8B,aAEjCyE,MAAO,SAAAA,MAASxoC,EAAGpY,GACjBoY,GAAKA,EAAGpY,GAAKA,EACT9C,KAAKwjD,OAAQxjD,KAAK+iB,SAASm8B,OAAOhkC,EAAGpY,IACpC9C,KAAKwjD,OAAS,EAAGxjD,KAAK+iB,SAASi8B,OAAO9jC,EAAGpY,MClBlD,SAAS6mC,cAAKzuB,GACZ,OAAOA,EAAI,GAAK,EAAI,EAOtB,SAAS0tC,OAAO1C,KAAM5G,GAAIC,IACxB,IAAIsJ,GAAK3C,KAAKpH,IAAMoH,KAAKtH,IACrBkK,GAAKxJ,GAAK4G,KAAKpH,IACfiK,IAAM7C,KAAKnH,IAAMmH,KAAKrH,MAAQgK,IAAMC,GAAK,IAAM,GAC/CE,IAAMzJ,GAAK2G,KAAKnH,MAAQ+J,IAAMD,GAAK,IAAM,GACzC/rD,GAAKisD,GAAKD,GAAKE,GAAKH,KAAOA,GAAKC,IACpC,OAAQnf,cAAKof,IAAMpf,cAAKqf,KAAOhmD,KAAKkK,IAAIlK,KAAKiY,IAAI8tC,IAAK/lD,KAAKiY,IAAI+tC,IAAK,GAAMhmD,KAAKiY,IAAIne,KAAO,EAI5F,SAASmsD,OAAO/C,KAAMlqD,GACpB,IAAI+D,EAAImmD,KAAKpH,IAAMoH,KAAKtH,IACxB,OAAO7+C,GAAK,GAAKmmD,KAAKnH,IAAMmH,KAAKrH,KAAO9+C,EAAI/D,GAAK,EAAIA,EAMvD,SAAS0nD,eAAMwC,KAAM7kB,GAAIC,IACvB,IAAIyL,GAAKmZ,KAAKtH,IACVa,GAAKyG,KAAKrH,IACV7R,GAAKkZ,KAAKpH,IACVM,GAAK8G,KAAKnH,IACV6B,IAAM5T,GAAKD,IAAM,EACrBmZ,KAAKnjC,SAASs8B,cAActS,GAAK6T,GAAInB,GAAKmB,GAAKvf,GAAI2L,GAAK4T,GAAIxB,GAAKwB,GAAKtf,GAAI0L,GAAIoS,IAGhF,SAAS8J,UAAUlmC,SACjBhjB,KAAK+iB,SAAWC,QA0ClB,SAASmmC,UAAUnmC,SACjBhjB,KAAK+iB,SAAW,IAAIqmC,eAAepmC,SAOrC,SAASomC,eAAepmC,SACtBhjB,KAAK+iB,SAAWC,QCvFlB,SAASqmC,QAAQrmC,SACfhjB,KAAK+iB,SAAWC,QA2ClB,SAASsmC,cAAcpuC,GACrB,IAAIpgB,EAEAI,EADAqB,EAAI2e,EAAE7Z,OAAS,EAEf9D,EAAI,IAAIgI,MAAMhJ,GACdoG,EAAI,IAAI4C,MAAMhJ,GACdX,EAAI,IAAI2J,MAAMhJ,GAElB,IADAgB,EAAE,GAAK,EAAGoF,EAAE,GAAK,EAAG/G,EAAE,GAAKsf,EAAE,GAAK,EAAIA,EAAE,GACnCpgB,EAAI,EAAGA,EAAIyB,EAAI,IAAKzB,EAAGyC,EAAEzC,GAAK,EAAG6H,EAAE7H,GAAK,EAAGc,EAAEd,GAAK,EAAIogB,EAAEpgB,GAAK,EAAIogB,EAAEpgB,EAAI,GAE5E,IADAyC,EAAEhB,EAAI,GAAK,EAAGoG,EAAEpG,EAAI,GAAK,EAAGX,EAAEW,EAAI,GAAK,EAAI2e,EAAE3e,EAAI,GAAK2e,EAAE3e,GACnDzB,EAAI,EAAGA,EAAIyB,IAAKzB,EAAGI,EAAIqC,EAAEzC,GAAK6H,EAAE7H,EAAI,GAAI6H,EAAE7H,IAAMI,EAAGU,EAAEd,IAAMI,EAAIU,EAAEd,EAAI,GAE1E,IADAyC,EAAEhB,EAAI,GAAKX,EAAEW,EAAI,GAAKoG,EAAEpG,EAAI,GACvBzB,EAAIyB,EAAI,EAAGzB,GAAK,IAAKA,EAAGyC,EAAEzC,IAAMc,EAAEd,GAAKyC,EAAEzC,EAAI,IAAM6H,EAAE7H,GAE1D,IADA6H,EAAEpG,EAAI,IAAM2e,EAAE3e,GAAKgB,EAAEhB,EAAI,IAAM,EAC1BzB,EAAI,EAAGA,EAAIyB,EAAI,IAAKzB,EAAG6H,EAAE7H,GAAK,EAAIogB,EAAEpgB,EAAI,GAAKyC,EAAEzC,EAAI,GACxD,OAAQyC,EAAGoF,GDpBbumD,UAAUtsD,WACRwmD,UAAW,SAAAA,YACTpjD,KAAKqjD,MAAQ,GAEfC,QAAS,SAAAA,UACPtjD,KAAKqjD,MAAQtzB,KAEfwzB,UAAW,SAAAA,YACTvjD,KAAK4+C,IAAM5+C,KAAK8+C,IAChB9+C,KAAK6+C,IAAM7+C,KAAK++C,IAChB/+C,KAAKupD,IAAMx5B,IACX/vB,KAAKwjD,OAAS,GAEhBC,QAAS,SAAAA,UACP,OAAQzjD,KAAKwjD,QACX,KAAK,EAAGxjD,KAAK+iB,SAASm8B,OAAOl/C,KAAK8+C,IAAK9+C,KAAK++C,KAAM,MAClD,KAAK,EAAG2E,eAAM1jD,KAAMA,KAAKupD,IAAKN,OAAOjpD,KAAMA,KAAKupD,OAE9CvpD,KAAKqjD,OAAyB,IAAfrjD,KAAKqjD,OAA+B,IAAhBrjD,KAAKwjD,SAAexjD,KAAK+iB,SAASk8B,YACzEj/C,KAAKqjD,MAAQ,EAAIrjD,KAAKqjD,OAExBK,MAAO,SAAAA,MAASxoC,EAAGpY,GACjB,IAAIw+B,GAAKvR,IAGT,GADQjtB,GAAKA,GAAboY,GAAKA,KACKlb,KAAK8+C,KAAOh8C,IAAM9C,KAAK++C,IAAjC,CACA,OAAQ/+C,KAAKwjD,QACX,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAGxjD,KAAKqjD,MAAQrjD,KAAK+iB,SAASm8B,OAAOhkC,EAAGpY,GAAK9C,KAAK+iB,SAASi8B,OAAO9jC,EAAGpY,GAAI,MAC/F,KAAK,EAAG9C,KAAKwjD,OAAS,EAAG,MACzB,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAGE,eAAM1jD,KAAMipD,OAAOjpD,KAAMshC,GAAKsnB,OAAO5oD,KAAMkb,EAAGpY,IAAKw+B,IAAK,MACjF,QAASoiB,eAAM1jD,KAAMA,KAAKupD,IAAKjoB,GAAKsnB,OAAO5oD,KAAMkb,EAAGpY,IAGtD9C,KAAK4+C,IAAM5+C,KAAK8+C,IAAK9+C,KAAK8+C,IAAM5jC,EAChClb,KAAK6+C,IAAM7+C,KAAK++C,IAAK/+C,KAAK++C,IAAMj8C,EAChC9C,KAAKupD,IAAMjoB,OAQd6nB,UAAUvsD,UAAYpB,OAAOY,OAAO8sD,UAAUtsD,YAAY8mD,MAAQ,SAASxoC,EAAGpY,GAC7EomD,UAAUtsD,UAAU8mD,MAAMzoD,KAAK+E,KAAM8C,EAAGoY,IAO1CkuC,eAAexsD,WACboiD,OAAQ,SAAAA,OAAS9jC,EAAGpY,GAAK9C,KAAK+iB,SAASi8B,OAAOl8C,EAAGoY,IACjD+jC,UAAW,SAAAA,YAAaj/C,KAAK+iB,SAASk8B,aACtCC,OAAQ,SAAAA,OAAShkC,EAAGpY,GAAK9C,KAAK+iB,SAASm8B,OAAOp8C,EAAGoY,IACjDmkC,cAAe,SAAAA,cAASrS,GAAIoS,GAAIE,GAAIC,GAAIrkC,EAAGpY,GAAK9C,KAAK+iB,SAASs8B,cAAcD,GAAIpS,GAAIuS,GAAID,GAAIx8C,EAAGoY,KC1FjGmuC,QAAQzsD,WACNwmD,UAAW,SAAAA,YACTpjD,KAAKqjD,MAAQ,GAEfC,QAAS,SAAAA,UACPtjD,KAAKqjD,MAAQtzB,KAEfwzB,UAAW,SAAAA,YACTvjD,KAAKgnD,MACLhnD,KAAKinD,OAEPxD,QAAS,SAAAA,UACP,IAAIvoC,EAAIlb,KAAKgnD,GACTlkD,EAAI9C,KAAKinD,GACT1qD,EAAI2e,EAAE7Z,OAEV,GAAI9E,EAEF,GADAyD,KAAKqjD,MAAQrjD,KAAK+iB,SAASm8B,OAAOhkC,EAAE,GAAIpY,EAAE,IAAM9C,KAAK+iB,SAASi8B,OAAO9jC,EAAE,GAAIpY,EAAE,IACnE,IAANvG,EACFyD,KAAK+iB,SAASm8B,OAAOhkC,EAAE,GAAIpY,EAAE,SAI7B,IAFA,IAAI0mD,GAAKF,cAAcpuC,GACnBuuC,GAAKH,cAAcxmD,GACdgvB,GAAK,EAAGsY,GAAK,EAAGA,GAAK7tC,IAAKu1B,KAAMsY,GACvCpqC,KAAK+iB,SAASs8B,cAAcmK,GAAG,GAAG13B,IAAK23B,GAAG,GAAG33B,IAAK03B,GAAG,GAAG13B,IAAK23B,GAAG,GAAG33B,IAAK5W,EAAEkvB,IAAKtnC,EAAEsnC,MAKnFpqC,KAAKqjD,OAAyB,IAAfrjD,KAAKqjD,OAAqB,IAAN9mD,IAAUyD,KAAK+iB,SAASk8B,YAC/Dj/C,KAAKqjD,MAAQ,EAAIrjD,KAAKqjD,MACtBrjD,KAAKgnD,GAAKhnD,KAAKinD,GAAK,MAEtBvD,MAAO,SAAAA,MAASxoC,EAAGpY,GACjB9C,KAAKgnD,GAAG1iD,MAAM4W,GACdlb,KAAKinD,GAAG3iD,MAAMxB,KCvClB,SAAS4mD,KAAK1mC,QAAShnB,GACrBgE,KAAK+iB,SAAWC,QAChBhjB,KAAK4T,GAAK5X,EAGZ0tD,KAAK9sD,WACHwmD,UAAW,SAAAA,YACTpjD,KAAKqjD,MAAQ,GAEfC,QAAS,SAAAA,UACPtjD,KAAKqjD,MAAQtzB,KAEfwzB,UAAW,SAAAA,YACTvjD,KAAKgnD,GAAKhnD,KAAKinD,GAAKl3B,IACpB/vB,KAAKwjD,OAAS,GAEhBC,QAAS,SAAAA,UACH,EAAIzjD,KAAK4T,IAAM5T,KAAK4T,GAAK,GAAqB,IAAhB5T,KAAKwjD,QAAcxjD,KAAK+iB,SAASm8B,OAAOl/C,KAAKgnD,GAAIhnD,KAAKinD,KACpFjnD,KAAKqjD,OAAyB,IAAfrjD,KAAKqjD,OAA+B,IAAhBrjD,KAAKwjD,SAAexjD,KAAK+iB,SAASk8B,YACrEj/C,KAAKqjD,OAAS,IAAGrjD,KAAK4T,GAAK,EAAI5T,KAAK4T,GAAI5T,KAAKqjD,MAAQ,EAAIrjD,KAAKqjD,QAEpEK,MAAO,SAAAA,MAASxoC,EAAGpY,GAEjB,OADAoY,GAAKA,EAAGpY,GAAKA,EACL9C,KAAKwjD,QACX,KAAK,EAAGxjD,KAAKwjD,OAAS,EAAGxjD,KAAKqjD,MAAQrjD,KAAK+iB,SAASm8B,OAAOhkC,EAAGpY,GAAK9C,KAAK+iB,SAASi8B,OAAO9jC,EAAGpY,GAAI,MAC/F,KAAK,EAAG9C,KAAKwjD,OAAS,EACtB,QACE,GAAIxjD,KAAK4T,IAAM,EACb5T,KAAK+iB,SAASm8B,OAAOl/C,KAAKgnD,GAAIlkD,GAC9B9C,KAAK+iB,SAASm8B,OAAOhkC,EAAGpY,OACnB,CACL,IAAIkqC,GAAKhtC,KAAKgnD,IAAM,EAAIhnD,KAAK4T,IAAMsH,EAAIlb,KAAK4T,GAC5C5T,KAAK+iB,SAASm8B,OAAOlS,GAAIhtC,KAAKinD,IAC9BjnD,KAAK+iB,SAASm8B,OAAOlS,GAAIlqC,IAK/B9C,KAAKgnD,GAAK9rC,EAAGlb,KAAKinD,GAAKnkD,IAIZ,IAAA6mD,WAAA,SAAS3mC,SACtB,OAAO,IAAI0mC,KAAK1mC,QAAS,KAGpB,SAAS4mC,WAAW5mC,SACzB,OAAO,IAAI0mC,KAAK1mC,QAAS,GAGpB,SAAS6mC,UAAU7mC,SACxB,OAAO,IAAI0mC,KAAK1mC,QAAS,GCnDZ,IAAA8mC,KAAA,SAASC,OAAQxwC,OAC9B,IAAOhd,EAAIwtD,OAAO1oD,QAAU,EAC5B,IAAK,IAAWgF,EAAG0iD,GAA2BxsD,EAArCzB,EAAI,EAAUkuD,GAAKe,OAAOxwC,MAAM,IAAQre,EAAI8tD,GAAG3nD,OAAQvG,EAAIyB,IAAKzB,EAEvE,IADAiuD,GAAKC,GAAIA,GAAKe,OAAOxwC,MAAMze,IACtBuL,EAAI,EAAGA,EAAInL,IAAKmL,EACnB2iD,GAAG3iD,GAAG,IAAM2iD,GAAG3iD,GAAG,GAAK0G,MAAMg8C,GAAG1iD,GAAG,IAAM0iD,GAAG1iD,GAAG,GAAK0iD,GAAG1iD,GAAG,ICLjD2jD,WAAA,SAASD,QAEtB,IADA,IAAIxtD,EAAIwtD,OAAO1oD,OAAQ9F,EAAI,IAAIgK,MAAMhJ,KAC5BA,GAAK,GAAGhB,EAAEgB,GAAKA,EACxB,OAAOhB,GCET,SAAS0uD,WAAW7uD,EAAGiB,KACrB,OAAOjB,EAAEiB,KCJI,IAAA6tD,gBAAA,SAASH,QACtB,IAAII,KAAOJ,OAAO/kD,IAAI4W,eACtB,OAAOkuC,WAAKC,QAAQ99C,KAAK,SAAS1O,EAAGoF,GAAK,OAAOwnD,KAAK5sD,GAAK4sD,KAAKxnD,MAG3D,SAASiZ,cAAImuC,QAElB,IADA,IAAsCnlD,EAAlC7H,EAAI,EAAGjC,GAAK,EAAGyB,EAAIwtD,OAAO1oD,SACrBvG,EAAIyB,IAAOqI,GAAKmlD,OAAOjvD,GAAG,MAAIiC,GAAK6H,GAC5C,OAAO7H,ECFF,SAASqtD,WAAWpuD,GACzB,QAASA,GAAK,IAAM,EAAIA,EAAIA,EAAIA,GAAKA,GAAK,GAAKA,EAAIA,EAAI,GAAK,GCPzC,SAASkrD,OAAOlqD,GAGnC,SAASqtD,OAAOruD,GACd,OAAOgH,KAAKqK,IAAIrR,EAAGgB,GAKrB,OARAA,GAAKA,EAMLqtD,OAAO/f,SAAW4c,OAEXmD,QATY,CAFN,GAcO,SAASnD,OAAOlqD,GAGpC,SAASstD,QAAQtuD,GACf,OAAO,EAAIgH,KAAKqK,IAAI,EAAIrR,EAAGgB,GAK7B,OARAA,GAAKA,EAMLstD,QAAQhgB,SAAW4c,OAEZoD,QATa,CAdP,GAAf,IA0BWC,UAAa,SAASrD,OAAOlqD,GAGtC,SAASutD,UAAUvuD,GACjB,QAASA,GAAK,IAAM,EAAIgH,KAAKqK,IAAIrR,EAAGgB,GAAK,EAAIgG,KAAKqK,IAAI,EAAIrR,EAAGgB,IAAM,EAKrE,OARAA,GAAKA,EAMLutD,UAAUjgB,SAAW4c,OAEdqD,UATe,CA1BT,GCANvnD,KAAKg+B,GCAd,IAAIwpB,GAAK,EAAI,GACTC,GAAK,EAAI,GACTC,GAAK,EAAI,GACTC,GAAK,IACLC,GAAK,EAAI,GACTC,GAAK,GAAK,GACVC,GAAK,MACLC,GAAK,GAAK,GACVC,GAAK,GAAK,GACVC,GAAK,EAAIT,GAAKA,GAMX,SAASU,UAAUlvD,GACxB,OAAQA,GAAKA,GAAKwuD,GAAKS,GAAKjvD,EAAIA,EAAIA,EAAI0uD,GAAKO,IAAMjvD,GAAKyuD,IAAMzuD,EAAI2uD,GAAK3uD,EAAI6uD,GAAKI,IAAMjvD,GAAK4uD,IAAM5uD,EAAI8uD,GAAKG,IAAMjvD,GAAK+uD,IAAM/uD,EAAIgvD,ICd5G,SAAS9D,OAAOnqD,GAGnC,SAASouD,OAAOnvD,GACd,OAAOA,EAAIA,IAAMe,EAAI,GAAKf,EAAIe,GAKhC,OARAA,GAAKA,EAMLouD,OAAOC,UAAYlE,OAEZiE,QATY,CAFL,SAcM,SAASjE,OAAOnqD,GAGpC,SAASsuD,QAAQrvD,GACf,QAASA,EAAIA,IAAMe,EAAI,GAAKf,EAAIe,GAAK,EAKvC,OARAA,GAAKA,EAMLsuD,QAAQD,UAAYlE,OAEbmE,QATa,CAdN,SAAhB,IA0BWC,UAAa,SAASpE,OAAOnqD,GAGtC,SAASuuD,UAAUtvD,GACjB,QAASA,GAAK,GAAK,EAAIA,EAAIA,IAAMe,EAAI,GAAKf,EAAIe,IAAMf,GAAK,GAAKA,IAAMe,EAAI,GAAKf,EAAIe,GAAK,GAAK,EAK7F,OARAA,GAAKA,EAMLuuD,UAAUF,UAAYlE,OAEfoE,UATe,CA1BR,SCAZ7M,YAAM,EAAIz7C,KAAKg+B,GAiBRuqB,YAba,SAASrE,OAAO3pD,EAAGT,GACzC,IAAIC,EAAIiG,KAAKm+C,KAAK,GAAK5jD,EAAIyF,KAAKmK,IAAI,EAAG5P,MAAQT,GAAK2hD,aAEpD,SAAS+M,UAAUxvD,GACjB,OAAOuB,EAAIyF,KAAKqK,IAAI,EAAG,KAAOrR,GAAKgH,KAAKs/B,KAAKvlC,EAAIf,GAAKc,GAMxD,OAHA0uD,UAAUC,UAAY,SAASluD,GAAK,OAAO2pD,OAAO3pD,EAAGT,EAAI2hD,cACzD+M,UAAUE,OAAS,SAAS5uD,GAAK,OAAOoqD,OAAO3pD,EAAGT,IAE3C0uD,UAVe,CAHR,EACH,IAeY,SAAStE,OAAO3pD,EAAGT,GAC1C,IAAIC,EAAIiG,KAAKm+C,KAAK,GAAK5jD,EAAIyF,KAAKmK,IAAI,EAAG5P,MAAQT,GAAK2hD,aAEpD,SAAS8M,WAAWvvD,GAClB,OAAO,EAAIuB,EAAIyF,KAAKqK,IAAI,GAAI,IAAMrR,GAAKA,IAAMgH,KAAKs/B,KAAKtmC,EAAIe,GAAKD,GAMlE,OAHAyuD,WAAWE,UAAY,SAASluD,GAAK,OAAO2pD,OAAO3pD,EAAGT,EAAI2hD,cAC1D8M,WAAWG,OAAS,SAAS5uD,GAAK,OAAOoqD,OAAO3pD,EAAGT,IAE5CyuD,WAVgB,CAhBT,EACH,KCFEI,yBD8BY,SAASzE,OAAO3pD,EAAGT,GAC5C,IAAIC,EAAIiG,KAAKm+C,KAAK,GAAK5jD,EAAIyF,KAAKmK,IAAI,EAAG5P,MAAQT,GAAK2hD,aAEpD,SAASmN,aAAa5vD,GACpB,QAASA,EAAQ,EAAJA,EAAQ,GAAK,EACpBuB,EAAIyF,KAAKqK,IAAI,EAAG,GAAKrR,GAAKgH,KAAKs/B,KAAKvlC,EAAIf,GAAKc,GAC7C,EAAIS,EAAIyF,KAAKqK,IAAI,GAAI,GAAKrR,GAAKgH,KAAKs/B,KAAKvlC,EAAIf,GAAKc,IAAM,EAMhE,OAHA8uD,aAAaH,UAAY,SAASluD,GAAK,OAAO2pD,OAAO3pD,EAAGT,EAAI2hD,cAC5DmN,aAAaF,OAAS,SAAS5uD,GAAK,OAAOoqD,OAAO3pD,EAAGT,IAE9C8uD,aAZkB,CA7BX,EACH,ICFE,SAAS1wC,GACtB,OAAO,WACL,OAAOA,KCFJ,SAASA,YAAE9f,GAChB,OAAOA,EAAE,GAGJ,SAAS0H,YAAE1H,GAChB,OAAOA,EAAE,GCLX,SAASywD,eACP7rD,KAAKgG,EAAI,KAGJ,SAAS8lD,aAAahpC,MAC3BA,KAAK3Z,EACL2Z,KAAK7a,EACL6a,KAAKna,EACLma,KAAK9a,EACL8a,KAAK9gB,EACL8gB,KAAK3b,EAAI,KAuLX,SAAS4kD,mBAAmBC,KAAMlpC,MAChC,IAAIhmB,EAAIgmB,KACJnY,EAAImY,KAAK9a,EACTgtB,OAASl4B,EAAEqM,EAEX6rB,OACEA,OAAOrsB,IAAM7L,EAAGk4B,OAAOrsB,EAAIgC,EAC1BqqB,OAAOhtB,EAAI2C,EAEhBqhD,KAAKhmD,EAAI2E,EAGXA,EAAExB,EAAI6rB,OACNl4B,EAAEqM,EAAIwB,EACN7N,EAAEkL,EAAI2C,EAAEhC,EACJ7L,EAAEkL,IAAGlL,EAAEkL,EAAEmB,EAAIrM,GACjB6N,EAAEhC,EAAI7L,EAGR,SAASmvD,oBAAoBD,KAAMlpC,MACjC,IAAIhmB,EAAIgmB,KACJnY,EAAImY,KAAKna,EACTqsB,OAASl4B,EAAEqM,EAEX6rB,OACEA,OAAOrsB,IAAM7L,EAAGk4B,OAAOrsB,EAAIgC,EAC1BqqB,OAAOhtB,EAAI2C,EAEhBqhD,KAAKhmD,EAAI2E,EAGXA,EAAExB,EAAI6rB,OACNl4B,EAAEqM,EAAIwB,EACN7N,EAAE6L,EAAIgC,EAAE3C,EACJlL,EAAE6L,IAAG7L,EAAE6L,EAAEQ,EAAIrM,GACjB6N,EAAE3C,EAAIlL,EAGR,SAASovD,cAAcppC,MACrB,KAAOA,KAAKna,GAAGma,KAAOA,KAAKna,EAC3B,OAAOma,KA5NT+oC,aAAajvD,WACXgJ,YAAaimD,aAEbzN,OAAQ,SAAAA,OAAS+N,MAAOrpC,MACtB,IAAIkS,OAAQo3B,QAASC,MAErB,GAAIF,MAAO,CAKT,GAJArpC,KAAK9gB,EAAImqD,MACTrpC,KAAK3b,EAAIglD,MAAMhlD,EACXglD,MAAMhlD,IAAGglD,MAAMhlD,EAAEnF,EAAI8gB,MACzBqpC,MAAMhlD,EAAI2b,KACNqpC,MAAMnkD,EAAG,CAEX,IADAmkD,MAAQA,MAAMnkD,EACPmkD,MAAMxjD,GAAGwjD,MAAQA,MAAMxjD,EAC9BwjD,MAAMxjD,EAAIma,UAEVqpC,MAAMnkD,EAAI8a,KAEZkS,OAASm3B,WACAnsD,KAAKgG,GACdmmD,MAAQD,cAAclsD,KAAKgG,GAC3B8c,KAAK9gB,EAAI,KACT8gB,KAAK3b,EAAIglD,MACTA,MAAMnqD,EAAImqD,MAAMxjD,EAAIma,KACpBkS,OAASm3B,QAETrpC,KAAK9gB,EAAI8gB,KAAK3b,EAAI,KAClBnH,KAAKgG,EAAI8c,KACTkS,OAAS,MAOX,IALAlS,KAAKna,EAAIma,KAAK9a,EAAI,KAClB8a,KAAK3Z,EAAI6rB,OACTlS,KAAK7a,GAAI,EAETkkD,MAAQrpC,KACDkS,QAAUA,OAAO/sB,GAElB+sB,UADJo3B,QAAUp3B,OAAO7rB,GACMR,GACrB0jD,MAAQD,QAAQpkD,IACHqkD,MAAMpkD,GACjB+sB,OAAO/sB,EAAIokD,MAAMpkD,GAAI,EACrBmkD,QAAQnkD,GAAI,EACZkkD,MAAQC,UAEJD,QAAUn3B,OAAOhtB,IACnB+jD,mBAAmB/rD,KAAMg1B,QAEzBA,QADAm3B,MAAQn3B,QACO7rB,GAEjB6rB,OAAO/sB,GAAI,EACXmkD,QAAQnkD,GAAI,EACZgkD,oBAAoBjsD,KAAMosD,WAG5BC,MAAQD,QAAQzjD,IACH0jD,MAAMpkD,GACjB+sB,OAAO/sB,EAAIokD,MAAMpkD,GAAI,EACrBmkD,QAAQnkD,GAAI,EACZkkD,MAAQC,UAEJD,QAAUn3B,OAAOrsB,IACnBsjD,oBAAoBjsD,KAAMg1B,QAE1BA,QADAm3B,MAAQn3B,QACO7rB,GAEjB6rB,OAAO/sB,GAAI,EACXmkD,QAAQnkD,GAAI,EACZ8jD,mBAAmB/rD,KAAMosD,UAG7Bp3B,OAASm3B,MAAMhjD,EAEjBnJ,KAAKgG,EAAEiC,GAAI,GAGbgqB,OAAQ,SAAAA,OAASnP,MACXA,KAAK3b,IAAG2b,KAAK3b,EAAEnF,EAAI8gB,KAAK9gB,GACxB8gB,KAAK9gB,IAAG8gB,KAAK9gB,EAAEmF,EAAI2b,KAAK3b,GAC5B2b,KAAK3b,EAAI2b,KAAK9gB,EAAI,KAElB,IACIsqD,QAGA/hD,KACAgzB,IALAvI,OAASlS,KAAK3Z,EAEdgnB,KAAOrN,KAAKna,EACZ4nB,MAAQzN,KAAK9a,EAsCjB,GAhCKuC,KAFA4lB,KACKI,MACE27B,cAAc37B,OADFJ,KADNI,MAIdyE,OACEA,OAAOrsB,IAAMma,KAAMkS,OAAOrsB,EAAI4B,KAC7ByqB,OAAOhtB,EAAIuC,KAEhBvK,KAAKgG,EAAIuE,KAGP4lB,MAAQI,OACVgN,IAAMhzB,KAAKtC,EACXsC,KAAKtC,EAAI6a,KAAK7a,EACdsC,KAAK5B,EAAIwnB,KACTA,KAAKhnB,EAAIoB,KACLA,OAASgmB,OACXyE,OAASzqB,KAAKpB,EACdoB,KAAKpB,EAAI2Z,KAAK3Z,EACd2Z,KAAOvY,KAAKvC,EACZgtB,OAAOrsB,EAAIma,KACXvY,KAAKvC,EAAIuoB,MACTA,MAAMpnB,EAAIoB,OAEVA,KAAKpB,EAAI6rB,OACTA,OAASzqB,KACTuY,KAAOvY,KAAKvC,KAGdu1B,IAAMza,KAAK7a,EACX6a,KAAOvY,MAGLuY,OAAMA,KAAK3Z,EAAI6rB,SACfuI,IACJ,GAAIza,MAAQA,KAAK7a,EAAK6a,KAAK7a,GAAI,MAA/B,CAEA,EAAG,CACD,GAAI6a,OAAS9iB,KAAKgG,EAAG,MACrB,GAAI8c,OAASkS,OAAOrsB,GAQlB,IAPA2jD,QAAUt3B,OAAOhtB,GACLC,IACVqkD,QAAQrkD,GAAI,EACZ+sB,OAAO/sB,GAAI,EACX8jD,mBAAmB/rD,KAAMg1B,QACzBs3B,QAAUt3B,OAAOhtB,GAEdskD,QAAQ3jD,GAAK2jD,QAAQ3jD,EAAEV,GACpBqkD,QAAQtkD,GAAKskD,QAAQtkD,EAAEC,EAAI,CAC5BqkD,QAAQtkD,GAAMskD,QAAQtkD,EAAEC,IAC3BqkD,QAAQ3jD,EAAEV,GAAI,EACdqkD,QAAQrkD,GAAI,EACZgkD,oBAAoBjsD,KAAMssD,SAC1BA,QAAUt3B,OAAOhtB,GAEnBskD,QAAQrkD,EAAI+sB,OAAO/sB,EACnB+sB,OAAO/sB,EAAIqkD,QAAQtkD,EAAEC,GAAI,EACzB8jD,mBAAmB/rD,KAAMg1B,QACzBlS,KAAO9iB,KAAKgG,EACZ,YAUF,IAPAsmD,QAAUt3B,OAAOrsB,GACLV,IACVqkD,QAAQrkD,GAAI,EACZ+sB,OAAO/sB,GAAI,EACXgkD,oBAAoBjsD,KAAMg1B,QAC1Bs3B,QAAUt3B,OAAOrsB,GAEd2jD,QAAQ3jD,GAAK2jD,QAAQ3jD,EAAEV,GACtBqkD,QAAQtkD,GAAKskD,QAAQtkD,EAAEC,EAAI,CAC1BqkD,QAAQ3jD,GAAM2jD,QAAQ3jD,EAAEV,IAC3BqkD,QAAQtkD,EAAEC,GAAI,EACdqkD,QAAQrkD,GAAI,EACZ8jD,mBAAmB/rD,KAAMssD,SACzBA,QAAUt3B,OAAOrsB,GAEnB2jD,QAAQrkD,EAAI+sB,OAAO/sB,EACnB+sB,OAAO/sB,EAAIqkD,QAAQ3jD,EAAEV,GAAI,EACzBgkD,oBAAoBjsD,KAAMg1B,QAC1BlS,KAAO9iB,KAAKgG,EACZ,MAGJsmD,QAAQrkD,GAAI,EACZ6a,KAAOkS,OACPA,OAASA,OAAO7rB,SACR2Z,KAAK7a,GAEX6a,OAAMA,KAAK7a,GAAI,MA+CR4jD,kCC1OR,SAASU,WAAWp8B,KAAMI,MAAOwS,GAAIC,IAC1C,IAAIwpB,MAAQ,KAAM,MACd9qD,MAAQqqB,cAAMznB,KAAKkoD,MAAQ,EAO/B,OANAA,KAAKr8B,KAAOA,KACZq8B,KAAKj8B,MAAQA,MACTwS,IAAI0pB,WAAWD,KAAMr8B,KAAMI,MAAOwS,IAClCC,IAAIypB,WAAWD,KAAMj8B,MAAOJ,KAAM6S,IACtC0pB,cAAMv8B,KAAKzuB,OAAOirD,UAAUroD,KAAK5C,OACjCgrD,cAAMn8B,MAAM7uB,OAAOirD,UAAUroD,KAAK5C,OAC3B8qD,KAGF,SAASI,iBAAiBz8B,KAAM4S,GAAIC,IACzC,IAAIwpB,MAAQzpB,GAAIC,IAEhB,OADAwpB,KAAKr8B,KAAOA,KACLq8B,KAGF,SAASC,WAAWD,KAAMr8B,KAAMI,MAAOs8B,QACvCL,KAAK,IAAOA,KAAK,GAIXA,KAAKr8B,OAASI,MACvBi8B,KAAK,GAAKK,OAEVL,KAAK,GAAKK,QANVL,KAAK,GAAKK,OACVL,KAAKr8B,KAAOA,KACZq8B,KAAKj8B,MAAQA,OASjB,SAASu8B,SAASN,KAAMzf,GAAI0S,GAAIzS,GAAIoS,IAClC,IAUIxjD,EAVA2B,EAAIivD,KAAK,GACT7pD,EAAI6pD,KAAK,GACTO,GAAKxvD,EAAE,GACPyvD,GAAKzvD,EAAE,GAGP8jC,GAAK,EACLC,GAAK,EACLsf,GAJKj+C,EAAE,GAIGoqD,GACVlM,GAJKl+C,EAAE,GAIGqqD,GAId,GADApxD,EAAImxC,GAAKggB,GACJnM,MAAMhlD,EAAI,GAAf,CAEA,GADAA,GAAKglD,GACDA,GAAK,EAAG,CACV,GAAIhlD,EAAIylC,GAAI,OACRzlC,EAAI0lC,KAAIA,GAAK1lC,QACZ,GAAIglD,GAAK,EAAG,CACjB,GAAIhlD,EAAI0lC,GAAI,OACR1lC,EAAIylC,KAAIA,GAAKzlC,GAInB,GADAA,EAAIoxC,GAAK+f,GACJnM,MAAMhlD,EAAI,GAAf,CAEA,GADAA,GAAKglD,GACDA,GAAK,EAAG,CACV,GAAIhlD,EAAI0lC,GAAI,OACR1lC,EAAIylC,KAAIA,GAAKzlC,QACZ,GAAIglD,GAAK,EAAG,CACjB,GAAIhlD,EAAIylC,GAAI,OACRzlC,EAAI0lC,KAAIA,GAAK1lC,GAInB,GADAA,EAAI6jD,GAAKuN,GACJnM,MAAMjlD,EAAI,GAAf,CAEA,GADAA,GAAKilD,GACDA,GAAK,EAAG,CACV,GAAIjlD,EAAIylC,GAAI,OACRzlC,EAAI0lC,KAAIA,GAAK1lC,QACZ,GAAIilD,GAAK,EAAG,CACjB,GAAIjlD,EAAI0lC,GAAI,OACR1lC,EAAIylC,KAAIA,GAAKzlC,GAInB,GADAA,EAAIwjD,GAAK4N,GACJnM,MAAMjlD,EAAI,GAAf,CAEA,GADAA,GAAKilD,GACDA,GAAK,EAAG,CACV,GAAIjlD,EAAI0lC,GAAI,OACR1lC,EAAIylC,KAAIA,GAAKzlC,QACZ,GAAIilD,GAAK,EAAG,CACjB,GAAIjlD,EAAIylC,GAAI,OACRzlC,EAAI0lC,KAAIA,GAAK1lC,GAGnB,QAAMylC,GAAK,GAAQC,GAAK,KAEpBD,GAAK,IAAGmrB,KAAK,IAAMO,GAAK1rB,GAAKuf,GAAIoM,GAAK3rB,GAAKwf,KAC3Cvf,GAAK,IAAGkrB,KAAK,IAAMO,GAAKzrB,GAAKsf,GAAIoM,GAAK1rB,GAAKuf,MACxC,OAGT,SAASoM,YAAYT,KAAMzf,GAAI0S,GAAIzS,GAAIoS,IACrC,IAAIpc,GAAKwpB,KAAK,GACd,GAAIxpB,GAAI,OAAO,EAEf,IASIkqB,GACAC,GAVApqB,GAAKypB,KAAK,GACVr8B,KAAOq8B,KAAKr8B,KACZI,MAAQi8B,KAAKj8B,MACb68B,GAAKj9B,KAAK,GACVk9B,GAAKl9B,KAAK,GACVm9B,GAAK/8B,MAAM,GACXg9B,GAAKh9B,MAAM,GACXi9B,IAAMJ,GAAKE,IAAM,EACjBG,IAAMJ,GAAKE,IAAM,EAIrB,GAAIA,KAAOF,GAAI,CACb,GAAIG,GAAKzgB,IAAMygB,IAAMxgB,GAAI,OACzB,GAAIogB,GAAKE,GAAI,CACX,GAAKvqB,IACA,GAAIA,GAAG,IAAMqc,GAAI,YADbrc,IAAMyqB,GAAI/N,IAEnBzc,IAAMwqB,GAAIpO,QACL,CACL,GAAKrc,IACA,GAAIA,GAAG,GAAK0c,GAAI,YADZ1c,IAAMyqB,GAAIpO,IAEnBpc,IAAMwqB,GAAI/N,UAKZ,GADA0N,GAAKM,IADLP,IAAME,GAAKE,KAAOC,GAAKF,KACRG,GACXN,IAAM,GAAKA,GAAK,EAClB,GAAIE,GAAKE,GAAI,CACX,GAAKvqB,IACA,GAAIA,GAAG,IAAMqc,GAAI,YADbrc,KAAO0c,GAAK0N,IAAMD,GAAIzN,IAE/Bzc,KAAOoc,GAAK+N,IAAMD,GAAI9N,QACjB,CACL,GAAKrc,IACA,GAAIA,GAAG,GAAK0c,GAAI,YADZ1c,KAAOqc,GAAK+N,IAAMD,GAAI9N,IAE/Bpc,KAAOyc,GAAK0N,IAAMD,GAAIzN,SAGxB,GAAI4N,GAAKE,GAAI,CACX,GAAKxqB,IACA,GAAIA,GAAG,IAAMiK,GAAI,YADbjK,IAAMgK,GAAImgB,GAAKngB,GAAKogB,IAE7BnqB,IAAMgK,GAAIkgB,GAAKlgB,GAAKmgB,QACf,CACL,GAAKpqB,IACA,GAAIA,GAAG,GAAKgK,GAAI,YADZhK,IAAMiK,GAAIkgB,GAAKlgB,GAAKmgB,IAE7BnqB,IAAM+J,GAAImgB,GAAKngB,GAAKogB,IAO1B,OAFAX,KAAK,GAAKzpB,GACVypB,KAAK,GAAKxpB,IACH,EC9IT,SAAS0qB,kBAAkBC,KAAMnB,MAC/B,IAAIoB,KAAOD,KAAKC,KACZC,GAAKrB,KAAKr8B,KACV29B,GAAKtB,KAAKj8B,MAEd,OADIq9B,OAASE,KAAIA,GAAKD,GAAIA,GAAKD,MAC3BE,GAAW9qD,KAAKm/B,MAAM2rB,GAAG,GAAKD,GAAG,GAAIC,GAAG,GAAKD,GAAG,KAChDD,OAASC,IAAIA,GAAKrB,KAAK,GAAIsB,GAAKtB,KAAK,KACpCqB,GAAKrB,KAAK,GAAIsB,GAAKtB,KAAK,IACtBxpD,KAAKm/B,MAAM0rB,GAAG,GAAKC,GAAG,GAAIA,GAAG,GAAKD,GAAG,KAGvC,SAASE,kBAAkBJ,KAAMnB,MACtC,OAAOA,OAAOA,KAAKr8B,OAASw9B,KAAKC,OAG5B,SAASI,gBAAgBL,KAAMnB,MACpC,OAAOA,OAAOA,KAAKr8B,OAASw9B,KAAKC,OCvBnC,IAEWK,YAFPC,cAaG,SAASC,aAAa3N,KAC3B,IAAI4N,KAAO5N,IAAIx+C,EACXqsD,KAAO7N,IAAIr5C,EAEf,GAAKinD,MAASC,KAAd,CAEA,IAAIC,MAAQF,KAAKR,KACbW,MAAQ/N,IAAIoN,KACZY,MAAQH,KAAKT,KAEjB,GAAIU,QAAUE,MAAd,CAEA,IAAIC,GAAKF,MAAM,GACXG,GAAKH,MAAM,GACXxB,GAAKuB,MAAM,GAAKG,GAChBzB,GAAKsB,MAAM,GAAKI,GAChBzL,GAAKuL,MAAM,GAAKC,GAChBvL,GAAKsL,MAAM,GAAKE,GAEhBtzD,EAAI,GAAK2xD,GAAK7J,GAAK8J,GAAK/J,IAC5B,KAAI7nD,IAAMuzD,kBAAV,CAEA,IAAIC,GAAK7B,GAAKA,GAAKC,GAAKA,GACpB6B,GAAK5L,GAAKA,GAAKC,GAAKA,GACpBhoC,GAAKgoC,GAAK0L,GAAK5B,GAAK6B,IAAMzzD,EAC1B0H,GAAKiqD,GAAK8B,GAAK5L,GAAK2L,IAAMxzD,EAE1B0zD,OAASZ,WAAWpiD,OAAS,IApCnC,SAASijD,SACPjD,aAAa9rD,MACbA,KAAKkb,EACLlb,KAAK8C,EACL9C,KAAKwgD,IACLxgD,KAAK4tD,KACL5tD,KAAKkjD,GAAK,MA+BV4L,OAAOtO,IAAMA,IACbsO,OAAOlB,KAAOW,MACdO,OAAO5zC,EAAIA,EAAIuzC,GACfK,OAAOhsD,GAAKgsD,OAAO5L,GAAKpgD,EAAI4rD,IAAM1rD,KAAKoK,KAAK8N,EAAIA,EAAIpY,EAAIA,GAExD09C,IAAIsO,OAASA,OAKb,IAHA,IAAIE,OAAS,KACTlsC,KAAOmsC,QAAQjpD,EAEZ8c,MACL,GAAIgsC,OAAOhsD,EAAIggB,KAAKhgB,GAAMgsD,OAAOhsD,IAAMggB,KAAKhgB,GAAKgsD,OAAO5zC,GAAK4H,KAAK5H,EAAI,CACpE,IAAI4H,KAAKna,EACJ,CAAEqmD,OAASlsC,KAAK9gB,EAAG,MADZ8gB,KAAOA,KAAKna,MAEnB,CACL,IAAIma,KAAK9a,EACJ,CAAEgnD,OAASlsC,KAAM,MADVA,KAAOA,KAAK9a,EAK5BinD,QAAQ7Q,OAAO4Q,OAAQF,QAClBE,SAAQf,YAAca,WAGtB,SAASI,aAAa1O,KAC3B,IAAIsO,OAAStO,IAAIsO,OACbA,SACGA,OAAO9sD,IAAGisD,YAAca,OAAO3nD,GACpC8nD,QAAQh9B,OAAO68B,QACfZ,WAAW5pD,KAAKwqD,QAChBhD,aAAagD,QACbtO,IAAIsO,OAAS,MCrEjB,IAAIK,aASJ,SAASC,YAAYxB,MACnB,IAAIyB,MAAQF,UAAUrjD,OAAS,IARjC,SAASwjD,QACPxD,aAAa9rD,MACbA,KAAKwsD,KACLxsD,KAAK4tD,KACL5tD,KAAK8uD,OAAS,MAMd,OADAO,MAAMzB,KAAOA,KACNyB,MAGT,SAASE,YAAYF,OACnBH,aAAaG,OACbG,QAAQv9B,OAAOo9B,OACfF,UAAU7qD,KAAK+qD,OACfvD,aAAauD,OAGR,SAASI,YAAYJ,OAC1B,IAAIP,OAASO,MAAMP,OACf5zC,EAAI4zC,OAAO5zC,EACXpY,EAAIgsD,OAAO5L,GACX2J,QAAU3xC,EAAGpY,GACburC,SAAWghB,MAAMrtD,EACjBuI,KAAO8kD,MAAMloD,EACbuoD,cAAgBL,OAEpBE,YAAYF,OAGZ,IADA,IAAIjB,KAAO/f,SACJ+f,KAAKU,QACL9rD,KAAKiY,IAAIC,EAAIkzC,KAAKU,OAAO5zC,GAAKyhC,iBAC9B35C,KAAKiY,IAAInY,EAAIsrD,KAAKU,OAAO5L,IAAMvG,iBACpCtO,SAAW+f,KAAKpsD,EAChB0tD,aAAa3qD,QAAQqpD,MACrBmB,YAAYnB,MACZA,KAAO/f,SAGTqhB,aAAa3qD,QAAQqpD,MACrBc,aAAad,MAGb,IADA,IAAIC,KAAO9jD,KACJ8jD,KAAKS,QACL9rD,KAAKiY,IAAIC,EAAImzC,KAAKS,OAAO5zC,GAAKyhC,iBAC9B35C,KAAKiY,IAAInY,EAAIurD,KAAKS,OAAO5L,IAAMvG,iBACpCpyC,KAAO8jD,KAAKlnD,EACZuoD,aAAaprD,KAAK+pD,MAClBkB,YAAYlB,MACZA,KAAO9jD,KAGTmlD,aAAaprD,KAAK+pD,MAClBa,aAAab,MAEb,IACIsB,KADAC,MAAQF,aAAaruD,OAEzB,IAAKsuD,KAAO,EAAGA,KAAOC,QAASD,KAC7BtB,KAAOqB,aAAaC,MACpBvB,KAAOsB,aAAaC,KAAO,GAC3BlD,WAAW4B,KAAK7B,KAAM4B,KAAKR,KAAMS,KAAKT,KAAMf,QAG9CuB,KAAOsB,aAAa,IACpBrB,KAAOqB,aAAaE,MAAQ,IACvBpD,KAAOD,WAAW6B,KAAKR,KAAMS,KAAKT,KAAM,KAAMf,QAEnDsB,aAAaC,MACbD,aAAaE,MAGR,SAASwB,SAASjC,MASvB,IARA,IAEIQ,KACAC,KACAyB,IACAC,IALA70C,EAAI0yC,KAAK,GACToC,UAAYpC,KAAK,GAKjB9qC,KAAO0sC,QAAQxpD,EAEZ8c,MAEL,IADAgtC,IAAMG,eAAentC,KAAMktC,WAAa90C,GAC9ByhC,gBAAS75B,KAAOA,KAAKna,MAAQ,CAErC,MADAonD,IAAM70C,EAAIg1C,gBAAgBptC,KAAMktC,YACtBrT,iBAMH,CACDmT,KAAOnT,iBACTyR,KAAOtrC,KAAK9gB,EACZqsD,KAAOvrC,MACEitC,KAAOpT,iBAChByR,KAAOtrC,KACPurC,KAAOvrC,KAAK3b,GAEZinD,KAAOC,KAAOvrC,KAEhB,MAfA,IAAKA,KAAK9a,EAAG,CACXomD,KAAOtrC,KACP,MAEFA,KAAOA,KAAK9a,GFhGb,SAASmoD,WAAWvC,MACzB,OAAOlB,cAAMkB,KAAKlsD,QAChBksD,KAAMA,KACNjB,cE6GFwD,CAAWvC,MACX,IAAIwC,OAAShB,YAAYxB,MAGzB,GAFA4B,QAAQpR,OAAOgQ,KAAMgC,QAEhBhC,MAASC,KAAd,CAEA,GAAID,OAASC,KAOX,OANAa,aAAad,MACbC,KAAOe,YAAYhB,KAAKR,MACxB4B,QAAQpR,OAAOgS,OAAQ/B,MACvB+B,OAAO5D,KAAO6B,KAAK7B,KAAOD,WAAW6B,KAAKR,KAAMwC,OAAOxC,MACvDO,aAAaC,WACbD,aAAaE,MAIf,GAAKA,KAAL,CAMAa,aAAad,MACbc,aAAab,MAEb,IAAIC,MAAQF,KAAKR,KACbb,GAAKuB,MAAM,GACXtB,GAAKsB,MAAM,GACXG,GAAKb,KAAK,GAAKb,GACf2B,GAAKd,KAAK,GAAKZ,GACfwB,MAAQH,KAAKT,KACb3K,GAAKuL,MAAM,GAAKzB,GAChB7J,GAAKsL,MAAM,GAAKxB,GAChB5xD,EAAI,GAAKqzD,GAAKvL,GAAKwL,GAAKzL,IACxBoN,GAAK5B,GAAKA,GAAKC,GAAKA,GACpBG,GAAK5L,GAAKA,GAAKC,GAAKA,GACpB2J,SAAW3J,GAAKmN,GAAK3B,GAAKG,IAAMzzD,EAAI2xD,IAAK0B,GAAKI,GAAK5L,GAAKoN,IAAMj1D,EAAI4xD,IAEtEP,WAAW4B,KAAK7B,KAAM8B,MAAOE,MAAO3B,QACpCuD,OAAO5D,KAAOD,WAAW+B,MAAOV,KAAM,KAAMf,QAC5CwB,KAAK7B,KAAOD,WAAWqB,KAAMY,MAAO,KAAM3B,QAC1CsB,aAAaC,MACbD,aAAaE,WAzBX+B,OAAO5D,KAAOD,WAAW6B,KAAKR,KAAMwC,OAAOxC,OA4B/C,SAASqC,eAAezP,IAAKwP,WAC3B,IAAIpC,KAAOpN,IAAIoN,KACX0C,MAAQ1C,KAAK,GACb2C,MAAQ3C,KAAK,GACb4C,KAAOD,MAAQP,UAEnB,IAAKQ,KAAM,OAAOF,MAElB,IAAIlC,KAAO5N,IAAIx+C,EACf,IAAKosD,KAAM,OAAQhiB,IAGnB,IAAIqkB,OADJ7C,KAAOQ,KAAKR,MACK,GACb8C,MAAQ9C,KAAK,GACb+C,MAAQD,MAAQV,UAEpB,IAAKW,MAAO,OAAOF,MAEnB,IAAIG,GAAKH,MAAQH,MACbO,KAAO,EAAIL,KAAO,EAAIG,MACtBhuD,EAAIiuD,GAAKD,MAEb,OAAIE,OAAeluD,EAAIK,KAAKoK,KAAKzK,EAAIA,EAAI,EAAIkuD,MAAQD,GAAKA,KAAO,EAAID,OAASD,MAAQC,MAAQ,EAAIJ,MAAQC,KAAO,KAAOK,KAAOP,OAEvHA,MAAQG,OAAS,EAG3B,SAASP,gBAAgB1P,IAAKwP,WAC5B,IAAI3B,KAAO7N,IAAIr5C,EACf,GAAIknD,KAAM,OAAO4B,eAAe5B,KAAM2B,WACtC,IAAIpC,KAAOpN,IAAIoN,KACf,OAAOA,KAAK,KAAOoC,UAAYpC,KAAK,GAAKxhB,ICzLpC,IAEIojB,QACA9C,cACAuC,QACAljC,cALA4wB,gBAAU,KACVgS,iBAAW,MAMtB,SAASmC,aAAavzD,EAAGoF,EAAGxH,GAC1B,OAAQoC,EAAE,GAAKpC,EAAE,KAAOwH,EAAE,GAAKpF,EAAE,KAAOA,EAAE,GAAKoF,EAAE,KAAOxH,EAAE,GAAKoC,EAAE,IAGnE,SAASwzD,cAAcxzD,EAAGoF,GACxB,OAAOA,EAAE,GAAKpF,EAAE,IACToF,EAAE,GAAKpF,EAAE,GAGH,SAASyzD,QAAQC,MAAOC,QACrC,IACIh2C,EACApY,EACAgsD,OAHAlB,KAAOqD,MAAMhlD,KAAK8kD,eAAejlD,MAUrC,IALAigB,iBACA2gC,cAAQ,IAAInnD,MAAM0rD,MAAM5vD,QACxBmuD,QAAU,IAAI3D,iBACdoD,QAAU,IAAIpD,mBAIZ,GADAiD,OAASb,YACLL,QAAUkB,QAAUlB,KAAK,GAAKkB,OAAOhsD,GAAM8qD,KAAK,KAAOkB,OAAOhsD,GAAK8qD,KAAK,GAAKkB,OAAO5zC,GAClF0yC,KAAK,KAAO1yC,GAAK0yC,KAAK,KAAO9qD,IAC/B+sD,SAASjC,MACT1yC,EAAI0yC,KAAK,GAAI9qD,EAAI8qD,KAAK,IAExBA,KAAOqD,MAAMnlD,UACR,KAAIgjD,OAGT,MAFAW,YAAYX,OAAOtO,KAQvB,GHrBK,SAAS2Q,oBACd,IAAK,IAA6BxD,KAAMhB,UAAWtmD,EAAGnL,EAA7CJ,EAAI,EAAGyB,EAAImwD,cAAMrrD,OAA+BvG,EAAIyB,IAAKzB,EAChE,IAAK6yD,KAAOjB,cAAM5xD,MAAQI,GAAKyxD,UAAYgB,KAAKhB,WAAWtrD,QAAS,CAClE,IAAIK,MAAQ,IAAI6D,MAAMrK,GAClBy1B,MAAQ,IAAIprB,MAAMrK,GACtB,IAAKmL,EAAI,EAAGA,EAAInL,IAAKmL,EAAG3E,MAAM2E,GAAKA,EAAGsqB,MAAMtqB,GAAKqnD,kBAAkBC,KAAM5hC,cAAM4gC,UAAUtmD,KAEzF,IADA3E,MAAMuK,KAAK,SAASnR,EAAGuL,GAAK,OAAOsqB,MAAMtqB,GAAKsqB,MAAM71B,KAC/CuL,EAAI,EAAGA,EAAInL,IAAKmL,EAAGsqB,MAAMtqB,GAAKsmD,UAAUjrD,MAAM2E,IACnD,IAAKA,EAAI,EAAGA,EAAInL,IAAKmL,EAAGsmD,UAAUtmD,GAAKsqB,MAAMtqB,IGWjD8qD,GAEID,OAAQ,CACV,IAAInkB,IAAMmkB,OAAO,GAAG,GAChBzR,IAAMyR,OAAO,GAAG,GAChBlkB,IAAMkkB,OAAO,GAAG,GAChB9R,IAAM8R,OAAO,GAAG,IJqGjB,SAASE,UAAUrkB,GAAI0S,GAAIzS,GAAIoS,IAIpC,IAHA,IACIoN,KADA1xD,EAAIixB,cAAM1qB,OAGPvG,KACAmyD,YAAYT,KAAOzgC,cAAMjxB,GAAIiyC,GAAI0S,GAAIzS,GAAIoS,KACtC0N,SAASN,KAAMzf,GAAI0S,GAAIzS,GAAIoS,MAC1Bp8C,KAAKiY,IAAIuxC,KAAK,GAAG,GAAKA,KAAK,GAAG,IAAM7P,iBAClC35C,KAAKiY,IAAIuxC,KAAK,GAAG,GAAKA,KAAK,GAAG,IAAM7P,yBACtC5wB,cAAMjxB,GI7Gfs2D,CAAUrkB,GAAI0S,GAAIzS,GAAIoS,IHbnB,SAASiS,UAAUtkB,GAAI0S,GAAIzS,GAAIoS,IACpC,IACIkS,MACA3D,KACAC,KACA2D,UACA5E,UACA6E,WACA32C,MACA42C,OACAC,OACA52C,IACA62C,KACAC,KAZAC,OAASnF,cAAMrrD,OAafywD,OAAQ,EAEZ,IAAKR,MAAQ,EAAGA,MAAQO,SAAUP,MAChC,GAAI3D,KAAOjB,cAAM4E,OAAQ,CAMvB,IALA1D,KAAOD,KAAKC,KAEZ2D,WADA5E,UAAYgB,KAAKhB,WACKtrD,OAGfkwD,aACAxlC,cAAM4gC,UAAU4E,aACnB5E,UAAU9nD,OAAO0sD,UAAW,GAMhC,IADAA,UAAY,EAAGC,WAAa7E,UAAUtrD,OAC/BkwD,UAAYC,YACyCG,MAA1D72C,IAAMkzC,gBAAgBL,KAAM5hC,cAAM4gC,UAAU4E,cAAyB,GAAIK,KAAO92C,IAAI,GACP22C,QAA7E52C,MAAQkzC,kBAAkBJ,KAAM5hC,cAAM4gC,YAAY4E,UAAYC,eAA8B,GAAIE,OAAS72C,MAAM,IAC3G7X,KAAKiY,IAAI02C,KAAOF,QAAU9U,iBAAW35C,KAAKiY,IAAI22C,KAAOF,QAAU/U,mBACjEgQ,UAAU9nD,OAAO0sD,UAAW,EAAGxlC,cAAMznB,KAAKsoD,iBAAiBgB,KAAM9yC,IAC7D9X,KAAKiY,IAAI02C,KAAO5kB,IAAM4P,iBAAWyC,GAAKwS,KAAOjV,iBAAW5P,GAAI/pC,KAAKiY,IAAIw2C,OAAS1kB,IAAM4P,gBAAU+U,OAAStS,IACrGp8C,KAAKiY,IAAI22C,KAAOxS,IAAMzC,iBAAW3P,GAAK2kB,KAAOhV,iBAAW35C,KAAKiY,IAAIy2C,OAAStS,IAAMzC,gBAAU8U,OAASzkB,GAAIoS,IACvGp8C,KAAKiY,IAAI02C,KAAO3kB,IAAM2P,iBAAWiV,KAAOnS,GAAK9C,iBAAW3P,GAAIhqC,KAAKiY,IAAIw2C,OAASzkB,IAAM2P,gBAAU+U,OAASjS,IACvGz8C,KAAKiY,IAAI22C,KAAOnS,IAAM9C,iBAAWgV,KAAO5kB,GAAK4P,iBAAW35C,KAAKiY,IAAIy2C,OAASjS,IAAM9C,gBAAU8U,OAAS1kB,GAAI0S,IACvG,OAAS,KACb+R,YAIFA,aAAYM,OAAQ,GAM5B,GAAIA,MAAO,CACT,IAAIlR,GAAIC,GAAI2B,GAAIuP,GAAK3lB,IAErB,IAAKklB,MAAQ,EAAGQ,MAAQ,KAAMR,MAAQO,SAAUP,OAC1C3D,KAAOjB,cAAM4E,UAIf9O,IAFA5B,IADAgN,KAAOD,KAAKC,MACF,GAAK7gB,IAEL6T,IADVC,GAAK+M,KAAK,GAAKnO,IACKoB,IACXkR,KAAIA,GAAKvP,GAAIsP,MAAQnE,MAIlC,GAAImE,MAAO,CACT,IAAIE,KAAOjlB,GAAI0S,IAAKwS,KAAOllB,GAAIqS,IAAK8S,KAAOllB,GAAIoS,IAAK+S,KAAOnlB,GAAIyS,IAC/DqS,MAAMnF,UAAUroD,KACdynB,cAAMznB,KAAKsoD,iBAAiBgB,KAAOkE,MAAMlE,KAAMoE,IAAKC,MAAQ,EAC5DlmC,cAAMznB,KAAKsoD,iBAAiBgB,KAAMqE,IAAKC,MAAQ,EAC/CnmC,cAAMznB,KAAKsoD,iBAAiBgB,KAAMsE,IAAKC,MAAQ,EAC/CpmC,cAAMznB,KAAKsoD,iBAAiBgB,KAAMuE,IAAKH,MAAQ,IAMrD,IAAKV,MAAQ,EAAGA,MAAQO,SAAUP,OAC5B3D,KAAOjB,cAAM4E,UACV3D,KAAKhB,UAAUtrD,eACXqrD,cAAM4E,QGjEjBD,CAAUtkB,GAAI0S,GAAIzS,GAAIoS,IAGxBp/C,KAAK+rB,MAAQA,cACb/rB,KAAK0sD,MAAQA,cAEb8C,QACAP,QACAljC,cACA2gC,cAAQ,KAGVsE,QAAQp0D,WACNgJ,YAAaorD,QAEboB,SAAU,SAAAA,WACR,IAAIrmC,MAAQ/rB,KAAK+rB,MAEjB,OAAO/rB,KAAK0sD,MAAM1nD,IAAI,SAAS2oD,MAC7B,IAAI0E,QAAU1E,KAAKhB,UAAU3nD,IAAI,SAASlK,GAAK,OAAOizD,kBAAkBJ,KAAM5hC,MAAMjxB,MAEpF,OADAu3D,QAAQ7rD,KAAOmnD,KAAKC,KAAKpnD,KAClB6rD,WAIXC,UAAW,SAAAA,YACT,IAAIA,aACAvmC,MAAQ/rB,KAAK+rB,MAsBjB,OApBA/rB,KAAK0sD,MAAMhnD,QAAQ,SAASioD,KAAM7yD,GAChC,GAAMI,GAAKyxD,UAAYgB,KAAKhB,WAAWtrD,OASvC,IARA,IACIsrD,UAEAzxD,EACA6tD,GAJA6E,KAAOD,KAAKC,KAEZvnD,GAAK,EAGLksD,GAAKxmC,MAAM4gC,UAAUzxD,EAAI,IACzB8tD,GAAKuJ,GAAGpiC,OAASy9B,KAAO2E,GAAGhiC,MAAQgiC,GAAGpiC,OAEjC9pB,EAAInL,GACX6tD,GAAKC,GAELA,IADAuJ,GAAKxmC,MAAM4gC,UAAUtmD,KACb8pB,OAASy9B,KAAO2E,GAAGhiC,MAAQgiC,GAAGpiC,KAClC44B,IAAMC,IAAMluD,EAAIiuD,GAAGrnD,OAAS5G,EAAIkuD,GAAGtnD,OAASovD,aAAalD,KAAM7E,GAAIC,IAAM,GAC3EsJ,UAAUhuD,MAAMspD,KAAKpnD,KAAMuiD,GAAGviD,KAAMwiD,GAAGxiD,SAKtC8rD,WAGTE,MAAO,SAAAA,QACL,OAAOxyD,KAAK+rB,MAAMngB,OAAO,SAAS4gD,MAChC,OAAOA,KAAKj8B,QACXvrB,IAAI,SAASwnD,MACd,OACEloB,OAAQkoB,KAAKr8B,KAAK3pB,KAClBmiC,OAAQ6jB,KAAKj8B,MAAM/pB,SAKzB6T,KAAM,SAAAA,KAASa,EAAGpY,EAAG2vD,QAInB,IAHA,IAAiB3gC,GAAkD67B,KAA/DzH,KAAOlmD,KAAUoqC,GAAK8b,KAAKwM,QAAU,EAAGn2D,EAAI2pD,KAAKwG,MAAMrrD,SAGlDssD,KAAOzH,KAAKwG,MAAMtiB,MAAM,KAAMA,IAAM7tC,EAAG,OAAO,KACvD,IAAIqkD,GAAK1lC,EAAIyyC,KAAKC,KAAK,GAAI/M,GAAK/9C,EAAI6qD,KAAKC,KAAK,GAAIpL,GAAK5B,GAAKA,GAAKC,GAAKA,GAGtE,GACE8M,KAAOzH,KAAKwG,MAAM56B,GAAKsY,IAAKA,GAAK,KACjCujB,KAAKhB,UAAUjnD,QAAQ,SAAS1I,GAC9B,IAAIwvD,KAAOtG,KAAKn6B,MAAM/uB,GAAI4H,EAAI4nD,KAAKr8B,KACnC,GAAKvrB,IAAM+oD,KAAKC,MAAShpD,IAAQA,EAAI4nD,KAAKj8B,OAA1C,CACA,IAAIoiC,GAAKz3C,EAAItW,EAAE,GAAIguD,GAAK9vD,EAAI8B,EAAE,GAAIq+B,GAAK0vB,GAAKA,GAAKC,GAAKA,GAClD3vB,GAAKuf,KAAIA,GAAKvf,GAAImH,GAAKxlC,EAAElD,gBAEjB,OAAP0oC,IAIT,OAFA8b,KAAKwM,OAAS5gC,GAEG,MAAV2gC,QAAkBjQ,IAAMiQ,OAASA,OAAS9E,KAAKC,KAAO,OCvIlD,IAAAiF,YAAA,WACb,IAAI33C,EAAI2oC,YACJ/gD,EAAIghD,YACJoN,OAAS,KAEb,SAAS4B,QAAQtsD,MACf,OAAO,IAAIwqD,QAAQxqD,KAAKxB,IAAI,SAAS5J,EAAGN,GACtC,IAAIiC,GAAKiG,KAAKmD,MAAM+U,EAAE9f,EAAGN,EAAG0L,MAAQm2C,iBAAWA,gBAAS35C,KAAKmD,MAAMrD,EAAE1H,EAAGN,EAAG0L,MAAQm2C,iBAAWA,iBAG9F,OAFA5/C,EAAE2E,MAAQ5G,EACViC,EAAEyJ,KAAOpL,EACF2B,IACLm0D,QA+BN,OA5BA4B,QAAQV,SAAW,SAAS5rD,MAC1B,OAAOssD,QAAQtsD,MAAM4rD,YAGvBU,QAAQN,MAAQ,SAAShsD,MACvB,OAAOssD,QAAQtsD,MAAMgsD,SAGvBM,QAAQR,UAAY,SAAS9rD,MAC3B,OAAOssD,QAAQtsD,MAAM8rD,aAGvBQ,QAAQ53C,EAAI,SAASlV,GACnB,OAAO9B,UAAU7C,QAAU6Z,EAAiB,mBAANlV,EAAmBA,EAAIw9B,yBAAUx9B,GAAI8sD,SAAW53C,GAGxF43C,QAAQhwD,EAAI,SAASkD,GACnB,OAAO9B,UAAU7C,QAAUyB,EAAiB,mBAANkD,EAAmBA,EAAIw9B,yBAAUx9B,GAAI8sD,SAAWhwD,GAGxFgwD,QAAQ5B,OAAS,SAASlrD,GACxB,OAAO9B,UAAU7C,QAAU6vD,OAAc,MAALlrD,EAAY,QAAUA,EAAE,GAAG,IAAKA,EAAE,GAAG,MAAOA,EAAE,GAAG,IAAKA,EAAE,GAAG,KAAM8sD,SAAW5B,UAAYA,OAAO,GAAG,GAAIA,OAAO,GAAG,KAAMA,OAAO,GAAG,GAAIA,OAAO,GAAG,MAGpL4B,QAAQhyC,KAAO,SAAS9a,GACtB,OAAO9B,UAAU7C,QAAU6vD,OAAc,MAALlrD,EAAY,OAAS,EAAG,KAAMA,EAAE,IAAKA,EAAE,KAAM8sD,SAAW5B,SAAWA,OAAO,GAAG,GAAKA,OAAO,GAAG,GAAIA,OAAO,GAAG,GAAKA,OAAO,GAAG,KAGxJ4B,+tBC5CT,IAiPeC,gCA/NX,SAAAA,UAAaC,yJAAUC,CAAAjzD,KAAA+yD,WACnB/yD,KAAKkzD,aAAe,IAAItoD,IACxB5K,KAAKmzD,YAAc,IAAIvoD,IACvB5K,KAAKozD,WAAa,IAAIxoD,IACtB5K,KAAKqzD,UAAY,IAAIzoD,IACrB5K,KAAKszD,UAAYN,iQAWfO,SACF,IAgBIC,IAhBEC,UAAY,IAAI7oD,IAChB8oD,SAAW,IAAI9oD,IACf+oD,QAAU,IAAI/oD,IACdgpD,cAAgB,IAAIhpD,IACpBipD,YAAc7zD,KAAKmzD,YACnBH,SAAWhzD,KAAKszD,UAEtBC,QAAQ7tD,QAAQ,WACZ,IAAMrJ,IAAM22D,SAAWA,SAAQ31D,WAAR,EAAA6G,WAAHA,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACfyvD,QAAQ9oD,IAAIxO,KAGbu3D,cAActvD,KAAKjI,IAAnB6H,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IAFAyvD,QAAQ7oD,IAAIzO,IAAZ6H,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,MASR,IADA,IAAIwJ,QAAUimD,QAAQjmD,UACf8lD,IAAM9lD,QAAQnD,OAAOxO,OACnB83D,YAAYhpD,IAAI2oD,IAAI,IAGrBK,YAAY/oD,IAAI0oD,IAAI,GAAIA,IAAI,IAF5BC,UAAU3oD,IAAI0oD,IAAI,GAAIA,IAAI,IAOlC,IADA9lD,QAAUmmD,YAAYnmD,UACf8lD,IAAM9lD,QAAQnD,OAAOxO,OACnB43D,QAAQ9oD,IAAI2oD,IAAI,KACjBE,SAAS5oD,IAAI0oD,IAAI,GAAIA,IAAI,IAMjC,IADA9lD,QAAUkmD,cAAclmD,UACjB8lD,IAAM9lD,QAAQnD,OAAOxO,OACxB23D,SAAS5oD,IAAI0oD,IAAI,GAAIA,IAAI,IAG7B,IAAMM,aAAe,IAAIf,UAAU/yD,KAAKszD,WAMxC,OALAQ,aAAaX,YAAcU,YAC3BC,aAAaZ,aAAelzD,KAAKkzD,aACjCY,aAAaV,WAAaK,UAC1BK,aAAaT,UAAYK,SAElBI,mDAWHC,UAQJ,IAPA,IAAIP,IACEQ,YAAc,IAAIppD,IAClBpE,KAAO,IAAIoE,IACX3O,KAAOg4D,aAAaj0D,KAAKk0D,MAAO,UAEhCxmD,QADc1N,KAAA,IAAAsF,OAASrJ,KAAT,SACQyR,UAErB8lD,IAAM9lD,QAAQnD,OAAOxO,OACxBi4D,YAAYlpD,IAAI0oD,IAAI,GAAIO,SAASP,IAAI,KACrChtD,KAAKsE,IAAI0oD,IAAI,GAAIA,IAAI,IAGzB,IAAMM,aAAe,IAAIf,UAAU/yD,KAAKszD,WAIxC,OAHAQ,aAAaX,YAAc3sD,KAC3BstD,aAAaZ,aAAec,YAErBF,mDAYP,OADA9zD,KAAKk0D,MAAQ,QACNl0D,yCAWP,OADAA,KAAKk0D,MAAQ,OACNl0D,yCAUJ2oC,QACH,IAEI6qB,IACA9lD,QAHEymD,cAAgB,IAAIvpD,IACpBwpD,WAAa,IAAIxpD,IAMvB,IADA8C,QAAU1N,KAAKmzD,YAAYzlD,UACpB8lD,IAAM9lD,QAAQnD,OAAOxO,OACnBiE,KAAKqzD,UAAUxoD,IAAI2oD,IAAI,MACxBY,WAAWtpD,IAAI0oD,IAAI,GAAIA,IAAI,IAC3BW,cAAcrpD,IAAI0oD,IAAI,GAAIxzD,KAAKkzD,aAAav3D,IAAI63D,IAAI,MAM5D,IADA9lD,QAAUi7B,OAAOwqB,YAAYzlD,UACtB8lD,IAAM9lD,QAAQnD,OAAOxO,OAClBq4D,WAAWvpD,IAAI2oD,IAAI,KAAO7qB,OAAO0qB,UAAUxoD,IAAI2oD,IAAI,MACrDY,WAAWtpD,IAAI0oD,IAAI,GAAIA,IAAI,IAC3BW,cAAcrpD,IAAI0oD,IAAI,GAAI7qB,OAAOuqB,aAAav3D,IAAI63D,IAAI,MAI9D,IAAMM,aAAe,IAAIf,UAAU/yD,KAAKszD,WAIxC,OAHAQ,aAAaX,YAAciB,WAC3BN,aAAaZ,aAAeiB,cAErBL,+CAGL51D,IAIF,IAHA,IAAIs1D,IACE9lD,QAAU1N,KAAKkzD,aAAaxlD,UAE3B8lD,IAAM9lD,QAAQnD,OAAOxO,OACxBmC,GAAGs1D,IAAI,GAAIxzD,KAAKmzD,YAAYx3D,IAAI63D,IAAI,IAAKA,IAAI,oCAIhDt1D,IAKD,IAJA,IACIs1D,IADEa,QAAU,IAAIzpD,IAEd8C,QAAU1N,KAAKkzD,aAAaxlD,UAE3B8lD,IAAM9lD,QAAQnD,OAAOxO,OACxBs4D,QAAQvpD,IAAI0oD,IAAI,GAAIt1D,GAAGs1D,IAAI,GAAIxzD,KAAKmzD,YAAYx3D,IAAI63D,IAAI,IAAKA,IAAI,KAErE,IAAMM,aAAe,IAAIf,UAAU/yD,KAAKszD,WAIxC,OAHAQ,aAAaX,YAAcnzD,KAAKmzD,YAChCW,aAAaZ,aAAemB,QAErBP,qDAIP,IAAM73D,KAAOg4D,aAAaj0D,KAAKk0D,MAAO,UAKtC,OAJoBl0D,KAAA,IAAAsF,OAASrJ,KAAT,SAERi2B,QAELlyB,uCAGLs0D,QACF,IAAMC,WAAav0D,KAAKmzD,YAClBa,YAAch0D,KAAKkzD,aACnBsB,QAjNQ,SAAhBC,cAAiBT,YAAaO,WAAYD,QAA1B,OAClB,SAAC/2D,EAAGoF,GACA,IAAM+xD,GAAKn3D,EAAE,GACPo3D,GAAKhyD,EAAE,GACb,OAAO2xD,QAAQ/2D,EAAE,GAAIy2D,YAAYr4D,IAAI+4D,IAAKH,WAAW54D,IAAI+4D,MAAOC,GAAIX,YAAYr4D,IAAIg5D,IAAKJ,WAAW54D,IAAIg5D,OA6MxFF,CAAcT,YAAaO,WAAYD,QAIvD,OAFAt0D,KAAKmzD,YAAc,IAAIvoD,IAAIgqD,mBAAIL,WAAW7mD,WAAWzB,KAAKuoD,UAC1Dx0D,KAAKkzD,aAAe,IAAItoD,IAAIgqD,mBAAIZ,YAAYtmD,WAAWzB,KAAKuoD,UACrDx0D,qDAkBP,IARA,IAAIwzD,IACEqB,WACAb,YAAch0D,KAAKkzD,aAEnBj3D,KAAOg4D,aAAaj0D,KAAKk0D,MAAO,UAEhCxmD,QADc1N,KAAA,IAAAsF,OAASrJ,KAAT,SACQyR,UAErB8lD,IAAM9lD,QAAQnD,OAAOxO,OACpBi4D,YAAYnpD,IAAI2oD,IAAI,KACpBqB,QAAQvwD,KAAK0vD,YAAYr4D,IAAI63D,IAAI,KAIzC,OAAOqB,yBC/OR,i4DC+DCj2D,YAA0Bk2D,gCAA1Bl2D,YAAaC,SAAai2D,gCAAbj2D,SACbk2D,OAAqBvY,iBAAbwY,SAAaxY,mBACrBh/B,kBAAsBy3C,oBAAtBz3C,kBAGF03C,gBAFcx6D,OAAOy6D,YAEJ,SAAjBD,eAAkBp3C,KAEpB,GAAmB,WAAfs3C,oBAAOt3C,KAAkB,CACzB,GAAY,OAARA,IAAgB,OAAO,EAE3B,GAAc,oBADNtiB,OAAOoB,UAAUmF,SAAS9G,KAAK6iB,KAEnC,MAA8E,YAAtEA,IAAIlY,YAAY7D,WAAWkD,MAAM,4BAA8B,GAG/E,OAAO,IAQPowD,YAAc,SAAdA,cAAc,YAAA/vD,QAAY,IAAIxF,MAAOoG,WAAvBZ,OAAmCtC,KAAKmD,MAAsB,IAAhBnD,KAAKoD,YAO/D+O,MAAQ,SAARA,MAAS5Z,GACX,IACIqJ,EADEkkC,UAEN,IAAK,IAAMzsC,OAAOd,OACPsB,eAAe5B,KAAKM,EAAGc,OAC1BuI,EAAIrJ,EAAEc,KACNysC,OAAOzsC,KAAO64D,eAAetwD,GAAKuQ,MAAMvQ,GAAKA,GAGrD,OAAOkkC,QAoBLwsB,mBACO,SAAAC,QAACnxD,KAAM0Z,KACZ,GAAmB,WAAfs3C,oBAAOt3C,KACP,OAAOnU,MAAM,iCAGjB,IAAM6rD,gBAjBS,SAAjBC,eAAkBrxD,KAAM0Z,KAC1B,IAAM03C,mBAON,OANApxD,KAAKsB,QAAQ,SAACrJ,KACNA,OAAOyhB,KAGX03C,gBAAgBlxD,KAAKjI,OAElBm5D,gBASqBC,CAAerxD,KAAM0Z,KAC7C,OAAI03C,gBAAgBn0D,OACTsI,MAAK,+BAAArE,OAAgCkwD,gBAAgBjzD,KAAK,QAE9Dub,KAiBT43C,OAAS,SAATA,OAAUlvD,KAAMqB,OAAP,OAAiB7E,KAAKmK,IAAL9P,MAAA2F,KAAI2yD,+BAAQnvD,KAAKxB,IAAI,SAAA5J,GAAC,OAAIA,EAAEyM,YAQtD+tD,OAAS,SAATA,OAAUpvD,KAAMqB,OAAP,OAAiB7E,KAAKkK,IAAL7P,MAAA2F,KAAI2yD,+BAAQnvD,KAAKxB,IAAI,SAAA5J,GAAC,OAAIA,EAAEyM,YAUtDguD,kBAAoB,SAApBA,kBAAqBrvD,KAAME,OAAQovD,WAAc,IAAAC,KAC/CvgD,OACEwgD,UAEN,OADAxvD,KAAOA,KAAK,aAAcjB,MAAQiB,MAAQA,MAClCsvD,WACR,KAAKl3D,YACD4W,QAASugD,SAAGzwD,OAAHjI,MAAA04D,KAAAJ,+BAAanvD,KAAKxB,IAAI,SAAAyvB,KAAG,OAAIA,IAAIzvB,IAAI,SAAA5J,GAAC,OAAIA,EAAEsL,OAAO,MAAKkF,OAAO,SAAAxQ,GAAC,YAAU8B,IAAN9B,QAC7E,MACJ,QACI,IADJ,IAAA66D,MAAA,SAAAA,MACan7D,EAAO4oB,KACZ,IAAM+Q,IAAMjuB,KAAK1L,GAFzBo7D,QAAAC,eAGiCzvD,OAHjC,GAGe0vD,OAHfF,QAAA,GAGuBG,OAHvBH,QAAA,GAIcI,KAAO7hC,IAAI7oB,OAAO,SAAAxQ,GAAC,OAAK2R,MAAM3R,EAAEg7D,WAChCG,KAAO9hC,IAAI7oB,OAAO,SAAAxQ,GAAC,OAAK2R,MAAM3R,EAAEi7D,WACtC,GAAIC,KAAKj1D,QAAUk1D,KAAKl1D,OAAQ,CAC5B,IAAMm1D,SAAWZ,OAAOU,KAAMF,QACxBK,UAAYb,OAAOW,KAAMF,QACzBK,SAAWhB,OAAOY,KAAMF,QACxBO,UAAYjB,OAAOa,KAAMF,QAC/BL,OAAO1xD,MAAMtB,KAAKkK,IAAIspD,SAAUC,WAAYzzD,KAAKmK,IAAIupD,SAAUC,eAV9D77D,EAAI,EAAG4oB,IAAMld,KAAKnF,OAAQvG,EAAI4oB,IAAK5oB,IAAKm7D,MAAxCn7D,GAaT0a,OAASwgD,OAAO30D,QAAU2B,KAAKkK,IAAL7P,MAAA2F,KAAI2yD,+BAAQK,OAAOhxD,IAAI,SAAA5J,GAAC,OAAIA,EAAE,OAAM4H,KAAKmK,IAAL9P,MAAA2F,KAAI2yD,+BAAQK,OAAOhxD,IAAI,SAAA5J,GAAC,OAAIA,EAAE,WAGhG,OAAOoa,QAGLohD,wBAA0B,SAA1BA,wBAA2BphD,QAK7B,OAJIA,OAAO,KAAOA,OAAO,KACrBA,OAAO,GAAKA,OAAO,GAAK,EAAI,EAAIA,OAAO,GACvCA,OAAO,GAAKA,OAAO,GAAK,EAAIA,OAAO,GAAK,GAErCA,QASLqhD,YAAc,SAAdA,YAAeC,QAAShB,WAC1B,IAGmCiB,MAH/BvhD,WACJshD,QAAUA,QAAQlrD,OAAO,SAAAorD,KAAG,OAAIA,KAAOA,IAAI31D,UAC/BA,SAEJmU,OADAsgD,YAAcl3D,aACLm4D,UAAGzxD,OAAHjI,MAAA05D,MAAApB,+BAAamB,WAEZ9zD,KAAKkK,IAAL7P,MAAA2F,KAAI2yD,+BAAQmB,QAAQ9xD,IAAI,SAAA5J,GAAC,OAAIA,EAAE,OAAM4H,KAAKmK,IAAL9P,MAAA2F,KAAI2yD,+BAAQmB,QAAQ9xD,IAAI,SAAA5J,GAAC,OAAIA,EAAE,SAItF,OAAOoa,QAGLyhD,WACFnI,OAAQoI,cACRC,MAAOC,aACP5R,QAAS6R,QACTxR,OAAQyR,OACR1R,KAAM2R,KACNvR,IAAKwR,IACLzR,SAAU0R,UAGRC,SACFC,MAAOC,WACPC,OAAQC,UACRx0B,OC3OG,SAASA,kBAAOtnC,GACrB,OAAQA,GD2ON+7D,QAASC,WACTC,KAAMC,UACNC,KAAMC,UACNtJ,OEvOG,SAASuJ,YAAYr8D,GAC1B,QAASA,GAAK,IAAM,EAAI,EAAIgH,KAAKoK,KAAK,EAAIpR,EAAIA,GAAKgH,KAAKoK,KAAK,GAAKpR,GAAK,GAAKA,GAAK,GAAK,IF0RxDu4B,+BAAoB,SAApBA,kBAAqBE,IAAK14B,MAAO24B,MAS7D,IARA,IAIIpE,IACAsE,GALAC,IAAM,EAENC,KADWL,IAAIpzB,OACC,EAMbwzB,IAAMC,MACTxE,IAAMttB,KAAKsH,OAAOuqB,IAAMC,MAAQ,GAChCF,GAAK5xB,KAAKiY,IAAIwZ,IAAInE,KAAOv0B,OACpBiH,KAAKiY,IAAIwZ,IAAInE,IAAM,GAAKv0B,QAEnB64B,GACNC,IAAMvE,IAAM,EAEZwE,KAAOxE,IAIf,IAAKoE,KACD,OAAOI,KAGX,IAAMH,QAAUF,IAAIK,MACpB,OAAIH,UAAY54B,MACL+4B,KACAH,QAAU54B,MACJ,IAAT+4B,KAAqBA,KACT,SAATJ,KAAkBI,KAAO,EAAIA,KAEpCA,OAASL,IAAIpzB,OAAS,EAAYyzB,KACtB,SAATJ,KAAkBI,KAAOA,KAAO,GAGrCwjC,gBAAkB,SAAlBA,gBAAmB9xD,KAAMnK,KAC3B,IAAMk8D,WAAa/xD,KAAKoF,OAAO,SAAAxQ,GAAC,MAAiB,iBAANA,IAC3C,OAAOm9D,WAAWhkC,+BAAkBgkC,WAAYl8D,OAO9Cm8D,UAAY,SAAZA,YAAY,OAAM99D,QA6DQ+9D,uBAvDJ1tC,sBAEG2tC,qBAqDyB,SAAxBD,sBAAyBE,IAAK55C,GAAI8sB,QAE9D,OADA8sB,IAAMA,IAAIr4D,QAAQ,OAAQ,KACnB,GAAAgF,OAAIumC,OAAJ,KAAAvmC,OAAcqzD,KAAd,GAAArzD,OAAwBumC,OAAxB,KAAAvmC,OAAkCqzD,IAAlC,KAAArzD,OAAyCyZ,OAYnBk1C,aAAe,SAAfA,aAAgB2E,MAAO78D,OACpD,YAAqB,IAAV68D,OAA2C,WAAjBxD,oBAAOwD,SAAuBA,MACxD78D,MAEJ68D,OAmDLC,eAAiB,SAAjBA,eAAkB/6C,IAAK5f,IACzB,IAAK,IAAM7B,OAAOyhB,IACVtiB,OAAOqB,eAAe5B,KAAK6iB,IAAKzhB,MAChC6B,GAAG7B,IAAKyhB,MAUag7C,gCAK7B,SAAAA,UAAwB,IAAXtyD,KAAWtC,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,iKAAA60D,CAAA/4D,KAAA84D,SACpB94D,KAAKg5D,SAAWlG,cAAU53C,EAAE,SAAA9f,GAAC,OAAIA,EAAE8f,IAAGpY,EAAE,SAAA1H,GAAC,OAAIA,EAAE0H,IAC/C9C,KAAKwG,KAAKA,gSAQRA,OAIF,OAHIA,QACAxG,KAAKi5D,WAAaj5D,KAAKg5D,SAASxyD,QAE7BxG,uCAULkb,EAAGpY,EAAG2vD,QACR,OAAOzyD,KAAKi5D,WAAW5+C,KAAKa,EAAGpY,EAAG2vD,uBAIpCyG,WAAa,SAAbA,WAAcp7C,KAChB,QAAY5gB,IAAR4gB,KAA6B,OAARA,IACrB,OAAOA,IAFwB,IAInC,IAAIq7C,OAASr7C,IAJsBs7C,KAAAl1D,UAAA7C,OAAXqF,OAAW,IAAAnB,MAAA6zD,KAAA,EAAAA,KAAA,KAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAX3yD,OAAW2yD,KAAA,GAAAn1D,UAAAm1D,MAKnC,IAAK,IAAIv+D,EAAI,EAAG4oB,IAAMhd,OAAOrF,OAAQvG,EAAI4oB,WAEtBxmB,KADfi8D,OAASA,OAAOzyD,OAAO5L,MACgB,OAAXq+D,QAFcr+D,KAM9C,OAAOq+D,QASLG,aAAe,SAAfA,aAAgB9F,KAClB,IAAM/+B,IAAM++B,IAAIzxD,WAAWkD,MAAM,eACjC,OAAKwvB,IAKEvzB,SAASuzB,IAAI,GAAI,IAHb,MAMT8kC,sBAAwB,SAAxBA,sBAAyBv2C,QAASw2C,OACpCh+D,OAAOkS,QAAQ8rD,OAAO9zD,QAAQ,SAAC+zD,UAC3B,IAAMr6C,KAAOq6C,SAAS,GADkBC,WAEmCD,SAAS,GAA5EE,aAFgCD,WAEhCC,aAAcC,OAFkBF,WAElBE,OAAQC,MAFUH,WAEVG,MAAOC,YAFGJ,WAEHI,YAA2BC,OAFxBL,WAEUzF,aAC5Cr3D,UAAYomB,QAAQpd,YAAYhJ,UAChCpB,OAAOqB,eAAe5B,KAAK2B,UAAWwiB,QACpC26C,SACA/2C,QAAO,IAAA1d,OAAK8Z,OAAU26C,QAE1B/2C,QAAQ5D,MAAQ,WACZ,GAAIlb,UAAO7C,OAAQ,CACf,IAAItF,MAAKmI,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GAOT,OANIy1D,eACA59D,MAAQ49D,aAAa32C,QAAD9e,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GAAqB8e,QAAO,IAAA1d,OAAK8Z,SAErDw6C,QACAA,OAAO52C,QAASjnB,OAEhB+9D,cAAgBA,YAAY/9D,OACrBinB,QAAO,IAAA1d,OAAK8Z,QAEvB4D,QAAO,IAAA1d,OAAK8Z,OAAUrjB,MAClB89D,OACAA,MAAM72C,QAASjnB,OAEZinB,SACT,OAAOA,QAAO,IAAA1d,OAAK8Z,YAwC/B46C,qBAAU,SAAVA,QAAUhzD,MAAI,OAAI,SAACizD,OAAQC,QAC7B,MAAa,UAATlzD,OACKizD,QAlBO,SAAdE,YAAe5D,KAAM6D,MACvB,GAAI7D,KAAKl1D,SAAW+4D,KAAK/4D,OAAU,OAAO,EAC1C,IAAK,IAAIvG,EAAIy7D,KAAKl1D,OAAQvG,GAAK,EAAGA,IAC9B,GAAIy7D,KAAKz7D,KAAOs/D,KAAKt/D,GAAM,OAAO,EAGtC,OAAO,EAeIq/D,CAAYF,OAAQC,QACX,WAATlzD,KACAxL,OAAO6+D,GAAGJ,OAAQC,QACpBD,SAAWC,SAsBlBI,WACFC,eAAgB,0BASdC,eAAiB,SAAjBA,eAAkBl2B,OAAQm2B,MAC5B,IAAK,IAAMr7C,QAAQq7C,KACXvF,eAAe5wB,OAAOllB,QAAU81C,eAAeuF,KAAKr7C,OACpDo7C,eAAel2B,OAAOllB,MAAOq7C,KAAKr7C,OAC3Bq7C,KAAKr7C,gBAAiB5jB,QAAUi/D,KAAKr7C,MAAMxZ,cAAgBpK,QAClE8oC,OAAOllB,SACPo7C,eAAel2B,OAAOllB,MAAOq7C,KAAKr7C,QAElCklB,OAAOllB,MAAQq7C,KAAKr7C,MAG5B,OAAOklB,QAaLo2B,6BAAkB,SAAlBA,gBAAmBC,IAAKC,UAAWp0D,KAAMq0D,MAC3C,IAAInd,UAAYid,KG1pBL,SAASG,WAAYD,MAChC,OAAO,IAAI9H,qBAAU8H,MHypBEC,CAAWD,MAK5BE,iBAHNrd,UAAYA,UAAUl3C,KAAKA,OAEHw3C,QAAQvwB,OAAOmtC,WACTzc,MAAMT,WAE9Bsd,cAAgBtd,UAAUI,OAGhC,OAFAkd,cAAcC,aAAav1D,QAAQ,SAAAw1D,MAAI,OAAIA,KAAKjpC,WAChD+oC,cAAc/oC,SACP8oC,iBAqDLlgB,0BAAe,SAAfA,eAAe,OAAM5S,WAMrBkzB,gCAAqB,SAArBA,qBAAqB,OAAMC,YAwB3BC,mCAAwB,SAAxBA,wBAAwB,OAAMrzB,qBAsBpC,IA8BMszB,SAAW,SAAXA,SAAY1/D,EAAGiK,EAAGlD,GAAa,IAAVpF,EAAU2G,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,GAAN,EAC3BtI,GAAKA,EAAGiK,GAAKA,EAAGlD,GAAKA,EAAGpF,GAAKA,EAC7B3B,GAAK,IAAKiK,GAAK,IAAKlD,GAAK,IACzB,IAEI5C,EACAhD,EAHEoQ,IAAMnK,KAAKmK,IAAIvR,EAAGiK,EAAGlD,GACrBuK,IAAMlK,KAAKkK,IAAItR,EAAGiK,EAAGlD,GAGrB5H,GAAKoS,IAAMD,KAAO,EAExB,GAAIC,MAAQD,IACRnN,EAAIhD,EAAI,MACL,CACH,IAAM3B,EAAI+R,IAAMD,IAEhB,OADAnQ,EAAIhC,EAAI,GAAMK,GAAK,EAAI+R,IAAMD,KAAO9R,GAAK+R,IAAMD,KACvCC,KACR,KAAKvR,EAAGmE,GAAK8F,EAAIlD,GAAKvH,GAAKyK,EAAIlD,EAAI,EAAI,GAAI,MAC3C,KAAKkD,EAAG9F,GAAK4C,EAAI/G,GAAKR,EAAI,EAAG,MAC7B,KAAKuH,EAAG5C,GAAKnE,EAAIiK,GAAKzK,EAAI,EAG1B2E,GAAK,EAET,OAAQA,EAAGhD,EAAGhC,EAAGwC,IA8Cfg+D,YAAc,SAAdA,YAAeC,KAWjB,MAViB,yCAUJ1oD,KAAK0oD,MALA,iHAKkB1oD,KAAK0oD,KAC9B,MAVM,0CAWG1oD,KAAK0oD,MALP,kEAKyB1oD,KAAK0oD,KACrC,MALM,yBAMG1oD,KAAK0oD,KACd,MACFA,KA2CPC,sBAAwB,SAAxBA,sBAAyBC,UAAWvnD,SAAUlY,MAChD,GAAiB,OAAbkY,SACA,OAAO,KAEX,IAAMwnD,UAAYngE,OAAO4I,KAAK+P,UAU9B,OAAOunD,UAAUhmD,OATH,SAARkmD,MAAQl1D,QAAM,OAAIi1D,UAAUlmD,MAAM,SAAC5N,OACrC,IAAM2rD,IAAM9sD,OAAOmB,OAAOkG,cACpBgjB,MAAQ5c,SAAStM,OAAO,aAActC,MAAQ4O,SAAStM,OAAO,GAAKsM,SAAStM,OAClF,OAAIutD,oBAAOrkC,MAAM,MAAOgkC,YACkB73D,IAA/B6zB,MAAM1W,KAAK,SAAAjf,GAAC,OAAIA,IAAMo4D,OAE1BziC,OAAQyiC,KAAOziC,MAAM,IAAMyiC,KAAOziC,MAAM,OAI/Cpb,WAAW,EACX1Z,aAWF4/D,yCAA8B,SAA9BA,4BAA+BH,UAAWI,YAAa7/D,MACzD,IAAI8/D,kBACJ,GAAID,uBAAuBv2D,MAAO,CAC9B,IAAMy2D,aAAeN,UAAUpmD,kBAEzB2mD,QAAUH,YAAY1wD,MAAM,EAAG0wD,YAAYz6D,QACjD,GAAIy6D,uBAAuBz2D,SACvB02D,kBAAoBD,YAAYJ,cAAe,QAC5C,GAAII,uBAAuBv2D,OAASu2D,YAAY,GAAGz6D,OAAQ,CAC9D,IAAM66D,eAAiBJ,YAAY,GAAGlwD,OAAO,SAAAxQ,GAAC,OAAIA,KAAK4gE,eACvDD,kBAAoBL,UAAUhmD,OAAO,SAAChP,QAClC,IAAIy1D,SAAU,EAMd,OALAD,eAAex2D,QAAQ,SAAC02D,UAAWC,KAC/B,IAAMtgE,MAAQ2K,OAAO01D,WAAWruD,cAC1BrM,MAAQu6D,QAAQpwD,UAAU,SAAAzQ,GAAC,OAAIA,EAAEihE,OAAStgE,QAChDogE,QAAUA,UAAsB,IAAXz6D,QAElBy6D,UAEPxmD,WAAW,EACX1Z,iBAGJ8/D,kBAAoBL,UAAUhmD,OAAO,kBAAM,IACvCC,WAAW,EACX1Z,iBAIR8/D,kBAAoBN,sBAAsBC,UAAWI,YAAa7/D,MAEtE,OAAO8/D,mBA6BLO,aAAe,SAAfA,aAAevgE,OAAK,OAAKgR,MAAMhR,QAAUA,SAAWqwC,KAAYrwC,QAAUqwC,KA0B1Eze,QAAU,SAAVA,QAAU8G,KAAG,OAAKA,eAAelvB,MAAQkvB,KAAOA,MAmEhD8nC,uBAAY,SAAZA,UAAYv1D,MAAI,OInlCP,WACb,IAAIA,KAAOw8B,sBAASsrB,eAChBhuC,KAAO0iB,sBAAS,IAChBxgB,QAAU,KAEd,SAAS4mB,SACP,IAAIsa,OAGJ,GAFKlhC,UAASA,QAAUkhC,OAASnsC,YACjC/Q,KAAK3J,MAAM2C,KAAMkE,WAAWkhD,KAAKpiC,SAAUlC,KAAKzjB,MAAM2C,KAAMkE,YACxDggD,OAAQ,OAAOlhC,QAAU,KAAMkhC,OAAS,IAAM,KAepD,OAZAta,OAAO5iC,KAAO,SAAShB,GACrB,OAAO9B,UAAU7C,QAAU2F,KAAoB,mBAANhB,EAAmBA,EAAIw9B,sBAASx9B,GAAI4jC,QAAU5iC,MAGzF4iC,OAAO9oB,KAAO,SAAS9a,GACrB,OAAO9B,UAAU7C,QAAUyf,KAAoB,mBAAN9a,EAAmBA,EAAIw9B,uBAAUx9B,GAAI4jC,QAAU9oB,MAG1F8oB,OAAO5mB,QAAU,SAAShd,GACxB,OAAO9B,UAAU7C,QAAU2hB,QAAe,MAALhd,EAAY,KAAOA,EAAG4jC,QAAU5mB,SAGhE4mB,OJ2jCiBA,GAAS5iC,KAAKiwD,UAAUjwD,QAE5Cw1D,aAAWC,gBAAAC,gBDvmCS,OCwmCKC,YADdF,gBAAAC,aDzmCc,YC2mCKE,iBAFnBH,gBAAAC,aDxmCe,aMCjB,SAAS3S,QACtB,OAAOj6B,gBAAUi6B,QAAQ1xC,YLsmCVqkD,cAKXG,cAAYJ,gBAAAK,iBD3mCc,YOHjB,SAAS/S,OAAQxwC,OAC9B,IAAOhd,EAAIwtD,OAAO1oD,QAAU,EAC5B,IAAK,IAAIvG,EAAUM,EAAGylD,GAAIkc,GAAI9uD,GAAI1R,EAAtB8J,EAAI,EAAqBnL,EAAI6uD,OAAOxwC,MAAM,IAAIlY,OAAQgF,EAAInL,IAAKmL,EACzE,IAAK02D,GAAK9uD,GAAK,EAAGnT,EAAI,EAAGA,EAAIyB,IAAKzB,GAC3B+lD,IAAMzlD,EAAI2uD,OAAOxwC,MAAMze,IAAIuL,IAAI,GAAKjL,EAAE,KAAO,GAChDA,EAAE,GAAK2hE,GAAI3hE,EAAE,GAAK2hE,IAAMlc,IACfA,GAAK,GACdzlD,EAAE,GAAK6S,GAAI7S,EAAE,GAAK6S,IAAM4yC,IAExBzlD,EAAE,GAAK2hE,KNqmCGN,gBAAAK,cD1mCS,OC4mCKE,MAFdP,gBAAAK,cDzmCW,SQHd,SAAS/S,OAAQxwC,OAC9B,IAAOhd,EAAIwtD,OAAO1oD,QAAU,EAA5B,CACA,IAAK,IAAIvG,EAAGyB,EAAgCuG,EAA7BuD,EAAI,EAAGnL,EAAI6uD,OAAO,GAAG1oD,OAAWgF,EAAInL,IAAKmL,EAAG,CACzD,IAAKvD,EAAIhI,EAAI,EAAGA,EAAIyB,IAAKzB,EAAGgI,GAAKinD,OAAOjvD,GAAGuL,GAAG,IAAM,EACpD,GAAIvD,EAAG,IAAKhI,EAAI,EAAGA,EAAIyB,IAAKzB,EAAGivD,OAAOjvD,GAAGuL,GAAG,IAAMvD,EAEpDgnD,KAAKC,OAAQxwC,UPsmCGkjD,gBAAAK,cDxmCW,SSJd,SAAS/S,OAAQxwC,OAC9B,IAAOhd,EAAIwtD,OAAO1oD,QAAU,IAASnG,GAAK6tD,GAAKgB,OAAOxwC,MAAM,KAAKlY,QAAU,EAA3E,CACA,IAAK,IAAkB0nD,GAAI7tD,EAAGqB,EAArBuG,EAAI,EAAGuD,EAAI,EAAaA,EAAInL,IAAKmL,EAAG,CAC3C,IAAK,IAAIvL,EAAI,EAAGkuD,GAAK,EAAGiU,GAAK,EAAGniE,EAAIyB,IAAKzB,EAAG,CAK1C,IAJA,IAAIoiE,GAAKnT,OAAOxwC,MAAMze,IAClBqiE,KAAOD,GAAG72D,GAAG,IAAM,EAEnB+2D,IAAMD,MADCD,GAAG72D,EAAI,GAAG,IAAM,IACF,EAChBiB,EAAI,EAAGA,EAAIxM,IAAKwM,EAAG,CAC1B,IAAI+1D,GAAKtT,OAAOxwC,MAAMjS,IAGtB81D,KAFWC,GAAGh3D,GAAG,IAAM,IACZg3D,GAAGh3D,EAAI,GAAG,IAAM,GAG7B2iD,IAAMmU,KAAMF,IAAMG,GAAKD,KAEzBpU,GAAG1iD,EAAI,GAAG,IAAM0iD,GAAG1iD,EAAI,GAAG,GAAKvD,EAC3BkmD,KAAIlmD,GAAKm6D,GAAKjU,IAEpBD,GAAG1iD,EAAI,GAAG,IAAM0iD,GAAG1iD,EAAI,GAAG,GAAKvD,EAC/BgnD,KAAKC,OAAQxwC,URwlCGujD,eAQZQ,mBAAQ,SAARA,MAAQ1mD,QAAM,OnB7mCL,WACb,IAAIxS,KAAOo/B,0BACPjqB,MAAQgkD,WACRnvB,OAASovB,KACTzhE,MAAQkuD,WAEZ,SAASqT,MAAM92D,MACb,IACI1L,EAIA2iE,GALAC,GAAKt5D,KAAK/G,MAAM2C,KAAMkE,WAEtBhJ,EAAIsL,KAAKnF,OACT9E,EAAImhE,GAAGr8D,OACPs8D,GAAK,IAAIp4D,MAAMhJ,GAGnB,IAAKzB,EAAI,EAAGA,EAAIyB,IAAKzB,EAAG,CACtB,IAAK,IAAkD8iE,IAA9CC,GAAKH,GAAG5iE,GAAIoiE,GAAKS,GAAG7iE,GAAK,IAAIyK,MAAMrK,GAAImL,EAAI,EAAQA,EAAInL,IAAKmL,EACnE62D,GAAG72D,GAAKu3D,KAAO,GAAI7hE,MAAMyK,KAAKH,GAAIw3D,GAAIx3D,EAAGG,OACzCo3D,IAAIp3D,KAAOA,KAAKH,GAElB62D,GAAG7gE,IAAMwhE,GAGX,IAAK/iE,EAAI,EAAG2iE,GAAKlkD,MAAMokD,IAAK7iE,EAAIyB,IAAKzB,EACnC6iE,GAAGF,GAAG3iE,IAAI4G,MAAQ5G,EAIpB,OADAszC,OAAOuvB,GAAIF,IACJE,GAmBT,OAhBAL,MAAMl5D,KAAO,SAAS4B,GACpB,OAAO9B,UAAU7C,QAAU+C,KAAoB,mBAAN4B,EAAmBA,EAAIw9B,sBAASp4B,yBAAMnQ,KAAK+K,IAAKs3D,OAASl5D,MAGpGk5D,MAAMvhE,MAAQ,SAASiK,GACrB,OAAO9B,UAAU7C,QAAUtF,MAAqB,mBAANiK,EAAmBA,EAAIw9B,uBAAUx9B,GAAIs3D,OAASvhE,OAG1FuhE,MAAM/jD,MAAQ,SAASvT,GACrB,OAAO9B,UAAU7C,QAAUkY,MAAa,MAALvT,EAAYu3D,WAAyB,mBAANv3D,EAAmBA,EAAIw9B,sBAASp4B,yBAAMnQ,KAAK+K,IAAKs3D,OAAS/jD,OAG7H+jD,MAAMlvB,OAAS,SAASpoC,GACtB,OAAO9B,UAAU7C,QAAU+sC,OAAc,MAALpoC,EAAYw3D,KAAax3D,EAAGs3D,OAASlvB,QAGpEkvB,MmB+jCeQ,GAAU15D,KAAKwS,OAAOxS,MAAMgqC,OAAOyuB,aAAajmD,OAAOw3B,SAC9D70B,MAAMijD,YAAY5lD,OAAO2C,OADlBukD,CAC0BlnD,OAAOpQ,OASnDu3D,4BAAiB,SAAjBA,eAAkBnnD,QACpB,IAAMonD,OAASzrC,WAEf,OADA3b,OAAOxS,KAAKsB,QAAQ,SAAArJ,KAAG,OAAI2hE,OAAO3hE,IAAI,SAAAjB,GAAC,OAAIA,EAAEiB,SACtC2hE,OAAOtwD,QAAQkJ,OAAOpQ,OAG3By3D,mBACFha,yBACAia,yBACAC,2BACAC,qBACAC,iCACAxU,UAAWqU,UACX1V,WAAY6V,iBACZvtC,KAAMstC,WACNxU,WAAYuU,WACZ76B,OAAQ2gB,cAGNqa,SACFC,SzDn+BG,SAASA,SAAS/qC,OACvB,OAAOspB,UAAK3sB,UAAMqD,QyDm+BhBgrC,UzD5+BG,SAASA,UAAUhrC,OACxB,OAAOspB,UAAKvsB,WAAOiD,QyD4+BjBirC,QzDj/BG,SAASA,QAAQjrC,OACtB,OAAOspB,UAAK7zB,SAAKuK,QyDi/BfkrC,WzD1+BG,SAASA,WAAWlrC,OACzB,OAAOspB,UAAKJ,YAAQlpB,QyD0+BlB0qB,cACAmG,cACAsa,ISrpCW,WACb,IAAI5iE,MAAQ8vB,sBACRwG,WAAausC,eACb3yD,KAAO,KACPw1C,WAAaje,sBAAS,GACtBme,SAAWne,sBAASib,UACpBoD,SAAWre,sBAAS,GAExB,SAASm7B,IAAIn4D,MACX,IAAI1L,EAEAuL,EACAiB,EAMAo5C,GAGA97C,EAXArI,EAAIiK,KAAKnF,OAGTua,IAAM,EACNla,MAAQ,IAAI6D,MAAMhJ,GAClBsiE,KAAO,IAAIt5D,MAAMhJ,GACjBkkD,IAAMgB,WAAWpkD,MAAM2C,KAAMkE,WAC7B68C,GAAK/9C,KAAKkK,IAAIuxC,SAAKz7C,KAAKmK,KAAKsxC,SAAKkD,SAAStkD,MAAM2C,KAAMkE,WAAau8C,KAEpE3jD,EAAIkG,KAAKkK,IAAIlK,KAAKiY,IAAI8lC,IAAMxkD,EAAGslD,SAASxkD,MAAM2C,KAAMkE,YACpD46D,GAAKhiE,GAAKikD,GAAK,GAAK,EAAI,GAG5B,IAAKjmD,EAAI,EAAGA,EAAIyB,IAAKzB,GACd8J,EAAIi6D,KAAKn9D,MAAM5G,GAAKA,IAAMiB,MAAMyK,KAAK1L,GAAIA,EAAG0L,OAAS,IACxDoV,KAAOhX,GASX,IAJkB,MAAdytB,WAAoB3wB,MAAMuK,KAAK,SAASnR,EAAGuL,GAAK,OAAOgsB,WAAWwsC,KAAK/jE,GAAI+jE,KAAKx4D,MACnE,MAAR4F,MAAcvK,MAAMuK,KAAK,SAASnR,EAAGuL,GAAK,OAAO4F,KAAKzF,KAAK1L,GAAI0L,KAAKH,MAGxEvL,EAAI,EAAGwM,EAAIsU,KAAOmlC,GAAKxkD,EAAIuiE,IAAMljD,IAAM,EAAG9gB,EAAIyB,IAAKzB,EAAG2lD,GAAKC,GAC9Dr6C,EAAI3E,MAAM5G,GAAiB4lD,GAAKD,KAAlB77C,EAAIi6D,KAAKx4D,IAAmB,EAAIzB,EAAI0C,EAAI,GAAKw3D,GAAID,KAAKx4D,IAClEG,KAAMA,KAAKH,GACX3E,MAAO5G,EACPiB,MAAO6I,EACP68C,WAAYhB,GACZkB,SAAUjB,GACVmB,SAAU/kD,GAId,OAAO+hE,KA2BT,OAxBAF,IAAI5iE,MAAQ,SAASiK,GACnB,OAAO9B,UAAU7C,QAAUtF,MAAqB,mBAANiK,EAAmBA,EAAIw9B,uBAAUx9B,GAAI24D,KAAO5iE,OAGxF4iE,IAAItsC,WAAa,SAASrsB,GACxB,OAAO9B,UAAU7C,QAAUgxB,WAAarsB,EAAGiG,KAAO,KAAM0yD,KAAOtsC,YAGjEssC,IAAI1yD,KAAO,SAASjG,GAClB,OAAO9B,UAAU7C,QAAU4K,KAAOjG,EAAGqsB,WAAa,KAAMssC,KAAO1yD,MAGjE0yD,IAAIld,WAAa,SAASz7C,GACxB,OAAO9B,UAAU7C,QAAUogD,WAA0B,mBAANz7C,EAAmBA,EAAIw9B,uBAAUx9B,GAAI24D,KAAOld,YAG7Fkd,IAAIhd,SAAW,SAAS37C,GACtB,OAAO9B,UAAU7C,QAAUsgD,SAAwB,mBAAN37C,EAAmBA,EAAIw9B,uBAAUx9B,GAAI24D,KAAOhd,UAG3Fgd,IAAI9c,SAAW,SAAS77C,GACtB,OAAO9B,UAAU7C,QAAUwgD,SAAwB,mBAAN77C,EAAmBA,EAAIw9B,uBAAUx9B,GAAI24D,KAAO9c,UAGpF8c,KT8kCLne,IrD/kCW,WACb,IAAIa,YAAcD,eACdG,YAAcD,eACdyd,aAAev7B,sBAAS,GACxBw7B,UAAY,KACZvd,WAAaD,cACbG,SAAWD,YACXG,SAAWD,YACX5+B,QAAU,KAEd,SAASw9B,MACP,IAAI0D,OACAtoD,EACAw4B,IAAMitB,YAAYhkD,MAAM2C,KAAMkE,WAC9BmwB,IAAMktB,YAAYlkD,MAAM2C,KAAMkE,WAC9Bu8C,GAAKgB,WAAWpkD,MAAM2C,KAAMkE,WAAag9C,OACzCR,GAAKiB,SAAStkD,MAAM2C,KAAMkE,WAAag9C,OACvCH,GAAK9lC,IAAIylC,GAAKD,IACdK,GAAKJ,GAAKD,GAQd,GANKz9B,UAASA,QAAUkhC,OAASnsC,YAG7Bsc,GAAKD,KAAIx4B,EAAIy4B,GAAIA,GAAKD,GAAIA,GAAKx4B,GAG7By4B,GAAKsoB,aAGN,GAAIoE,GAAKtC,SAAM9B,aAClB35B,QAAQg8B,OAAO3qB,GAAKgO,IAAIoe,IAAKpsB,GAAKiO,IAAIme,KACtCz9B,QAAQw9B,IAAI,EAAG,EAAGnsB,GAAIosB,GAAIC,IAAKI,IAC3B1sB,GAAKuoB,eACP35B,QAAQg8B,OAAO5qB,GAAKiO,IAAIqe,IAAKtsB,GAAKkO,IAAIoe,KACtC19B,QAAQw9B,IAAI,EAAG,EAAGpsB,GAAIssB,GAAID,GAAIK,SAK7B,CACH,IAWIzf,GACAC,GAZA29B,IAAMxe,GACNye,IAAMxe,GACNye,IAAM1e,GACN2e,IAAM1e,GACN2e,IAAMte,GACNue,IAAMve,GACNwe,GAAK1d,SAASxkD,MAAM2C,KAAMkE,WAAa,EACvCs7D,GAAMD,GAAK5iB,eAAaqiB,WAAaA,UAAU3hE,MAAM2C,KAAMkE,WAAakJ,UAAKgnB,GAAKA,GAAKC,GAAKA,KAC5F0tB,GAAK70C,SAAI+N,IAAIoZ,GAAKD,IAAM,GAAI2qC,aAAa1hE,MAAM2C,KAAMkE,YACrDu7D,IAAM1d,GACN2d,IAAM3d,GAKV,GAAIyd,GAAK7iB,aAAS,CAChB,IAAIgjB,GAAKxe,KAAKqe,GAAKprC,GAAKkO,IAAIi9B,KACxBK,GAAKze,KAAKqe,GAAKnrC,GAAKiO,IAAIi9B,MACvBF,KAAY,EAALM,IAAUhjB,cAA8BwiB,KAArBQ,IAAO7e,GAAK,GAAK,EAAese,KAAOO,KACjEN,IAAM,EAAGF,IAAMC,KAAO3e,GAAKC,IAAM,IACjC4e,KAAY,EAALM,IAAUjjB,cAA8BsiB,KAArBW,IAAO9e,GAAK,GAAK,EAAeoe,KAAOU,KACjEN,IAAM,EAAGL,IAAMC,KAAOze,GAAKC,IAAM,GAGxC,IAAId,IAAMvrB,GAAKgO,IAAI48B,KACfpf,IAAMxrB,GAAKiO,IAAI28B,KACf7c,IAAMhuB,GAAKiO,IAAI+8B,KACf/c,IAAMjuB,GAAKkO,IAAI88B,KAGnB,GAAIrd,GAAKpF,aAAS,CAChB,IAIIkjB,GAJA3d,IAAM7tB,GAAKgO,IAAI68B,KACf/c,IAAM9tB,GAAKiO,IAAI48B,KACf5c,IAAMluB,GAAKiO,IAAI88B,KACf5c,IAAMnuB,GAAKkO,IAAI68B,KAInB,GAAIpe,GAAKvC,UAAOqhB,GAlIxB,SAASC,UAAU/yB,GAAI0S,GAAIzS,GAAIoS,GAAIE,GAAIC,GAAIwgB,GAAIC,IAC7C,IAAI5d,IAAMpV,GAAKD,GAAIsV,IAAMjD,GAAKK,GAC1BwgB,IAAMF,GAAKzgB,GAAI4gB,IAAMF,GAAKzgB,GAC1BvjD,EAAIkkE,IAAM9d,IAAM6d,IAAM5d,IAC1B,KAAIrmD,EAAIA,EAAI2gD,cAEZ,OAAQ5P,IADR/wC,GAAKikE,KAAOxgB,GAAKF,IAAM2gB,KAAOnzB,GAAKuS,KAAOtjD,GACzBomD,IAAK3C,GAAKzjD,EAAIqmD,KA4HJyd,CAAUlgB,IAAKC,IAAKyC,IAAKC,IAAKL,IAAKC,IAAKC,IAAKC,MAAO,CACvE,IAAI0K,GAAKnN,IAAMigB,GAAG,GACd7S,GAAKnN,IAAMggB,GAAG,GACdpR,GAAKvM,IAAM2d,GAAG,GACdnR,GAAKvM,IAAM0d,GAAG,GACdM,GAAK,EAAI79B,IDlJhB,SAAS+d,KAAKnlC,GACnB,OAAOA,EAAI,EAAI,EAAIA,GAAK,EAAIsjC,QAAKx7C,KAAKq9C,KAAKnlC,GCiJlBmlC,EAAM0M,GAAK0B,GAAKzB,GAAK0B,KAAOthD,UAAK2/C,GAAKA,GAAKC,GAAKA,IAAM5/C,UAAKqhD,GAAKA,GAAKC,GAAKA,MAAQ,GAC/F0R,GAAKhzD,UAAKyyD,GAAG,GAAKA,GAAG,GAAKA,GAAG,GAAKA,GAAG,IACzCJ,IAAMvyD,SAAI60C,IAAK3tB,GAAKgsC,KAAOD,GAAK,IAChCT,IAAMxyD,SAAI60C,IAAK1tB,GAAK+rC,KAAOD,GAAK,KAK9Bb,IAAM3iB,aAGH+iB,IAAM/iB,cACbtb,GAAKygB,eAAeQ,IAAKC,IAAK3C,IAAKC,IAAKxrB,GAAIqrC,IAAK5e,IACjDxf,GAAKwgB,eAAeI,IAAKC,IAAKC,IAAKC,IAAKhuB,GAAIqrC,IAAK5e,IAEjD99B,QAAQg8B,OAAO3d,GAAG4hB,GAAK5hB,GAAGue,IAAKve,GAAG6hB,GAAK7hB,GAAGwe,KAGtC6f,IAAM3d,GAAI/+B,QAAQw9B,IAAInf,GAAG4hB,GAAI5hB,GAAG6hB,GAAIwc,IAAKv9B,MAAMd,GAAGwe,IAAKxe,GAAGue,KAAMzd,MAAMb,GAAGue,IAAKve,GAAGse,MAAOkB,KAI1F99B,QAAQw9B,IAAInf,GAAG4hB,GAAI5hB,GAAG6hB,GAAIwc,IAAKv9B,MAAMd,GAAGwe,IAAKxe,GAAGue,KAAMzd,MAAMd,GAAG8gB,IAAK9gB,GAAG6gB,MAAOpB,IAC9E99B,QAAQw9B,IAAI,EAAG,EAAGnsB,GAAI8N,MAAMd,GAAG6hB,GAAK7hB,GAAG8gB,IAAK9gB,GAAG4hB,GAAK5hB,GAAG6gB,KAAM/f,MAAMb,GAAG4hB,GAAK5hB,GAAG6gB,IAAK7gB,GAAG2hB,GAAK3hB,GAAG4gB,MAAOpB,IACrG99B,QAAQw9B,IAAIlf,GAAG2hB,GAAI3hB,GAAG4hB,GAAIwc,IAAKv9B,MAAMb,GAAG6gB,IAAK7gB,GAAG4gB,KAAM/f,MAAMb,GAAGue,IAAKve,GAAGse,MAAOkB,OAK7E99B,QAAQg8B,OAAOY,IAAKC,KAAM78B,QAAQw9B,IAAI,EAAG,EAAGnsB,GAAI4qC,IAAKC,KAAMpe,KArB1C99B,QAAQg8B,OAAOY,IAAKC,KAyBpCzrB,GAAKuoB,cAAc0iB,IAAM1iB,aAGtB8iB,IAAM9iB,cACbtb,GAAKygB,eAAeM,IAAKC,IAAKH,IAAKC,IAAK/tB,IAAKqrC,IAAK3e,IAClDxf,GAAKwgB,eAAelC,IAAKC,IAAKyC,IAAKC,IAAKnuB,IAAKqrC,IAAK3e,IAElD99B,QAAQk8B,OAAO7d,GAAG4hB,GAAK5hB,GAAGue,IAAKve,GAAG6hB,GAAK7hB,GAAGwe,KAGtC4f,IAAM1d,GAAI/+B,QAAQw9B,IAAInf,GAAG4hB,GAAI5hB,GAAG6hB,GAAIuc,IAAKt9B,MAAMd,GAAGwe,IAAKxe,GAAGue,KAAMzd,MAAMb,GAAGue,IAAKve,GAAGse,MAAOkB,KAI1F99B,QAAQw9B,IAAInf,GAAG4hB,GAAI5hB,GAAG6hB,GAAIuc,IAAKt9B,MAAMd,GAAGwe,IAAKxe,GAAGue,KAAMzd,MAAMd,GAAG8gB,IAAK9gB,GAAG6gB,MAAOpB,IAC9E99B,QAAQw9B,IAAI,EAAG,EAAGpsB,GAAI+N,MAAMd,GAAG6hB,GAAK7hB,GAAG8gB,IAAK9gB,GAAG4hB,GAAK5hB,GAAG6gB,KAAM/f,MAAMb,GAAG4hB,GAAK5hB,GAAG6gB,IAAK7gB,GAAG2hB,GAAK3hB,GAAG4gB,KAAMpB,IACpG99B,QAAQw9B,IAAIlf,GAAG2hB,GAAI3hB,GAAG4hB,GAAIuc,IAAKt9B,MAAMb,GAAG6gB,IAAK7gB,GAAG4gB,KAAM/f,MAAMb,GAAGue,IAAKve,GAAGse,MAAOkB,MAK7E99B,QAAQw9B,IAAI,EAAG,EAAGpsB,GAAIgrC,IAAKD,IAAKre,IArBI99B,QAAQk8B,OAAOkD,IAAKC,UA1F1Cr/B,QAAQg8B,OAAO,EAAG,GAoHvC,GAFAh8B,QAAQi8B,YAEJiF,OAAQ,OAAOlhC,QAAU,KAAMkhC,OAAS,IAAM,KAyCpD,OAtCA1D,IAAI6f,SAAW,WACb,IAAIzkE,IAAMylD,YAAYhkD,MAAM2C,KAAMkE,aAAcq9C,YAAYlkD,MAAM2C,KAAMkE,YAAc,EAClF3G,IAAMkkD,WAAWpkD,MAAM2C,KAAMkE,aAAcy9C,SAAStkD,MAAM2C,KAAMkE,YAAc,EAAIs6C,QAAK,EAC3F,OAAQnc,IAAI9kC,GAAK3B,EAAG0mC,IAAI/kC,GAAK3B,IAG/B4kD,IAAIa,YAAc,SAASr7C,GACzB,OAAO9B,UAAU7C,QAAUggD,YAA2B,mBAANr7C,EAAmBA,EAAIw9B,uBAAUx9B,GAAIw6C,KAAOa,aAG9Fb,IAAIe,YAAc,SAASv7C,GACzB,OAAO9B,UAAU7C,QAAUkgD,YAA2B,mBAANv7C,EAAmBA,EAAIw9B,uBAAUx9B,GAAIw6C,KAAOe,aAG9Ff,IAAIue,aAAe,SAAS/4D,GAC1B,OAAO9B,UAAU7C,QAAU09D,aAA4B,mBAAN/4D,EAAmBA,EAAIw9B,uBAAUx9B,GAAIw6C,KAAOue,cAG/Fve,IAAIwe,UAAY,SAASh5D,GACvB,OAAO9B,UAAU7C,QAAU29D,UAAiB,MAALh5D,EAAY,KAAoB,mBAANA,EAAmBA,EAAIw9B,uBAAUx9B,GAAIw6C,KAAOwe,WAG/Gxe,IAAIiB,WAAa,SAASz7C,GACxB,OAAO9B,UAAU7C,QAAUogD,WAA0B,mBAANz7C,EAAmBA,EAAIw9B,uBAAUx9B,GAAIw6C,KAAOiB,YAG7FjB,IAAImB,SAAW,SAAS37C,GACtB,OAAO9B,UAAU7C,QAAUsgD,SAAwB,mBAAN37C,EAAmBA,EAAIw9B,uBAAUx9B,GAAIw6C,KAAOmB,UAG3FnB,IAAIqB,SAAW,SAAS77C,GACtB,OAAO9B,UAAU7C,QAAUwgD,SAAwB,mBAAN77C,EAAmBA,EAAIw9B,uBAAUx9B,GAAIw6C,KAAOqB,UAG3FrB,IAAIx9B,QAAU,SAAShd,GACrB,OAAO9B,UAAU7C,QAAW2hB,QAAe,MAALhd,EAAY,KAAOA,EAAIw6C,KAAOx9B,SAG/Dw9B,KqDy5BLjuB,eAGE+tC,QACF5sC,KAAM6sC,MAGJC,gBAAkB,SAAlBA,gBAAmBC,QAGrB,IADA,IAAIC,SADJD,OAASA,OAAOx0D,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAIoF,KACd,GAAK89D,OAAO,GACxB3lE,EAAI,EAAGA,EAAI2lE,OAAOp/D,OAAQvG,IAC/B4lE,QAAU19D,KAAKkK,IAAIwzD,QAASD,OAAO3lE,GAAK2lE,OAAO3lE,EAAI,IAGvD,OAAO4lE,SAGLC,aACFryB,YAAa,yBACbG,OAAQ,sBACRC,OAAQ,mBACRC,KAAM,mBACNC,IAAK,gBACLY,MAAO,QACPE,KAAM,MAGJkxB,gBACD,cAAe,SAAU,SAAU,OAAQ,MAAO,QAAS,SAC3D,EAAG,IAAM,IAAO,KAAS,MAAU,OAAY,UAQ9CC,4BAAiB,SAAjBA,eAAkB9kE,MAAO+wC,UAC3B,IAAMg0B,gBANiB,SAArBC,mBAAsBj0B,UACxB,IAAMprC,MAAQ6yB,+BAAkBqsC,cAAc,GAAI9zB,UAClD,OAAO8zB,cAAc,GAAGl/D,OAIAq/D,CAAmBj0B,UAC3C,OAAOzvB,iCAAkB7Y,SAASzI,MAAO4kE,YAAYG,mBAiCnDE,gBANgBtmE,OAAOqwB,uBAAyBrwB,OAAOswB,6BACzDtwB,OAAOuwB,0BAA4BvwB,OAAOwwB,wBAA0BxwB,OAAOywB,wBAKxD,SAAjB61C,eAAiBlrD,QAAM,OAAI,SAAC09C,KAC9B,OAAIA,eAAeh2C,kBACRg2C,OAAO19C,OAASA,OAAO09C,KAAvB,GAAAluD,OAAiCkuD,KAErCA,OAGLyN,4CAAiC,SAAjCA,+BAAkCvF,WAAoC,QAAAwF,MAAAh9D,UAAA7C,OAAtB8/D,kBAAsB,IAAA57D,MAAA27D,MAAA,EAAAA,MAAA,KAAAE,MAAA,EAAAA,MAAAF,MAAAE,QAAtBD,kBAAsBC,MAAA,GAAAl9D,UAAAk9D,OACxE,IAAMC,oBACN,GAAI3F,qBAAqBzG,oBAAW,CAChC,IAAMqM,eAAWh8D,OAAAqwD,+BAAO+F,UAAUhlD,iBAAiB2B,WAAlCs9C,+BAAgD+F,UAAU6F,yBAAyBlpD,YAC9FmpD,gBAAkBvN,aACpBiF,WAAWoI,YAAYjnD,KAAK,SAAAonD,MAAI,OAAIA,KAAKxtD,KAAOmJ,8BAAetU,UAAU,gBAEvE44D,SAAWhG,UAAUhyD,gBAAgB7C,cAC3Cs6D,kBAAoBA,kBAAkB9/D,OAAS8/D,kBAAoB3lE,OAAO4I,KAAKs9D,WAC7Dh8D,QAAQ,SAACi8D,aACvB,GAAIH,gBAAgBG,aAChBN,iBAAiBM,aAAeH,gBAAgBG,iBAC7C,CACH,IAAMC,aAAeF,SAASC,aAC1BC,eACAP,iBAAiBM,aAAeC,aAAa1xD,eAK7D,OAAOmxD,kBAGLQ,yBAA2B,SAA3BA,yBAA4BC,GAAIC,WAAL,OAAmBD,GAAGp4D,gBAAgB/C,YAAYo7D,WAAWtzD,eAiBxFuzD,cAAYvF,gBAAAwF,iB5DzwCkB,M4D0wCR,SAACC,SAAUC,WAAX,OAAyBD,SAASE,cAAcD,aAD1D1F,gBAAAwF,c5DxwCmB,O4D0wCR,SAACC,SAAUC,WAAX,OAAyBA,UAAUC,cAAcF,YAF5DD,eAwBZnC,uBAAY,SAAZA,UAAavJ,KAAM6D,MAAuC,IAAAiI,WAAAlM,eAAAjyD,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,IAApB,SAAAU,GAAC,OAAIA,GAAG,SAAAA,GAAC,OAAIA,IAAO,GACrD09D,IADqDD,WAAA,GAChDE,IADgDF,WAAA,GAEtDv3D,IAAM,IAAIsE,IAAIgrD,KAAKp1D,IAAI,SAAAJ,GAAC,OAAI29D,IAAI39D,MACtC,OAAO2xD,KAAK3qD,OAAO,SAAA7P,OAAK,OAAI+O,IAAID,IAAIy3D,IAAIvmE,WU9yCjCymE,MAAQ,+BAEJC,gBACb1zC,IAAK,6BACLyzC,MAAOA,MACPE,MAAO,+BACPC,IAAK,uCACLC,MAAO,iCCLMC,cAAA,SAASxnE,MACtB,IAAIwwC,OAASxwC,MAAQ,GAAIP,EAAI+wC,OAAOxnC,QAAQ,KAE5C,OADIvJ,GAAK,GAAqC,WAA/B+wC,OAASxwC,KAAK+P,MAAM,EAAGtQ,MAAiBO,KAAOA,KAAK+P,MAAMtQ,EAAI,IACtEgoE,eAAWjmE,eAAegvC,SAAWk3B,MAAOD,eAAWj3B,QAASm3B,MAAO3nE,MAAQA,MCczE,IAAA4nE,QAAA,SAAS5nE,MACtB,IAAI6nE,SAAWC,cAAU9nE,MACzB,OAAQ6nE,SAASF,MARnB,SAASI,aAAaF,UACpB,OAAO,WACL,OAAOljE,KAAKqjE,cAAcn0C,gBAAgBg0C,SAASH,MAAOG,SAASF,SAZvE,SAASM,eAAejoE,MACtB,OAAO,WACL,IAAIkjB,SAAWve,KAAKqjE,cAChBE,IAAMvjE,KAAKwjE,aACf,OAAOD,MAAQf,OAASjkD,SAASwoB,gBAAgBy8B,eAAiBhB,MAC5DjkD,SAASyJ,cAAc3sB,MACvBkjB,SAAS2Q,gBAAgBq0C,IAAKloE,SAchB6nE,WCvBxB,SAASpZ,iBAEM,IAAA2Z,aAAA,SAASC,UACtB,OAAmB,MAAZA,SAAmB5Z,cAAO,WAC/B,OAAO9pD,KAAK2jE,cAAcD,YCJ9B,SAASvxC,oBACP,SAGa,IAAAyxC,YAAA,SAASF,UACtB,OAAmB,MAAZA,SAAmBvxC,kBAAQ,WAChC,OAAOnyB,KAAK6jE,iBAAiBH,YCNlBI,QAAA,SAASJ,UACtB,OAAO,WACL,OAAO1jE,KAAK+jE,QAAQL,YCFTM,OAAA,SAASl2C,QACtB,OAAO,IAAIvoB,MAAMuoB,OAAOzsB,SCMnB,SAAS4iE,UAAUjvC,OAAQkvC,OAChClkE,KAAKqjE,cAAgBruC,OAAOquC,cAC5BrjE,KAAKwjE,aAAexuC,OAAOwuC,aAC3BxjE,KAAKmkE,MAAQ,KACbnkE,KAAKiY,QAAU+c,OACfh1B,KAAKokE,SAAWF,MAGlBD,UAAUrnE,WACRgJ,YAAaq+D,UACb55C,YAAa,SAAAA,YAASg6C,OAAS,OAAOrkE,KAAKiY,QAAQ8P,aAAas8C,MAAOrkE,KAAKmkE,QAC5Ep8C,aAAc,SAAAA,aAASs8C,MAAO95D,MAAQ,OAAOvK,KAAKiY,QAAQ8P,aAAas8C,MAAO95D,OAC9Eo5D,cAAe,SAAAA,cAASD,UAAY,OAAO1jE,KAAKiY,QAAQ0rD,cAAcD,WACtEG,iBAAkB,SAAAA,iBAASH,UAAY,OAAO1jE,KAAKiY,QAAQ4rD,iBAAiBH,YCpB/D,ICIXY,UAAY,IAEhB,SAASC,UAAUvvC,OAAQ+V,MAAOiT,MAAOlwB,OAAQgwB,KAAMt3C,MASrD,IARA,IACIsc,KADAhoB,EAAI,EAEJ0pE,YAAcz5B,MAAM1pC,OACpBojE,WAAaj+D,KAAKnF,OAKfvG,EAAI2pE,aAAc3pE,GACnBgoB,KAAOioB,MAAMjwC,KACfgoB,KAAKshD,SAAW59D,KAAK1L,GACrBgzB,OAAOhzB,GAAKgoB,MAEZk7B,MAAMljD,GAAK,IAAImpE,UAAUjvC,OAAQxuB,KAAK1L,IAK1C,KAAOA,EAAI0pE,cAAe1pE,GACpBgoB,KAAOioB,MAAMjwC,MACfgjD,KAAKhjD,GAAKgoB,MAKhB,SAAS4hD,QAAQ1vC,OAAQ+V,MAAOiT,MAAOlwB,OAAQgwB,KAAMt3C,KAAMnK,KACzD,IAAIvB,EACAgoB,KAKA8P,SAJA+xC,kBACAH,YAAcz5B,MAAM1pC,OACpBojE,WAAaj+D,KAAKnF,OAClBujE,UAAY,IAAIr/D,MAAMi/D,aAK1B,IAAK1pE,EAAI,EAAGA,EAAI0pE,cAAe1pE,GACzBgoB,KAAOioB,MAAMjwC,MACf8pE,UAAU9pE,GAAK83B,SAAW0xC,UAAYjoE,IAAIpB,KAAK6nB,KAAMA,KAAKshD,SAAUtpE,EAAGiwC,OACnEnY,YAAY+xC,eACd7mB,KAAKhjD,GAAKgoB,KAEV6hD,eAAe/xC,UAAY9P,MAQjC,IAAKhoB,EAAI,EAAGA,EAAI2pE,aAAc3pE,GAExBgoB,KAAO6hD,eADX/xC,SAAW0xC,UAAYjoE,IAAIpB,KAAK+5B,OAAQxuB,KAAK1L,GAAIA,EAAG0L,SAElDsnB,OAAOhzB,GAAKgoB,KACZA,KAAKshD,SAAW59D,KAAK1L,GACrB6pE,eAAe/xC,UAAY,MAE3BorB,MAAMljD,GAAK,IAAImpE,UAAUjvC,OAAQxuB,KAAK1L,IAK1C,IAAKA,EAAI,EAAGA,EAAI0pE,cAAe1pE,GACxBgoB,KAAOioB,MAAMjwC,KAAQ6pE,eAAeC,UAAU9pE,MAAQgoB,OACzDg7B,KAAKhjD,GAAKgoB,MClDhB,SAASgN,eAAUvyB,EAAGoF,GACpB,OAAOpF,EAAIoF,GAAK,EAAIpF,EAAIoF,EAAI,EAAIpF,GAAKoF,EAAI,EAAIotB,ICoBhC,IC1CA80C,WAAA,SAAS/hD,MACtB,OAAQA,KAAKugD,eAAiBvgD,KAAKugD,cAAcr8B,aACzClkB,KAAKvE,UAAYuE,MAClBA,KAAKkkB,aC4BP,SAAS89B,WAAWhiD,KAAMznB,MAC/B,OAAOynB,KAAK5C,MAAMinB,iBAAiB9rC,OAC5B2rC,WAAYlkB,MAAMokB,iBAAiBpkB,KAAM,MAAMqkB,iBAAiB9rC,MCjCzE,SAAS0pE,WAAW1/B,QAClB,OAAOA,OAAO10B,OAAO5I,MAAM,SAG7B,SAASi9D,UAAUliD,MACjB,OAAOA,KAAKkiD,WAAa,IAAIC,UAAUniD,MAGzC,SAASmiD,UAAUniD,MACjB9iB,KAAKklE,MAAQpiD,KACb9iB,KAAKmlE,OAASJ,WAAWjiD,KAAKw7B,aAAa,UAAY,IAuBzD,SAAS8mB,WAAWtiD,KAAMkvB,OAExB,IADA,IAAIqzB,KAAOL,UAAUliD,MAAOhoB,GAAK,EAAGyB,EAAIy1C,MAAM3wC,SACrCvG,EAAIyB,GAAG8oE,KAAKh2D,IAAI2iC,MAAMl3C,IAGjC,SAASwqE,cAAcxiD,KAAMkvB,OAE3B,IADA,IAAIqzB,KAAOL,UAAUliD,MAAOhoB,GAAK,EAAGyB,EAAIy1C,MAAM3wC,SACrCvG,EAAIyB,GAAG8oE,KAAKpzC,OAAO+f,MAAMl3C,IA3BpCmqE,UAAUroE,WACRyS,IAAK,SAAAA,IAAShU,MACJ2E,KAAKmlE,OAAO9gE,QAAQhJ,MACpB,IACN2E,KAAKmlE,OAAO7gE,KAAKjJ,MACjB2E,KAAKklE,MAAM56C,aAAa,QAAStqB,KAAKmlE,OAAO5iE,KAAK,QAGtD0vB,OAAQ,SAAAA,OAAS52B,MACf,IAAIP,EAAIkF,KAAKmlE,OAAO9gE,QAAQhJ,MACxBP,GAAK,IACPkF,KAAKmlE,OAAOtgE,OAAO/J,EAAG,GACtBkF,KAAKklE,MAAM56C,aAAa,QAAStqB,KAAKmlE,OAAO5iE,KAAK,QAGtDgjE,SAAU,SAAAA,SAASlqE,MACjB,OAAO2E,KAAKmlE,OAAO9gE,QAAQhJ,OAAS,IC7BxC,SAASmqE,aACPxlE,KAAKyiB,YAAc,GCDrB,SAASgjD,aACPzlE,KAAK2f,UAAY,GCDnB,SAASguB,cACH3tC,KAAK0lE,aAAa1lE,KAAK8nB,WAAWuC,YAAYrqB,MCDpD,SAAS2lE,QACH3lE,KAAK4lE,iBAAiB5lE,KAAK8nB,WAAWC,aAAa/nB,KAAMA,KAAK8nB,WAAW+9C,YCE/E,SAASC,eACP,OAAO,KCJT,SAAS7zC,gBACP,IAAI+C,OAASh1B,KAAK8nB,WACdkN,QAAQA,OAAO9b,YAAYlZ,MCFjC,SAAS+lE,yBACP,OAAO/lE,KAAK8nB,WAAWC,aAAa/nB,KAAKgmE,WAAU,GAAQhmE,KAAK0lE,aAGlE,SAASO,sBACP,OAAOjmE,KAAK8nB,WAAWC,aAAa/nB,KAAKgmE,WAAU,GAAOhmE,KAAK0lE,aAGlD,ICRXQ,gBAEOC,SAAQ,KAEK,oBAAb5nD,WAEH,iBADQA,SAASwoB,kBAErBm/B,cAAgBE,WAAY,YAAaC,WAAY,cAIzD,SAASC,sBAAsBC,SAAU7kE,MAAOqpC,OAE9C,OADAw7B,SAAWC,gBAAgBD,SAAU7kE,MAAOqpC,OACrC,SAASo7B,OACd,IAAIM,QAAUN,MAAMO,cACfD,UAAYA,UAAYzmE,MAAkD,EAAxCymE,QAAQE,wBAAwB3mE,QACrEumE,SAAStrE,KAAK+E,KAAMmmE,QAK1B,SAASK,gBAAgBD,SAAU7kE,MAAOqpC,OACxC,OAAO,SAAS67B,QACd,IAAIC,OAASV,SACbA,SAAQS,OACR,IACEL,SAAStrE,KAAK+E,KAAMA,KAAKokE,SAAU1iE,MAAOqpC,OAD5C,QAGEo7B,SAAQU,SAad,SAASC,SAASC,UAChB,OAAO,WACL,IAAI58D,GAAKnK,KAAKgnE,KACd,GAAK78D,GAAL,CACA,IAAK,IAAkC5O,EAA9B8K,EAAI,EAAGvL,GAAK,EAAGI,EAAIiP,GAAG9I,OAAWgF,EAAInL,IAAKmL,EAC7C9K,EAAI4O,GAAG9D,GAAM0gE,SAAS//D,MAAQzL,EAAEyL,OAAS+/D,SAAS//D,MAASzL,EAAEF,OAAS0rE,SAAS1rE,KAGjF8O,KAAKrP,GAAKS,EAFVyE,KAAKinE,oBAAoB1rE,EAAEyL,KAAMzL,EAAEgrE,SAAUhrE,EAAE2rE,WAK7CpsE,EAAGqP,GAAG9I,OAASvG,SACTkF,KAAKgnE,OAIrB,SAASG,MAAMJ,SAAUhrE,MAAOmrE,SAC9B,IAAIE,KAAOlB,aAAarpE,eAAekqE,SAAS//D,MAAQs/D,sBAAwBE,gBAChF,OAAO,SAASprE,EAAGN,EAAGiwC,OACpB,IAAoBxvC,EAAhB4O,GAAKnK,KAAKgnE,KAAST,SAAWa,KAAKrrE,MAAOjB,EAAGiwC,OACjD,GAAI5gC,GAAI,IAAK,IAAI9D,EAAI,EAAGnL,EAAIiP,GAAG9I,OAAQgF,EAAInL,IAAKmL,EAC9C,IAAK9K,EAAI4O,GAAG9D,IAAIW,OAAS+/D,SAAS//D,MAAQzL,EAAEF,OAAS0rE,SAAS1rE,KAI5D,OAHA2E,KAAKinE,oBAAoB1rE,EAAEyL,KAAMzL,EAAEgrE,SAAUhrE,EAAE2rE,SAC/ClnE,KAAKqnE,iBAAiB9rE,EAAEyL,KAAMzL,EAAEgrE,SAAWA,SAAUhrE,EAAE2rE,QAAUA,cACjE3rE,EAAEQ,MAAQA,OAIdiE,KAAKqnE,iBAAiBN,SAAS//D,KAAMu/D,SAAUW,SAC/C3rE,GAAKyL,KAAM+/D,SAAS//D,KAAM3L,KAAM0rE,SAAS1rE,KAAMU,MAAOA,MAAOwqE,SAAUA,SAAUW,QAASA,SACrF/8D,GACAA,GAAG7F,KAAK/I,GADJyE,KAAKgnE,MAAQzrE,IA0BnB,SAAS+rE,YAAYV,OAAQL,SAAUrgB,KAAMqhB,MAClD,IAAIV,OAASV,SACbS,OAAOY,YAAcrB,SACrBA,SAAQS,OACR,IACE,OAAOL,SAASlpE,MAAM6oD,KAAMqhB,MAD9B,QAGEpB,SAAQU,QCtGZ,SAASY,cAAc3kD,KAAM9b,KAAM4P,QACjC,IAAIlc,OAASssC,WAAYlkB,MACrBqjD,MAAQzrE,OAAOgtE,YAEE,mBAAVvB,MACTA,MAAQ,IAAIA,MAAMn/D,KAAM4P,SAExBuvD,MAAQzrE,OAAO6jB,SAASopD,YAAY,SAChC/wD,QAAQuvD,MAAMyB,UAAU5gE,KAAM4P,OAAOixD,QAASjxD,OAAOkxD,YAAa3B,MAAM4B,OAASnxD,OAAOmxD,QACvF5B,MAAMyB,UAAU5gE,MAAM,GAAO,IAGpC8b,KAAK2kD,cAActB,OAeN,ICGJ/rE,gBAAQ,MAEZ,SAAS24D,wBAAUiV,OAAQC,SAChCjoE,KAAKkoE,QAAUF,OACfhoE,KAAKmoE,SAAWF,QAGlB,SAASvqB,sBACP,OAAO,IAAIqV,0BAAYx0C,SAASwoB,kBAAmB3sC,gBAGrD24D,wBAAUn2D,UAAY8gD,oBAAU9gD,WAC9BgJ,YAAamtD,wBACbr9C,OC1Ca,SAASA,QACA,mBAAXA,SAAuBA,OAASguD,aAAShuD,SAEpD,IAAK,IAAIsyD,OAAShoE,KAAKkoE,QAAShtE,EAAI8sE,OAAO3mE,OAAQ+mE,UAAY,IAAI7iE,MAAMrK,GAAImL,EAAI,EAAGA,EAAInL,IAAKmL,EAC3F,IAAK,IAAiFyc,KAAMulD,QAAnFt9B,MAAQi9B,OAAO3hE,GAAI9J,EAAIwuC,MAAM1pC,OAAQinE,SAAWF,UAAU/hE,GAAK,IAAId,MAAMhJ,GAAmBzB,EAAI,EAAGA,EAAIyB,IAAKzB,GAC9GgoB,KAAOioB,MAAMjwC,MAAQutE,QAAU3yD,OAAOza,KAAK6nB,KAAMA,KAAKshD,SAAUtpE,EAAGiwC,UAClE,aAAcjoB,OAAMulD,QAAQjE,SAAWthD,KAAKshD,UAChDkE,SAASxtE,GAAKutE,SAKpB,OAAO,IAAItV,wBAAUqV,UAAWpoE,KAAKmoE,WD+BrCxqB,UE3Ca,SAASjoC,QACA,mBAAXA,SAAuBA,OAASkuD,YAAYluD,SAEvD,IAAK,IAAIsyD,OAAShoE,KAAKkoE,QAAShtE,EAAI8sE,OAAO3mE,OAAQ+mE,aAAgBH,WAAc5hE,EAAI,EAAGA,EAAInL,IAAKmL,EAC/F,IAAK,IAAyCyc,KAArCioB,MAAQi9B,OAAO3hE,GAAI9J,EAAIwuC,MAAM1pC,OAAcvG,EAAI,EAAGA,EAAIyB,IAAKzB,GAC9DgoB,KAAOioB,MAAMjwC,MACfstE,UAAU9jE,KAAKoR,OAAOza,KAAK6nB,KAAMA,KAAKshD,SAAUtpE,EAAGiwC,QACnDk9B,QAAQ3jE,KAAKwe,OAKnB,OAAO,IAAIiwC,wBAAUqV,UAAWH,UFgChCr8D,OG5Ca,SAAS3G,OACD,mBAAVA,QAAsBA,MAAQ6+D,QAAQ7+D,QAEjD,IAAK,IAAI+iE,OAAShoE,KAAKkoE,QAAShtE,EAAI8sE,OAAO3mE,OAAQ+mE,UAAY,IAAI7iE,MAAMrK,GAAImL,EAAI,EAAGA,EAAInL,IAAKmL,EAC3F,IAAK,IAAuEyc,KAAnEioB,MAAQi9B,OAAO3hE,GAAI9J,EAAIwuC,MAAM1pC,OAAQinE,SAAWF,UAAU/hE,MAAevL,EAAI,EAAGA,EAAIyB,IAAKzB,GAC3FgoB,KAAOioB,MAAMjwC,KAAOmK,MAAMhK,KAAK6nB,KAAMA,KAAKshD,SAAUtpE,EAAGiwC,QAC1Du9B,SAAShkE,KAAKwe,MAKpB,OAAO,IAAIiwC,wBAAUqV,UAAWpoE,KAAKmoE,WHkCrC3hE,Kf4Ba,SAASzK,MAAOM,KAC7B,IAAKN,MAGH,OAFAyK,KAAO,IAAIjB,MAAMvF,KAAK8gB,QAASza,GAAK,EACpCrG,KAAKgyB,KAAK,SAAS52B,GAAKoL,OAAOH,GAAKjL,IAC7BoL,KAGT,IAAIlK,KAAOD,IAAMqoE,QAAUH,UACvB0D,QAAUjoE,KAAKmoE,SACfH,OAAShoE,KAAKkoE,QAEG,mBAAVnsE,QAAsBA,MDvFpB,SAASmf,GACtB,OAAO,WACL,OAAOA,GCqFgCsoB,CAASznC,QAElD,IAAK,IAAIb,EAAI8sE,OAAO3mE,OAAQysB,OAAS,IAAIvoB,MAAMrK,GAAI8iD,MAAQ,IAAIz4C,MAAMrK,GAAI4iD,KAAO,IAAIv4C,MAAMrK,GAAImL,EAAI,EAAGA,EAAInL,IAAKmL,EAAG,CAC/G,IAAI2uB,OAASizC,QAAQ5hE,GACjB0kC,MAAQi9B,OAAO3hE,GACfm+D,YAAcz5B,MAAM1pC,OACpBmF,KAAOzK,MAAMd,KAAK+5B,OAAQA,QAAUA,OAAOovC,SAAU/9D,EAAG4hE,SACxDxD,WAAaj+D,KAAKnF,OAClBknE,WAAavqB,MAAM33C,GAAK,IAAId,MAAMk/D,YAClC+D,YAAc16C,OAAOznB,GAAK,IAAId,MAAMk/D,YAGxCnoE,KAAK04B,OAAQ+V,MAAOw9B,WAAYC,YAFhB1qB,KAAKz3C,GAAK,IAAId,MAAMi/D,aAEoBh+D,KAAMnK,KAK9D,IAAK,IAAoBgyC,SAAU9jC,KAA1BunB,GAAK,EAAGsY,GAAK,EAAmBtY,GAAK2yC,aAAc3yC,GAC1D,GAAIuc,SAAWk6B,WAAWz2C,IAAK,CAE7B,IADIA,IAAMsY,KAAIA,GAAKtY,GAAK,KACfvnB,KAAOi+D,YAAYp+B,QAAUA,GAAKq6B,aAC3Cp2B,SAAS81B,MAAQ55D,MAAQ,MAQ/B,OAHAujB,OAAS,IAAIilC,wBAAUjlC,OAAQm6C,UACxBQ,OAASzqB,MAChBlwB,OAAO46C,MAAQ5qB,KACRhwB,QenEPkwB,MjB9Ca,WACb,OAAO,IAAI+U,wBAAU/yD,KAAKyoE,QAAUzoE,KAAKkoE,QAAQljE,IAAIg/D,QAAShkE,KAAKmoE,WiB8CnErqB,KI/Ca,WACb,OAAO,IAAIiV,wBAAU/yD,KAAK0oE,OAAS1oE,KAAKkoE,QAAQljE,IAAIg/D,QAAShkE,KAAKmoE,WJ+ClE5lE,KKnDa,SAASomE,QAASC,SAAUC,QACzC,IAAI7qB,MAAQh+C,KAAKg+C,QAASlwB,OAAS9tB,KAAM89C,KAAO99C,KAAK89C,OAIrD,OAHAE,MAA2B,mBAAZ2qB,QAAyBA,QAAQ3qB,OAASA,MAAMvwB,OAAOk7C,QAAU,IAChE,MAAZC,WAAkB96C,OAAS86C,SAAS96C,SAC1B,MAAV+6C,OAAgB/qB,KAAK7rB,SAAe42C,OAAO/qB,MACxCE,OAASlwB,OAASkwB,MAAMG,MAAMrwB,QAAQvU,QAAUuU,QL+CvDqwB,MMlDa,SAAST,WAEtB,IAAK,IAAIorB,QAAU9oE,KAAKkoE,QAASa,QAAUrrB,UAAUwqB,QAASc,GAAKF,QAAQznE,OAAQk/B,GAAKwoC,QAAQ1nE,OAAQnG,EAAI8H,KAAKkK,IAAI87D,GAAIzoC,IAAK0oC,OAAS,IAAI1jE,MAAMyjE,IAAK3iE,EAAI,EAAGA,EAAInL,IAAKmL,EACpK,IAAK,IAAmGyc,KAA/FomD,OAASJ,QAAQziE,GAAI8iE,OAASJ,QAAQ1iE,GAAI9J,EAAI2sE,OAAO7nE,OAAQ88C,MAAQ8qB,OAAO5iE,GAAK,IAAId,MAAMhJ,GAAUzB,EAAI,EAAGA,EAAIyB,IAAKzB,GACxHgoB,KAAOomD,OAAOpuE,IAAMquE,OAAOruE,MAC7BqjD,MAAMrjD,GAAKgoB,MAKjB,KAAOzc,EAAI2iE,KAAM3iE,EACf4iE,OAAO5iE,GAAKyiE,QAAQziE,GAGtB,OAAO,IAAI0sD,wBAAUkW,OAAQjpE,KAAKmoE,WNqClC5uD,MOrDa,WAEb,IAAK,IAAIyuD,OAAShoE,KAAKkoE,QAAS7hE,GAAK,EAAGnL,EAAI8sE,OAAO3mE,SAAUgF,EAAInL,GAC/D,IAAK,IAA8D4nB,KAA1DioB,MAAQi9B,OAAO3hE,GAAIvL,EAAIiwC,MAAM1pC,OAAS,EAAGkJ,KAAOwgC,MAAMjwC,KAAYA,GAAK,IAC1EgoB,KAAOioB,MAAMjwC,MACXyP,MAA6C,EAArCuY,KAAK6jD,wBAAwBp8D,OAAWA,KAAKud,WAAWC,aAAajF,KAAMvY,MACvFA,KAAOuY,MAKb,OAAO9iB,MP2CPiM,KdpDa,SAASgkB,SAGtB,SAASm5C,YAAY7rE,EAAGoF,GACtB,OAAOpF,GAAKoF,EAAIstB,QAAQ1yB,EAAE6mE,SAAUzhE,EAAEyhE,WAAa7mE,GAAKoF,EAHrDstB,UAASA,QAAUH,gBAMxB,IAAK,IAAIk4C,OAAShoE,KAAKkoE,QAAShtE,EAAI8sE,OAAO3mE,OAAQgoE,WAAa,IAAI9jE,MAAMrK,GAAImL,EAAI,EAAGA,EAAInL,IAAKmL,EAAG,CAC/F,IAAK,IAAmFyc,KAA/EioB,MAAQi9B,OAAO3hE,GAAI9J,EAAIwuC,MAAM1pC,OAAQioE,UAAYD,WAAWhjE,GAAK,IAAId,MAAMhJ,GAAUzB,EAAI,EAAGA,EAAIyB,IAAKzB,GACxGgoB,KAAOioB,MAAMjwC,MACfwuE,UAAUxuE,GAAKgoB,MAGnBwmD,UAAUr9D,KAAKm9D,aAGjB,OAAO,IAAIrW,wBAAUsW,WAAYrpE,KAAKmoE,UAAU5uD,ScqChDte,KQvDa,WACb,IAAI84D,SAAW7vD,UAAU,GAGzB,OAFAA,UAAU,GAAKlE,KACf+zD,SAAS12D,MAAM,KAAM6G,WACdlE,MRoDPupE,MSxDa,WACb,IAAIA,MAAQ,IAAIhkE,MAAMvF,KAAK8gB,QAAShmB,GAAK,EAEzC,OADAkF,KAAKgyB,KAAK,WAAau3C,QAAQzuE,GAAKkF,OAC7BupE,OTsDPzmD,KUzDa,WAEb,IAAK,IAAIklD,OAAShoE,KAAKkoE,QAAS7hE,EAAI,EAAGnL,EAAI8sE,OAAO3mE,OAAQgF,EAAInL,IAAKmL,EACjE,IAAK,IAAI0kC,MAAQi9B,OAAO3hE,GAAIvL,EAAI,EAAGyB,EAAIwuC,MAAM1pC,OAAQvG,EAAIyB,IAAKzB,EAAG,CAC/D,IAAIgoB,KAAOioB,MAAMjwC,GACjB,GAAIgoB,KAAM,OAAOA,KAIrB,OAAO,MViDPhC,KW1Da,WACb,IAAIA,KAAO,EAEX,OADA9gB,KAAKgyB,KAAK,aAAelR,OAClBA,MXwDPqR,MY3Da,WACb,OAAQnyB,KAAK8iB,QZ2DbkP,Ka5Da,SAAS+hC,UAEtB,IAAK,IAAIiU,OAAShoE,KAAKkoE,QAAS7hE,EAAI,EAAGnL,EAAI8sE,OAAO3mE,OAAQgF,EAAInL,IAAKmL,EACjE,IAAK,IAAgDyc,KAA5CioB,MAAQi9B,OAAO3hE,GAAIvL,EAAI,EAAGyB,EAAIwuC,MAAM1pC,OAAcvG,EAAIyB,IAAKzB,GAC9DgoB,KAAOioB,MAAMjwC,KAAIi5D,SAAS94D,KAAK6nB,KAAMA,KAAKshD,SAAUtpE,EAAGiwC,OAI/D,OAAO/qC,MbqDPi+C,KbnBa,SAAS5iD,KAAMU,OAC5B,IAAImnE,SAAWC,cAAU9nE,MAEzB,GAAI6I,UAAU7C,OAAS,EAAG,CACxB,IAAIyhB,KAAO9iB,KAAK8iB,OAChB,OAAOogD,SAASF,MACVlgD,KAAK0mD,eAAetG,SAASH,MAAOG,SAASF,OAC7ClgD,KAAKw7B,aAAa4kB,UAG1B,OAAOljE,KAAKgyB,MAAe,MAATj2B,MACXmnE,SAASF,MA7ClB,SAASyG,aAAavG,UACpB,OAAO,WACLljE,KAAK0pE,kBAAkBxG,SAASH,MAAOG,SAASF,SARpD,SAAS2G,WAAWtuE,MAClB,OAAO,WACL2E,KAAK4pE,gBAAgBvuE,QAiDgD,mBAAVU,MACtDmnE,SAASF,MApBlB,SAAS6G,eAAe3G,SAAUnnE,OAChC,OAAO,WACL,IAAI6I,EAAI7I,MAAMsB,MAAM2C,KAAMkE,WACjB,MAALU,EAAW5E,KAAK0pE,kBAAkBxG,SAASH,MAAOG,SAASF,OAC1DhjE,KAAKmvB,eAAe+zC,SAASH,MAAOG,SAASF,MAAOp+D,KAZ7D,SAASklE,aAAazuE,KAAMU,OAC1B,OAAO,WACL,IAAI6I,EAAI7I,MAAMsB,MAAM2C,KAAMkE,WACjB,MAALU,EAAW5E,KAAK4pE,gBAAgBvuE,MAC/B2E,KAAKsqB,aAAajvB,KAAMuJ,KAyBxBs+D,SAASF,MAnClB,SAAS+G,eAAe7G,SAAUnnE,OAChC,OAAO,WACLiE,KAAKmvB,eAAe+zC,SAASH,MAAOG,SAASF,MAAOjnE,SARxD,SAASiuE,aAAa3uE,KAAMU,OAC1B,OAAO,WACLiE,KAAKsqB,aAAajvB,KAAMU,UAuC+BmnE,SAAUnnE,SaOnEmkB,MXxCa,SAAS7kB,KAAMU,MAAOkuE,UACnC,OAAO/lE,UAAU7C,OAAS,EACpBrB,KAAKgyB,MAAe,MAATj2B,MAtBnB,SAASmuE,YAAY7uE,MACnB,OAAO,WACL2E,KAAKkgB,MAAMiqD,eAAe9uE,QAqBe,mBAAVU,MAXnC,SAASquE,cAAc/uE,KAAMU,MAAOkuE,UAClC,OAAO,WACL,IAAIrlE,EAAI7I,MAAMsB,MAAM2C,KAAMkE,WACjB,MAALU,EAAW5E,KAAKkgB,MAAMiqD,eAAe9uE,MACpC2E,KAAKkgB,MAAMmqD,YAAYhvE,KAAMuJ,EAAGqlE,YAVzC,SAASK,cAAcjvE,KAAMU,MAAOkuE,UAClC,OAAO,WACLjqE,KAAKkgB,MAAMmqD,YAAYhvE,KAAMU,MAAOkuE,aAiBX5uE,KAAMU,MAAmB,MAAZkuE,SAAmB,GAAKA,WAC1DnF,WAAW9kE,KAAK8iB,OAAQznB,OWmC9BsB,Sc3Ca,SAAStB,KAAMU,OAC5B,OAAOmI,UAAU7C,OAAS,EACpBrB,KAAKgyB,MAAe,MAATj2B,MAtBnB,SAASwuE,eAAelvE,MACtB,OAAO,kBACE2E,KAAK3E,QAqB8B,mBAAVU,MAXpC,SAASyuE,iBAAiBnvE,KAAMU,OAC9B,OAAO,WACL,IAAI6I,EAAI7I,MAAMsB,MAAM2C,KAAMkE,WACjB,MAALU,SAAkB5E,KAAK3E,MACtB2E,KAAK3E,MAAQuJ,IAVtB,SAAS6lE,iBAAiBpvE,KAAMU,OAC9B,OAAO,WACLiE,KAAK3E,MAAQU,SAiBaV,KAAMU,QAC5BiE,KAAK8iB,OAAOznB,OdsClBqvE,QVHa,SAASrvE,KAAMU,OAC5B,IAAIi2C,MAAQ+yB,WAAW1pE,KAAO,IAE9B,GAAI6I,UAAU7C,OAAS,EAAG,CAExB,IADA,IAAIgkE,KAAOL,UAAUhlE,KAAK8iB,QAAShoB,GAAK,EAAGyB,EAAIy1C,MAAM3wC,SAC5CvG,EAAIyB,GAAG,IAAK8oE,KAAKE,SAASvzB,MAAMl3C,IAAK,OAAO,EACrD,OAAO,EAGT,OAAOkF,KAAKgyB,MAAuB,mBAAVj2B,MAf3B,SAAS4uE,gBAAgB34B,MAAOj2C,OAC9B,OAAO,YACJA,MAAMsB,MAAM2C,KAAMkE,WAAakhE,WAAaE,eAAetlE,KAAMgyC,SAc5Cj2C,MA5B1B,SAAS6uE,YAAY54B,OACnB,OAAO,WACLozB,WAAWplE,KAAMgyC,SAIrB,SAAS64B,aAAa74B,OACpB,OAAO,WACLszB,cAActlE,KAAMgyC,UAsBFA,MAAOj2C,SUR3B2kB,KThDa,SAAS3kB,OACtB,OAAOmI,UAAU7C,OACXrB,KAAKgyB,KAAc,MAATj2B,MACNypE,YAA+B,mBAAVzpE,MAVjC,SAAS+uE,aAAa/uE,OACpB,OAAO,WACL,IAAI6I,EAAI7I,MAAMsB,MAAM2C,KAAMkE,WAC1BlE,KAAKyiB,YAAmB,MAAL7d,EAAY,GAAKA,IATxC,SAASmmE,aAAahvE,OACpB,OAAO,WACLiE,KAAKyiB,YAAc1mB,SAgBGA,QAClBiE,KAAK8iB,OAAOL,aS2ClBuoD,KRjDa,SAASjvE,OACtB,OAAOmI,UAAU7C,OACXrB,KAAKgyB,KAAc,MAATj2B,MACN0pE,YAA+B,mBAAV1pE,MAVjC,SAASkvE,aAAalvE,OACpB,OAAO,WACL,IAAI6I,EAAI7I,MAAMsB,MAAM2C,KAAMkE,WAC1BlE,KAAK2f,UAAiB,MAAL/a,EAAY,GAAKA,IATtC,SAASsmE,aAAanvE,OACpB,OAAO,WACLiE,KAAK2f,UAAY5jB,SAgBKA,QAClBiE,KAAK8iB,OAAOnD,WQ4ClBguB,MP/Da,WACb,OAAO3tC,KAAKgyB,KAAK2b,cO+DjBg4B,MNhEa,WACb,OAAO3lE,KAAKgyB,KAAK2zC,QMgEjBl4C,OenEa,SAASpyB,MACtB,IAAIe,OAAyB,mBAATf,KAAsBA,KAAO4nE,QAAQ5nE,MACzD,OAAO2E,KAAK0V,OAAO,WACjB,OAAO1V,KAAKqqB,YAAYjuB,OAAOiB,MAAM2C,KAAMkE,efiE7Ck6C,OL/Da,SAAS/iD,KAAM2zD,QAC5B,IAAI5yD,OAAyB,mBAATf,KAAsBA,KAAO4nE,QAAQ5nE,MACrDqa,OAAmB,MAAVs5C,OAAiB8W,aAAiC,mBAAX9W,OAAwBA,OAAS0U,aAAS1U,QAC9F,OAAOhvD,KAAK0V,OAAO,WACjB,OAAO1V,KAAK+nB,aAAa3rB,OAAOiB,MAAM2C,KAAMkE,WAAYwR,OAAOrY,MAAM2C,KAAMkE,YAAc,SK4D3F+tB,OJlEa,WACb,OAAOjyB,KAAKgyB,KAAKC,gBIkEjB9c,MHhEa,SAASg2D,MACtB,OAAOnrE,KAAK0V,OAAOy1D,KAAOlF,oBAAsBF,yBGgEhD7B,MgBzEa,SAASnoE,OACtB,OAAOmI,UAAU7C,OACXrB,KAAKrD,SAAS,WAAYZ,OAC1BiE,KAAK8iB,OAAOshD,UhBuElBj6D,GFEa,SAAS48D,SAAUhrE,MAAOmrE,SACvC,IAA+CpsE,EAAyBkB,EAApEovE,UA5CN,SAASC,eAAeD,WACtB,OAAOA,UAAUz6D,OAAO5I,MAAM,SAAS/C,IAAI,SAAShJ,GAClD,IAAIX,KAAO,GAAIP,EAAIkB,EAAEqI,QAAQ,KAE7B,OADIvJ,GAAK,IAAGO,KAAOW,EAAEoP,MAAMtQ,EAAI,GAAIkB,EAAIA,EAAEoP,MAAM,EAAGtQ,KAC1CkM,KAAMhL,EAAGX,KAAMA,QAwCTgwE,CAAetE,SAAW,IAAQxqE,EAAI6uE,UAAU/pE,OAEhE,KAAI6C,UAAU7C,OAAS,GAAvB,CAcA,IAFA8I,GAAKpO,MAAQorE,MAAQL,SACN,MAAXI,UAAiBA,SAAU,GAC1BpsE,EAAI,EAAGA,EAAIyB,IAAKzB,EAAGkF,KAAKgyB,KAAK7nB,GAAGihE,UAAUtwE,GAAIiB,MAAOmrE,UAC1D,OAAOlnE,KAdL,IAAImK,GAAKnK,KAAK8iB,OAAOkkD,KACrB,GAAI78D,GAAI,IAAK,IAA0B5O,EAAtB8K,EAAI,EAAGnL,EAAIiP,GAAG9I,OAAWgF,EAAInL,IAAKmL,EACjD,IAAKvL,EAAI,EAAGS,EAAI4O,GAAG9D,GAAIvL,EAAIyB,IAAKzB,EAC9B,IAAKkB,EAAIovE,UAAUtwE,IAAIkM,OAASzL,EAAEyL,MAAQhL,EAAEX,OAASE,EAAEF,KACrD,OAAOE,EAAEQ,OETjBuvE,SD9Ca,SAAStkE,KAAM4P,QAC5B,OAAO5W,KAAKgyB,MAAwB,mBAAXpb,OAP3B,SAAS20D,iBAAiBvkE,KAAM4P,QAC9B,OAAO,WACL,OAAO6wD,cAAcznE,KAAMgH,KAAM4P,OAAOvZ,MAAM2C,KAAMkE,cARxD,SAASsnE,iBAAiBxkE,KAAM4P,QAC9B,OAAO,WACL,OAAO6wD,cAAcznE,KAAMgH,KAAM4P,WAaX5P,KAAM4P,WC8CjB8mC,sCiB5EA+tB,WAAA,SAAS/H,UACtB,MAA2B,iBAAbA,SACR,IAAI3Q,0BAAYx0C,SAASolD,cAAcD,aAAcnlD,SAASwoB,kBAC9D,IAAIgsB,0BAAY2Q,WAAYtpE,iBCLhCsxE,OAAS,EAMb,SAASC,QACP3rE,KAAKgG,EAAI,OAAS0lE,QAAQ3pE,SAAS,IAGrC4pE,MAAM/uE,UARS,SAASomE,QACtB,OAAO,IAAI2I,OAOW/uE,WACtBgJ,YAAa+lE,MACbhwE,IAAK,SAAAA,IAASmnB,MAEZ,IADA,IAAI/D,GAAK/e,KAAKgG,IACL+Y,MAAM+D,OAAO,KAAMA,KAAOA,KAAKgF,YAAa,OACrD,OAAOhF,KAAK/D,KAEdjU,IAAK,SAAAA,IAASgY,KAAM/mB,OAClB,OAAO+mB,KAAK9iB,KAAKgG,GAAKjK,OAExBk2B,OAAQ,SAAAA,OAASnP,MACf,OAAO9iB,KAAKgG,KAAK8c,aAAeA,KAAK9iB,KAAKgG,IAE5CjE,SAAU,SAAAA,WACR,OAAO/B,KAAKgG,ICtBD,IAAAwhE,YAAA,WAEb,IADA,IAAqBljC,OAAjBsnC,QAAUzF,SACP7hC,OAASsnC,QAAQpE,aAAaoE,QAAUtnC,OAC/C,OAAOsnC,SCLMC,UAAA,SAAS/oD,KAAMqjD,OAC5B,IAAIp3C,IAAMjM,KAAKgpD,iBAAmBhpD,KAElC,GAAIiM,IAAIg9C,eAAgB,CACtB,IAAIroB,MAAQ30B,IAAIg9C,iBAGhB,OAFAroB,MAAMxoC,EAAIirD,MAAM6F,QAAStoB,MAAM5gD,EAAIqjE,MAAM8F,UACzCvoB,MAAQA,MAAMwoB,gBAAgBppD,KAAKqpD,eAAeC,YACpClxD,EAAGwoC,MAAM5gD,GAGzB,IAAIk+C,KAAOl+B,KAAKupD,wBAChB,OAAQlG,MAAM6F,QAAUhrB,KAAK7wB,KAAOrN,KAAKwpD,WAAYnG,MAAM8F,QAAUjrB,KAAK/3B,IAAMnG,KAAKypD,YCRxEC,MAAA,SAAS1pD,MACtB,IAAIqjD,MAAQqB,cAEZ,OADIrB,MAAMsG,iBAAgBtG,MAAQA,MAAMsG,eAAe,IAChD/oB,UAAM5gC,KAAMqjD,QCHNuG,UAAA,SAAS5pD,KAAM6pD,QAASC,YACjC1oE,UAAU7C,OAAS,IAAGurE,WAAaD,QAASA,QAAUnF,cAAciF,gBAExE,IAAK,IAA6CI,MAAzC/xE,EAAI,EAAGyB,EAAIowE,QAAUA,QAAQtrE,OAAS,EAAUvG,EAAIyB,IAAKzB,EAChE,IAAK+xE,MAAQF,QAAQ7xE,IAAI8xE,aAAeA,WACtC,OAAOlpB,UAAM5gC,KAAM+pD,OAIvB,OAAO,MCZL5mB,eAAQlqD,MAAO,SAAAA,WAEnB,SAASuvE,oBACP,IAAK,IAAyCtvE,EAArClB,EAAI,EAAGyB,EAAI2H,UAAU7C,OAAQ2E,KAAWlL,EAAIyB,IAAKzB,EAAG,CAC3D,KAAMkB,EAAIkI,UAAUpJ,GAAK,KAAQkB,KAAKgK,EAAI,MAAM,IAAI2D,MAAM,iBAAmB3N,GAC7EgK,EAAEhK,MAEJ,OAAO,IAAI8wE,SAAS9mE,GAGtB,SAAS8mE,SAAS9mE,GAChBhG,KAAKgG,EAAIA,EAqDX,SAASrK,aAAIqL,KAAM3L,MACjB,IAAK,IAA4BF,EAAxBL,EAAI,EAAGyB,EAAIyK,KAAK3F,OAAWvG,EAAIyB,IAAKzB,EAC3C,IAAKK,EAAI6L,KAAKlM,IAAIO,OAASA,KACzB,OAAOF,EAAEY,MAKf,SAAS+O,aAAI9D,KAAM3L,KAAM04D,UACvB,IAAK,IAAIj5D,EAAI,EAAGyB,EAAIyK,KAAK3F,OAAQvG,EAAIyB,IAAKzB,EACxC,GAAIkM,KAAKlM,GAAGO,OAASA,KAAM,CACzB2L,KAAKlM,GAAKmrD,cAAMj/C,KAAOA,KAAKoE,MAAM,EAAGtQ,GAAGwK,OAAO0B,KAAKoE,MAAMtQ,EAAI,IAC9D,MAIJ,OADgB,MAAZi5D,UAAkB/sD,KAAK1C,MAAMjJ,KAAMA,KAAMU,MAAOg4D,WAC7C/sD,KAzDT8lE,SAASlwE,UAAY0uE,kBAAS1uE,WAC5BgJ,YAAaknE,SACb3iE,GAAI,SAAAA,GAAS48D,SAAUhT,UACrB,IAEI/3D,EAFAgK,EAAIhG,KAAKgG,EACT8B,EAbR,SAASujE,wBAAeD,UAAW2B,OACjC,OAAO3B,UAAUz6D,OAAO5I,MAAM,SAAS/C,IAAI,SAAShJ,GAClD,IAAIX,KAAO,GAAIP,EAAIkB,EAAEqI,QAAQ,KAE7B,GADIvJ,GAAK,IAAGO,KAAOW,EAAEoP,MAAMtQ,EAAI,GAAIkB,EAAIA,EAAEoP,MAAM,EAAGtQ,IAC9CkB,IAAM+wE,MAAMlwE,eAAeb,GAAI,MAAM,IAAI2N,MAAM,iBAAmB3N,GACtE,OAAQgL,KAAMhL,EAAGX,KAAMA,QAQfgwE,CAAetE,SAAW,GAAI/gE,GAElClL,GAAK,EACLyB,EAAIuL,EAAEzG,OAGV,KAAI6C,UAAU7C,OAAS,GAAvB,CAOA,GAAgB,MAAZ0yD,UAAwC,mBAAbA,SAAyB,MAAM,IAAIpqD,MAAM,qBAAuBoqD,UAC/F,OAASj5D,EAAIyB,GACX,GAAIP,GAAK+qE,SAAWj/D,EAAEhN,IAAIkM,KAAMhB,EAAEhK,GAAK8O,aAAI9E,EAAEhK,GAAI+qE,SAAS1rE,KAAM04D,eAC3D,GAAgB,MAAZA,SAAkB,IAAK/3D,KAAKgK,EAAGA,EAAEhK,GAAK8O,aAAI9E,EAAEhK,GAAI+qE,SAAS1rE,KAAM,MAG1E,OAAO2E,KAZL,OAASlF,EAAIyB,GAAG,IAAKP,GAAK+qE,SAAWj/D,EAAEhN,IAAIkM,QAAUhL,EAAIL,aAAIqK,EAAEhK,GAAI+qE,SAAS1rE,OAAQ,OAAOW,GAc/Fy3B,KAAM,SAAAA,OACJ,IAAIA,QAAWztB,EAAIhG,KAAKgG,EACxB,IAAK,IAAIhK,KAAKgK,EAAGytB,KAAKz3B,GAAKgK,EAAEhK,GAAGoP,QAChC,OAAO,IAAI0hE,SAASr5C,OAEtBx4B,KAAM,SAAAA,KAAS+L,KAAMk/C,MACnB,IAAK3pD,EAAI2H,UAAU7C,OAAS,GAAK,EAAG,IAAK,IAAgC9E,EAAGP,EAA/BurE,KAAO,IAAIhiE,MAAMhJ,GAAIzB,EAAI,EAASA,EAAIyB,IAAKzB,EAAGysE,KAAKzsE,GAAKoJ,UAAUpJ,EAAI,GACnH,IAAKkF,KAAKgG,EAAEnJ,eAAemK,MAAO,MAAM,IAAI2C,MAAM,iBAAmB3C,MACrE,IAAuBlM,EAAI,EAAGyB,GAAzBP,EAAIgE,KAAKgG,EAAEgB,OAAoB3F,OAAQvG,EAAIyB,IAAKzB,EAAGkB,EAAElB,GAAGiB,MAAMsB,MAAM6oD,KAAMqhB,OAEjFlqE,MAAO,SAAAA,MAAS2J,KAAMk/C,KAAMqhB,MAC1B,IAAKvnE,KAAKgG,EAAEnJ,eAAemK,MAAO,MAAM,IAAI2C,MAAM,iBAAmB3C,MACrE,IAAK,IAAIhL,EAAIgE,KAAKgG,EAAEgB,MAAOlM,EAAI,EAAGyB,EAAIP,EAAEqF,OAAQvG,EAAIyB,IAAKzB,EAAGkB,EAAElB,GAAGiB,MAAMsB,MAAM6oD,KAAMqhB,QAuBxE+D,mCCjFR,SAAS0B,gBACd7G,SAAM8G,2BAGO,IAAAC,QAAA,WACb/G,SAAMgH,iBACNhH,SAAM8G,4BCLOG,OAAA,SAASC,MACtB,IAAIjzE,KAAOizE,KAAK9uD,SAASwoB,gBACrB2W,UAAYhoC,WAAO23D,MAAMljE,GAAG,iBAAkB+iE,SAAS,GACvD,kBAAmB9yE,KACrBsjD,UAAUvzC,GAAG,mBAAoB+iE,SAAS,IAE1C9yE,KAAKkzE,WAAalzE,KAAK8lB,MAAMqtD,cAC7BnzE,KAAK8lB,MAAMqtD,cAAgB,SCVhB,IAAAC,qBAAA,SAAStyD,GACtB,OAAO,WACL,OAAOA,ICFI,SAASuyD,UAAU9kC,OAAQ3hC,KAAM0mE,QAAS3uD,GAAI4uD,OAAQzyD,EAAGpY,EAAG89C,GAAIC,GAAIyqB,UACjFtrE,KAAK2oC,OAASA,OACd3oC,KAAKgH,KAAOA,KACZhH,KAAK0tE,QAAUA,QACf1tE,KAAK4sE,WAAa7tD,GAClB/e,KAAK2tE,OAASA,OACd3tE,KAAKkb,EAAIA,EACTlb,KAAK8C,EAAIA,EACT9C,KAAK4gD,GAAKA,GACV5gD,KAAK6gD,GAAKA,GACV7gD,KAAKgG,EAAIslE,SCFX,SAASsC,gBACP,OAAQzH,SAAM0H,UAAY1H,SAAM2H,OAGlC,SAASC,mBACP,OAAO/tE,KAAK8nB,WAGd,SAASkmD,eAAe5yE,GACtB,OAAY,MAALA,GAAa8f,EAAGirD,SAAMjrD,EAAGpY,EAAGqjE,SAAMrjE,GAAK1H,EAGhD,SAAS6yE,mBACP,OAAOrlD,UAAUslD,gBAAmB,iBAAkBluE,KDRxDytE,UAAU7wE,UAAUuN,GAAK,WACvB,IAAIpO,MAAQiE,KAAKgG,EAAEmE,GAAG9M,MAAM2C,KAAKgG,EAAG9B,WACpC,OAAOnI,QAAUiE,KAAKgG,EAAIhG,KAAOjE,OCSpB,IAAAoyE,SAAA,WACb,IAOIC,WACAC,WACAC,YACAC,YAVA3iE,OAASgiE,cACT5uD,UAAY+uD,iBACZL,QAAUM,eACVQ,UAAYP,iBACZQ,YACAliD,UAAY++C,aAAS,QAAS,OAAQ,OACtCqC,OAAS,EAKTe,eAAiB,EAErB,SAASC,KAAKjxB,WACZA,UACKvzC,GAAG,iBAAkBykE,aACvBhjE,OAAO4iE,WACLrkE,GAAG,kBAAmB0kE,cACtB1kE,GAAG,iBAAkB2kE,YACrB3kE,GAAG,iCAAkC4kE,YACrC7uD,MAAM,eAAgB,QACtBA,MAAM,8BAA+B,iBAG5C,SAAS0uD,cACP,IAAIL,aAAgB3iE,OAAOvO,MAAM2C,KAAMkE,WAAvC,CACA,IAAI8qE,QAAUC,YAAY,QAASjwD,UAAU3hB,MAAM2C,KAAMkE,WAAYsoE,MAAOxsE,KAAMkE,WAC7E8qE,UACLt5D,WAAOywD,SAAMkH,MAAMljE,GAAG,iBAAkB+kE,YAAY,GAAM/kE,GAAG,eAAgBglE,YAAY,GACzF/B,OAAOjH,SAAMkH,MACbL,gBACAsB,aAAc,EACdF,WAAajI,SAAM6F,QACnBqC,WAAalI,SAAM8F,QACnB+C,QAAQ,WAGV,SAASE,aAEP,GADAhC,WACKoB,YAAa,CAChB,IAAI1tB,GAAKulB,SAAM6F,QAAUoC,WAAYvtB,GAAKslB,SAAM8F,QAAUoC,WAC1DC,YAAc1tB,GAAKA,GAAKC,GAAKA,GAAK6tB,eAEpCD,SAASjC,MAAM,QAGjB,SAAS2C,aACPz5D,WAAOywD,SAAMkH,MAAMljE,GAAG,8BAA+B,MH1DlD,SAASilE,QAAQ/B,KAAMgC,SAC5B,IAAIj1E,KAAOizE,KAAK9uD,SAASwoB,gBACrB2W,UAAYhoC,WAAO23D,MAAMljE,GAAG,iBAAkB,MAC9CklE,UACF3xB,UAAUvzC,GAAG,aAAc+iE,SAAS,GACpC9hD,WAAW,WAAasyB,UAAUvzC,GAAG,aAAc,OAAU,IAE3D,kBAAmB/P,KACrBsjD,UAAUvzC,GAAG,mBAAoB,OAEjC/P,KAAK8lB,MAAMqtD,cAAgBnzE,KAAKkzE,kBACzBlzE,KAAKkzE,YGgDZ8B,CAAQjJ,SAAMkH,KAAMiB,aACpBpB,UACAuB,SAASjC,MAAM,OAGjB,SAASqC,eACP,GAAKjjE,OAAOvO,MAAM2C,KAAMkE,WAAxB,CACA,IAEwBpJ,EAAGk0E,QAFvBrC,QAAUxG,SAAMsG,eAChBtxE,EAAI6jB,UAAU3hB,MAAM2C,KAAMkE,WAC1B3H,EAAIowE,QAAQtrE,OAEhB,IAAKvG,EAAI,EAAGA,EAAIyB,IAAKzB,GACfk0E,QAAUC,YAAYtC,QAAQ7xE,GAAG8xE,WAAYzxE,EAAG0xE,UAAO7sE,KAAMkE,cAC/D8oE,gBACAgC,QAAQ,WAKd,SAASF,aACP,IACwBh0E,EAAGk0E,QADvBrC,QAAUxG,SAAMsG,eAChBlwE,EAAIowE,QAAQtrE,OAEhB,IAAKvG,EAAI,EAAGA,EAAIyB,IAAKzB,GACfk0E,QAAUP,SAAS9B,QAAQ7xE,GAAG8xE,eAChCM,UACA8B,QAAQ,SAKd,SAASD,aACP,IACwBj0E,EAAGk0E,QADvBrC,QAAUxG,SAAMsG,eAChBlwE,EAAIowE,QAAQtrE,OAIhB,IAFIktE,aAAae,aAAaf,aAC9BA,YAAcnjD,WAAW,WAAamjD,YAAc,MAAS,KACxDzzE,EAAI,EAAGA,EAAIyB,IAAKzB,GACfk0E,QAAUP,SAAS9B,QAAQ7xE,GAAG8xE,eAChCI,gBACAgC,QAAQ,QAKd,SAASC,YAAYlwD,GAAIC,UAAW0kC,MAAOwC,KAAMqhB,MAC/C,IAA8BxqE,EAAG6jD,GAAIC,GAAjC/jD,EAAI4mD,MAAM1kC,UAAWD,IACrBwwD,aAAehjD,UAAUkH,OAE7B,GAAK6zC,YAAY,IAAImG,UAAUkB,KAAM,cAAe5xE,EAAGgiB,GAAI4uD,OAAQ7wE,EAAE,GAAIA,EAAE,GAAI,EAAG,EAAGyyE,cAAe,WAClG,OAAuD,OAAlDpJ,SAAMuH,QAAU3wE,EAAI2wE,QAAQrwE,MAAM6oD,KAAMqhB,SAC7C3mB,GAAK7jD,EAAEme,EAAIpe,EAAE,IAAM,EACnB+jD,GAAK9jD,EAAE+F,EAAIhG,EAAE,IAAM,GACZ,KAGT,OAAO,SAASkyE,QAAQhoE,MACtB,IAAYzK,EAARojE,GAAK7iE,EACT,OAAQkK,MACN,IAAK,QAASynE,SAAS1vD,IAAMiwD,QAASzyE,EAAIoxE,SAAU,MACpD,IAAK,aAAcc,SAAS1vD,MAAO4uD,OACnC,IAAK,OAAQ7wE,EAAI4mD,MAAM1kC,UAAWD,IAAKxiB,EAAIoxE,OAE7CrG,YAAY,IAAImG,UAAUkB,KAAM3nE,KAAMjK,EAAGgiB,GAAIxiB,EAAGO,EAAE,GAAK8jD,GAAI9jD,EAAE,GAAK+jD,GAAI/jD,EAAE,GAAK6iE,GAAG,GAAI7iE,EAAE,GAAK6iE,GAAG,GAAI4P,cAAeA,aAAalyE,MAAOkyE,cAAevoE,KAAMk/C,KAAMqhB,QA6BpK,OAzBAoH,KAAK/iE,OAAS,SAAS5F,GACrB,OAAO9B,UAAU7C,QAAUuK,OAAsB,mBAAN5F,EAAmBA,EAAIw9B,uBAAWx9B,GAAI2oE,MAAQ/iE,QAG3F+iE,KAAK3vD,UAAY,SAAShZ,GACxB,OAAO9B,UAAU7C,QAAU2d,UAAyB,mBAANhZ,EAAmBA,EAAIw9B,qBAASx9B,GAAI2oE,MAAQ3vD,WAG5F2vD,KAAKjB,QAAU,SAAS1nE,GACtB,OAAO9B,UAAU7C,QAAUqsE,QAAuB,mBAAN1nE,EAAmBA,EAAIw9B,qBAASx9B,GAAI2oE,MAAQjB,SAG1FiB,KAAKH,UAAY,SAASxoE,GACxB,OAAO9B,UAAU7C,QAAUmtE,UAAyB,mBAANxoE,EAAmBA,EAAIw9B,uBAAWx9B,GAAI2oE,MAAQH,WAG9FG,KAAKxkE,GAAK,WACR,IAAIpO,MAAQwwB,UAAUpiB,GAAG9M,MAAMkvB,UAAWroB,WAC1C,OAAOnI,QAAUwwB,UAAYoiD,KAAO5yE,OAGtC4yE,KAAKa,cAAgB,SAASxpE,GAC5B,OAAO9B,UAAU7C,QAAUqtE,gBAAkB1oE,GAAKA,GAAKA,EAAG2oE,MAAQ3rE,KAAKoK,KAAKshE,iBAGvEC,mSCrKT,IAIIc,SACAC,SALAC,YAAQ,EACRC,QAAU,EACV9iC,eAAW,EACX+iC,UAAY,IAGZC,UAAY,EACZC,SAAW,EACXC,UAAY,EACZC,MAA+B,YAAvB,oBAAOC,YAAP,YAAAC,aAAOD,eAA4BA,YAAYE,IAAMF,YAAcpwE,KAC3EuwE,SAA6B,YAAlB,oBAAO31E,OAAP,YAAAy1E,aAAOz1E,UAAuBA,OAAOqwB,sBAAwBrwB,OAAOqwB,sBAAsBzuB,KAAK5B,QAAU,SAASiD,GAAKytB,WAAWztB,EAAG,KAE7I,SAASyyE,MACd,OAAOL,WAAaM,SAASC,UAAWP,SAAWE,MAAMG,MAAQJ,WAGnE,SAASM,WACPP,SAAW,EAGN,SAASQ,QACdvwE,KAAKwwE,MACLxwE,KAAKywE,MACLzwE,KAAKmkE,MAAQ,KA0BR,SAASuM,YAAM3c,SAAU4c,MAAOt6B,MACrC,IAAIr6C,EAAI,IAAIu0E,MAEZ,OADAv0E,EAAE40E,QAAQ7c,SAAU4c,MAAOt6B,MACpBr6C,EAcT,SAAS60E,OACPd,UAAYD,UAAYG,MAAMG,OAASJ,UACvCL,YAAQC,QAAU,EAClB,KAdK,SAASkB,aACdV,QACET,YAEF,IADA,IAAkB3yE,EAAdhB,EAAIyzE,SACDzzE,IACAgB,EAAI+yE,SAAW/zE,EAAEy0E,QAAU,GAAGz0E,EAAEw0E,MAAMv1E,KAAK,KAAM+B,GACtDhB,EAAIA,EAAEmoE,QAENwL,YAOAmB,GADF,QAGEnB,YAAQ,EAWZ,SAASoB,MACP,IAAI1vC,GAAmBE,GAAfD,GAAKmuC,SAAcp5B,KAAOjK,IAClC,KAAO9K,IACDA,GAAGkvC,OACDn6B,KAAO/U,GAAGmvC,QAAOp6B,KAAO/U,GAAGmvC,OAC/BpvC,GAAKC,GAAIA,GAAKA,GAAG6iC,QAEjB5iC,GAAKD,GAAG6iC,MAAO7iC,GAAG6iC,MAAQ,KAC1B7iC,GAAKD,GAAKA,GAAG8iC,MAAQ5iC,GAAKkuC,SAAWluC,IAGzCmuC,SAAWruC,GACX2vC,MAAM36B,MAtBJ06B,GACAhB,SAAW,GAIf,SAASkB,OACP,IAAIb,IAAMH,MAAMG,MAAOO,MAAQP,IAAMN,UACjCa,MAAQd,YAAWG,WAAaW,MAAOb,UAAYM,KAkBzD,SAASY,MAAM36B,MACTs5B,cACAC,UAASA,QAAUN,aAAaM,UACxBv5B,KAAO05B,SACP,IACN15B,KAAOjK,MAAUwjC,QAAUxkD,WAAWylD,KAAMx6B,KAAO45B,MAAMG,MAAQJ,YACjEljC,iBAAUA,eAAWokC,cAAcpkC,mBAElCA,iBAAUgjC,UAAYG,MAAMG,MAAOtjC,eAAWqkC,YAAYF,KAAMpB,YACrEF,YAAQ,EAAGU,SAASQ,QAjFxBN,MAAM3zE,UAAY8zE,YAAM9zE,WACtBgJ,YAAa2qE,MACbK,QAAS,SAAAA,QAAS7c,SAAU4c,MAAOt6B,MACjC,GAAwB,mBAAb0d,SAAyB,MAAM,IAAIxsD,UAAU,8BACxD8uC,MAAgB,MAARA,KAAe+5B,OAAS/5B,OAAkB,MAATs6B,MAAgB,GAAKA,OACzD3wE,KAAKmkE,OAASuL,WAAa1vE,OAC1B0vE,SAAUA,SAASvL,MAAQnkE,KAC1ByvE,SAAWzvE,KAChB0vE,SAAW1vE,MAEbA,KAAKwwE,MAAQzc,SACb/zD,KAAKywE,MAAQp6B,KACb26B,SAEFngD,KAAM,SAAAA,OACA7wB,KAAKwwE,QACPxwE,KAAKwwE,MAAQ,KACbxwE,KAAKywE,MAAQrkC,IACb4kC,WC1CS,IAAAI,YAAA,SAASrd,SAAU4c,MAAOt6B,MACvC,IAAIr6C,EAAI,IAAIu0E,MAMZ,OALAI,MAAiB,MAATA,MAAgB,GAAKA,MAC7B30E,EAAE40E,QAAQ,SAASS,SACjBr1E,EAAE60B,OACFkjC,SAASsd,QAAUV,QAClBA,MAAOt6B,MACHr6C,GCNLs1E,QAAUhG,aAAS,QAAS,MAAO,SAAU,aAC7CiG,cAEOC,QAAU,EACVC,UAAY,EACZC,SAAW,EACXC,QAAU,EACVC,QAAU,EACVC,OAAS,EACTC,MAAQ,EAEJC,oBAAA,SAASjvD,KAAMznB,KAAM0jB,GAAIrd,MAAOqpC,MAAOinC,QACpD,IAAIC,UAAYnvD,KAAKovD,aACrB,GAAKD,WACA,GAAIlzD,MAAMkzD,UAAW,YADVnvD,KAAKovD,iBAmCvB,SAAS91E,gBAAO0mB,KAAM/D,GAAIozD,MACxB,IACIC,MADAH,UAAYnvD,KAAKovD,aAgBrB,SAASr3D,MAAMw2D,SACb,IAAIv2E,EAAGuL,EAAG9J,EAAGhB,EAGb,GAAI42E,KAAKE,QAAUZ,UAAW,OAAO5gD,OAErC,IAAK/1B,KAAKm3E,UAER,IADA12E,EAAI02E,UAAUn3E,IACRO,OAAS82E,KAAK92E,KAApB,CAKA,GAAIE,EAAE82E,QAAUV,QAAS,OAAO/B,YAAQ/0D,OAGpCtf,EAAE82E,QAAUT,SACdr2E,EAAE82E,MAAQP,MACVv2E,EAAEm1E,MAAM7/C,OACRt1B,EAAE4O,GAAGlP,KAAK,YAAa6nB,KAAMA,KAAKshD,SAAU7oE,EAAEmG,MAAOnG,EAAEwvC,cAChDknC,UAAUn3E,KAITA,EAAIikB,KACZxjB,EAAE82E,MAAQP,MACVv2E,EAAEm1E,MAAM7/C,OACRt1B,EAAE4O,GAAGlP,KAAK,SAAU6nB,KAAMA,KAAKshD,SAAU7oE,EAAEmG,MAAOnG,EAAEwvC,cAC7CknC,UAAUn3E,IAoBrB,GAZA80E,YAAQ,WACFuC,KAAKE,QAAUV,UACjBQ,KAAKE,MAAQT,QACbO,KAAKzB,MAAME,QAAQhzB,KAAMu0B,KAAKxB,MAAOwB,KAAK97B,MAC1CuH,KAAKyzB,YAMTc,KAAKE,MAAQX,SACbS,KAAKhoE,GAAGlP,KAAK,QAAS6nB,KAAMA,KAAKshD,SAAU+N,KAAKzwE,MAAOywE,KAAKpnC,OACxDonC,KAAKE,QAAUX,SAAnB,CAKA,IAJAS,KAAKE,MAAQV,QAGbS,MAAQ,IAAI7sE,MAAMhJ,EAAI41E,KAAKC,MAAM/wE,QAC5BvG,EAAI,EAAGuL,GAAK,EAAGvL,EAAIyB,IAAKzB,GACvBS,EAAI42E,KAAKC,MAAMt3E,GAAGiB,MAAMd,KAAK6nB,KAAMA,KAAKshD,SAAU+N,KAAKzwE,MAAOywE,KAAKpnC,UACrEqnC,QAAQ/rE,GAAK9K,GAGjB62E,MAAM/wE,OAASgF,EAAI,GAGrB,SAASu3C,KAAKyzB,SAKZ,IAJA,IAAIr1E,EAAIq1E,QAAUc,KAAKG,SAAWH,KAAKI,KAAKt3E,KAAK,KAAMo2E,QAAUc,KAAKG,WAAaH,KAAKzB,MAAME,QAAQ//C,MAAOshD,KAAKE,MAAQR,OAAQ,GAC9H/2E,GAAK,EACLyB,EAAI61E,MAAM/wE,SAELvG,EAAIyB,GACX61E,MAAMt3E,GAAGG,KAAK6nB,KAAM9mB,GAIlBm2E,KAAKE,QAAUR,SACjBM,KAAKhoE,GAAGlP,KAAK,MAAO6nB,KAAMA,KAAKshD,SAAU+N,KAAKzwE,MAAOywE,KAAKpnC,OAC1Dla,QAIJ,SAASA,OAIP,IAAK,IAAI/1B,KAHTq3E,KAAKE,MAAQP,MACbK,KAAKzB,MAAM7/C,cACJohD,UAAUlzD,IACHkzD,UAAW,cAClBnvD,KAAKovD,aA7FdD,UAAUlzD,IAAMozD,KAChBA,KAAKzB,MAAQA,YAEb,SAAS8B,SAASnB,SAChBc,KAAKE,MAAQZ,UACbU,KAAKzB,MAAME,QAAQ/1D,MAAOs3D,KAAKxB,MAAOwB,KAAK97B,MAGvC87B,KAAKxB,OAASU,SAASx2D,MAAMw2D,QAAUc,KAAKxB,QAPrB,EAAGwB,KAAK97B,MAxCrCj6C,CAAO0mB,KAAM/D,IACX1jB,KAAMA,KACNqG,MAAOA,MACPqpC,MAAOA,MACP5gC,GAAImnE,QACJc,MAAOb,WACPl7B,KAAM27B,OAAO37B,KACbs6B,MAAOqB,OAAOrB,MACd2B,SAAUN,OAAOM,SACjBC,KAAMP,OAAOO,KACb7B,MAAO,KACP2B,MAAOb,WAIJ,SAASpzD,KAAK0E,KAAM/D,IACzB,IAAIyzD,SAAW72E,aAAImnB,KAAM/D,IACzB,GAAIyzD,SAASH,MAAQb,QAAS,MAAM,IAAI7nE,MAAM,+BAC9C,OAAO6oE,SAGF,SAAS1nE,aAAIgY,KAAM/D,IACxB,IAAIyzD,SAAW72E,aAAImnB,KAAM/D,IACzB,GAAIyzD,SAASH,MAAQV,QAAS,MAAM,IAAIhoE,MAAM,6BAC9C,OAAO6oE,SAGF,SAAS72E,aAAImnB,KAAM/D,IACxB,IAAIyzD,SAAW1vD,KAAKovD,aACpB,IAAKM,YAAcA,SAAWA,SAASzzD,KAAM,MAAM,IAAIpV,MAAM,wBAC7D,OAAO6oE,SCqBF,SAASC,WAAWp0B,WAAYhjD,KAAMU,OAC3C,IAAIgjB,GAAKs/B,WAAWq0B,IAOpB,OALAr0B,WAAWrsB,KAAK,WACd,IAAIwgD,SAAW1nE,aAAI9K,KAAM+e,KACxByzD,SAASz2E,QAAUy2E,SAASz2E,WAAaV,MAAQU,MAAMsB,MAAM2C,KAAMkE,aAG/D,SAAS4e,MACd,OAAOnnB,aAAImnB,KAAM/D,IAAIhjB,MAAMV,OC3EhB,IAAAs3E,uBAAA,SAASp1E,EAAGoF,GACzB,IAAIxH,EACJ,OAAqB,iBAANwH,EAAiBy4D,WAC1Bz4D,aAAa68B,YAAQozC,SACpBz3E,EAAIqkC,YAAM78B,KAAOA,EAAIxH,EAAGy3E,SACzBC,YAAmBt1E,EAAGoF,ICAf,ICNXowD,+BAAYrV,cAAU9gD,UAAUgJ,YCiBpC,SAASskE,kBAAY7uE,MACnB,OAAO,WACL2E,KAAKkgB,MAAMiqD,eAAe9uE,OCNf,ICKX0jB,cAAK,EAEF,SAAS+zD,WAAW9K,OAAQC,QAAS5sE,KAAM0jB,IAChD/e,KAAKkoE,QAAUF,OACfhoE,KAAKmoE,SAAWF,QAChBjoE,KAAK+yE,MAAQ13E,KACb2E,KAAK0yE,IAAM3zD,GAON,SAASi0D,QACd,QAASj0D,cAGX,IAAIk0D,oBAAsBv1B,cAAU9gD,UAEpCk2E,WAAWl2E,UAVI,SAASyhD,0BAAWhjD,MACjC,OAAOqiD,gBAAYW,WAAWhjD,OASEuB,WAChCgJ,YAAaktE,WACbp9D,OCrCa,SAASA,QACtB,IAAIra,KAAO2E,KAAK+yE,MACZh0D,GAAK/e,KAAK0yE,IAEQ,mBAAXh9D,SAAuBA,OAASguD,aAAShuD,SAEpD,IAAK,IAAIsyD,OAAShoE,KAAKkoE,QAAShtE,EAAI8sE,OAAO3mE,OAAQ+mE,UAAY,IAAI7iE,MAAMrK,GAAImL,EAAI,EAAGA,EAAInL,IAAKmL,EAC3F,IAAK,IAAiFyc,KAAMulD,QAAnFt9B,MAAQi9B,OAAO3hE,GAAI9J,EAAIwuC,MAAM1pC,OAAQinE,SAAWF,UAAU/hE,GAAK,IAAId,MAAMhJ,GAAmBzB,EAAI,EAAGA,EAAIyB,IAAKzB,GAC9GgoB,KAAOioB,MAAMjwC,MAAQutE,QAAU3yD,OAAOza,KAAK6nB,KAAMA,KAAKshD,SAAUtpE,EAAGiwC,UAClE,aAAcjoB,OAAMulD,QAAQjE,SAAWthD,KAAKshD,UAChDkE,SAASxtE,GAAKutE,QACdmK,oBAASlK,SAASxtE,GAAIO,KAAM0jB,GAAIjkB,EAAGwtE,SAAU3sE,aAAImnB,KAAM/D,MAK7D,OAAO,IAAI+zD,WAAW1K,UAAWpoE,KAAKmoE,SAAU9sE,KAAM0jB,KDsBtD4+B,UEtCa,SAASjoC,QACtB,IAAIra,KAAO2E,KAAK+yE,MACZh0D,GAAK/e,KAAK0yE,IAEQ,mBAAXh9D,SAAuBA,OAASkuD,YAAYluD,SAEvD,IAAK,IAAIsyD,OAAShoE,KAAKkoE,QAAShtE,EAAI8sE,OAAO3mE,OAAQ+mE,aAAgBH,WAAc5hE,EAAI,EAAGA,EAAInL,IAAKmL,EAC/F,IAAK,IAAyCyc,KAArCioB,MAAQi9B,OAAO3hE,GAAI9J,EAAIwuC,MAAM1pC,OAAcvG,EAAI,EAAGA,EAAIyB,IAAKzB,EAClE,GAAIgoB,KAAOioB,MAAMjwC,GAAI,CACnB,IAAK,IAA2DupE,MAAvDzmD,SAAWlI,OAAOza,KAAK6nB,KAAMA,KAAKshD,SAAUtpE,EAAGiwC,OAAemoC,QAAUv3E,aAAImnB,KAAM/D,IAAKzX,EAAI,EAAGvM,EAAI6iB,SAASvc,OAAQiG,EAAIvM,IAAKuM,GAC/H+8D,MAAQzmD,SAAStW,KACnBkrE,oBAASnO,MAAOhpE,KAAM0jB,GAAIzX,EAAGsW,SAAUs1D,SAG3C9K,UAAU9jE,KAAKsZ,UACfqqD,QAAQ3jE,KAAKwe,MAKnB,OAAO,IAAIgwD,WAAW1K,UAAWH,QAAS5sE,KAAM0jB,KFmBhDnT,OGxCa,SAAS3G,OACD,mBAAVA,QAAsBA,MAAQ6+D,QAAQ7+D,QAEjD,IAAK,IAAI+iE,OAAShoE,KAAKkoE,QAAShtE,EAAI8sE,OAAO3mE,OAAQ+mE,UAAY,IAAI7iE,MAAMrK,GAAImL,EAAI,EAAGA,EAAInL,IAAKmL,EAC3F,IAAK,IAAuEyc,KAAnEioB,MAAQi9B,OAAO3hE,GAAI9J,EAAIwuC,MAAM1pC,OAAQinE,SAAWF,UAAU/hE,MAAevL,EAAI,EAAGA,EAAIyB,IAAKzB,GAC3FgoB,KAAOioB,MAAMjwC,KAAOmK,MAAMhK,KAAK6nB,KAAMA,KAAKshD,SAAUtpE,EAAGiwC,QAC1Du9B,SAAShkE,KAAKwe,MAKpB,OAAO,IAAIgwD,WAAW1K,UAAWpoE,KAAKmoE,SAAUnoE,KAAK+yE,MAAO/yE,KAAK0yE,MH8BjEv0B,MI1Ca,SAASE,YACtB,GAAIA,WAAWq0B,MAAQ1yE,KAAK0yE,IAAK,MAAM,IAAI/oE,MAE3C,IAAK,IAAIm/D,QAAU9oE,KAAKkoE,QAASa,QAAU1qB,WAAW6pB,QAASc,GAAKF,QAAQznE,OAAQk/B,GAAKwoC,QAAQ1nE,OAAQnG,EAAI8H,KAAKkK,IAAI87D,GAAIzoC,IAAK0oC,OAAS,IAAI1jE,MAAMyjE,IAAK3iE,EAAI,EAAGA,EAAInL,IAAKmL,EACrK,IAAK,IAAmGyc,KAA/FomD,OAASJ,QAAQziE,GAAI8iE,OAASJ,QAAQ1iE,GAAI9J,EAAI2sE,OAAO7nE,OAAQ88C,MAAQ8qB,OAAO5iE,GAAK,IAAId,MAAMhJ,GAAUzB,EAAI,EAAGA,EAAIyB,IAAKzB,GACxHgoB,KAAOomD,OAAOpuE,IAAMquE,OAAOruE,MAC7BqjD,MAAMrjD,GAAKgoB,MAKjB,KAAOzc,EAAI2iE,KAAM3iE,EACf4iE,OAAO5iE,GAAKyiE,QAAQziE,GAGtB,OAAO,IAAIysE,WAAW7J,OAAQjpE,KAAKmoE,SAAUnoE,KAAK+yE,MAAO/yE,KAAK0yE,MJ4B9Dh1B,UHzCa,WACb,OAAO,IAAIqV,+BAAU/yD,KAAKkoE,QAASloE,KAAKmoE,WGyCxC9pB,WK3Ca,WAKb,IAJA,IAAIhjD,KAAO2E,KAAK+yE,MACZI,IAAMnzE,KAAK0yE,IACXU,IAAMJ,QAEDhL,OAAShoE,KAAKkoE,QAAShtE,EAAI8sE,OAAO3mE,OAAQgF,EAAI,EAAGA,EAAInL,IAAKmL,EACjE,IAAK,IAAyCyc,KAArCioB,MAAQi9B,OAAO3hE,GAAI9J,EAAIwuC,MAAM1pC,OAAcvG,EAAI,EAAGA,EAAIyB,IAAKzB,EAClE,GAAIgoB,KAAOioB,MAAMjwC,GAAI,CACnB,IAAIo4E,QAAUv3E,aAAImnB,KAAMqwD,KACxBX,oBAAS1vD,KAAMznB,KAAM+3E,IAAKt4E,EAAGiwC,OAC3BsL,KAAM68B,QAAQ78B,KAAO68B,QAAQvC,MAAQuC,QAAQZ,SAC7C3B,MAAO,EACP2B,SAAUY,QAAQZ,SAClBC,KAAMW,QAAQX,OAMtB,OAAO,IAAIO,WAAW9K,OAAQhoE,KAAKmoE,SAAU9sE,KAAM+3E,MLyBnDn4E,KAAMg4E,oBAAoBh4E,KAC1BsuE,MAAO0J,oBAAoB1J,MAC3BzmD,KAAMmwD,oBAAoBnwD,KAC1BhC,KAAMmyD,oBAAoBnyD,KAC1BqR,MAAO8gD,oBAAoB9gD,MAC3BH,KAAMihD,oBAAoBjhD,KAC1B7nB,GM5Ba,SAAS9O,KAAMkrE,UAC5B,IAAIxnD,GAAK/e,KAAK0yE,IAEd,OAAOxuE,UAAU7C,OAAS,EACpB1F,aAAIqE,KAAK8iB,OAAQ/D,IAAI5U,GAAGA,GAAG9O,MAC3B2E,KAAKgyB,KApBb,SAASqhD,WAAWt0D,GAAI1jB,KAAMkrE,UAC5B,IAAI+M,IAAKC,IAAKC,IAThB,SAAS34D,SAAMxf,MACb,OAAQA,KAAO,IAAIsV,OAAO5I,MAAM,SAAS0N,MAAM,SAASzZ,GACtD,IAAIlB,EAAIkB,EAAEqI,QAAQ,KAElB,OADIvJ,GAAK,IAAGkB,EAAIA,EAAEoP,MAAM,EAAGtQ,KACnBkB,GAAW,UAANA,IAKK6e,CAAMxf,MAAQ+iB,KAAOtT,aACzC,OAAO,WACL,IAAI0nE,SAAWgB,IAAIxzE,KAAM+e,IACrB5U,GAAKqoE,SAASroE,GAKdA,KAAOmpE,MAAMC,KAAOD,IAAMnpE,IAAIspB,QAAQtpB,GAAG9O,KAAMkrE,UAEnDiM,SAASroE,GAAKopE,KASAF,CAAWt0D,GAAI1jB,KAAMkrE,YNwBrCtoB,KOiBa,SAAS5iD,KAAMU,OAC5B,IAAImnE,SAAWC,cAAU9nE,MAAOP,EAAiB,cAAbooE,SAA2B98B,wBAAuB6B,uBACtF,OAAOjoC,KAAKyzE,UAAUp4E,KAAuB,mBAAVU,OAC5BmnE,SAASF,MAlBlB,SAAS6G,oBAAe3G,SAAUj7B,YAAalsC,OAC7C,IAAI23E,SACAC,SACAC,aACJ,OAAO,WACL,IAAIC,QAA+BC,QAAtBC,OAASh4E,MAAMiE,MAC5B,GAAc,MAAV+zE,OAGJ,OAFAF,QAAU7zE,KAAKwpE,eAAetG,SAASH,MAAOG,SAASF,WACvD8Q,QAAUC,OAAS,IACU,KACvBF,UAAYH,UAAYI,UAAYH,SAAWC,cAC9CD,SAAWG,QAASF,aAAe3rC,YAAYyrC,SAAWG,QAASE,SAL1C/zE,KAAK0pE,kBAAkBxG,SAASH,MAAOG,SAASF,SArBpF,SAAS8G,kBAAazuE,KAAM4sC,YAAalsC,OACvC,IAAI23E,SACAC,SACAC,aACJ,OAAO,WACL,IAAIC,QAA+BC,QAAtBC,OAASh4E,MAAMiE,MAC5B,GAAc,MAAV+zE,OAGJ,OAFAF,QAAU7zE,KAAKs+C,aAAajjD,UAC5By4E,QAAUC,OAAS,IACU,KACvBF,UAAYH,UAAYI,UAAYH,SAAWC,cAC9CD,SAAWG,QAASF,aAAe3rC,YAAYyrC,SAAWG,QAASE,SAL1C/zE,KAAK4pE,gBAAgBvuE,SA2BA6nE,SAAUpoE,EAAG23E,WAAWzyE,KAAM,QAAU3E,KAAMU,QACtF,MAATA,OAAiBmnE,SAASF,MAhElC,SAASyG,kBAAavG,UACpB,OAAO,WACLljE,KAAK0pE,kBAAkBxG,SAASH,MAAOG,SAASF,SARpD,SAAS2G,gBAAWtuE,MAClB,OAAO,WACL2E,KAAK4pE,gBAAgBvuE,SAoE4C6nE,WAC5DA,SAASF,MA/ClB,SAAS+G,oBAAe7G,SAAUj7B,YAAa8rC,QAC7C,IAAIL,SAEAE,aADAE,QAAUC,OAAS,GAEvB,OAAO,WACL,IAAIF,QAAU7zE,KAAKwpE,eAAetG,SAASH,MAAOG,SAASF,OAC3D,OAAO6Q,UAAYC,QAAU,KACvBD,UAAYH,SAAWE,aACvBA,aAAe3rC,YAAYyrC,SAAWG,QAASE,UApBzD,SAAS/J,kBAAa3uE,KAAM4sC,YAAa8rC,QACvC,IAAIL,SAEAE,aADAE,QAAUC,OAAS,GAEvB,OAAO,WACL,IAAIF,QAAU7zE,KAAKs+C,aAAajjD,MAChC,OAAOw4E,UAAYC,QAAU,KACvBD,UAAYH,SAAWE,aACvBA,aAAe3rC,YAAYyrC,SAAWG,QAASE,WAmDA7Q,SAAUpoE,EAAGiB,SPrBpE03E,UQnBa,SAASp4E,KAAMU,OAC5B,IAAIM,IAAM,QAAUhB,KACpB,GAAI6I,UAAU7C,OAAS,EAAG,OAAQhF,IAAM2D,KAAKoyE,MAAM/1E,OAASA,IAAIqL,OAChE,GAAa,MAAT3L,MAAe,OAAOiE,KAAKoyE,MAAM/1E,IAAK,MAC1C,GAAqB,mBAAVN,MAAsB,MAAM,IAAI4N,MAC3C,IAAIu5D,SAAWC,cAAU9nE,MACzB,OAAO2E,KAAKoyE,MAAM/1E,KAAM6mE,SAASF,MA5BnC,SAASgR,YAAY9Q,SAAUnnE,OAC7B,IAAIslC,GAAIvP,GACR,SAASsgD,QACP,IAAIt3E,EAAIiB,MAAMsB,MAAM2C,KAAMkE,WAE1B,OADIpJ,IAAMg3B,KAAIuP,IAAMvP,GAAKh3B,IAV7B,SAASm5E,kBAAkB/Q,SAAUpoE,GACnC,OAAO,SAASkB,GACdgE,KAAKmvB,eAAe+zC,SAASH,MAAOG,SAASF,MAAOloE,EAAEkB,KAQvBi4E,CAAkB/Q,SAAUpoE,IACpDumC,GAGT,OADA+wC,MAAM1qE,OAAS3L,MACRq2E,OAGT,SAASqB,UAAUp4E,KAAMU,OACvB,IAAIslC,GAAIvP,GACR,SAASsgD,QACP,IAAIt3E,EAAIiB,MAAMsB,MAAM2C,KAAMkE,WAE1B,OADIpJ,IAAMg3B,KAAIuP,IAAMvP,GAAKh3B,IA3B7B,SAASo5E,gBAAgB74E,KAAMP,GAC7B,OAAO,SAASkB,GACdgE,KAAKsqB,aAAajvB,KAAMP,EAAEkB,KAyBKk4E,CAAgB74E,KAAMP,IAC9CumC,GAGT,OADA+wC,MAAM1qE,OAAS3L,MACRq2E,QAS2DlP,SAAUnnE,SRc5EmkB,MFYa,SAAS7kB,KAAMU,MAAOkuE,UACnC,IAAInvE,EAAqB,cAAhBO,MAAQ,IAAsB+qC,wBAAuB6B,uBAC9D,OAAgB,MAATlsC,MAAgBiE,KAClBm0E,WAAW94E,KAjElB,SAAS+4E,UAAU/4E,KAAM4sC,aACvB,IAAIyrC,SACAC,SACAC,aACJ,OAAO,WACL,IAAIC,QAAU3zD,WAAMlgB,KAAM3E,MACtBy4E,SAAW9zE,KAAKkgB,MAAMiqD,eAAe9uE,MAAO6kB,WAAMlgB,KAAM3E,OAC5D,OAAOw4E,UAAYC,QAAU,KACvBD,UAAYH,UAAYI,UAAYH,SAAWC,aAC/CA,aAAe3rC,YAAYyrC,SAAWG,QAASF,SAAWG,UAwD5CM,CAAU/4E,KAAMP,IACjCqP,GAAG,aAAe9O,KAAM6uE,kBAAY7uE,OACpB,mBAAVU,MAAuBiE,KAC7Bm0E,WAAW94E,KArClB,SAAS+uE,oBAAc/uE,KAAM4sC,YAAalsC,OACxC,IAAI23E,SACAC,SACAC,aACJ,OAAO,WACL,IAAIC,QAAU3zD,WAAMlgB,KAAM3E,MACtB04E,OAASh4E,MAAMiE,MACf8zE,QAAUC,OAAS,GAEvB,OADc,MAAVA,SAAoC/zE,KAAKkgB,MAAMiqD,eAAe9uE,MAA9Cy4E,QAAUC,OAA2C7zD,WAAMlgB,KAAM3E,OAC9Ew4E,UAAYC,QAAU,KACvBD,UAAYH,UAAYI,UAAYH,SAAWC,cAC9CD,SAAWG,QAASF,aAAe3rC,YAAYyrC,SAAWG,QAASE,UA0BtD3J,CAAc/uE,KAAMP,EAAG23E,WAAWzyE,KAAM,SAAW3E,KAAMU,SAC1Ei2B,KAvBP,SAASqiD,iBAAiBt1D,GAAI1jB,MAC5B,IAAIi4E,IAAKC,IAAKe,UAAwDriD,OAA7C51B,IAAM,SAAWhB,KAAM8qE,MAAQ,OAAS9pE,IACjE,OAAO,WACL,IAAIm2E,SAAW1nE,aAAI9K,KAAM+e,IACrB5U,GAAKqoE,SAASroE,GACdo8D,SAAkC,MAAvBiM,SAASz2E,MAAMM,KAAe41B,SAAWA,OAASi4C,kBAAY7uE,YAAS6B,EAKlFiN,KAAOmpE,KAAOgB,YAAc/N,WAAWgN,KAAOD,IAAMnpE,IAAIspB,QAAQtpB,GAAGg8D,MAAOmO,UAAY/N,UAE1FiM,SAASroE,GAAKopE,KAWNc,CAAiBr0E,KAAK0yE,IAAKr3E,OACjC2E,KACCm0E,WAAW94E,KApDlB,SAASivE,oBAAcjvE,KAAM4sC,YAAa8rC,QACxC,IAAIL,SAEAE,aADAE,QAAUC,OAAS,GAEvB,OAAO,WACL,IAAIF,QAAU3zD,WAAMlgB,KAAM3E,MAC1B,OAAOw4E,UAAYC,QAAU,KACvBD,UAAYH,SAAWE,aACvBA,aAAe3rC,YAAYyrC,SAAWG,QAASE,SA4CjCzJ,CAAcjvE,KAAMP,EAAGiB,OAAQkuE,UAChD9/D,GAAG,aAAe9O,KAAM,OErB7B84E,WSxCa,SAAS94E,KAAMU,MAAOkuE,UACnC,IAAI5tE,IAAM,UAAYhB,MAAQ,IAC9B,GAAI6I,UAAU7C,OAAS,EAAG,OAAQhF,IAAM2D,KAAKoyE,MAAM/1E,OAASA,IAAIqL,OAChE,GAAa,MAAT3L,MAAe,OAAOiE,KAAKoyE,MAAM/1E,IAAK,MAC1C,GAAqB,mBAAVN,MAAsB,MAAM,IAAI4N,MAC3C,OAAO3J,KAAKoyE,MAAM/1E,IAhBpB,SAAS83E,WAAW94E,KAAMU,MAAOkuE,UAC/B,IAAIjuE,EAAG81B,GACP,SAASsgD,QACP,IAAIt3E,EAAIiB,MAAMsB,MAAM2C,KAAMkE,WAE1B,OADIpJ,IAAMg3B,KAAI91B,GAAK81B,GAAKh3B,IAV5B,SAASy5E,iBAAiBl5E,KAAMP,EAAGmvE,UACjC,OAAO,SAASjuE,GACdgE,KAAKkgB,MAAMmqD,YAAYhvE,KAAMP,EAAEkB,GAAIiuE,WAQLsK,CAAiBl5E,KAAMP,EAAGmvE,WACjDjuE,EAGT,OADAo2E,MAAM1qE,OAAS3L,MACRq2E,MAQgB+B,CAAW94E,KAAMU,MAAmB,MAAZkuE,SAAmB,GAAKA,YToCvEvpD,KD3Ca,SAAS3kB,OACtB,OAAOiE,KAAKoyE,MAAM,OAAyB,mBAAVr2E,MARnC,SAAS+uE,kBAAa/uE,OACpB,OAAO,WACL,IAAIg4E,OAASh4E,MAAMiE,MACnBA,KAAKyiB,YAAwB,MAAVsxD,OAAiB,GAAKA,QAMrCjJ,CAAa2H,WAAWzyE,KAAM,OAAQjE,QAf9C,SAASgvE,kBAAahvE,OACpB,OAAO,WACLiE,KAAKyiB,YAAc1mB,OAcfgvE,CAAsB,MAAThvE,MAAgB,GAAKA,MAAQ,MCyChDk2B,OJnDa,WACb,OAAOjyB,KAAKmK,GAAG,aATjB,SAASqqE,eAAez1D,IACtB,OAAO,WACL,IAAIiW,OAASh1B,KAAK8nB,WAClB,IAAK,IAAIhtB,KAAKkF,KAAKkyE,aAAc,IAAKp3E,IAAMikB,GAAI,OAC5CiW,QAAQA,OAAO9b,YAAYlZ,OAKJw0E,CAAex0E,KAAK0yE,OImDjDN,MNTa,SAAS/2E,KAAMU,OAC5B,IAAIgjB,GAAK/e,KAAK0yE,IAId,GAFAr3E,MAAQ,GAEJ6I,UAAU7C,OAAS,EAAG,CAExB,IADA,IACkCrF,EAD9Bo2E,MAAQz2E,aAAIqE,KAAK8iB,OAAQ/D,IAAIqzD,MACxBt3E,EAAI,EAAGyB,EAAI61E,MAAM/wE,OAAWvG,EAAIyB,IAAKzB,EAC5C,IAAKkB,EAAIo2E,MAAMt3E,IAAIO,OAASA,KAC1B,OAAOW,EAAED,MAGb,OAAO,KAGT,OAAOiE,KAAKgyB,MAAe,MAATj2B,MAhEpB,SAAS04E,YAAY11D,GAAI1jB,MACvB,IAAIq5E,OAAQC,OACZ,OAAO,WACL,IAAInC,SAAW1nE,aAAI9K,KAAM+e,IACrBqzD,MAAQI,SAASJ,MAKrB,GAAIA,QAAUsC,OAEZ,IAAK,IAAI55E,EAAI,EAAGyB,GADhBo4E,OAASD,OAAStC,OACS/wE,OAAQvG,EAAIyB,IAAKzB,EAC1C,GAAI65E,OAAO75E,GAAGO,OAASA,KAAM,EAC3Bs5E,OAASA,OAAOvpE,SACTvG,OAAO/J,EAAG,GACjB,MAKN03E,SAASJ,MAAQuC,SAIrB,SAASC,cAAc71D,GAAI1jB,KAAMU,OAC/B,IAAI24E,OAAQC,OACZ,GAAqB,mBAAV54E,MAAsB,MAAM,IAAI4N,MAC3C,OAAO,WACL,IAAI6oE,SAAW1nE,aAAI9K,KAAM+e,IACrBqzD,MAAQI,SAASJ,MAKrB,GAAIA,QAAUsC,OAAQ,CACpBC,QAAUD,OAAStC,OAAOhnE,QAC1B,IAAK,IAAIpP,GAAKX,KAAMA,KAAMU,MAAOA,OAAQjB,EAAI,EAAGyB,EAAIo4E,OAAOtzE,OAAQvG,EAAIyB,IAAKzB,EAC1E,GAAI65E,OAAO75E,GAAGO,OAASA,KAAM,CAC3Bs5E,OAAO75E,GAAKkB,EACZ,MAGAlB,IAAMyB,GAAGo4E,OAAOrwE,KAAKtI,GAG3Bw2E,SAASJ,MAAQuC,UAmB4C51D,GAAI1jB,KAAMU,SMLzE40E,MU/Ca,SAAS50E,OACtB,IAAIgjB,GAAK/e,KAAK0yE,IAEd,OAAOxuE,UAAU7C,OACXrB,KAAKgyB,MAAuB,mBAAVj2B,MAhB1B,SAAS84E,cAAc91D,GAAIhjB,OACzB,OAAO,WACLqiB,KAAKpe,KAAM+e,IAAI4xD,OAAS50E,MAAMsB,MAAM2C,KAAMkE,aAI9C,SAAS4wE,cAAc/1D,GAAIhjB,OACzB,OAAOA,OAASA,MAAO,WACrBqiB,KAAKpe,KAAM+e,IAAI4xD,MAAQ50E,SAUAgjB,GAAIhjB,QACvBJ,aAAIqE,KAAK8iB,OAAQ/D,IAAI4xD,OVyC3B2B,SWhDa,SAASv2E,OACtB,IAAIgjB,GAAK/e,KAAK0yE,IAEd,OAAOxuE,UAAU7C,OACXrB,KAAKgyB,MAAuB,mBAAVj2B,MAhB1B,SAASg5E,iBAAiBh2D,GAAIhjB,OAC5B,OAAO,WACL+O,aAAI9K,KAAM+e,IAAIuzD,UAAYv2E,MAAMsB,MAAM2C,KAAMkE,aAIhD,SAAS8wE,iBAAiBj2D,GAAIhjB,OAC5B,OAAOA,OAASA,MAAO,WACrB+O,aAAI9K,KAAM+e,IAAIuzD,SAAWv2E,SAUCgjB,GAAIhjB,QAC1BJ,aAAIqE,KAAK8iB,OAAQ/D,IAAIuzD,UX0C3BC,KYtDa,SAASx2E,OACtB,IAAIgjB,GAAK/e,KAAK0yE,IAEd,OAAOxuE,UAAU7C,OACXrB,KAAKgyB,KAXb,SAASijD,aAAal2D,GAAIhjB,OACxB,GAAqB,mBAAVA,MAAsB,MAAM,IAAI4N,MAC3C,OAAO,WACLmB,aAAI9K,KAAM+e,IAAIwzD,KAAOx2E,OAQPk5E,CAAal2D,GAAIhjB,QAC3BJ,aAAIqE,KAAK8iB,OAAQ/D,IAAIwzD,MZkD3Bz3D,Ia9Da,WACb,IAAIw4D,IAAKC,IAAKrtB,KAAOlmD,KAAM+e,GAAKmnC,KAAKwsB,IAAK5xD,KAAOolC,KAAKplC,OACtD,OAAO,IAAIo0D,QAAQ,SAASr7D,QAASs7D,QACnC,IAAIC,QAAUr5E,MAAOo5E,QACjBr6D,KAAO/e,MAAO,SAAAA,QAA4B,KAAT+kB,MAAYjH,YAEjDqsC,KAAKl0B,KAAK,WACR,IAAIwgD,SAAW1nE,aAAI9K,KAAM+e,IACrB5U,GAAKqoE,SAASroE,GAKdA,KAAOmpE,OACTC,KAAOD,IAAMnpE,IAAIspB,QACbztB,EAAEovE,OAAO9wE,KAAK8wE,QAClB7B,IAAIvtE,EAAEqvE,UAAU/wE,KAAK8wE,QACrB7B,IAAIvtE,EAAE8U,IAAIxW,KAAKwW,MAGjB03D,SAASroE,GAAKopE,UCjBpB,IAAI+B,eACFj/B,KAAM,KACNs6B,MAAO,EACP2B,SAAU,IACVC,KAAMgD,YAGR,SAASrC,mBAAQpwD,KAAM/D,IAErB,IADA,IAAIizD,SACKA,OAASlvD,KAAKovD,iBAAmBF,OAASA,OAAOjzD,MACxD,KAAM+D,KAAOA,KAAKgF,YAChB,OAAOwtD,cAAcj/B,KAAO+5B,MAAOkF,cAGvC,OAAOtD,OCfTt0B,cAAU9gD,UAAUy4E,UCFL,SAASh6E,MACtB,OAAO2E,KAAKgyB,KAAK,YCDJ,SAASlP,KAAMznB,MAC5B,IACIm3E,SACA7E,OAEA7yE,EAJAm3E,UAAYnvD,KAAKovD,aAGjB//C,OAAQ,EAGZ,GAAK8/C,UAAL,CAIA,IAAKn3E,KAFLO,KAAe,MAARA,KAAe,KAAOA,KAAO,GAE1B42E,WACHO,SAAWP,UAAUn3E,IAAIO,OAASA,MACvCsyE,OAAS6E,SAASH,MAAQX,UAAYc,SAASH,MAAQR,OACvDW,SAASH,MAAQP,MACjBU,SAAS9B,MAAM7/C,OACf2hD,SAASroE,GAAGlP,KAAK0yE,OAAS,YAAc,SAAU7qD,KAAMA,KAAKshD,SAAUoO,SAAS9wE,MAAO8wE,SAASznC,cACzFknC,UAAUn3E,IAL8Bq3B,OAAQ,EAQrDA,cAAcrP,KAAKovD,cDlBrBmD,CAAUr1E,KAAM3E,SDCpBqiD,cAAU9gD,UAAUyhD,WDiBL,SAAShjD,MACtB,IAAI0jB,GACAizD,OAEA32E,gBAAgBy3E,YAClB/zD,GAAK1jB,KAAKq3E,IAAKr3E,KAAOA,KAAK03E,QAE3Bh0D,GAAKi0D,SAAUhB,OAASsD,eAAej/B,KAAO+5B,MAAO/0E,KAAe,MAARA,KAAe,KAAOA,KAAO,IAG3F,IAAK,IAAI2sE,OAAShoE,KAAKkoE,QAAShtE,EAAI8sE,OAAO3mE,OAAQgF,EAAI,EAAGA,EAAInL,IAAKmL,EACjE,IAAK,IAAyCyc,KAArCioB,MAAQi9B,OAAO3hE,GAAI9J,EAAIwuC,MAAM1pC,OAAcvG,EAAI,EAAGA,EAAIyB,IAAKzB,GAC9DgoB,KAAOioB,MAAMjwC,KACf03E,oBAAS1vD,KAAMznB,KAAM0jB,GAAIjkB,EAAGiwC,MAAOinC,QAAUkB,mBAAQpwD,KAAM/D,KAKjE,OAAO,IAAI+zD,WAAW9K,OAAQhoE,KAAKmoE,SAAU9sE,KAAM0jB,oTI7BrD,IAAMy2D,6BAAgB,SAAhBA,cAAgBC,SAAO,OAAI//D,WAAO+/D,UAUlCC,YAAc,SAAdA,YAAe1gD,OAAQ2gD,SAAUnvE,KAAMk9D,UAAoC,IAA1BkS,UAA0B1xE,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAAV2xE,MAAU3xE,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,GACxE83B,kBAAkBmgC,aAAengC,kBAAkB8gD,cACpD9gD,OAASwgD,6BAAcxgD,SAG3B,IAMIppB,OANEmqE,YAAcrS,SAAWA,SAAS,GAAK,KACzCsS,aAAe,KACfC,eAAiB,KACjBR,QAAU,KACVS,SAAW,KACXC,SAAW,KAEXJ,YACoB,MAAhBA,aACAC,aAAe,KACfC,eAAiBvS,WAEjBsS,aAAe,QACfC,eAAiC,MAAhBvS,SAAS,GAAaA,SAAtB,IAAAp+D,OAAqCo+D,YAG1DuS,eAAiBN,SACjB/pE,QAAS,GAEb6pE,QAAUzgD,OAAO2oB,UAAUs4B,gBAE3BrqE,SAAW6pE,QAAUA,QAAQ7pE,OAAO,WAChC,OAAO5L,KAAK8nB,aAAekN,OAAOlS,UAItCozD,UAFAT,QAAUA,QAAQjvE,KAAKA,KAAMqvE,QAEV73B,QACMvwB,OAAOkoD,UAAY,OAC5CC,UAAU53B,OAASk4B,SAASlkD,KAAK,WAAqB,QAAAonC,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MAClDuc,UAAU53B,MAAV3gD,MAAAu4E,WAAgBJ,6BAAcx1E,OAArBsF,OAA+BsR,WAG5Cu/D,SAAWD,SAAS/3B,MAAMs3B,SAC1BG,UAAU9nD,QAAUqoD,SAASnkD,KAAK,WAAqB,QAAAokD,MAAAlyE,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6wE,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAARz/D,OAAQy/D,OAAAnyE,UAAAmyE,OACnDT,UAAU9nD,OAAVzwB,MAAAu4E,WAAiBJ,6BAAcx1E,OAAtBsF,OAAgCsR,WAExB,UAAjBo/D,aACAG,SAASzL,QAAwB,MAAhBqL,YAAsBrS,SAAS3gE,UAAU,EAAG2gE,SAASriE,QAAUqiE,UAAU,GAClE,OAAjBsS,cACPG,SAASl4B,KAAK,KAAMylB,SAAS3gE,UAAU,EAAG2gE,SAASriE,SAEvD,IAAMi1E,QAAUb,QAAQ33B,OASxB,OAPI83B,UAAU93B,KACVw4B,QAAQtkD,KAAK,WAAqB,QAAAkvC,MAAAh9D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA27D,OAAAE,MAAA,EAAAA,MAAAF,MAAAE,QAARxqD,OAAQwqD,OAAAl9D,UAAAk9D,OAC9BwU,UAAU93B,KAAVzgD,MAAAu4E,WAAeJ,6BAAcx1E,OAApBsF,OAA8BsR,WAG3C0/D,QAAQrkD,SAELkkD,UASLI,WAAa,SAAbA,WAAc5xD,KAAMiG,UAItB,OAHApvB,OAAOkS,QAAQkd,UAAUllB,QAAQ,SAACtK,GAC9BupB,KAAKzE,MAAM9kB,EAAE,GAAIA,EAAE,aAEhBupB,MAiBL6xD,gBAAkB,SAAlBA,gBAAmBf,QAASgB,OAC9B,IAAK,IAAMp6E,OAAOo6E,WACP55E,eAAe5B,KAAKw7E,MAAOp6E,MAC9Bo5E,QAAQx3B,KAAK5hD,IAAKo6E,MAAMp6E,OAY9Bq6E,wBAAW,SAAXA,SAAYjB,QAASgB,MAAOhvD,WAO9B,OANMguD,mBAAmB/3B,gBACrB+3B,QAAUD,6BAAcC,eAEdv4E,IAAduqB,UAA0BguD,QAAQ93B,UAAR,IAAAr4C,OAAsBmiB,YAAauK,KAAK,WAC9DwkD,gBAAgB9gE,WAAO1V,MAAOy2E,SAC7BD,gBAAgBf,QAASgB,OACvBhB,SAyCLkB,yBAAY,SAAZA,UAAalB,QAASmB,QAIxB,IAAK,IAAMv6E,OAHLo5E,mBAAmB/3B,gBACrB+3B,QAAUD,6BAAcC,UAEVmB,YACP/5E,eAAe5B,KAAK27E,OAAQv6E,MAC/Bo5E,QAAQv1D,MAAM7jB,IAAKu6E,OAAOv6E,MAGlC,OAAOo5E,SAYLoB,8BAAiB,SAAjBA,eAAkBjgE,QACpB,IACIpQ,KACAm0D,IAFE37C,UAAYtJ,WAAOkB,OAAOoI,WAKZ,iBADpBxY,KAAOoQ,OAAOpQ,QAEVA,KAAOjB,MAAMiB,MAAMkT,OAAO1U,IAAI,SAAC5J,EAAGN,GAAJ,OAAUA,KAE5C6/D,IAAM37C,UAAU2+B,UAAU/mC,OAAO8sD,UAAUl9D,KAAKA,OAEhDm0D,IAAM37C,UAAU2+B,UAAU/mC,OAAO8sD,UAAU93D,OAAO,WAC9C,OAAO5L,KAAK8nB,aAAe9I,UAAU8D,SACtCtc,KAAKoQ,OAAOpQ,OAEYw3C,QAAQvwB,OAAO7W,OAAO6W,QAAQ0wB,MAAMwc,KAAK3oC,KAAK,SAAU52B,EAAGN,GAClF8b,OAAOob,KAAK52B,EAAGsa,WAAO1V,MAAOlF,KAGlBmjD,KAAK,QAASrnC,OAAO6Q,WAAa,IACjDkzC,IAAI7c,OAAO7rB,UA0CT6kD,8BAAiB,SAAjBA,iBACF,IAAMC,IAAMC,UAAW35E,WAAX,EAAA6G,WACZ,OACIgX,EAAG67D,IAAI,GACPj0E,EAAGi0E,IAAI,KAeTE,wBAAW,SAAXA,WAAW,OAAMC,UAMjBC,yBAAY,SAAZA,YAAY,OAAMC,UAElBC,qCAAwB,SAAxBA,sBAAyBtsC,MAAOusC,KAClC,IAAIC,OAEEC,gBACFC,eAAgB,GAEdhwD,UAA2B,iBAAR6vD,IAAmBA,IAAOA,eAAe/xE,MAAQ+xE,IAAI/0E,KAAK,UAAOrF,EAGtFq6E,OADAxsC,MAAMjoB,iBAAkBqyC,YACfpqB,MAAMtd,OAAO,OAAOu9C,KAPhB,KASJjgC,MAAMtd,OAAO,QAAQ/M,KATjB,KAYb+G,UACA8vD,OAAOt5B,KAAK,QAASx2B,WACC,WAAfiwD,sBAAOJ,cACPA,IAAI,gBACX9c,eAAegd,eAAgBF,MAGnCC,OAAOr3D,MAAMs3D,gBACb,IAAMG,cAAgBj9E,OAAOwsC,iBAAiBqwC,OAAOz0D,QAC/C80D,oBACFj2D,SAAUg2D,cAAch2D,SACxBC,WAAY+1D,cAAc/1D,WAC1BC,WAAY81D,cAAc91D,WAC1BC,UAAW61D,cAAc71D,WAK7B,OAFAy1D,OAAOtlD,SAEA2lD,oBAGLC,SAAW,SAAXA,WAAW,MAAM,iBAAkBt5D,SAASwoB,o9CCvTlD,IAAM+wC,SAAW,SAAXA,SAAYh6D,IAAK07C,OAA4B,IAArBhG,IAAqBtvD,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,GAAf,qBAOhC,OANAs1D,MAAM9zD,QAAQ,SAAC0Z,MACNtB,IAAIsB,QACLtB,IAAIsB,MAAQo0C,OAEhB11C,IAAMA,IAAIsB,QAEPtB,KAGLi6D,gBAAkB,SAAlBA,gBAAmBC,UAAWphE,OAAQqhE,MAApB,OAA6BrhE,OAAO5R,IAAI,SAAC4zD,MAAO99D,GACpE,IAAMskB,KAAO44D,UAAUl9E,GAEvB,OAAO89D,MAAM5zD,IAAI,SAAAwuD,KAAG,YAAat2D,IAARs2D,KAA6B,OAARA,IAAeA,IAAMA,IAAIykB,KAAK74D,YAsB1E84D,YAAc,SAAdA,YAAeC,SAAUC,QAASC,YAAe,IAAAC,2BAAA,EAAAC,mBAAA,EAAAC,oBAAAt7E,EAAA,IACnD,QAAAu7E,MAAAC,UAAkBN,QAAQh0E,OAA1BvI,OAAA8J,cAAA2yE,2BAAAG,MAAAC,UAAAnuE,QAAAC,MAAA8tE,2BAAA,EAAkC,KAAvBj8E,IAAuBo8E,MAAA18E,MAC9Bo8E,SAAS97E,MACL2mB,QAASq1D,WAAWh8E,KACpB47E,KAAMG,QAAQz8E,IAAIU,KAAKs8E,WAJoB,MAAAC,KAAAL,mBAAA,EAAAC,eAAAI,IAAA,YAAAN,2BAAA,MAAAI,UAAA,QAAAA,UAAA,oBAAAH,kBAAA,MAAAC,gBAOnD,OAAOL,UAiCLU,uBAAmB,SAAnBA,iBAAoB71D,QAAShc,MAAqB,QAAAoyD,KAAAl1D,UAAA7C,OAAZ6d,QAAY,IAAA3Z,MAAA6zD,KAAA,EAAAA,KAAA,KAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAZn6C,QAAYm6C,KAAA,GAAAn1D,UAAAm1D,MAAA,IAC7Cyf,SAAsD55D,QADT,GACnC65D,SAA4C75D,QADT,GACzB85D,YAAkC95D,QADT,GAAA+5D,UACS/5D,QADT,GACZg6D,kBADY,IAAAD,uBAEhDzf,MAAQsf,SAEPvzE,MAAMC,QAAQszE,YACftf,OAASsf,WALuC,IAQjC38E,GAAO+8E,aAAlB/V,UACFgW,WAAc,SAACnB,UAAWoB,cAAZ,OAA6B,WAAe,IACrCC,QAA+Cr2D,QAA9Ds2D,cAA0CC,gBAAoBv2D,QAAtCw2D,iBAEhC,IAAKxB,UAAUpiE,KAAK,SAAAwJ,MAAI,OAAI85C,WAAWqgB,gBAAiBn6D,KAAM,cAAc,SAAAg3D,MAAAlyE,UAAA7C,OAH3BuV,OAG2B,IAAArR,MAAA6wE,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAH3Bz/D,OAG2By/D,OAAAnyE,UAAAmyE,OACxE,GAAI+C,aAAc,CACd,IAAMK,aAAez2D,QAAQ02D,qBAAqBN,cAC5Cf,WAAar1D,QAAQ22D,YAAYP,cACjCQ,eAsBN,IAAK,IAAMv9E,OApBX27E,UAAUtyE,QAAQ,SAAC0Z,MACf,IAAMy6D,WAAa5lB,aAAaiF,WAAWmgB,QAASj6D,KAAMpY,UACpDulB,UAAYktD,aAAar6D,MAAM06D,cAC/BC,SAAWR,gBAAgBn6D,MAAMpY,MAEvC,IAAK,IAAMgzE,MAAMH,WAAY,CACzB,IAAMI,MAAQhmB,aAAa8lB,SAASC,KAAOE,IAAK,IAC1CA,IAAQD,MAARC,IAEFA,IAAM,IACNhC,YAAY0B,YAAartD,UAAUytD,IAAK3B,YACxC6B,OAGAA,KAAO,UACAL,WAAWG,IAEtBC,MAAMC,IAAMA,OAGFN,YAAa,CAC3B,IAAM97D,IAAM87D,YAAYv9E,KAExB08E,SAAQ17E,WAAR,GAASygB,IAAIkF,SAAb1d,OAAA60E,wBAAyBpC,gBAAgBC,UAAWphE,OAAQkH,IAAIm6D,eAGpEc,SAAQ17E,WAAR,EAAYuZ,UAnCJ,CAsCjB4iD,MAAOr9D,IAEJ+B,GAAK8kB,QAAQnL,MAAM7Q,MAAMwyD,MAAO2f,WAAYH,aAE9C78E,IAjFmB,SAArBi+E,mBAAsB3sE,MAAO+rD,MAAO0f,aAAclyE,MAAS,IAEnCqzE,oBAEtB5sE,MAFAisE,qBACkBH,gBAClB9rE,MADA+rE,iBAGAc,aAEApB,aAFAoB,aACWn+E,GACX+8E,aADA/V,UAGJ2U,SAASuC,qBAAsBl+E,KAC/Bq9D,MAAM9zD,QAAQ,SAAC0Z,MACX,IAAM06D,cAAgB7lB,aAAaiF,WAAWmhB,oBAAqBl+E,GAAIijB,KAAM,oBACzE86D,IAAMjmB,aAAaiF,WAAWqgB,gBAAiBn6D,KAAMpY,KAAM,OAAQ,GAEvEkzE,MACAI,cAAgBR,cAAcx1E,KAAKg2E,cACnCD,oBAAoBl+E,IAAIijB,OACpBk7D,aAAcR,cACdS,SAAU/gB,MACVsgB,kBAEJhC,SAASyB,iBAAkBn6D,KAAMpY,OACjCuyE,gBAAgBn6D,MAAMpY,OAClBkzE,QACAM,SAAUN,OAyDdE,CAAmBp3D,QAASw2C,MAAO0f,aAAclyE,MA/G1B,SAAzByzE,uBAA0BvB,aAAch7E,GAAI8kB,SAC9C,IAAI3mB,IAAM68E,aAAa78E,IACjB8mE,UAAY+V,aAAan6D,GACzBwN,UAAYvJ,QAAQ03D,WAE1B,GAAIvX,UAAW,EACV52C,UAAU5wB,IAAIwnE,YAAe52C,UAAUzhB,IAAIq4D,UAAW,IAAIv4D,KAC3D,IAAM+vE,mBAAqBpuD,UAAU5wB,IAAIwnE,WAEpC9mE,MACDA,IAAMs+E,mBAAmB75D,MAE7B65D,mBAAmB7vE,IAAIzO,IAAK6B,SAE5B7B,IAAMA,KAAOkwB,UAAUzL,KACvByL,UAAUzhB,IAAIzO,IAAK6B,IAkGvBu8E,CAAuBvB,aAAch7E,GAAI8kB,UAYvCiQ,gBAAY,SAAZA,YAAY,OAAM,IAAIroB,KAEtBgwE,eAAiB,OAAQ,MAEzBC,gBAAkB,SAAlBA,gBAAmB73D,QAAShe,IAAK81E,SAAY,IACzBC,IAA+BD,QAA7CR,aAAmBl7D,KAA0B07D,QAA1B17D,KACrBg5D,QAD+C0C,QAApBvB,gBACDn6D,MAOhC,GALAw7D,cAAcl1E,QAAQ,SAACsB,MACfA,QAAQoxE,gBACDA,QAAQpxE,MAAM+zE,OAGzB/1E,IAAI6F,IAAIkwE,KAAM,CACd,IAAMh/E,MAAQinB,QAAQrnB,IAAIyjB,MAEtBrjB,iBAAiBP,QAAUu/E,OAAOh/E,cAC3BA,MAAMg/E,KAEjB/1E,IAAG,OAAQ+1E,OAaNC,YAAb,WAMI,SAAAA,MAAallE,4JAAQmlE,CAAAj7E,KAAAg7E,OAEjBh7E,KAAK6X,MAAQqjE,mBAAM9+E,OAAO0Z,QAC1B9V,KAAK06E,WAAa,IAAI9vE,IACtB5K,KAAK05E,wBACL15E,KAAK25E,eACL35E,KAAKm7E,YACLn7E,KAAKs5E,iBACLt5E,KAAKo7E,gBACLp7E,KAAKw5E,oBACLx5E,KAAKq7E,SAAU,EAhBvB,2NAAAC,CAAAN,QAAA3+E,IAAA,YAAAN,MAAA,SAAAw/E,YAsBQ,OAFAv7E,KAAK6X,MAAM2jE,OACXx7E,KAAKq7E,SAAU,EACRr7E,QAtBf3D,IAAA,cAAAN,MAAA,SAAA0/E,cA4BQ,OAFAz7E,KAAKq7E,SAAU,EACfr7E,KAAK6X,MAAM6jE,SACJ17E,QA5Bf3D,IAAA,YAAAN,MAAA,SAAAuf,YAuCQ,OAAOtb,KAAK6X,MAAMyD,eAvC1Bjf,IAAA,cAAAN,MAAA,SAAA4/E,YA0CiBniB,OAAO,IAAAoiB,MAAA57E,KAOhB,OANAw5D,MAAM9zD,QAAQ,SAAC0Z,MACXw8D,MAAKT,SAAS/7D,OACVy8D,QAAQ,EACRC,YAGD97E,QAjDf3D,IAAA,gBAAAN,MAAA,SAAAggF,cAoDmBviB,OAAO,IAAAwiB,OAAAh8E,KACZ65E,WAAa75E,KAAKm7E,SA0BxB,OAxBAn7E,KAAKu7E,YACL/hB,MAAM9zD,QAAQ,SAAC0Z,MACXy6D,WAAWz6D,MAAMy8D,QAAS,EAC1B,IAAMI,eACEH,MAAUjC,WAAWz6D,MAArB08D,MAERA,MAAMp2E,QAAQ,SAACkR,QAAW,IAAAslE,QAAAC,oBACevlE,OADf,GACfwlE,SADeF,QAAA,GACLngF,MADKmgF,QAAA,GACE/Y,UADF+Y,QAAA,GAGtB,GAAI/Y,UAAW,CACX,IAAMiV,QAAUN,SAASmE,aAAcG,SAAUjZ,YAEjD3nE,OAAO0M,OAAOkwE,QAASr8E,UAG/B+/E,MAAMp2E,QAAQ,SAACkR,QAAW,IAAAylE,SAAAF,oBACevlE,OADf,GACfwlE,SADeC,SAAA,GACLtgF,MADKsgF,SAAA,GACElZ,UADFkZ,SAAA,GAGtBL,OAAKM,OAAOF,SAAUA,YAAYH,YAAcA,YAAYG,UAAUjZ,WAAapnE,MAC/EonE,oBAED0W,WAAWz6D,QAEtBpf,KAAKy7E,cACEz7E,QA/Ef3D,IAAA,kBAAAN,MAAA,SAAAwgF,gBAkFqBxB,IAAK5X,UAAWngD,SAE7B,IAAMuJ,UAAYvsB,KAAK05E,qBAAqBvW,WACtCoW,gBAAkBv5E,KAAKw5E,iBAE7B1B,SAAS93E,KAAK25E,aAAcxW,YAC5BnjE,KAAK25E,YAAYxW,WAAW4X,KAAO/3D,QANG,IAAAizC,MAAA,SAAAA,MAO3B55D,KACP,IAAMyhB,IAAMyO,UAAUlwB,KAChB+7E,QAAUmB,gBAAgBl9E,KAC1BmgF,QAAU5B,cAAc3vE,OAAO,SAACwxE,IAAKz1E,MACvC,IAAMwsD,IAAMS,aAAaiF,WAAWkf,QAASpxE,KAAM,OAAQ,GAE3D,OADAwsD,MAAQipB,IAAIz1E,MAAQwsD,KACbipB,SAEHlC,SAA0Cz8D,IAA1Cy8D,SAAUT,cAAgCh8D,IAAhCg8D,cAAeQ,aAAiBx8D,IAAjBw8D,cAClBA,aAAaj5E,OAASi5E,cAAgBS,MAE9Cr1E,QAAQ,SAACvJ,IACZ,IAAMugF,MAAQvgF,cAAckJ,SAAWlJ,GAAG6mB,SAAW7mB,GAC/C61C,MA/IK,SAArB2qC,mBAAsB3qC,MAAO31C,KAC/B,OAAI21C,iBAAiBx2C,QACTw2C,MAAM31C,MACP21C,iBAAiBzsC,MACjBysC,OAEHA,OAyIkB2qC,CAAmBD,MAAOrgF,KAClCs8E,SAAW4B,SAAStvE,OAAO,SAACwxE,IAAKr9D,MAEnC,OADAq9D,IAAIr9D,MAAQjjB,cAAckJ,SAAWq3E,MAAMt9D,MAAQjjB,GAC5CsgF,SAGXzqC,MAAMtsC,QAAQ,SAACs0E,IAKX,IAAK,IAAMhzE,QAJX8wE,SAASgC,eAAgBE,IAAK/mD,iBAAWnoB,IAAIiwE,KACzCpC,oBAGe6D,QAAS,CACxB1E,SAASM,SAAUpxE,KAAMgzE,KACzB,IAAME,IAAMsC,QAAQx1E,MAEpBoxE,QAAQpxE,MAAMgzE,KACVE,QACAM,SAAUN,WA9B9B,IAAK,IAAM79E,OAAOkwB,UAAW0pC,MAAlB55D,KAoCX,OAAO2D,QA7Hf3D,IAAA,SAAAN,MAAA,SAAAugF,OAuIYF,SAAUrgF,MAAOonE,WAAoC,IAAzByZ,gBAAyB14E,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,IAAAA,UAAA,GACrD24E,aAAe9gF,MACbs9E,QAAUr5E,KAAKm7E,SACf2B,aAAe98E,KAAKs5E,cACpBuC,OAAS3iB,WAAWmgB,QAAS+C,SAAU,UACvC7C,gBAAkBv5E,KAAKw5E,iBAAiB4C,cAI9C,GAFA7C,gBAAgBwD,SAAWH,gBAEvBf,OAEA,OADAxC,QAAQ+C,UAAUN,MAAMx3E,MAAM83E,SAAUrgF,MAAOonE,YACxCnjE,KAGX,GAAImjE,UAAW,CACX,GAAInjE,KAAKq7E,QAAS,CACd,IAAMY,YAAcnE,SAAS93E,KAAKo7E,cAAegB,WACjDH,YAAY9Y,WAAapnE,MACzB8gF,aAAeZ,iBAEfY,aAAe5oB,aAAaj0D,KAAKrE,IAAIygF,eACxBjZ,WAAapnE,MAG9B6+E,cAAcl1E,QAAQ,SAACsB,MACnB8wE,SAASgF,cAAeV,SAAUp1E,OAClC81E,aAAaV,UAAUp1E,MAAMm8D,YAAa,EACtCjK,WAAWqgB,gBAAiBvyE,KAAMm8D,aAClCoW,gBAAgBvyE,MAAMm8D,WAAW+W,IAAMX,gBAAgBvyE,MAAMm8D,WAAWqX,YAMpF,OADAx6E,KAAK6X,MAAMuH,KAAKg9D,SAAUS,cACnB78E,QAzKf3D,IAAA,yBAAAN,MAAA,SAAAihF,yBAoLiE,QAAA9b,MAAAh9D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA27D,OAAAE,MAAA,EAAAA,MAAAF,MAAAE,QAARxqD,OAAQwqD,OAAAl9D,UAAAk9D,OAEzD,OADAyX,uBAAgBx7E,WAAhB,GAAiB2C,KAAM,QAAvBsF,OAAkCsR,SAC3B5W,QAtLf3D,IAAA,4BAAAN,MAAA,SAAAkhF,4BAiMqE,QAAAC,MAAAh5E,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA23E,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAARvmE,OAAQumE,OAAAj5E,UAAAi5E,OAC7DtE,uBAAgBx7E,WAAhB,GAAiB2C,KAAM,MAAvBsF,OAAgCsR,YAlMxCva,IAAA,MAAAN,MAAA,SAAAJ,IA6MSygF,SAAU9B,cACX,IAAMv+E,MAAQiE,KAAK6X,MAAMuH,KAAKg9D,UAC9B,OAAO9B,aAAev+E,OAASA,MAAMu+E,cAAgBv+E,SA/M7DM,IAAA,WAAAN,MAAA,SAAAqhF,SA0NchB,SAAUrD,UAChB,OAAO/4E,KAAK6X,MAAMwlE,eAAejB,SAAUrD,aA3NnD18E,IAAA,SAAAN,MAAA,SAAA0xB,SA8NuB,IAAA6vD,YAEf,OADAA,YAAAt9E,KAAK6X,OAAM4V,OAAXpwB,MAAAigF,YAAAp5E,WACOlE,QAhOf3D,IAAA,iBAAAN,MAAA,SAAAwhF,iBAqOQ,OADA/hF,OAAOgc,OAAOxX,KAAK06E,YAAYh1E,QAAQ,SAAAxH,IAAE,OAAIA,OACtC8B,QArOf3D,IAAA,cAAAN,MAAA,SAAAyhF,cAwOoC,IAAnBtE,aAAmBh1E,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MACpB6a,GAAYm6D,aAAZn6D,GAAI1iB,IAAQ68E,aAAR78E,IACNohF,aAAez9E,KAAK06E,WACpBnuD,UAAYkxD,aAAa9hF,IAAIojB,IAEnC,GAAI1iB,IAAK,CACL,IAAM6B,GAAKu/E,aAAa9hF,IAAIU,KAE5B6B,IAAMA,SACH,KAAAw/E,4BAAA,EAAAC,oBAAA,EAAAC,qBAAA1gF,EAAA,IACH,QAAA2gF,OAAAC,WAAiBvxD,UAAU/U,SAA3B3b,OAAA8J,cAAA+3E,4BAAAG,OAAAC,WAAAvzE,QAAAC,MAAAkzE,4BAAA,EAAqC,EACjCx/E,EADiC2/E,OAAA9hF,UADlC,MAAA68E,KAAA+E,oBAAA,EAAAC,gBAAAhF,IAAA,YAAA8E,4BAAA,MAAAI,WAAA,QAAAA,WAAA,oBAAAH,mBAAA,MAAAC,iBAIHH,aAAa3yE,IAAIiU,OAErB,OAAO/e,QAvPf3D,IAAA,qBAAAN,MAAA,SAAAgiF,mBA0PwBzD,aAAcnX,WAAW,IAEf6a,YAGtBh+E,KAHA05E,qBACarB,WAEbr4E,KAFA25E,YACkBJ,gBAClBv5E,KADAw5E,iBAEEC,aAAeuE,YAAY7a,WAEjC,IAAK,IAAM/jD,QAAQq6D,aAAc,KACrBK,cAAkBL,aAAar6D,MAA/B06D,cACFgB,SACFR,0BACAl7D,UACAm6D,iCAGJ,GAAIO,cAAcQ,cACdO,gBAAgB76E,KAAM85E,cAAcQ,cAAeQ,gBAC5ChB,cAAcQ,mBAErB,IAAK,IAAMn+E,MAAM29E,cAAe,CAC5B,IAAMmE,OAASnE,cAAc39E,IAE7B0+E,gBAAgB76E,KAAMi+E,OAAQnD,SACzBmD,OAAOn9D,aACDg5D,cAAc39E,KAMrC,cADOk8E,WAAWlV,WAAWmX,cACtBt6E,SAzRfg7E,MAAA,GAgTakD,iBAAa,SAAbA,WAAcC,OAAQj/D,QAASrH,OAA6B,IACjEumE,KAD2ClF,aAAsBh1E,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAE/DuJ,MAAQoK,iBAAiBmjE,YAAQnjE,MAAQ,IAAImjE,gBAC7CqD,cACElb,UAA4B+V,aAA5B/V,UAAWmX,aAAiBpB,aAAjBoB,aAEnB,IAAK,IAAMl7D,QAAQF,QACf,MAAOriB,eAAe5B,KAAKikB,QAASE,MAAO,CACvCg/D,KAAOl/D,QAAQE,MACf,IAAMk/D,cAAgBnb,UAAS,GAAA79D,OAAM69D,UAAN,KAAA79D,OAAmB8Z,MAASA,KAE3D,GAAIk7D,aAAc,CACd,IAAMv+E,MAAQk4D,aAAaxmD,MAAM9R,IAAI2iF,mBACrCviF,MAAMu+E,cAAgB8D,KAAKriF,MAC3BsiF,WAAWC,eAAiBviF,WAE5BsiF,WAAWj/D,MAAQg/D,KAAKriF,MAG5BoiF,OAAO/+D,MAAS,SAAC4D,QAAS9O,KAAMqqE,QAAhB,OAA2B,WAAe,QAAAC,MAAAt6E,UAAA7C,OAAXuV,OAAW,IAAArR,MAAAi5E,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAX7nE,OAAW6nE,OAAAv6E,UAAAu6E,OAEtD,GADkB7nE,OAAOvV,OACV,KAAAq9E,uBAC6BxqE,UAAhCyqE,6CADG,IAAAD,6CAGPlrB,IAAMmrB,oBAAsB/nE,OAASA,OAAO,GAEhD,GAAI1C,KAAM,CACN,IAAIsD,OACEonE,QAAU57D,QAAQrnB,IAAI4iF,OAAQjE,cAC5B3gB,aAA0CzlD,KAA1CylD,aAAcklB,UAA4B3qE,KAA5B2qE,UAAWC,aAAiB5qE,KAAjB4qE,aAOjC,GAN4B,mBAAjBnlB,eAEPnG,IAAMmG,aAAanG,IAAKorB,QAAST,SAIZ,mBAAdU,UACiBA,UAAUrrB,OAG9Bh8C,OAASg8C,SAEe,iBAAdqrB,WAAwC,gBAAdA,UACpCrrB,KAAOA,IAAI5tD,YAAYvK,OAASyjF,eAChCtnE,OAASg8C,KAGbh8C,OAASg8C,IAGb,IAAMoG,OAAS1lD,KAAK0lD,OACdmlB,UAAYpxD,QAAQ3K,QAAQrnB,IAAI4iF,OAAQjE,eAC9C1gB,QAAUA,OAAOpiD,OAAQ2mE,QACrBQ,qBACAI,UAAUr5E,QAAQ,SAAC3J,MAAOjB,QACJoC,IAAdsa,OAAO1c,KACP0c,OAAO1c,GAAKiB,SAIxByb,QAAUwL,QAAQs5D,OAAOiC,OAAQ/mE,OAAQ8iE,mBAEzCt3D,QAAQs5D,OAAOiC,OAAQ/qB,IAAK8mB,cAEhC,OAAO6D,OAGX,OAAOn7D,QAAQrnB,IAAI4iF,OAAQjE,eAhDf,CAiDb7sE,MAAO2wE,KAAKlqE,KAAMoqE,cAAe/4E,MAAMC,QAAQ44E,KAAKriF,QAI/D,GAAIu+E,aACA,IAAK,IAAMj+E,OAAOgiF,WACd5wE,MAAM6uE,OAAOjgF,IAAKgiF,WAAWhiF,KAAKi+E,cAAeA,wBAEhCp9E,IAAdimE,UACP11D,MAAMggB,OAAO4wD,YAEb5wE,MAAMggB,OAAO01C,UAAWkb,YAG5B,OAAQF,OAAQ1wE,oHCljBduxE,QACF,cACA,eACA,UACA,aACA,QACA,eACA,UACA,gBAaEC,eATF,SACA,OACA,QACA,OACA,gBACA,SACA,WAKSv5E,QAAQ,SAACw5E,aAClBF,OAAOt5E,QAAQ,SAACygE,OACZ8Y,WAAW36E,KAAX,GAAAgB,OAAmB45E,YAAnB,KAAA55E,OAAkC6gE,YAI3B8Y,+TClBf,IAAM7yD,2BAAW,SAAXA,SAAW+yD,WAAS,OAAI,SAAAC,cAAY,OAAID,UAAUC,gBASlDC,OAAS,SAATA,OAAU/6C,OAAQ3nC,UAAT,OAAsBnB,OAAOoB,UAAUC,eAAe5B,KAAKqpC,OAAQ3nC,WClBnE2iF,6BDkCX,SAAAA,mLAAeC,CAAAv/E,KAAAs/E,kBACXt/E,KAAKw/E,WAAaP,WAClBj/E,KAAKy/E,UAAY,IAAI70E,IACrB5K,KAAK0/E,cACL1/E,KAAK2/E,eACL3/E,KAAK4/E,yBACL5/E,KAAK6/E,8TASL7/E,KAAK0/E,WAAa1/E,KAAKw/E,WAAWv0E,OAAO,SAACwxE,IAAKphF,MAE3C,OADAohF,IAAIphF,MAAQ+wB,2BACLqwD,SAEXz8E,KAAK8/E,6DAWCC,WACN,OAAO//E,KAAKy/E,UAAU9jF,IAAIokF,6EAURA,WAAW,IAAAnE,MAAA57E,KAC7B,OAAO,IAAIk1E,QAAQ,SAACr7D,SAChB+hE,MAAK8D,WAAWK,WAAa3zD,2BAASvS,uEAU1B,IAAAmiE,OAAAh8E,KAChBA,KAAKw/E,WAAW95E,QAAQ,SAACq6E,WACrB,IAAMC,QAAUhE,OAAKiE,qBAAqBF,WAC1C/D,OAAKyD,UAAU30E,IAAIi1E,UAAWC,SEpFb,SAAhBE,cAAiBF,QAASD,UAAW/8D,SAC9Cg9D,QAAQG,KAAK,WACT,IAAMC,IAAMp9D,QAAQi9D,qBAAqBF,WACzC/8D,QAAQy8D,UAAU30E,IAAIi1E,UAAWK,KACjCF,cAAcE,IAAKL,UAAW/8D,WFiF1Bk9D,CAAcF,QAASD,UAAW/D,kEAezB+D,UAAWX,cACxBp/E,KAAK0/E,WAAWK,WAAWX,oDAYvBA,cAGJ,IAAMF,YAAcE,aAAaiB,YAAcjB,aAAakB,OAAO16E,YAAYy6E,aAC/EjB,aAAaiB,WAAanB,YAC1Bl/E,KAAKugF,4BACLvgF,KAAKwgF,QAAQtB,YAAaE,sDAcrBF,YAAaE,cAClB,IAAMqB,MAAQrB,aAAaxnE,OACrBmoE,UAAS,GAAAz6E,OAAM45E,YAAN,KAAA55E,OAAqBm7E,OAGpCzgF,KAAK0gF,gBAAgBX,UAAWX,cAGhC,IAAMY,QAAUhgF,KAAK2gF,SAASZ,WAE1B//E,KAAK2/E,YAAYT,cACbl/E,KAAK2/E,YAAYT,aAAauB,OAE9BzgF,KAAK4gF,uBAAuB1B,YAAauB,MAAOT,SAMpDhgF,KAAK6gF,cAAc3B,YAAauB,MAAOT,+EAYvBd,YAAauB,MAAOT,SACxC,IAAMD,UAAS,GAAAz6E,OAAM45E,YAAN,KAAA55E,OAAqBm7E,OACpCzgF,KAAK2/E,YAAYT,aAAauB,OAAOT,SACrChgF,KAAK8gF,oBAAoBf,yFASA,IAAAgB,OAAA/gF,KACJxE,OAAO4I,KAAKpE,KAAK4/E,uBACzBl6E,QAAQ,SAACw5E,aACH1jF,OAAO4I,KAAK28E,OAAKnB,sBAAsBV,cAC/Cx5E,QAAQ,SAAC+6E,OACZ,GAAIM,OAAKpB,YAAYT,cACb6B,OAAKpB,YAAYT,aAAauB,OAAQ,CAEtC,IAAMT,QAAUe,OAAKnB,sBAAsBV,aAAauB,OAExDM,OAAKH,uBAAuB1B,YAAauB,MAAOT,gBAEzCe,OAAKnB,sBAAsBV,aAAauB,gEAepDvB,YAAauB,MAAOT,SAC1BX,OAAOr/E,KAAK4/E,sBAAuBV,eACpCl/E,KAAK4/E,sBAAsBV,iBAG1BG,OAAOr/E,KAAK4/E,sBAAsBV,aAAcuB,SACjDzgF,KAAK4/E,sBAAsBV,aAAauB,WAE5CzgF,KAAK4/E,sBAAsBV,aAAauB,OAAST,oDAS1B,IAAjBgB,WAAiB98E,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MACvBlE,KAAK2/E,YAAcqB,WAGnBhhF,KAAKugF,4FASYR,WAAW,IAAAkB,OAAAjhF,KAC5BorB,WAAW,WACP61D,OAAKvB,WAAWK,WAAa3zD,2BAC7B60D,OAAKxB,UAAU30E,IAAIi1E,UAAWkB,OAAKhB,qBAAqBF,aACzD,2BGhPLviE,sBAAoBy3C,oBAAUz3C,kBCLvB0jE,KAAO,OACPC,MAAQ,QACRC,cAAgB,gBAChBC,MAAQ,QACRC,UAAY,YACZC,UAAY,YACZC,YAAc,ICNrBC,oBAAsB,EACtBC,oBAAsB,EACtBC,eAAiB,EACjBC,oBAAsB,EACtBC,oBAAsB,uSCFbC,6BCkBX,SAAAA,aAAaC,YAAaC,uKAAWC,CAAAjiF,KAAA8hF,cACjC9hF,KAAK+hF,YAAcA,YACnB/hF,KAAK8qB,KAAOi3D,YAAY92E,OAAO,SAAC6S,IAAKzhB,KAEjC,OADAyhB,IAAIzhB,KAAOslF,eACJ7jE,SAEX9d,KAAKgiF,UAAYA,UACjBhiF,KAAKkiF,kBAAoBH,YAAY1gF,OACrCrB,KAAKmiF,oBACLniF,KAAKoiF,WAAY,kSAWhBC,KACDriF,KAAKoiF,WAAY,EAEjB,IAAMt3E,IAAM9K,KAAK8qB,KAMjB,IAAK,IAAMzuB,OAJXgmF,IAAI38E,QAAQ,SAAC5K,GACTgQ,IAAIhQ,GAAK2mF,sBAGK32E,IACVA,IAAIzO,OAASolF,qBAAuB32E,IAAIzO,OAASulF,sBACjD92E,IAAIzO,KAAOyO,IAAIzO,KAAO,EAAIwlF,mBAAqBH,oBAGvD,OAAO1hF,2CAUHqiF,KACJ,IAAMv3E,IAAM9K,KAAK8qB,KAMjB,OAJAu3D,IAAI38E,QAAQ,SAAC5K,GACTgQ,IAAIhQ,GAAK8mF,sBAGN5hF,uDAYP,IAAM8K,IAAM9K,KAAK8qB,KAGjB,IAAK,IAAMzuB,OAAOyO,IACdA,IAAIzO,KAAOyO,IAAIzO,OAASolF,oBAAsBG,oBAAsB92E,IAAIzO,KAE5E,OAAO2D,qDAaP,IAAM8K,IAAM9K,KAAK8qB,KAEjB,IAAK,IAAMzuB,OAAOyO,IACdA,IAAIzO,KAAOyO,IAAIzO,OAASqlF,mBAAqBG,mBAAqB/2E,IAAIzO,KAE1E,OAAO2D,2CAWHqiF,KACJriF,KAAKoiF,WAAY,EAEjB,IAAMt3E,IAAM9K,KAAK8qB,KAKjB,IAAK,IAAMzuB,OAJXgmF,IAAI38E,QAAQ,SAAC5K,GACTgQ,IAAIhQ,GAAK4mF,qBAGK52E,IACVA,IAAIzO,OAASqlF,oBAAsB52E,IAAIzO,OAASwlF,qBAChD/2E,IAAIzO,KAAoB,IAAbyO,IAAIzO,KAAaolF,oBAAsBG,qBAI1D,OAAO5hF,+CAIP,IAAM8K,IAAM9K,KAAK8qB,KACXquC,QACFmpB,iBACAC,gBACAR,gBAGJ,IAAK,IAAM1lF,OAAOyO,IACVA,IAAIzO,KAAO,GACXyO,IAAIzO,OAASulF,qBAAuBzoB,OAAOmpB,SAAS,GAAGh+E,KAAKjI,KAC5DyO,IAAIzO,OAASolF,qBAAuBtoB,OAAOmpB,SAAS,GAAGh+E,KAAKjI,MACrDyO,IAAIzO,KAAO,IAClByO,IAAIzO,OAASwlF,oBAAsB1oB,OAAOopB,QAAQ,GAAGj+E,KAAKjI,KAC1DyO,IAAIzO,OAASqlF,oBAAsBvoB,OAAOopB,QAAQ,GAAGj+E,KAAKjI,MAE9D88D,OAAO4oB,YAAYz9E,KAAKjI,KAQ5B,OALC,WAAY,WAAWqJ,QAAQ,SAACsB,MAC7BmyD,OAAOnyD,MAAQmyD,OAAOnyD,MAAMhC,IAAI,SAAAhI,GAAC,OAAIA,EAAEgI,IAAII,YAE/C+zD,OAAO4oB,YAAc5oB,OAAO4oB,YAAY/8E,IAAII,QAErC+zD,2CAaJkpB,KACH,IAAMv3E,IAAM9K,KAAK8qB,KACjB,GAAIu3D,IACAA,IAAI38E,QAAQ,SAAC5K,GACTgQ,IAAIhQ,GAAK6mF,qBAEV,CACH,IAAMa,UAAYxiF,KAAKmiF,iBACvB,IAAK,IAAM9lF,OAAOyO,IACRzO,OAAOmmF,YACT13E,IAAIzO,KAAOslF,gBAKvB,OADA3hF,KAAKoiF,WAAY,EACVpiF,uDAWP,IAAM8K,IAAM9K,KAAK8qB,KACX23D,UAEN,IAAK,IAAMpmF,OAAOyO,IACdA,IAAIzO,OAASolF,qBAAuBgB,OAAOn+E,KAAKjI,KAGpD,OAAOomF,uEAWUA,QACjB,IAAM33E,IAAM9K,KAAK8qB,KACjB,OAAO23D,OAAO72E,OAAO,SAAAxQ,GAAC,OAAI0P,IAAI1P,KAAOqmF,qBAAuB32E,IAAI1P,KAAOwmF,oFAWvDc,WAChB,IAAM53E,IAAM9K,KAAK8qB,KACjB,OAAO43D,UAAU92E,OAAO,SAAAxQ,GAAC,OAAI0P,IAAI1P,KAAOsmF,oBAAsB52E,IAAI1P,KAAOymF,uEAQzE,IAAM/2E,IAAM9K,KAAK8qB,KACX63D,aAEN,IAAK,IAAMtmF,OAAOyO,IACdA,IAAIzO,OAASulF,qBAAuBe,UAAUr+E,KAAKjI,KAEvD,OAAOsmF,0DAQP,IAAM73E,IAAM9K,KAAK8qB,KACX63D,aAEN,IAAK,IAAMtmF,OAAOyO,IACdA,IAAIzO,OAASwlF,oBAAsBc,UAAUr+E,KAAKjI,KAGtD,OAAOsmF,0DAUP,IAAM73E,IAAM9K,KAAK8qB,KACX43D,aAEN,IAAK,IAAMrmF,OAAOyO,IACdA,IAAIzO,OAASqlF,oBAAsBgB,UAAUp+E,KAAKjI,KAEtD,OAAOqmF,kEAUP,IAAM53E,IAAM9K,KAAK8qB,KACXi3D,eAEN,IAAK,IAAM1lF,OAAOyO,IACdi3E,YAAYz9E,KAAKjI,KAGrB,OAAO0lF,8EAIP,OAAO/hF,KAAKkiF,8DAIZ,OAAOliF,KAAKoiF,kDAQZ,IAAMt3E,IAAM9K,KAAK8qB,KAEjB,IAAK,IAAMzuB,OAAOyO,IACVA,IAAIzO,OAASolF,oBACb32E,IAAIzO,KAAOqlF,mBACJ52E,IAAIzO,OAASqlF,mBACpB52E,IAAIzO,KAAOolF,oBACJ32E,IAAIzO,OAASulF,oBACpB92E,IAAIzO,KAAOwlF,mBAEX/2E,IAAIzO,KAAOulF,oBAInB,OAAO5hF,mfChUR,IA0CM4iF,6BAA+B,SAA/BA,6BAAgC5/D,QAAS9kB,GAAI2kF,UACtD,IAAMC,YAAc9/D,QAAQ8/D,cAC5B,IAAK,IAAMzmF,OAAOymF,YACd,MAAOjmF,eAAe5B,KAAK6nF,YAAazmF,KAAM,CAC1C,IAAI0mF,QAAS,EACT7kF,KAAkB,IAAZA,GAAG7B,OACT0mF,QAAS,GAETA,SACAF,SAAWC,YAAYzmF,KAAK2mF,SAAWF,YAAYzmF,KAAK4mF,aAM3DC,aAAe,SAAfA,aAAep4E,KAAG,OAAAq4E,yBAAQ,IAAI/zE,OAAJ9J,OAAA69E,yBAAYr4E,IAAI,IAAhBq4E,yBAAuBr4E,IAAI,QAe5Ds4E,eACFC,aAAcC,oBAA+BA,qBAC7CC,YAAaD,mBAA8BA,oBAC3CE,aAcSC,WAAa,SAAbA,WAAcz8E,KAAM8D,IAAKgL,QAClC,IAAI+B,MAAQ,KACNkkD,kBAAoBjmD,OAAOimD,kBAC3B2nB,aAAe5tE,OAAO4tE,aAU5B,OATK5tE,OAAO6tE,gBAMD5nB,oBACPlkD,MAAiB,gBAAT7Q,KAAyB+0D,kBAAkB,GAAKA,kBAAkB,IANtE2nB,aAAaE,WACb/rE,MAAQ,KACQ,gBAAT7Q,OACP6Q,MAnBmB,SAAlBgsE,gBAAmB78E,KAAM6Q,MAAO/M,KACzC,IAAMg5E,WAAaV,cAAcp8E,MACjC,OAAI6Q,OAASisE,WACFjsE,MAAMnC,OAAO,SAAChP,OAAQ5L,GAAT,OAChBgpF,WAAWluE,KAAK,SAAAmuE,WAAS,OAAIj5E,IAAIhQ,KAAOipF,cACrCpuE,WAAW,IAGf,KAWSkuE,CAAgB78E,KAAM8O,OAAO4lD,UAAW5lD,OAAO4tE,aAAa54D,QAMxEtf,KAAMV,IACNzJ,OAAQyJ,IAAIzJ,OACZwW,mjCC/EamsE,6BACjB,SAAAA,SAAahhE,QAASihE,QAASnB,YAAaoB,2KAAoBC,CAAAnkF,KAAAgkF,UAC5DhkF,KAAKgjB,QAAUA,QACfhjB,KAAKokF,0BACLpkF,KAAKqkF,gBACLrkF,KAAKskF,mBACLtkF,KAAKukF,UACDC,eACAC,aAEJzkF,KAAK0kF,iBACL1kF,KAAK2kF,yBACL3kF,KAAK4kF,sBACL5kF,KAAK6kF,sBACL7kF,KAAK8kF,4BACL9kF,KAAK+kF,qBACL/kF,KAAKglF,uBACLhlF,KAAKilF,WACLjlF,KAAKklF,uBACLllF,KAAKmlF,iBACLnlF,KAAKolF,kBACLplF,KAAKqlF,sBAELrlF,KAAKslF,eAAepB,oBACpBlkF,KAAKulF,2BAA2BtB,QAAQO,aACxCxkF,KAAKwlF,oBAAoB1C,aACzB9iF,KAAKylF,+BAA+BxB,QAAQyB,wBAC5C1lF,KAAK2lF,wBAAwB1B,QAAQQ,+RAIrC,OAAIvgF,UAAO7C,QACPrB,KAAKilF,QAAUzqB,eAAex6D,KAAKilF,QAAN/gF,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,ID/CN,SAAtB0hF,oBAAuB9C,YAAahtE,QAC7C,IAAK,IAAMzZ,OAAOymF,YAAa,CAC3B,IAAM+C,WAAa/C,YAAYzmF,KAEzBypF,eAAiBhwE,OADJ+vE,WAAWjgF,YAAYy6E,cAG1CyF,gBAAkBD,WAAW/vE,OAAOgwE,iBC0ChCF,CAAoB5lF,KAAK8iF,cAAe9iF,KAAKilF,SACtCjlF,MAEJA,KAAKilF,8DAGAc,cACZ,IAAM7B,mBAAqBlkF,KAAKklF,oBAChC,IAAK,IAAM7oF,OAAO0pF,aACd,MAAOlpF,eAAe5B,KAAK8qF,aAAc1pF,KAAM,CAC3C,IAAMymF,YAAciD,aAAa1pF,SAC7B2pF,uBAAwB,EACxBC,iBAAW,EACX/wB,eAAe4tB,cACfmD,YAAcnD,YAAYoD,QAC1BF,sBAAwBlD,YAAYkD,uBAEpCC,YAAcnD,aAEjBoB,mBAAmB7nF,OAAS6nF,mBAAmB7nF,SAChD2D,KAAKklF,oBAAoB7oF,KAAzB8pF,2BAAoC,IAAI/2E,IAAI42E,sBAAwBC,eAAH3gF,OAAA6gF,2BACzDjC,mBAAmB7nF,MADsC8pF,2BAC7BF,gBAG5C,OAAOjmF,mFAGiBikF,SACxB,IAAMmC,WDlE8B,SAA/BC,6BAAgCrjE,QAASihE,SAClD,IAAMqC,0BAMN,OAJArC,QAAUA,mBAAmB1+E,MAAQ0+E,QAAUzoF,OAAOgc,OAAOysE,UACrDv+E,QAAQ,SAAC6gF,QACbD,uBAAuBC,OAAOlG,cAAgB,IAAIkG,OAAOvjE,WAEtDsjE,uBC2DgBD,CAA6BrmF,KAAMikF,SAGtD,OAFAjkF,KAAKwmF,qBAAqBJ,YAC1B5qF,OAAO0M,OAAOlI,KAAKukF,SAASC,YAAa4B,YAClCpmF,yEAIP,OAAOA,qEAGU8iF,aACjB,IAAK,IAAMzmF,OAAOymF,YACd9iF,KAAKokF,uBAAuBtB,YAAYzmF,KAAKgkF,cAAgByC,YAAYzmF,KAG7E,OADA2D,KAAKymF,wBACEzmF,+DAGO8iF,YAAaY,aAAcxpE,SAAS,IAAA0hE,MAAA57E,KAC5C0mF,gBAAkB1mF,KAAK8iF,cACvB6D,cAAgB3mF,KAAKolF,eACrBwB,kBAAoB5mF,KAAKqlF,mBA6B/B,OA5BAvC,YAAYp9E,QAAQ,SAACmgF,YACjB,IAAI3mE,QACA7jB,KACE6qF,QAAUL,WAAWK,QACrBE,WAAaP,WAAWO,WACxBS,YDUO,SAAZC,UAAa9jE,QAASojE,YAC/B,IAAIS,eACE/uE,QACFurE,YAAa,KACbE,WAAY,MAwBhB,OAtBA6C,WAAW1gF,QAAQ,SAACqhF,WAChB,IAAMC,aAAehkE,QAAQmiE,cAAc4B,WACvCC,eACAH,YAAcrrF,OAAO0M,OAAO2+E,YAAa1xE,MAAM6xE,gBAC9C,cAAe,cAActhF,QAAQ,SAACsB,MACnC,IAAM6Q,MAAQmvE,aAAahgF,MAAM6Q,MAC7BovE,cAAgBnvE,OAAO9Q,MACvBkgF,OAASjmB,4CAA+BppD,OACvCovE,cAEM,GAAA3hF,OAAGuS,MAAM0D,YAAYvW,IAAI,SAAA5J,GAAC,OAAIA,EAAEC,OAAM4Q,UAAtC,GAAA3G,OACJ2hF,cAAc1rE,YAAYvW,IAAI,SAAA5J,GAAC,OAAIA,EAAEC,OAAM4Q,SAC9Ci7E,OAAS1rF,OAAO0M,UAAW+4D,4CAA+BgmB,gBAC1DA,cAAgBnvE,OAAO9Q,MAAQ6Q,MAAMkF,MAAMkqE,gBAE3CA,cAAgBpvE,MANhBovE,cAAgBnvE,OAAO9Q,MAAQ6Q,MAQnCgvE,YAAY7/E,MAAM6Q,MAAQovE,cAC1BJ,YAAY7/E,MAAMkgF,OAASA,YAIhCL,YCtCqBC,CAAUlL,MAAMwK,YACpCF,QAAQxgF,QAAQ,SAACyhF,QACS,WAAlBC,gBAAOD,SACP9rF,KAAO8rF,OAAO9rF,KACd6jB,QAAUioE,OAAOjoE,SAEjB7jB,KAAO8rF,OAGX,IAAME,mBAAqBX,gBAAgBrrF,MACvCgsF,mBAAmBC,eACdD,mBAAmBzhF,YAAY2hF,WAChC/rF,OAAOgc,OAAOmvE,eAAe/wE,KAAK,SAAAxa,GAAC,OAAIA,EAAE6e,kBACzC2sE,kBAAiB,GAAAthF,OAAIjK,KAAJ,KAAAiK,OAAY8gF,WAAW7jF,UACpClH,UACAub,QAASiwE,YAAa3sE,QAASgF,UAGnC08D,MAAK4L,mBAAmBnsF,KAAMwrF,YAAa3sE,QAASgF,cAK7Dlf,mEAGS3E,KAAMqoF,aAAcxpE,SAAuB,IAAdgF,QAAchb,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MACrDwiF,gBAAkB1mF,KAAK8iF,cACvB+C,WAAaa,gBAAgBrrF,MAC/B4nF,SAAU,EACV/jE,QAAQtT,QAAUsT,QAAQtT,OAAOi6E,cACjC5C,SAAU,IAEbA,SAAWyD,gBAAgBrrF,MAAMgC,MAAMqmF,aAAcxpE,QAASgF,iGAGlCla,KAE7B,OADAhF,KAAK8kF,yBAA2BtpF,OAAO0M,OAAOlI,KAAK8kF,yBAA0B9/E,SACtEhF,iEAGQ+mF,UAAW7sE,SAA+B,IAAtButE,gBAAsBvjF,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MACnDwjF,eAA0CxqF,IAA9BuqF,gBAAgBC,WAA0BD,gBAAgBC,UAEtE9vE,OADqB5X,KAAKukF,SAASC,YACPuC,WAE5BjE,YDnDgB,SAAjB6E,eAAkBZ,UAAW7C,oBACtC,IAAMpB,eACN,IAAK,IAAMzmF,OAAO6nF,mBAAoB,CAClC,IAAMkC,WAAa/pF,IAAI0L,MAAM,KACfq+E,WAAWxwE,KAAK,SAAAxa,GAAC,OAAIA,IAAM2rF,aAErCjE,YAAYx+E,MACR4hF,QAAShC,mBAAmB7nF,KAC5B+pF,wBAIZ,OAAOtD,YCuCiB6E,CAAeZ,UADR/mF,KAAKklF,qBAIhC,GAFAllF,KAAKskF,gBAAkBmD,gBAEnB7vE,OAAQ,CACR,IAAM8rE,aAAe9rE,OAAO0zD,SAASpxD,SAC/B0tE,wBAA0B5nF,KAAK6nF,2BAA2BnE,cAChE1jF,KAAKmlF,cAAc4B,WAAaa,wBAChC,IAAME,uBAAyB9nF,KAAK8nF,uBAAuBJ,WAK3D,GAHIA,WACA1nF,KAAK0nF,UAAUX,UAAW7sE,QAASwpE,aAAarpE,KAAK,SAAAjf,GAAC,OAAIA,EAAE2sF,qBAAqBjF,aAEjFgF,uBAAwB,CACxB,IAAME,sBAAwBhoF,KAAKioF,yBAAyBnF,YAAa5oE,QAASutE,iBAClFznF,KAAKkoF,iBAAiBF,sBAAuBJ,wBAAyB1tE,UAI9E,OAAOla,mFAGiB0jF,cACxB,OAAOA,aAAarpE,KAAK,SAAAjf,GAAC,OAAKA,EAAE2sF,6FAIjC,OAAO,8FAGwBhB,UAAWhrF,OAAwB,IAAjBM,IAAiB6H,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,GAAX,UACjDikF,oBAAsBnoF,KAAK+kF,kBAAkBgC,aAAe/mF,KAAK+kF,kBAAkBgC,eAMzF,OALIhrF,iBAAiBsJ,SACjB8iF,oBAAoB9rF,KAAON,MAE3BosF,oBAAoB9rF,KAAO,kBAAMN,OAE9BiE,mGAGyB6lF,WAAY9pF,OAAwB,IAAjBM,IAAiB6H,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,GAAX,UACnDkkF,qBAAuBpoF,KAAK6kF,mBAAmBgB,cAAgB7lF,KAAK6kF,mBAAmBgB,gBACzF9pF,iBAAiBsJ,SACjB+iF,qBAAqB/rF,KAAON,MAE5BqsF,qBAAqB/rF,KAAO,kBAAMN,6EAIlB8pF,WAAYxpF,KAEhC,cADO2D,KAAK6kF,mBAAmBgB,YAAYxpF,KACpC2D,yEAGY+mF,UAAW1qF,KAE9B,cADO2D,KAAK+kF,kBAAkBgC,WAAW1qF,KAClC2D,mDAIP,OAAOA,uDAIP,OAAIkE,UAAY7C,QACZrB,KAAKqkF,aAALngF,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKqkF,yEAGGnmF,IAEf,OADA0kF,6BAA6B5iF,KAAM9B,IAAI,GAChC8B,mEAGS9B,IAEhB,OADA0kF,6BAA6B5iF,KAAM9B,IAAI,GAChC8B,qEAGU+mF,UAAWsB,gBAC5B,IAAMC,mBAAqBtoF,KAAKglF,oBAChC,IAAK,IAAM3oF,OAAOisF,mBACd,GAAIjsF,MAAQgsF,eAAgB,CACxB,IAAME,aAAeD,mBAAmBjsF,KACxCksF,aAAanC,WAAamC,aAAanC,WAAWx6E,OAAO,SAAAxQ,GAAC,OAAIA,IAAM2rF,YACpE/mF,KAAKwoF,uBAAuBnsF,KAIpC,OAAO2D,uEAGW6lF,WAAYkB,WAC9B,IAAM7C,mBAAqBlkF,KAAKklF,oBAEhC,OADAhB,mBAAmB6C,WAAa7C,mBAAmB6C,WAAWn7E,OAAO,SAAAxQ,GAAC,OAAKA,EAAEC,MAAQD,KAAOyqF,aACrF7lF,+EAGe8iF,aACtB,OAAOA,wFAGgBpnB,WAGvB,OAFAA,UAAU8hB,YAAY,eACtB9hB,UAAUvxD,GAAG,cAAenK,KAAKyoF,0BAC1BzoF,6EAGe,IAAAg8E,OAAAh8E,KACtB,OAAO,SAAC0oF,WACJ,IAAMxuE,QAAUwuE,UAAUxuE,QACpBtC,OAASsC,QAAQtC,OAEvBokE,OAAK2M,kBAAkB/wE,OAAQsC,SAC3BwtE,WAAW,mEAKHkB,UAAWC,oBAC3B,IAAMzC,WAAayC,oBAAsB7oF,KAAKukF,SAASC,YACjDd,aAAe1jF,KAAK0kF,cACpBoE,qBAAuB9oF,KAAK2kF,sBAElC,IAAK,IAAMtoF,OAAO+pF,gBACPvpF,eAAe5B,KAAKmrF,WAAY/pF,OACnCqnF,aAAarnF,KAAO,IAAIylF,kBAAa8G,WACrCE,qBAAqBzsF,KAAO,IAAIylF,kBAAa8G,WAAW,GACxD5oF,KAAKmlF,cAAc9oF,KAAO,MAKlC,OAFA2D,KAAK2kF,sBAAwBmE,qBAC7B9oF,KAAK0jF,aAAaA,cACX1jF,yDAIP,OAAIkE,UAAa7C,QACbrB,KAAK0kF,cAALxgF,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK0kF,oFAIZ,IAAMqE,sBAAwB/oF,KAAKokF,uBAEnC,OADApkF,KAAK8iF,YDnTwB,SAAxB2D,sBAAyBzjE,QAAS8/D,aAC3C,IAAMkG,eAAiBhmE,QAAQqhE,aAO/B,OANAvB,YAAcA,uBAAuBv9E,MAAQu9E,YAActnF,OAAOgc,OAAOsrE,cAC7Dp9E,QAAQ,SAACujF,YACjB,IAAM5I,WAAa4I,WAAW5I,aACxBgH,mBAAqB2B,eAAe3I,YAC1C2I,eAAe3I,YAAcgH,oBAAsB,IAAI4B,WAAWjmE,WAE/DgmE,eC2ScvC,CAAsBzmF,KAAM+oF,wBACtC/oF,6EAGcikF,SACrB,IAAMiF,cDzR2B,SAA5BC,0BAA6BnmE,QAASihE,SAC/C,IAAMmF,mBAEN,IAAK,IAAM/tF,QAAQ4oF,aACLpnF,eAAe5B,KAAKI,KAAM4oF,WAChCmF,gBAAgB/tF,MAAQ4oF,QAAQ5oF,MAAM2nB,UAG9C,OAAOomE,gBCiRmBD,CAA0BnpF,KAAMikF,SAEtD,OADAzoF,OAAO0M,OAAOlI,KAAKukF,SAASE,SAAUyE,eAC/BlpF,yDAiBI4X,OAAQlR,QAAwB,IAAhB+mB,OAAgBvpB,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,IAAAA,UAAA,GACrC2kF,mBAAqB7oF,KAAKukF,SAASC,YACzC,GAAI5sE,SAAW4pE,YACX,IAAK,IAAMnlF,OAAOwsF,mBACd7oF,KAAK4kF,mBAAmBvoF,MACpBqK,cACA+mB,oBAIRztB,KAAK4kF,mBAAmBhtE,SACpBlR,cACA+mB,eAGR,OAAOztB,2EAOaqpF,WACpB,IAAMC,sBAAwBtpF,KAAKukF,SAASE,SACtCz/E,IAAMhF,KAAKglF,oBAEjB,IAAK,IAAMptE,UAAU5S,IACjB,OAAUnI,eAAe5B,KAAK2c,OAAQ5S,MAAQ4S,UAAYyxE,WAAazxE,QAAS,CAC5E,IAAI+wB,YAAM,EACJ4gD,OAASvkF,IAAI4S,QACnB+wB,OAAS4gD,OAAO5gD,OAChB,IAAMkkC,MAAQ0c,OAAO1c,MAChBlkC,SACDA,OAAS3oC,KAAKgjB,QAAQwmE,8BAEb3R,YAAuB,IAAVhL,YAA4B3vE,IAAV2vE,OAAuBA,QAC3D7sE,KAAKypF,wBAAwBH,sBAAsB1xE,QACvD+wB,OAAQ4gD,OAAOnD,YAG3B,OAAOpmF,2FAGqBgF,KAE5B,OADAhF,KAAKglF,oBAAsBxqB,eAAex6D,KAAKglF,oBAAqBhgF,KAC7DhF,6EAWc4X,OAAQ8xE,QAASC,eAAe,IAAA5I,OAAA/gF,KAiBrD,MAhByB,iBAAb0pF,UACRA,SAAWA,UAEfA,QAAQhkF,QAAQ,SAACijC,QACb,IAAMihD,MAAQ7I,OAAK/9D,QAAQ4mE,QACrBrgB,MAAQ5gC,OAAO7lB,gBAAgBzd,SAAWsjC,OAAS6sC,6BAAcoU,OAAOjsC,UAAUhV,QACnF4gC,MAAMp3C,UACHo3C,iBAAiBhkE,MACjBgkE,MAAM7jE,QAAQ,SAACod,MACXlL,OAAO49D,6BAAc1yD,MAAO6mE,iBAGhC/xE,OAAO2xD,MAAOogB,kBAInB3pF,mEAIP,OAAOA,KAAKskF,oFAGOnwE,UAA+B,IAArB01E,eAAqB3lF,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAC5C8e,QAAUhjB,KAAKgjB,QACf+4C,kBAAoB8tB,eAAerjF,KAAOqjF,eAAerjF,KAC3Dwc,QAAQ64C,4BAA4B1nD,SAAU,OAClD,OACI0D,MAAOkkD,kBACPvwD,KAAmB,OAAb2I,SAAoB,KAAQ01E,eAAerjF,KAAOqjF,eAAeC,YACnE/tB,kBAAkB,GAAGguB,qEAIfnyE,QACd,IAAMP,SAAWrX,KAAKgjB,QAAQjE,KAExBirE,mBADiBhqF,KAAKskF,qBACajtE,SACrC4yE,2BAQJ,OAPID,oBAAsB3yE,WACtB4yE,yBAA2BjqF,KAAK2kF,sBAAsB/sE,UAGtDoyE,mBACAC,wBAAwB3lF,KAAKtE,KAAK0jF,eAAe9rE,SAE9CqyE,0EAIP,OAAOjqF,KAAKgjB,QAAQxc,mDAIpB,OAAOxG,KAAKoiF,kEAYC2E,WACb,OAAO/mF,KAAKmlF,cAAc4B,0TChcbmD,oCACjB,SAAAA,iBAAaC,gKAAUC,CAAApqF,KAAAkqF,kBACnBlqF,KAAKmqF,SAAWA,SAChBnqF,KAAKqqF,UAAW,8RAYVnwE,SAAS,IAAA0hE,MAAA57E,KACTmU,SAAW+F,QAAQ/F,SACnBg2E,SAAWnqF,KAAKmqF,SAChB9J,WAAargF,KAAK4F,YAAYy6E,aAC9BiK,cAAgBH,SAASI,iBAAiBlK,YAJjCmK,sBAQXxqF,KAAKmqF,SAASM,sBAAsBt2E,SAAUnU,KAAKmqF,SAASO,qBAFrD3uB,kBANIyuB,sBAMX3yE,MACArM,KAPWg/E,sBAOXh/E,KAOJ,OALsB8+E,cAActlF,IAAI,SAAC0+E,cAErC,OADA9H,MAAK+O,gBAAgBn/E,KAAMk4E,cACpB9H,MAAKgP,gBAAgBlH,aAAc3nB,kBAAmB7hD,qEAiBjE,OAAOla,6DAGM0jF,aAAc3nB,kBAAmB7hD,SAAS,IAAA2wE,sBAKnDnH,aAAaoH,UAHbxI,SAFmDuI,sBAEnDvI,SACAC,QAHmDsI,sBAGnDtI,QACAR,YAJmD8I,sBAInD9I,YAEE8H,eAAiB7pF,KAAKmqF,SAASO,oBAE/BK,WACFrvB,UAFc17D,KAAKmqF,SAASa,cAG5BjvB,oCACA4nB,gBAAiBkG,eAAerjF,KAChCk9E,2BAGJ,OACIpB,UAAWmB,WAAW,WAAYnB,SAAS,GAAIyI,WAC3CtH,WAAW,WAAYnB,SAAS,GAAIyI,YACxCxI,SAAUkB,WAAW,WAAYlB,QAAQ,GAAIwI,WACzCtH,WAAW,UAAWlB,QAAQ,GAAIwI,YACtC1H,YAAaI,WAAW,cAAeP,aAAaZ,UAAWyI,WAC/DxH,WAAYE,WAAW,aAAcP,aAAaX,SAAUwI,WAC5DhJ,YAAa0B,WAAW,WAAY1B,YAAagJ,WACjDrkF,OFjBmB,SAAlBukF,gBAAmBpB,gBAAkC,IAAlB11E,SAAkBjQ,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MACxDgU,kBAAoB2xE,eAAe3xE,kBASzC,OAPIA,kBACeA,kBAAkBqD,YAAYvW,IAAI,SAAA5J,GAAC,OAAIA,EAAEC,OACjD8Y,oBAAoB5O,MACZ4O,SAAS,GAET3Y,OAAO4I,KAAK+P,cESf82E,CAAgBpB,eAAgB3vE,QAAQ/F,UAChD4zE,oBAA+C,IAA3BrE,aAAa1B,mDASrChiF,KAAKqqF,UAAW,4CAIhBrqF,KAAKqqF,UAAW,gDAIhB,OAAOrqF,KAAKqqF,qDAZZ,OAAO,6qCCjFMa,mtBAA0BhB,iUAC1BzH,OAAQiB,cACrB,GAAe,OAAXjB,OACAiB,aAAayH,aACV,GAAI1I,OAAOphF,OAAQ,CAEtB,IAAM+pF,eAAiB3I,OAAO72E,OAAO,SAAAxQ,GAAC,OAAIsoF,aAAa54D,KAAK1vB,KAAOkoF,qBACxDI,aAAa54D,KAAK1vB,KAAOkoF,sBACpCI,aAAa2H,aAJS,IAKd/I,SAAaoB,aAAaoH,UAA1BxI,SACRoB,aAAayH,MAAMjI,aAAaZ,WAChCoB,aAAar0E,IAAIozE,QACjBiB,aAAa51D,OAAOs9D,qBAEpB1H,aAAazxD,OAAOyxD,aAAa4H,2CClBhCC,MAAQ,QACRC,UAAY,YACZC,mBAAU,UACVC,OAAS,SACT9iF,OAAS,stCCDD+iF,+vBAA2BT,oUAExC,OAAOM,ysCCGMI,mtBAAuBV,oTAEpC,OAAOW,2sCCPMC,8tBAAwBZ,wTAErC,OAAOQ,iDAIP,OAAO,gvCCLMK,ywBAA4B7B,yUAC5BzH,OAAQiB,cACrB,GAAe,OAAXjB,OACAiB,aAAayH,aACV,GAAI1I,OAAOphF,OAAQ,CACtB,IAAMwoF,eAAiB7pF,KAAKmqF,SAASO,oBAE/BU,eAAiB3I,OAAO72E,OAAO,SAAAxQ,GAAC,OAAIsoF,aAAa54D,KAAK1vB,KAAOkoF,qBAC5DI,aAAa54D,KAAK1vB,KAAOkoF,sBAChC,IAAiC,IAA7BuG,eAAenC,UAAqB,CACpChE,aAAa2H,aADuB,IAE5B/I,SAAaoB,aAAaoH,UAA1BxI,SACRoB,aAAayH,MAAMjI,aAAaZ,WAChCoB,aAAar0E,IAAIozE,QACjBiB,aAAa51D,OAAOs9D,oBACjB,CAECA,eAAe/pF,QACfqiF,aAAa2H,aACb3H,aAAazxD,OAAOm5D,kBAEpB1H,aAAasI,cACbtI,aAAar0E,IAAIozE,SAPlB,IASKF,QAAYmB,aAAaoH,UAAzBvI,QACF0J,cAAgB/I,aAAaX,SAC7B2J,iBAAmBxI,aAAa4H,iBAAiBjqF,OACnD4qF,cAAc5qF,SAAW6qF,kBACzBxI,aAAayH,cAIrBzH,aAAazxD,OAAOyxD,aAAa4H,kBAGrC,OAAOtrF,guCCpCMmsF,guBAAwBJ,4TAErC,OAAOnjF,8BCgFAwjF,mBA9EwC,SAAtBA,oBAAuBC,WAAYv2E,OAAQkmD,cACxE,IAAMqwB,WAAWC,KAAKpxE,IAAKmxE,WAAWC,KAAKxpF,EACvC,OACIqR,SAAU,MAIlB,IAAMm4E,KAAOD,WAAWC,KAClBC,MAAQD,KAAKpxE,EAAE,GACfsxE,MAAQF,KAAKxpF,EAAE,GACf2pF,WAAaJ,WAAW3lF,OACxBgmF,OAASD,WAAWvxE,EAAE,GAAGyxE,aAAa,GACtCC,OAASH,WAAW3pF,EAAE,GAAG6pF,aAAa,GACtCE,WAAa7wB,aAAa0wB,QAAQzzE,IAAI1K,QACtCu+E,WAAa9wB,aAAa4wB,QAAQ3zE,IAAI1K,QACtCw+E,cACAC,MAAQl3E,OAAOm3E,SACfC,OAASp3E,OAAOo3E,OAEtB,GAAIF,MAAM9xE,IAAMgyE,OAAOhyE,GAAK8xE,MAAMlqF,IAAMoqF,OAAOpqF,EAC3C,OACIqR,SAAU,MAIlB,IAAMg5E,QAAUN,aAAeO,8BAAepuF,WAAc8tF,aAAeM,8BAAepuF,YACrF,IAAK,MAAQ,MAAS,KACrBmV,YACAk5E,aAAeR,aAAe/3B,gCAAiBl2D,YAC/C0uF,aAAeR,aAAeh4B,gCAAiBl2D,YAC/C2uF,OAAShB,MAAMp4D,aAAa64D,MAAM9xE,EAAGgyE,OAAOhyE,GAC5CsyE,OAAShB,MAAMr4D,aAAa64D,MAAMlqF,EAAGoqF,OAAOpqF,GAC5C2qF,iBACFvyE,EAAG8xE,MAAM9xE,IAAMgyE,OAAOhyE,KAAUmyE,aAAeE,OAASA,OAAOthF,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAIoF,IAClFG,EAAGkqF,MAAMlqF,IAAMoqF,OAAOpqF,KAAUwqF,aAAeE,OAASA,OAAOvhF,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAIoF,KAEhF+qF,YAEN,GAAuB,IAAnBP,QAAQ9rF,QAGR,GAFAqsF,SAAShB,QAAUe,gBAAgBvyE,EACnCwyE,SAASd,QAAUa,gBAAgB3qF,EAC/B4pF,SAAWE,OAAQ,CACnB,IAAMe,KAAOF,gBAAgBvyE,EACvB0yE,KAAOH,gBAAgB3qF,EACvBoK,IAAMygF,KAAK,GAAKC,KAAK,GAAKA,KAAOD,KACjCxgF,IAAMD,MAAQ0gF,KAAOD,KAAOC,KAC9B1gF,IAAI,GAAKC,IAAI,GACbugF,SAAShB,WAETgB,SAAShB,SAAWv/E,IAAI,GAAID,IAAI,GAAKC,IAAI,GAAKD,IAAI,GAAKC,IAAI,IAE/D4/E,WAAW7xE,GAAK8xE,MAAM9xE,EAAGgyE,OAAOhyE,GAChC6xE,WAAWjqF,GAAKkqF,MAAMlqF,EAAGoqF,OAAOpqF,SAGpCqR,SAASg5E,QAAQ,IAAMM,gBAAgBN,QAAQ,QAE5B,MAAfA,QAAQ,IACRO,SAAShB,QAAUv4E,SAAS+G,EACxB2xE,aAAe/3B,gCAAiBl2D,cAChCmuF,WAAW7xE,EAAKpF,OAAO+3E,MAAQb,MAAM9xE,IAAMgyE,OAAOhyE,EAAKqxE,MAAMuB,gBAAgBd,MAAM9xE,EAAGgyE,OAAOhyE,IACxF8xE,MAAM9xE,EAAGgyE,OAAOhyE,MAGzBwyE,SAASd,QAAUz4E,SAASrR,EACxBgqF,aAAeh4B,gCAAiBl2D,cAChCmuF,WAAWjqF,EAAKgT,OAAO+3E,MAAQb,MAAMlqF,IAAMoqF,OAAOpqF,EAAK0pF,MAAMsB,gBAAgBd,MAAMlqF,EAAGoqF,OAAOpqF,IACxFkqF,MAAMlqF,EAAGoqF,OAAOpqF,KAKjC,OACIqR,SAAUu5E,SACVX,wBCpEKgB,2BAAkB,SAAlBA,gBAAmBC,SAAU5H,WAAY+D,SAAUtd,OAC5D,IAEIohB,WAGAC,WALAjB,YACAC,UAGEiB,OAAShX,2BAEf6W,SAAS/yF,KAAKkzF,SAAShkF,GAAG,QAAS,WAC/B,IAAMg8D,MAAQ8Q,0BACdgW,UACI/xE,EAAGirD,MAAMjrD,EACTpY,EAAGqjE,MAAMrjE,GAEbmrF,WAAa9D,SAASnnE,QAAQorE,oBAC9BF,YAAa,IAAIpuF,MAAOoG,YACzBiE,GAAG,OAAQ,WACV,IAAMg8D,MAAQ8Q,0BAKd,GAJAiW,QACIhyE,EAAGirD,MAAMjrD,EACTpY,EAAGqjE,MAAMrjE,KAET+pE,OAAS7pE,KAAKiY,IAAIgyE,SAAS/xE,EAAIgyE,OAAOhyE,IAAM,GAAhD,CAGAgyE,OAAOhyE,EAAIlY,KAAKmK,IAAI,EAAGnK,KAAKkK,IAAIggF,OAAOhyE,EAAG+yE,WAAWhsE,QACrDirE,OAAOpqF,EAAIE,KAAKmK,IAAI,EAAGnK,KAAKkK,IAAIggF,OAAOpqF,EAAGmrF,WAAW/rE,SAErD,IAAMhI,QAAUkyE,mBAAoBjC,SAASnnE,QAAQqrE,iBACjDpB,kBACAC,eACD/C,SAASnnE,QAAQxc,OAAO8O,mBAC3B8wE,WAAW1gF,QAAQ,SAAA4oF,KAAG,OAAInE,SAASxB,kBAAkB2F,IAAKp0E,cAC3D/P,GAAG,MAAO,WACT,IAAMg8D,MAAQ8Q,0BACdiW,QACIhyE,EAAGirD,MAAMjrD,EACTpY,EAAGqjE,MAAMrjE,GAEb,IAAMwvE,UAAW,IAAIxyE,MAAOoG,UAAYgoF,WAExC,KAAIrhB,OAASyF,SAAW,KAAOtvE,KAAKiY,IAAIgyE,SAAS/xE,EAAIgyE,OAAOhyE,IAAM,GAAlE,CAGAgyE,OAAOhyE,EAAIlY,KAAKmK,IAAI,EAAGnK,KAAKkK,IAAIggF,OAAOhyE,EAAG+yE,WAAWhsE,QACrDirE,OAAOpqF,EAAIE,KAAKmK,IAAI,EAAGnK,KAAKkK,IAAIggF,OAAOpqF,EAAGmrF,WAAW/rE,SAErD,IAAMhI,QAAUkyE,mBAAoBjC,SAASnnE,QAAQqrE,iBACjDpB,kBACAC,cACAW,MAAM,GACP1D,SAASnnE,QAAQxc,OAAO8O,mBAC3B4E,QAAQq0E,SAAU,EAClBnI,WAAW1gF,QAAQ,SAAA4oF,KAAG,OAAInE,SAASxB,kBAAkB2F,IAAKp0E,gBCvBnDs0E,eAjC0B,SAARA,MAAQrE,UAAQ,OAAI,SAAC6D,SAAU5H,YAC5D,IAAMuC,kBAAoB,SAApBA,kBAA8BphB,MAChC,IAAMpB,MAAQ8Q,0BACRj0D,QAAUmnE,SAASnnE,QAEnB/mB,KADc+mB,QAAQlN,SAAS24E,YAAYC,QACxBzyF,KACnB86E,IAAMD,8BAAe9zD,QAAQorE,oBAAoBO,aAAcxoB,OAC/DyoB,aAAe5rE,QAAQ6rE,gBAAgB9X,IAAI77D,EAAG67D,IAAIj0E,GACpDgsF,aChBgB,iBDgBF7yF,MCfA,eDeyBA,KACvCuK,KAAM+gE,KACNpB,cAEEjsD,SACF/F,SAAUy6E,aAAeA,aAAa7vE,GAAK,KAC3CgwE,eAAgBH,aAAaG,eAC7BpmD,OAAQimD,aAAajmD,OACrB3f,SAAU+tD,IACV96E,WAGJmqF,WAAW1gF,QAAQ,SAAA4oF,KAAG,OAAInE,SAASxB,kBAAkB2F,IAAKp0E,WAC1DisD,MAAM73C,mBAGV0/D,SAAS7jF,GAAG,YAAaw+E,mBACRx+E,GAAG,YAAaw+E,mBAChBx+E,GAAG,WAAY,WACZi8E,WAAW1gF,QAAQ,SAAA4oF,KAAG,OAAInE,SAASxB,kBAAkB2F,KACjDn6E,SAAU,aEnCzB66E,iCAA2B,SAA3BA,yBAAqCznB,KAAMpB,MAAOgkB,UAC3D,IAAMnnE,QAAUmnE,SAASnnE,QACnB+zD,IAAMD,8BAAe9zD,QAAQorE,oBAAoBO,aAAcxoB,MAAMwG,QAAUxG,MAAMwG,QAAQ,GAAKxG,OAClGyoB,aAAe5rE,QAAQ6rE,gBAAgB9X,IAAI77D,EAAG67D,IAAIj0E,GACpD0D,KAAM+gE,KACNpB,cAEJ,OACIhyD,SAAUy6E,aAAeA,aAAa7vE,GAAK,KAC3CgwE,eAAgBH,aAAaG,eAC7BpmD,OAAQimD,aAAajmD,OACrB3f,SAAU+tD,MCMHkY,eAV0B,SAARA,MAAQ9E,UAAQ,OAAI,SAAC6D,SAAU5H,YAQ5D4H,SAAS7jF,GAAG,QAPc,SAApBw+E,kBAA8BphB,MAChC,IAAMpB,MAAQ8Q,0BACR/8D,QAAU80E,iCAAyBznB,KAAMpB,MAAOgkB,UACtD/D,WAAW1gF,QAAQ,SAAA4oF,KAAG,OAAInE,SAASxB,kBAAkB2F,IAAKp0E,WAC1DisD,MAAM73C,kMCPP,IAAM86D,iBAAe8F,wBAAAC,oBACvBC,KCAmC,SAAPzgB,KAAOwb,UAAQ,OAAI,SAAC6D,SAAU5H,YAC3D2H,2BAAgBC,SAAU5H,WAAY+D,aDFd+E,wBAAAC,iBAEvBC,MAAoBZ,gBAFGU,wBAAAC,iBAGvBC,MAAoBH,gBAHGC,wBAAAC,iBAIvBC,UEDoB,SAAZC,UAAYlF,UAAQ,OAAI,SAAC6D,SAAU5H,YAC5C,IAAIjgB,MACAmpB,SAOJA,UAAW,EACXnpB,MAAQ8Q,0BACR+W,SAAS7jF,GAAG,aAAc,SAACo9D,MACvBpB,MAAQ8Q,0BACRqY,UAAW,EACXlkE,WAAW,WACFkkE,SAGDlJ,WAAW1gF,QAAQ,SAAA4oF,KAAG,OAAInE,SAASxB,kBAAkB2F,KACjDn6E,SAAU,SAhBA,SAApBw0E,kBAA8BphB,MAChC,IAAMrtD,QAAU80E,iCAAyBznB,KAAMpB,MAAOgkB,UACtD/D,WAAW1gF,QAAQ,SAAA4oF,KAAG,OAAInE,SAASxB,kBAAkB2F,IAAKp0E,WAC1DisD,MAAM73C,kBAUEq6D,CAAkBphB,OAMvB,OACJp9D,GAAG,WAAY,WACdmlF,UAAW,OF3BSJ,wBAAAC,iBAKvBC,UGJoB,SAAZG,UAAYpF,UAAQ,OAAI,SAAC6D,SAAU5H,YAC5C2H,2BAAgBC,SAAU5H,WAAY+D,UAAU,MHFxBgF,kBIPtBK,qBAAU,UACV/D,qBAAU,UACVgE,2BAAgB,gBAChBC,gCAAqB,qBACrBhE,oBAAS,SACTiE,yBAAc,cACdC,UAAY,YCNLC,OACTC,aACI77B,aAAc,SAAAA,aAAAT,KAAG,OAAIA,iTCAdu8B,mBCaX,SAAAA,kBAAa5F,2KAAU6F,CAAAhwF,KAAA+vF,mBACnB/vF,KAAKmqF,SAAWA,SAChBnqF,KAAKqqF,UAAW,EAChBrqF,KAAKiwF,UAAY,UACjBjwF,KAAKilF,WACLjlF,KAAK0yE,IAAMrd,cACXr1D,KAAKkwF,eACL32B,sBAAsBv5D,KAAM6vF,OAC5B7vF,KAAK8V,OAAO9V,KAAK4F,YAAYuqF,6UAiD7B,OAAIjsF,UAAO7C,QACPrB,KAAKilF,QAAUzqB,eAAex6D,KAAKilF,QAAN/gF,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IACtBlE,MAEJA,KAAKilF,kDAKZ,OADAjlF,KAAKqqF,UAAW,EACTrqF,6CAKP,OADAA,KAAKqqF,UAAW,EACTrqF,mDAIP,OAAOA,KAAKqqF,+CAyBZ,OAAOrqF,qDAWE3E,KAAM6C,IAIf,OAHIA,KACA8B,KAAKkwF,YAAY70F,MAAQ6C,IAEtB8B,6DAjGP,yDAUA,MAAO,kDAIP,MAAO,gDAWP,OAAO,wuCChCMowF,0vBAA4BL,iUA2BtBjlF,KAA0C5G,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,IAAAA,UAAA,OAAxBmsF,gBAAwBnsF,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAAPG,MAAO6G,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAI7D,OAHe8C,KAAKmqF,SAASnnE,QAAQstE,SAC9B5qF,QAAQ,SAAA6qF,OAAK,OAAmC,IAA/BA,MAAMz6E,SAAS06E,aACnCD,MAAME,sBAAsBJ,gBAAiBvlF,IAAIU,KAAMnO,SACpD2C,6uCC7BM0wF,owBAA4BX,iTAY9B/wE,UAAW22D,SAAUnvE,KAAMihB,UAAWmuD,WACjD,OAAOF,YAAY12D,UAAW22D,SAAUnvE,KAAMihB,UAAWmuD,mEAiBzD,OAAI1xE,UAAe7C,QACfrB,KAAK2wF,gBAALzsF,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK2wF,sDAIZ,OAAO3wF,yCAIP,OAAOA,8rBCpER,IA2GM4wF,wBAAmB,SAAnBA,iBAAoB5tE,QAAS6tE,gBAAiBC,SACvD,IAAMh7E,OAASkN,QAAQlN,SACjB2R,UAAY3R,OAAOi7E,aACnBC,YAAcl7E,OAAOk7E,YAC3Bxb,6BAAcqb,iBAAiBlzC,UAA/B,IAAAr4C,OAA6C0rF,YAA7C,KAAA1rF,OAA4DmiB,YAC3CvH,MAAM,UAAW4wE,QAAU,QAAU,8vCCuB3CG,8uBAxHYP,4TAmChBhN,aAAcxpE,SACjB,IAAIgB,EACApY,EACAmf,MACAC,OACEpM,OAAS9V,KAAKilF,QACdiM,QAAUp7E,OAAOq7E,IACjBhH,SAAWnqF,KAAKmqF,SAChB8D,WAAajuF,KAAKoxF,iBAClBC,WAAapD,WAAW4C,gBACxBS,UAAYrD,WAAWhsE,MACvBsvE,WAAatD,WAAW/rE,OACxB8uE,YAAcl7E,OAAOk7E,YACrBQ,wBAA0B17E,OAAOi7E,aAEvC,GAAyB,OAArB72E,QAAQ/F,SAER,OADAnU,KAAKyxF,KAAKxD,YACHjuF,KAGX,IAAM0xF,UAAYvH,SAASnnE,QAAQqrE,gBApBTsD,sBDlDS,SAA9BC,4BAA+B13E,QAASoyE,KAAMG,YACvD,IAAIz/C,GACAsS,GACAF,GACAG,GACAguC,OACAC,OACAqE,UACE19E,SAAW+F,QAAQ/F,SACnB44E,WAAa7yE,QAAQ6yE,eACrB+E,KAAO/E,WAAW7xE,EAClB62E,KAAOhF,WAAWjqF,EAExB,GAAiB,OAAbqR,SACA,OAAO,KAGX,IAAMo4E,MAAQD,KAAKpxE,EAAE,GACfsxE,MAAQF,KAAKxpF,EAAE,GACfkvF,QAAuC,WAA7BzF,MAAM3mF,YAAYoB,OAC5BirF,QAAuC,WAA7BzF,MAAM5mF,YAAYoB,OAC5B0lF,OAAM,GAAApnF,OAAMmnF,WAAWvxE,EAAE,IACzB0xE,OAAM,GAAAtnF,OAAMmnF,WAAW3pF,EAAE,IACzBovF,UAAY/9E,SAASu4E,QACrByF,UAAYh+E,SAASy4E,QAU3B,GARIsF,WAAaA,UAAU,aAAc3sF,OACrCgoF,OAAS2E,UAAU,GACnB1E,OAAS0E,UAAU,KAEnB3E,OAAS2E,cACT1E,OAAS2E,eAEbN,UAAYK,WAAaC,UAAY,OAAUD,UAAY,WAAa,aACpE3E,QAAUA,OAAOlsF,OACjB,GAAkC,SAA7BmrF,MAAM5mF,YAAYoB,QAAqBgrF,QACxChlD,GAAKsS,QAAKpiD,EACV20F,UAAY,iBACT,CACH,IAEIO,MACAC,MAHE78E,OAAS+2E,MAAM/2E,SACf88E,UAAyC,SAA7B/F,MAAM3mF,YAAYoB,OAGpC,GAAIsrF,UAAW,CACX,IAAIC,cAAgB/8E,OAAOnR,QAAQkpF,OAAO,IACtCiF,cAAgBh9E,OAAOnR,QAAQkpF,OAAOA,OAAOlsF,OAAS,IAF/CoxF,OAAAC,sBAGuBH,cAAeC,eAAevmF,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAIoF,IAHxE,GAGV4vF,cAHUE,OAAA,GAGKD,cAHLC,OAAA,GAIXL,MAAQ58E,OAAO+8E,eACfF,MAAQ78E,OAAOg9E,oBAEfJ,MAAQ7E,OAAO,GACf8E,MAAQ9E,OAAOA,OAAOlsF,OAAS,GAEnC2rC,GAAKu/C,MAAMoG,cAAcP,OACzB9yC,GAAKitC,MAAMoG,cAAcN,OACzB/yC,IAAMgzC,UAAY/F,MAAMqG,eAAiB,OAG7C5lD,GAAKsS,QAAKpiD,EAEd,GAAIswF,QAAUA,OAAOnsF,OACjB,GAAkC,SAA7BkrF,MAAM3mF,YAAYoB,QAAqBirF,QACxC7yC,GAAKG,QAAKriD,EACV20F,UAAY,eACT,CACH,IAEIgB,MACAC,MAHEt9E,QAASg3E,MAAMh3E,SAIrB,GAH+C,SAA7Bg3E,MAAM5mF,YAAYoB,OAGrB,CACX,IAAI+rF,cAAgBv9E,QAAOnR,QAAQmpF,OAAO,IACtCwF,cAAgBx9E,QAAOnR,QAAQmpF,OAAOA,OAAOnsF,OAAS,IAF/C4xF,OAAAP,sBAGuBK,cAAeC,eAAe/mF,KAAM,SAAC1O,EAAGoF,GAAJ,OAAUA,EAAIpF,IAHzE,GAGVw1F,cAHUE,OAAA,GAGKD,cAHLC,OAAA,GAIXJ,MAAQr9E,QAAOu9E,eACfD,MAAQt9E,QAAOw9E,oBAEfH,MAAQrF,OAAO,GACfsF,MAAQtF,OAAOA,OAAOnsF,OAAS,GAEnC+9C,GAAKotC,MAAMmG,cAAcE,OACzBtzC,GAAKitC,MAAMmG,cAAcG,OACzBvzC,IAAmC,SAA7BitC,MAAM5mF,YAAYoB,OAAoBwlF,MAAMoG,eAAiB,OAGvExzC,GAAKG,QAAKriD,EAGd,GAAK+0F,SAAWD,UAAa93E,QAAQq0E,QAAS,CAC1C,GAAIuD,KAAM,KAAAoB,MAAAR,qBACKZ,KADL,GACL9kD,GADKkmD,MAAA,GACD5zC,GADC4zC,MAAA,GAGV,GAAInB,KAAM,KAAAoB,MAAAT,qBACKX,KADL,GACL3yC,GADK+zC,MAAA,GACD5zC,GADC4zC,MAAA,IAKd,OACIC,WACIpmD,MACAsS,MACAF,MACAG,OAEJsyC,qBChCiCD,CAA4B13E,QAASw3E,UAAUpF,KAC5EoF,UAAUhrF,QADN0sF,UArBkBzB,sBAqBlByB,UAAWvB,UArBOF,sBAqBPE,UAEbxzC,WAAankC,QAAQq0E,SAAWz4E,OAAOuoC,WAE3B,SAAdwzC,WAAsC,aAAdA,WACxB32E,EAAIlY,KAAKkK,IAAIkmF,UAAUpmD,GAAIomD,UAAU9zC,IACrCr9B,MAAQjf,KAAKiY,IAAIm4E,UAAU9zC,GAAK8zC,UAAUpmD,MAE1C9xB,EAAI,EACJ+G,MAAQqvE,WAEM,SAAdO,WAAsC,eAAdA,WACxB/uF,EAAIE,KAAKkK,IAAIkmF,UAAUh0C,GAAIg0C,UAAU7zC,IACrCr9B,OAASlf,KAAKiY,IAAIm4E,UAAU7zC,GAAK6zC,UAAUh0C,MAE3Cl9B,OAASqvE,WACTzuF,EAAI,GAER9C,KAAKqzF,KAAKpF,YAEV,IAAMxtB,SAEEvlD,IACApY,IACAmf,YACAC,gBAMF2jE,WAAa7lF,KACb09C,UAHiBg4B,YAAYF,6BAAc6b,YAAa,KAAM,GAAlC,IAAA/rF,OAC1B0rF,YAD0B,KAAA1rF,OACXksF,0BAEU7zC,UAAU,QAAQn3C,KAAKi6D,QAClD6yB,aAAe51C,UAAUM,QAAQvwB,OAAO,QAC7BuE,KAAK,YCpGE,SAAnBuhE,iBAAmBpJ,UAAQ,OAAI,SAAC6D,SAAU5H,YACnD,IAAI1Y,QACAugB,WACEjrE,QAAUmnE,SAASnnE,QACnBwwE,OAAS,SAATA,OAAUt5E,SACZksE,WAAW1gF,QAAQ,SAAAkS,QAAM,OAAIuyE,SAASxB,kBAAkB/wE,OAAQsC,YAE9Di0E,OAAShX,2BAEf6W,SAAS/yF,KAAKkzF,SAAShkF,GAAG,QAAS,WAC/B,IAAMg8D,MAAQ8Q,0BACdgX,WAAajrE,QAAQorE,oBACrB1gB,QAAUvH,MAAMuH,UACjBvjE,GAAG,OAAQ,WACV,IAAMg8D,MAAQ8Q,0BACdvJ,QAAQxyD,GAAKirD,MAAMvlB,GACnB8sB,QAAQ5qE,GAAKqjE,MAAMtlB,GACnB,IAAM5+B,MAAQgsE,WAAWhsE,MACnBC,OAAS+rE,WAAW/rE,OACpBhH,EAAIlY,KAAKkK,IAAI+U,MAAQyrD,QAAQzrD,MAAOjf,KAAKmK,IAAIugE,QAAQxyD,EAAG,IACxDpY,EAAIE,KAAKkK,IAAIgV,OAASwrD,QAAQxrD,OAAQlf,KAAKmK,IAAIugE,QAAQ5qE,EAAG,IAC1Dy8C,GAAKz8C,EAAI4qE,QAAQxrD,OACjBo9B,GAAKpkC,EAAIwyD,QAAQzrD,MAEvB,GAAI/G,GAAK,GAAKokC,IAAMr9B,OAASnf,GAAK,GAAKy8C,IAAMr9B,OAAQ,CACjD,IAAMhI,QAAUkyE,mBAAoBppE,QAAQqrE,iBACxCpB,UACI/xE,IACApY,KAEJoqF,QACIhyE,EAAGokC,GACHx8C,EAAGy8C,KAERv8B,QAAQxc,OAAO8O,mBAClBk+E,OAAOt5E,YAEZ/P,GAAG,MAAO,WACT,IAAM8X,MAAQgsE,WAAWhsE,MACnBC,OAAS+rE,WAAW/rE,OACpBhH,EAAIlY,KAAKkK,IAAI+U,MAAQyrD,QAAQzrD,MAAOjf,KAAKmK,IAAIugE,QAAQxyD,EAAG,IACxDpY,EAAIE,KAAKkK,IAAIgV,OAASwrD,QAAQxrD,OAAQlf,KAAKmK,IAAIugE,QAAQ5qE,EAAG,IAC1Dy8C,GAAKz8C,EAAI4qE,QAAQxrD,OACjBo9B,GAAKpkC,EAAIwyD,QAAQzrD,MAEvB,GAAI/G,GAAK,GAAKokC,IAAMr9B,OAASnf,GAAK,GAAKy8C,IAAMr9B,OAAQ,CACjD,IAAMhI,QAAUkyE,mBAAoBppE,QAAQqrE,iBACxCpB,UACI/xE,IACApY,KAEJoqF,QACIhyE,EAAGokC,GACHx8C,EAAGy8C,IAEPsuC,MAAM,GACP7qE,QAAQxc,OAAO8O,mBAClB4E,QAAQq0E,SAAU,EAClBiF,OAAOt5E,cD2CSq5E,CAAiBpJ,SAAjBoJ,CAA2B/d,6BAAcx1E,OAAQ,SAAU6lF,cAE9D1nC,MAAMT,WACN1rB,KAAK,SAAUykD,OACZ,IAAIhB,QAAUD,6BAAcx1E,MAE5B,IAAK,IAAM3D,OADXgiD,aAAeo3B,QAAUA,QAAQp3B,aAAai0B,SAASj0B,WAAWi0B,WAChDmE,WACP55E,eAAe5B,KAAKw7E,MAAOp6E,MAC9BigE,aAAama,MAAMp6E,OAASo5E,QAAQx3B,KAAK5hD,IAAKo6E,MAAMp6E,QAK1Eo3F,aAAeh7B,sBAAsBy4B,QAAQH,aAAc/wF,KAAK0yE,IAAKse,aAI3E,OAHAsC,aAAa5oB,QAAQ+oB,aAAalxF,KAAK,MAAM,GAC7C+wF,aAAa5oB,QAAQwmB,QAAQzpE,WAAW,GAEjCznB,uCAGLiuF,YACF2C,wBAAiB5wF,KAAMiuF,WAAW4C,iBAAiB,qCAGjD5C,YACF2C,wBAAiB5wF,KAAMiuF,WAAW4C,iBAAiB,2DA9GnD,OACIE,aAAc,sBACdtpE,UAAW,GACXupE,Yd1Be,Oc2BfG,KACIJ,aAAc,gBACdtpE,UAAW,IAEf42B,YACIi0B,SAAU,sDAMlB,MAAO,mCE7BFohB,eACT1qE,SAAU,WACV/G,MAAO,EACPC,OAAQ,GCVCiuE,8BACTa,YDHuB,OCIvBD,aAAc,cACd4C,mBAAoB,qBACpBlsE,UAAW,GACXmsE,KACIC,OAAQ,GAEZC,SACIx2C,QAAS,EACTy2C,kBAAmB,GACnBC,UAAW,EACXC,UAAW,SACXC,UAAW,UACXC,UAAW,cACXN,OAAQ,GACRO,UAAW,IACX3sE,UAAW,4BACX4sE,gBAAiB,oCAErBC,OACIxzE,KAAM,GACNi8D,UAAU,EACVgU,aAAc,gBACdtpE,UAAW,GACX+X,MAAO,2BCxBF+0D,mBAAc,SAAdA,YAAex3C,OAAQy3C,IAAKC,YAAa3+E,QAClD,IAAI4+E,SACIx5E,EAA8Bu5E,YAA9Bv5E,EAAGpY,EAA2B2xF,YAA3B3xF,EAAG6xF,UAAwBF,YAAxBE,UAAWC,SAAaH,YAAbG,SAEnBC,WADgB/+E,OAAOw+E,MAAMvX,SACA,EAAIjnE,OAAOw+E,MAAMxzE,KAEpD,GFLsB,SEKlBi8B,QFRmB,UEQMA,OAAwB,CACjD,IAAIliC,MAAQ,EACRwU,KAAOslE,UAAY,EACjBG,WAAaN,IAAI1xF,EAAI0xF,IAAItyE,OACzB6yE,UAAYjyF,EAAI6xF,UAElBH,IAAI1xF,EAAIA,GACR+X,MAAQ25E,IAAI1xF,EAAIA,EAChBusB,MAAQylE,YAAcC,UAAaA,UAAYP,IAAI1xF,EAAK0xF,IAAItyE,QAAU,GAC/D6yE,UAAYD,aACnBzlE,KAAOrsB,KAAKiY,IAAInY,GAAK0xF,IAAI1xF,EAAI0xF,IAAItyE,SAAW,GAEhDwyE,SAAW75E,MAAQwU,KAAOwlE,WAAa,MACpC,CACH,IAAIh6E,OAAQ,EACRwU,MAAOulE,SAAW,EAChBI,UAAYR,IAAIt5E,EAAIs5E,IAAIvyE,MACxBgzE,SAAW/5E,EAAI05E,SAEjBJ,IAAIt5E,EAAIA,GACRL,OAAQ25E,IAAIt5E,EAAIA,EAChBmU,OAAQ2lE,WAAaC,SAAYA,SAAWT,IAAIt5E,EAAKs5E,IAAIvyE,OAAS,GAC3DgzE,SAAWD,YAClB3lE,MAAOrsB,KAAKiY,IAAIC,GAAKs5E,IAAIt5E,EAAIs5E,IAAIvyE,QAAU,GAE/CyyE,SAAW75E,OAAQwU,MAAOwlE,WAAa,EAE3C,OAAOH,UAUEQ,kBAAa,SAAbA,WAAclyE,QAASgG,SAAU0rE,UAC1C,IAAMS,aAAenyE,QAAQoyE,cACvBC,kBAAoBryE,QAAQsyE,mBAC5Bx/E,OAASkN,QAAQiiE,QACjB+L,YAAcl7E,OAAOk7E,YACrBuE,UAAYz/E,OAAOw+E,MACnB7sE,UAAYgxC,sBAAsB88B,UAAUxE,aAAc/tE,QAAQ0vD,IAAK58D,OAAOk7E,aAEpFmE,aAAaj1E,MAAM,UAAW,SAC9Bi1E,aAAal3C,KAAK,QAAlB,GAAA34C,OAA8BmiB,UAAUllB,KAAK,OFlDrB,SEmDpBymB,UFlDqB,UEkDQA,UAC7BmsE,aAAaj1E,MAAM,MAAnB,GAAA5a,OAA6BovF,SAA7B,OACAS,aAAaj1E,MAAM,OAAQ,IAC3Bm1E,kBAAkBn1E,MAAM,MAAxB,GAAA5a,OAAkCovF,SAAlC,OACAW,kBAAkBn1E,MAAM,OAAQ,MFrDV,WEuDtB8I,SAA8BmsE,aAAaj1E,MAAM,MAAO,QAAUi1E,aAAaj1E,MAAM,MAAnB,IAAA5a,OAC1DiwF,UAAUz0E,KADgD,OAElEq0E,aAAaj1E,MAAM,OAAnB,GAAA5a,OAA8BovF,SAA9B,OFzDsB,WE0DtB1rE,SAA8BqsE,kBAAkBn1E,MAAM,MAAO,QAAUm1E,kBAAkBn1E,MAAM,MAAxB,IAAA5a,OAC/DiwF,UAAUz0E,KAAO,EAD8C,OAEvEu0E,kBAAkBn1E,MAAM,OAAxB,GAAA5a,OAAmCovF,SAAnC,QAEJS,aAAazqB,QAAb,GAAAplE,OAAwB0rF,YAAxB,mBAAqD,GACrDmE,aAAazqB,QAAb,GAAAplE,OAAwB0rF,YAAxB,mBAAA1rF,OAAqD0d,QAAQwyE,oBAAqB,GAClFL,aAAazqB,QAAb,GAAAplE,OAAwB0rF,YAAxB,mBAAA1rF,OAAqD0jB,WAAY,GACjEqsE,kBAAkB3qB,QAAlB,GAAAplE,OAA6B0rF,YAA7B,8BAAqE,GACrEqE,kBAAkB3qB,QAAlB,GAAAplE,OAA6B0rF,YAA7B,8BAAA1rF,OAAqE0d,QAAQwyE,oBAAqB,GAClGH,kBAAkB3qB,QAAlB,GAAAplE,OAA6B0rF,YAA7B,8BAAA1rF,OAAqE0jB,WAAY,2TC3DhEysE,2BAIjB,SAAAA,gKAAeC,CAAA11F,KAAAy1F,SACXz1F,KAAK21F,OAAS,KACd31F,KAAK41F,WAAa,KAClB51F,KAAKilF,QAAUjlF,KAAK4F,YAAYuqF,iSAahC,OAAIjsF,UAAE7C,OAAS,GACXrB,KAAKilF,QAAUzqB,eAAex6D,KAAKilF,QAAN/gF,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IACtBlE,MAEJA,KAAKilF,8CAOR4Q,MAGJ,OAFA71F,KAAK21F,OAASE,KAAKh+E,MACnB7X,KAAK41F,WAAaC,KAAKh0F,UAChB7B,6CAGF81F,KAEL,OADA91F,KAAK+iB,SAAW+yE,IACT91F,2CAGH4pF,OACJ,IAAIpjF,KACEsP,OAAS9V,KAAKilF,QACd8O,kBAAoBj+E,OAAOi+E,kBAC3BlyF,UAAY7B,KAAK41F,WACjBzB,UAAYr+E,OAAOq+E,UACnBt8E,MAAQ7X,KAAK21F,OACX3E,YAAgBl7E,OAAhBk7E,YASR,GAPAhxF,KAAK+1F,OAASnM,OAEVpjF,KADAqR,iBAAiBtS,MACVsS,MAEAhW,UAAU7B,KAAK21F,OAAQ31F,KAAK8V,SAAU9V,KAAK+iB,qBAGlC1d,SAAU,CACDqwE,YAAYkU,MAAO,OAAQ,GAAhB,GAAAtkF,OAAuB0rF,YAAvB,4BACnBhmB,KAAKxkE,YACnB,CACH,IAAIstF,QAAUttF,KACVwvF,cAAgB,UAEhB9gC,eAAe1uD,QACfstF,QAAUttF,KAAKstF,QACfkC,cAAgBxvF,KAAKwvF,eAGzB,IAAM5rE,KAAOsrD,YAAYkU,MAAO,OAAQoM,eAAhB,GAAA1wF,OAAmC0rF,YAAnC,uBACpB,SAAA51F,GAAC,OAAIA,IAET,GH1EgB,UG0EZ46F,cAAgC,CAChC,IAAMC,MAAQvgB,YAAYtrD,KAAM,SAAU,GAAjB,GAAA9kB,OAAwB0rF,YAAxB,mBACnBkF,MAAQxgB,YAAYugB,MAAO,SAAU,GAAlB,GAAA3wF,OAAyB0rF,YAAzB,yBACnBmF,KAAOzgB,YAAYwgB,MAAO,KAAMpC,QAAd,GAAAxuF,OAA0B0rF,YAA1B,uBACxBmF,KAAKnkE,KAAK,SAAU52B,EAAGN,GACnB06E,6BAAcx1E,MAAM0qE,QAApB,GAAAplE,OAA+B0rF,YAA/B,uBAAA1rF,OAAgExK,IAAK,KAE3D46E,YAAYygB,KAAM,KAAM,SAAA/6F,GAAC,OAAIA,GAAlB,GAAAkK,OAAwB0rF,YAAxB,wBACnBh/D,KAAK,SAAU52B,GACjBo6E,6BAAcx1E,MAAMgrE,KAAK5vE,SAE1B,CACH,IAAM+6F,MAAOzgB,YAAYtrD,KAAM,MAAO0pE,QAAS,IAC3ChmE,OAAQ,SAAAA,OAACnJ,KAAMyxE,UAAP,OAAoBzxE,KAAKs5B,KAAK,QAASm4C,SAAS3uE,cAEtDilC,OAAQgpB,YAAYygB,MAAM,OAAQ,SAAA/6F,GAAC,OAAIA,EAAEoL,MAAtB,GAAAlB,OAA+B0rF,YAA/B,qBACzBtkC,OAAMzO,KAAK,QAAX,GAAA34C,OAAuB0rF,YAAvB,qBACAra,yBAAUwf,OACNtC,OAAQM,YAEZxd,yBAAUjqB,QACN98B,QAAS,iBAGb88B,OAAM16B,KAAK,SAAU52B,GACjB,IAAMi7F,GAAK7gB,6BAAcx1E,MAEzB,GADAq2F,GAAGrrB,KAAK,IACJ5vE,aAAaI,OACb,GAAe,SAAXJ,EAAE4L,KAAiB,CACnB,IAAM+nB,IAAM2mD,YAAY2gB,GAAI,OAAQ,IAC9Bt+E,KAAO29D,YAAY3mD,IAAK,QAAS,IACjCunE,MAAQl7F,EAAEk7F,iBAAiBjxF,SAAWjK,EAAEk7F,MAAQ/5B,uBAAUnhE,EAAEk7F,OAElE5f,wBAAS3nD,KACL7T,EAAG,EACHpY,EAAG,EACHmf,MAAO8xE,kBACP7xE,OAAQ6xE,oBAEZrd,wBAAS3+D,MACL3c,EAAGk7F,MAAMx1E,KAAK1lB,EAAE0lB,KAAbw1E,GACHrvD,UAAS,aAAA3hC,OAAeyuF,kBAAoB,EAAnC,MAAAzuF,OAAyCyuF,kBAAoB,EAA7D,OAEbpd,yBAAU5+D,MACN2B,KAAMte,EAAEokC,QAEZm3C,yBAAU5nD,KACN9M,MAAK,GAAA3c,OAAKyuF,kBAAL,MACL7xE,OAAM,GAAA5c,OAAKyuF,kBAAL,aAGVsC,GAAGrrB,KAAK5vE,EAAEW,OACVX,EAAEqsB,WAAa4uE,GAAG3rB,QAAQtvE,EAAEqsB,WAAW,GACvCkvD,yBAAU0f,GAAIj7F,EAAE8kB,YAGpBm2E,GAAGrrB,KAAK5vE,MAKxB,OAAO4E,2CAKP,OADAA,KAAK21F,OAAS,KACP31F,6DA7HP,IAAM8V,OAASq6E,6BAAc2D,QAE7B,OADAh+E,OAAOk7E,YAAcb,6BAAca,YAC5Bl7E,iUCXMygF,2BAMjB,SAAAA,QAAaC,cAAe7H,oKAAc8H,CAAAz2F,KAAAu2F,SACtC,IAAIG,mBAAqB/H,aACzB3uF,KAAK0yE,IAAMrd,cACXr1D,KAAKilF,WACLjlF,KAAK8V,WACL,IAAM6gF,YAAc32F,KAAKilF,QACnB+L,YAAc2F,YAAY3F,YAC1B4F,aAAeD,YAAY7C,QAAQO,gBACnCr1E,UAAY02D,YAAY8gB,cAAe,OAAQ,GAAxB,GAAAlxF,OAA+B0rF,YAA/B,uBAC7BhxF,KAAKqhB,WAAarC,UAClBhf,KAAK62F,kBAAoB73E,UAAUyO,OAAO,OAAOvN,MAAM,WAAY,YACnElgB,KAAK82F,kBAAoB92F,KAAK62F,kBAAkBppE,OAAO,OAAOwwB,KAAK,QAA1C,GAAA34C,OAAsD0rF,YAAtD,KAAA1rF,OAAqEsxF,eAC9F52F,KAAKs1F,mBAAqBt1F,KAAK62F,kBAAkBppE,OAAO,OAAOvN,MAAM,WAAY,YACjFlgB,KAAKo1F,cAAgBp1F,KAAK62F,kBAAkBppE,OAAO,OAE9CkhE,eACD+H,mBAAqBF,cAAc/oE,OAAO,OAAOvN,MAAM,iBAAkB,SAE7ElgB,KAAK+2F,aACL/2F,KAAKg3F,2BAA6BxhB,6BAAckhB,oBAC3CjpE,OAAO,KACPwwB,KAAK,QAFwB,GAAA34C,OAEZqxF,YAAY3F,YAFA,KAAA1rF,OAEeqxF,YAAYhD,qBAC7D,IAAM50E,GAAK/e,KAAK0yE,IACVqe,aAAe4F,YAAY5F,aAC3BkG,mBAAqBx+B,sBAAsBs4B,aAAchyE,GAAI43E,YAAY3F,aAE/Era,yBAAU32E,KAAKo1F,cAAe1B,eAC9B/c,yBAAU32E,KAAKs1F,mBAAoB5B,eACnC1zF,KAAKk3F,SAASD,mBAAmB10F,KAAK,MACtCvC,KAAKk3F,SAASP,YAAYlvE,WAC1BznB,KAAKyxF,wRASL,GAAIvtF,UAAO7C,OAAS,EAAG,CACnB,IAAM81F,QAAU38B,kBAAmBx6D,KAAK4F,YAAYuqF,iBAEpD,OADAnwF,KAAKilF,QAAUzqB,eAAe28B,QAADjzF,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IACtBlE,KAEX,OAAOA,KAAKilF,kDAeNx9D,WAEN,OADAznB,KAAK62F,kBAAkBnsB,QAAQjjD,WAAW,GACnCznB,+CAIP,OAAIkE,UAAI7C,QACJrB,KAAK+iB,SAAL7e,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK+iB,iDAGP1nB,KAAMmL,MAA0B,IAApB4wF,cAAoBlzF,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAC/B4R,OAAS9V,KAAK8V,SACZk7E,YAAgBl7E,OAAhBk7E,YACF4F,aAAe9gF,OAAOg+E,QAAQrsE,UAC9B5lB,UAAYiU,OAAOjU,UACnB4lB,UAAY2vE,cAAc3vE,WAAd,GAAAniB,OAA8B0rF,YAA9B,KAAA1rF,OAA6CsxF,aAA7C,KAAAtxF,OAA6DjK,MACzEy4F,QAAU9zF,KAAK+2F,UAAU17F,MAAQ2E,KAAK+2F,UAAU17F,OAAS,IAAIo6F,gBAC7Dz2E,UAAY02D,YAAY11E,KAAK82F,kBAAmB,OAAQM,cAAc79E,OAAQkO,WACpFzI,UAAUi/B,KAAK,QAAf,GAAA34C,OAA2B0rF,YAA3B,KAAA1rF,OAA0CsxF,aAA1C,KAAAtxF,OAA0DmiB,YF5BjC,SAApB4vE,kBAAqBl3E,gBAAiBsH,WAC/CtH,gBAAgBw9B,UAAUl2B,WAAWxb,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAIoF,IE4BpD00F,CAAkBr3F,KAAK82F,kBAAN,IAAAxxF,OAA6B0rF,YAA7B,KAAA1rF,OAA4CsxF,eAC7D,IAAMU,YAAcxhF,OAAOg+E,QAoB3B,OAnBAsD,cAAcpG,YAAchxF,KAAKilF,QAAQ+L,YACzC8C,QAAQh+E,OAAOwhF,aAEF,OAAT9wF,MACAstF,QAAQ5hE,QACRlT,UAAUiT,gBACHjyB,KAAK+2F,UAAU17F,QAEtBy4F,QAAQhmE,QACJjW,MAAOrR,KACP3E,UAAWu1F,cAAcv1F,WAAaA,YAE1CiyF,QAAQ9wE,QAAQhjB,KAAK+iB,UACrB+wE,QAAQyD,OAAOv4E,YAGdxjB,OAAO4I,KAAKpE,KAAK+2F,WAAW11F,QAC7BrB,KAAKyxF,OAEFzxF,uDAIP,OAAOxE,OAAOgc,OAAOxX,KAAK+2F,qDASpB77E,EAAGpY,GAAc,IAAXs7E,KAAWl6E,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MACvB,IAAK1I,OAAO4I,KAAKpE,KAAK+2F,WAAW11F,OAE7B,OADArB,KAAKyxF,OACEzxF,KAEXA,KAAKqzF,OACL,IAAM1qD,OAAS3oC,KAAKw3F,QACdC,gBAAkBrZ,KAAKqZ,gBAE7B,GAAI9uD,QAAU8uD,gBAAiB,CAC3B,IAAM30E,KAAO9iB,KAAK62F,kBAAkB/zE,OAC9BhN,OAAS9V,KAAKilF,QACdyS,cAAgB5hF,OAAOw+E,MAAMvX,SAC7B8X,WAAa6C,cAAgB,EAAI5hF,OAAOw+E,MAAMxzE,KAC9C62E,YAAc33F,KAAKw1F,kBACnBoC,YJxJQ,SIwJMD,aJ3JL,UI2JmCA,YAC7C70F,EAAIggB,KAAK/C,aAAe80E,WAAclsD,OAAO7lC,GAAKA,EAAK6lC,OAAO7lC,EAAI6lC,OAAOzmB,OACzEhH,EAAI4H,KAAK9C,YAAc60E,WAAclsD,OAAOztB,GAAKA,EAAKytB,OAAOztB,EAAIytB,OAAO1mB,MAE7E,IAAKy1E,cACD,GAAIE,YAAa,CACb,IAAI7/E,KACJ/X,KAAKo1F,cAAcl1E,MAAM,UAAW,QACpClgB,KAAKs1F,mBAAmBp1E,MAAM,UAAW,QACzClgB,KAAKg3F,2BAA2B92E,MAAM,UAAW,SACjD,IAAM23E,UAAY73F,KAAKg3F,2BAA2Br5C,UAAU,QAAQn3C,MAAM,IACpEw3C,MAAQ65C,UAAU75C,QAAQvwB,OAAO,QJnKjC,SIoKFkqE,YACA5/E,KAAO,KAAAzS,OAAK4V,EAAL,KAAA5V,OAAUxC,EAAIggB,KAAK/C,aAAe,EAAlC,OAAAza,OAAyCqjC,OAAOztB,EAAIytB,OAAO1mB,OAA3D,IAAA3c,OACGqjC,OAAO7lC,EAAI6lC,OAAOzmB,OAAS,GJzKlC,UI0KIy1E,YACP5/E,KAAO,KAAAzS,OAAK4V,EAAI4H,KAAK9C,YAAd,KAAA1a,OAA6BxC,EAAIggB,KAAK/C,aAAe,GAArD,MAAAza,OACSqjC,OAAOztB,EADhB,KAAA5V,OACqBqjC,OAAO7lC,EAAI6lC,OAAOzmB,OAAS,GJ1KnD,WI2KGy1E,cACP5/E,KAAO,KAAAzS,OAAK4V,EAAI4H,KAAK9C,YAAc,EAA5B,KAAA1a,OAAiCxC,EAAIggB,KAAK/C,cAA1C,MAAAza,OACKqjC,OAAOztB,EAAIytB,OAAO1mB,MAAQ,EAD/B,KAAA3c,OACoCqjC,OAAO7lC,IAEtDk7C,MAAMG,MAAM05C,WAAW55C,KAAK,IAAKlmC,MAAMmI,MAAM,UAAW,aACrD,CACH,IAAMw0E,SAAWH,mBAAYoD,YAAahvD,QACtCztB,IACApY,IACA6xF,UAAW7xE,KAAK/C,aAChB60E,SAAU9xE,KAAK9C,aAChBhgB,KAAKilF,SAERiQ,kBAAWl1F,KAAMA,KAAKw1F,kBAAmBd,UACzC10F,KAAKg3F,2BAA2B92E,MAAM,UAAW,SAK7D,IAAMkuB,OAASpuC,KAAK83F,UAChB58E,EAAG,EACHpY,EAAG,GAKP,OAHA9C,KAAK62F,kBAAkB32E,MAAM,OAA7B,GAAA5a,OAAwC8oC,OAAOlzB,EAAIA,EAAnD,OAA0DgF,MAAM,MAAhE,GAAA5a,OACO8oC,OAAOtrC,EAAIA,EADlB,OAGO9C,mEAQSw0F,KAAuB,IACnC12E,IADmC89D,MAAA57E,KAAlB22F,YAAkBzyF,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAEnC6zF,YAAcpB,YAAYoB,YAE9B,GADA/3F,KAAKqzF,QACAmB,IAED,OADAx0F,KAAKyxF,OACEzxF,KAGX,IAAMkxD,OAASlxD,KAAKg4F,QACdl1E,KAAO9iB,KAAK62F,kBAAkB/zE,OAEpC9iB,KAAK62F,kBAAkB32E,MAAM,MAAO,OACnBA,MAAM,OAAQ,OAC/B,IAAMF,YAAc8C,KAAK9C,YAAc,EACjCD,aAAe+C,KAAK/C,aAAe,EACnCjK,OAAS9V,KAAKilF,QACd72C,OAASpuC,KAAK83F,QACdJ,cAAgB5hF,OAAOw+E,MAAMvX,SAC7Bkb,UAAYP,cAAgB,EAAI5hF,OAAOw+E,MAAMxzE,KAC7CskC,UAA4BloD,IAArBy5F,YAAYvxC,MAAqBuxC,YAAYvxC,KACpD8yC,SAAW1D,IAAI1xF,EAEfq1F,KAAO3D,IAAIt5E,EAAIs5E,IAAIvyE,MAAQmsB,OAAOlzB,EAClCk9E,WAAalnC,OAAOjvC,MAAQk2E,KAC5BE,UAAY7D,IAAIt5E,EAAIkzB,OAAOlzB,EAAIg2C,OAAOh2C,EACtCo9E,YAAcJ,SAAYn4E,aAAek4E,UACzCM,cAAgBH,YAAcp4E,YAAci4E,UAC5CO,aAAeH,WAAar4E,YAAci4E,UAwGhD,OA/BAj4F,KAAKw3F,QAAUhD,IACVuD,cAEGA,YADAO,YACc,WACPC,eAAiBC,aACV,aAEA,YAIF,eAAhBT,YACAj6E,IAnFuB,SAArB26E,qBACF,IAAIzvE,SACA9N,EAAIs5E,IAAIt5E,EAAIs5E,IAAIvyE,MAChBnf,EAAI0xF,IAAI1xF,EAwBZ,OAtBIy1F,eACAvvE,SJ/OY,OIgPZ9N,GAAK+8E,WACEO,cACPt9E,EAAIs5E,IAAIt5E,EAAI8E,YACZgJ,SJlPa,QImPb9N,GAAK+8E,YAELjvE,SAAW,OACX9N,GAAK+8E,WAELzD,IAAItyE,OAASnC,eACbjd,EAAIE,KAAKmK,IAAI,EAAGqnF,IAAI1xF,EAAI0xF,IAAItyE,OAAS,EAAInC,aAAe,KAWxDiJ,kBACA0rE,SATaH,mBAAYvrE,SAAUwrE,KACnCt5E,IACApY,IACA6xF,UAAW50E,aACX60E,SAAU50E,aACX47D,MAAKqJ,SAKJ/pE,IACApY,KAoDE21F,GACiB,aAAhBV,cACPj6E,IAlDqB,SAAnB46E,mBACF,IAAI1vE,SACAlmB,EAEAoY,EAAIs5E,IAAIt5E,EAAI8E,YAAc,EAAIw0E,IAAIvyE,MAAQ,EAwB9C,OArBKivC,OAAOjvC,OAASuyE,IAAIt5E,EAAIkzB,OAAOlzB,GAAM8E,YACtC9E,EAAIg2C,OAAOjvC,MAAQjC,YAAcouB,OAAOlzB,EAChCA,EAAIkzB,OAAOlzB,EAAKg2C,OAAOh2C,IAC/BA,EAAIg2C,OAAOh2C,GAGXo9E,aACAx1F,EAAI0xF,IAAI1xF,EAAIid,aAAek4E,UAC3BjvE,SJzRc,WI2RdlmB,EAAI0xF,IAAI1xF,EAAI0xF,IAAItyE,OAAS+1E,UACzBjvE,SJ3RW,QIsSXA,kBACA0rE,SATaH,mBAAYvrE,SAAUwrE,KACnCt5E,IACApY,IACA6xF,UAAW50E,aACX60E,SAAU50E,aACX47D,MAAKqJ,SAKJ/pE,IACApY,KAkBE41F,IAGV14F,KAAK24F,WACDz9E,EAAG4C,IAAI5C,EACPpY,EAAGgb,IAAIhb,GAGX9C,KAAK44F,UAAY96E,IAAI42E,SAChBgD,eAGD13F,KAAKo1F,cAAcl1E,MAAM,UAAW,QACpClgB,KAAKs1F,mBAAmBp1E,MAAM,UAAW,SAHzCg1E,kBAAWl1F,KAAM8d,IAAIkL,SAAUlL,IAAI42E,UAKvC10F,KAAKw1F,kBAAoB13E,IAAIkL,SAC7Bo8B,MAAQplD,KAAKgpB,SAASlL,IAAI5C,EAAG4C,IAAIhb,GAC1B9C,yCAUP,OAFAA,KAAK62F,kBAAkB32E,MAAM,UAAW,QACxClgB,KAAKg3F,2BAA2B92E,MAAM,UAAW,QAC1ClgB,yCASP,OADAA,KAAK62F,kBAAkB32E,MAAM,UAAW,SACjClgB,2CAGHkxD,SAEJ,OADAlxD,KAAKg4F,QAAU9mC,QACRlxD,2CAGHouC,SAEJ,OADApuC,KAAK83F,QAAU1pD,QACRpuC,6CAOP,OAHAA,KAAK62F,kBAAkB5kE,SACvBjyB,KAAKs1F,mBAAmBrjE,SACxBjyB,KAAKg3F,2BAA2B/kE,SACzBjyB,6DA1SP,OAAOmwF,4CC7EF0I,kBAAoB,q5CCezBv5F,IAAew5F,kCAAfx5F,IAAKM,MAAUk5F,kCAAVl5F,MACL4d,6BAAsBy3C,oBAAtBz3C,kBAIFu7E,sBAAa,SAAbA,WAAcl3F,UAAWirC,SAAUgjD,aAAtB,IAAA/5B,KAAA,OAAAijC,0BAAAjjC,QACdjB,gCAAiBj2D,SAAW,SAAA9C,OAAK,OAAKA,iBAAiByhB,6BAAoBsyE,YAAY/zF,OACpF8kE,4BAAez7D,OAAOrJ,OAAQ+wC,YAFnBksD,0BAAAjjC,KAGdq3B,8BAAepuF,WAAa,SAAAjD,OAAK,OAAKA,iBAAiByhB,6BAAoBsyE,YAAY/zF,OACpF8F,UAAU9F,MAAM0uC,QAAQ,MAJbuuD,0BAAAjjC,KAKdjB,gCAAiBl2D,YAAc,SAAA7C,OAAK,OAAI+zF,YAAY/zF,SALtCg6D,MAwBbkjC,YAAc,SAAdA,YAAeriF,QAAW,IACpB/O,MAA6D+O,OAA7D/O,MAAO9L,MAAsD6a,OAAtD7a,MAAOi1F,YAA+Cp6E,OAA/Co6E,YAAa6C,OAAkCj9E,OAAlCi9E,OAAQqF,WAA0BtiF,OAA1BsiF,WAE3C,IAFqEtiF,OAAduiF,UAEvC,CACZ,IAAMC,QACFr9F,MAAO8L,MACP4f,UAAS,GAAAniB,OAAK0rF,YAAL,iBAEPqI,UACFt9F,YACA0rB,UAAS,GAAAniB,OAAK0rF,YAAL,mBAWb,YATe9zF,IAAX22F,SACAuF,OAAOl5E,OACHo5E,cAAA,GAAAh0F,OAAkBuuF,OAAlB,OAEJwF,SAASn5E,OACLo5E,cAAA,GAAAh0F,OAAkBuuF,OAAlB,SAKJpsE,UAAWyxE,WAAU,GAAA5zF,OAAM0rF,YAAN,iBAAA1rF,OAAiC0rF,YAAjC,4BAAA1rF,OACZ0rF,YADY,gBAErBxqF,MAAO4yF,OAAQC,WAIvB,OACI7yF,OACIihB,UAAW,GACX1rB,YACAmkB,OACIo5E,cA5DW,UA+DnB7xE,UAAS,GAAAniB,OAAK0rF,YAAL,oBAIXuI,4BAA8B,SAA9BA,4BAA+BC,SAAUC,cAAe3F,QAAS9wE,SAAY,IACvEg5C,aAA+Eh5C,QAA/Eg5C,aAAc09B,oBAAiE12E,QAAjE02E,oBAAqBpN,KAA4CtpE,QAA5CspE,KAAMx2E,OAAsCkN,QAAtClN,OAAQ6jF,SAA8B32E,QAA9B22E,SAAUC,QAAoB52E,QAApB42E,QAASjxD,OAAW3lB,QAAX2lB,OACpEqoD,YAAmCl7E,OAAnCk7E,YAAa6C,OAAsB/9E,OAAtB+9E,OAAQO,UAAct+E,OAAds+E,UACvByF,UAAYvN,KAAK9sD,MAAM,GACvBs6D,UAAYxN,KAAKgK,MAAM,GACvByD,SAAWzN,KAAKxrE,KAAK,GALoDm1C,MAAA,SAAAA,MASpE+jC,UACP,IAAMC,SAAWj+B,aAAag+B,UAAUt4F,MAClCw4F,kBAAoBV,SAASS,UAC7BE,YAAcT,oBAAoBM,UAClCI,MACFpzF,KAAM,OACNw4B,MAAOq6D,UAAUQ,SAASH,mBAC1B5D,MAAOwD,UAAUQ,SAASJ,mBAC1Bp5E,KAAMi5E,SAASQ,QAAQL,mBAAqBpkF,OAAOk+E,WAjBoBwG,mBAmB/Cb,SAASK,UAA7BvrF,YAnBmE+rF,mBAmBnE/rF,YACFgsF,uBAAwBv8F,EApB6Cs8F,mBAmBtDt8F,IACYg8F,mBAEjC,GAAgB,IAAZN,QACA9F,QAAQxvF,KAAK20F,aACTpxF,MAAO4G,YACP1S,MAAO0+F,sBACPzJ,wBACA6C,OA7FW,UA+FZ,CACH,IAAM6G,oBAAsBP,YAAY94F,OAAS,EACjDq5F,qBAAwB5G,QAAQxvF,MAAOkC,MAAO4zF,KAAMK,yBACpD,IACMvB,WADkBvwD,OA1BP,GA0BgCA,OAzBlC,GAyByDtkC,QAAQ21F,aACzCE,kBACvCC,YAAYz0F,QAAQ,SAACi1F,SACjB,IAAMC,aAAe5+B,aAAa2+B,SAASj5F,MADdm5F,kBAEmBlB,SAASgB,SAApCG,MAFQD,kBAErBpsF,YACF1S,OAAQg/F,EAHeF,kBAED38F,IACFs7F,SAASoB,eAC7BhoE,SAAWqmE,aACbpxF,MAAO6yF,oBAAmB,GAAAp1F,OAAMw1F,OAANx1F,OAAc8uF,WAAcqG,sBACtD1+F,YACAi1F,wBACA6C,OAAQ6G,oBAAsB7G,YAAS32F,EACvCg8F,wBAECwB,sBACD9nE,SAASpsB,MAAQ4zF,MAAjB90F,OAAA01F,6BAA0BpoE,SAASpsB,QAEvCstF,QAAQxvF,KAAKsuB,cAvCzB,IAAK,IAAMonE,YAAYP,cAAexjC,MAA3B+jC,WA8DFiB,4BAAmB,SAAnBA,iBAAoBv/B,WAAoC,IAC7Dw/B,cAiBAlF,cAlBoClgF,OAAyB5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAAZ8e,QAAY9e,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAE7Di+F,eAF6DC,mBAGxC1/B,UAAUnmD,UAA3B/O,KAHyD40F,mBAGzD50F,KAAMO,OAHmDq0F,mBAGnDr0F,OACRs0F,WAAa3/B,UAAUhyD,gBACvBsyD,aAAeN,UAAUpmD,kBALkCgmF,sBAMlCt4E,QAAQmnE,SAASnnE,QAAQy2E,gBAAhDj6D,MANyD87D,sBAMzD97D,MAAO82D,MANkDgF,sBAMlDhF,MAAOx1E,KAN2Cw6E,sBAM3Cx6E,KAChBy6E,aAAev4E,QAAQu4E,iBACvBxO,WAAahmF,OAAO6E,OAAO,SAAAxQ,GAAC,OAAIA,EAAE4L,OAASw0F,yBAAUt8F,YACrDwiE,SAAW36D,OAAO6E,OAAO,SAAAxQ,GAAC,OAAIA,EAAE4L,OAASw0F,yBAAUv8F,UACnDw8F,sBAAwB37B,uBAAU/4D,OAAQw0F,cAAcl6F,OACxDu4F,QAAUpzF,KAAKnF,OAEjBq4F,oBAEA12E,QAFA02E,oBACApN,KACAtpE,QADAspE,KAEEqN,SAjCU,SAAd+B,YAAe30F,OAAQ20D,UAAW14C,SAAY,IACxC8sE,YAA2B9sE,QAA3B8sE,YAAa6L,UAAc34E,QAAd24E,UACfh1F,UAAY+0D,UAAUhyD,gBAAgB/C,YACtCi1F,aAAe7C,sBAAW,KAAM,KAAMjJ,aAAah7B,gCAAiBl2D,aAE1E,OAAOmI,OAAOkE,OAAO,SAAC4wF,IAAKh0F,OAAU,IACzB0G,QAAwB1G,MAAxB0G,QAASlT,KAAewM,MAAfxM,KAAM2L,KAASa,MAATb,KACjB8lC,SAAWv+B,UAAYumD,gCAAiBj2D,SAAW88F,UAAUtgG,MAAQ,EACrEygG,GAAK90F,OAASw0F,yBAAUv8F,QAAU0H,UAAUtL,MAAM8U,eAAiB,SAAAqjD,KAAG,OAAIA,KAKhF,OAJAqoC,IAAIxgG,OACA6C,GAAI+1D,aAAa8kC,sBAAW+C,GAAIhvD,SAAUgjD,aAAavhF,SAAUqtF,cACjEntF,YAAW,GAAAnJ,OAAKu8D,yBAAyBnG,UAAWrgE,QAEjDwgG,SAoBMH,CAAY30F,OAAQ20D,UAAW14C,SAGhD,GAAI42E,QAAU,GAAK6B,oBACfN,YAnJe,SAAjBY,eAAkBC,QAASrC,UAC7B,IAAMxD,QACE3vF,KAAiBw1F,QAAjBx1F,KAAMO,OAAWi1F,QAAXj1F,OAWd,OAVAovF,KAAK7xF,KAAKyC,OAAO/B,IAAI,SAAA5J,GAAC,OAAIu+F,SAASv+F,EAAEC,MAAMoT,eAE3CjI,KAAKd,QAAQ,SAACtK,GACV,IAAMw4F,OACN7sF,OAAOrB,QAAQ,SAACu2F,SAAUnhG,GACtB,IAAMiB,MAAQ49F,SAASsC,SAAS5gG,MAAM6C,GAAG9C,EAAEN,IAC3C84F,IAAItvF,KAAKvI,SAEbo6F,KAAK7xF,KAAKsvF,OAEPuC,KAsIW4F,EACVv1F,UACAO,cACAs0F,uBACD1B,UACH3D,cNvKoB,YMwKjB,CACH,IAAMyD,eAAiBj6D,MAAM33B,MAAOyuF,MAAMzuF,MAAOiZ,KAAKjZ,OAAOoD,OAAO,SAACwxE,IAAK50E,OAEtE,OADAA,OAASm0D,aAAan0D,OAAOoR,IAAIjS,OAASw0F,yBAAUt8F,YAAcu9E,IAAI50E,OAAS,GACxE40E,SAGLyf,QADqBnP,WAAWnhF,OAAO,SAAA/D,OAAK,OAAK4xF,cAAc5xF,MAAMxM,QACxC2J,IAAI,SAAAwvF,KAAG,OAAIx4B,aAAaw4B,IAAIn5F,MAAMqG,QAC/Dy6F,YAAcnB,6BAAAoB,WAAQhtF,IAAX4rF,6BAAkBx/F,OAAOgc,OAAOkiF,wBAC3C2C,iBAAmBzC,QAAU,EAAIl4B,SAAS91D,OAAO,SAAAxQ,GAAC,OAAqC,IAAjC+gG,YAAY93F,QAAQjJ,EAAEC,QAAgBqmE,SAElGw5B,cAAgBn9B,6BACZv3D,UACApC,KAAM83F,WAMqB,SAAzBI,uBAA0BC,YAE5B,IAFoE,IAA5B76F,MAA4BwC,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,GAApB,EAAG4vF,QAAiB5vF,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAC5D8sF,YAA2Bl7E,OAA3Bk7E,YAAaoD,UAAct+E,OAAds+E,UACZt5F,EAAI,EAAG4oB,IAAM64E,WAAWl7F,OAAQvG,EAAI4oB,IAAK5oB,IAAK,KAAA0hG,cAC3BD,WAAWzhG,GAA3B0c,OAD2CglF,cAC3ChlF,OAAQnb,IADmCmgG,cACnCngG,IACVwL,MAAQqxD,WAAWnyD,OAAQm1F,QAAQx6F,OAAQ,QAC3CmyF,OAAqB,IAAZ+F,SAAuD,IAAtCp+F,OAAO4I,KAAKq1F,eAAep4F,OA1LhD,QA2LYnE,EACvB,GAAI2K,MAAO,KAAA40F,gBACqB9C,SAAS9xF,OAA7B4G,YADDguF,gBACChuF,YACF1E,gBAAiB7L,EAFhBu+F,gBACcv+F,IACK7B,KACpB88F,UAAY3hF,OAAOnW,OAAS,EAClCyyF,QAAQxvF,KAAK20F,aACTpxF,MAAK,GAAAvC,OAAKmJ,aAALnJ,OAAmB8uF,WACxBr4F,MAAOgO,eACPinF,wBACA6C,cACAqF,gBAAYh8F,EACZi8F,uBAIR,GAAI3hF,OAAO,IAAMA,OAAO,GAAGnb,IACvBigG,uBAAuB9kF,OAAQ9V,MAAQ,EAAGoyF,cAE1C,IADG,IAAA4I,OAAA,SAAAA,OACMr2F,EAAOs2F,MACZ,IAAMnD,SAAWhiF,OAAOnR,GACxBkzF,4BAA4BC,SAAUC,cAAe3F,SACjD6F,kBACArN,UACAx2E,cACAkmD,0BACA09B,wCACAE,gBACAjxD,OAAQ3lB,QAAQ9I,QAAQyuB,SAG5B0zD,iBAAiB32F,QAAQ,SAACi1F,SAAY,IAC1Bt/F,KAASs/F,QAATt/F,KAD0BuhG,eAENjD,SAASt+F,MAA7BoT,YAF0BmuF,eAE1BnuF,YAAavQ,GAFa0+F,eAEb1+F,GACrB41F,QAAQxvF,KAAK20F,aACTpxF,MAAK,GAAAvC,OAAKmJ,aAALnJ,OAAmB8uF,WACxBr4F,MAAOmC,GAAGs7F,SAASx9B,aAAa3gE,MAAMqG,QACtCsvF,wBACA6C,OAhOL,SA6MExtF,EAAI,EAAGs2F,KAAOnlF,OAAOnW,OAAQgF,EAAIs2F,KAAMt2F,IAAKq2F,OAA5Cr2F,IA0BrBi2F,CAtDApB,cAAiBhiC,WAAWgiC,cAAc,GAAI,OAEzCA,gBADD1jF,OAAQ0jF,gBAqD0B,EAAGC,aAG7C,OACIrH,QAASqH,YACTnF,8BAIK6G,uBAAU7D,0BAAA9I,eDnQU,mBCoQR,SAACpuB,GAAIhsD,OAAQkN,SAAY,IAEpCkkE,OADmBlkE,QAAjB0gE,aACoBL,YAAY6D,OAClC8U,QAAUl6B,GAAGvsD,UACbmsD,SAAWs6B,QAAQj1F,OAAO6E,OAAO,SAAAxQ,GAAC,OAAIA,EAAE4L,OAASw0F,yBAAUv8F,UAC3D69F,gBAAkBh7B,GAAGvlD,SAAS,IAAKmlD,SAASz2D,OAAO,SAACwxE,IAAK73E,GAE3D,OADA63E,IAAI73E,EAAEvJ,MAAQ6rF,OAAOtiF,EAAEvJ,QAAUuE,MAAQN,IAAM4nF,OAAOtiF,EAAEvJ,MACjDohF,MAEP9mE,WAAW,KAETonF,WAAaD,gBAAgBxnF,kBAC/BkC,UACAzb,MAAK,GAAAuJ,OAAK02F,QAAQx1F,KAAKnF,QACvB6e,OACIsJ,cAAe,SAEpB,mBACGwzE,aAAet7B,SAAS18D,IAAI,SAAA5J,GAAC,OAAIA,EAAEC,OACnCmL,KAAOs2F,gBAAgBvnF,UAAU/O,KAevC,OAdAw2F,aAAat3F,QAAQ,SAACi1F,SAClB,IAAM5+F,MAAQyK,KAAK,GAAGu2F,WAAWpC,SAASj5F,OAC1C3F,iBAAiByhB,6BAAoBhG,OAAOlT,SAAWkT,OAAOlT,MAAK,IAAAgB,OAAK4hF,OAAOyT,SAAShwD,cAArB,QAAArlC,OAC5Du8D,yBAAyBC,GAAI64B,WAE5B5+F,MAAK,GAAAuJ,OAAKvJ,MAAM0uC,QAAQ,IACxBvqB,OACIsJ,cAAe,aAIH,IAAxBwzE,aAAa37F,SACbmW,WAASlS,OAAA01F,6BAAKxjF,OAAO,IAAZwjF,6BAAmBxjF,OAAO,SAGnChR,KAAMgR,OAAO,OApCFwhF,0BAAA9I,YAuClB2I,kBAAoB,SAACryF,KAAMsP,OAAQkN,SAAf,OAA2Bi4E,4BAAiBz0F,KAAMsP,OAAQkN,WAvC5DktE,g3DCxPvB,IAAM+M,iBAAeC,uBAAAC,oBAChBtE,kBAAoB,SAACuE,aAActnF,QAAf,OAA0Bm+C,aAAampC,aAActnF,UADzDonF,uBAAAC,iBAAA,UAER,SAAAE,SAAAD,cAAY,OAAInpC,aAAampC,mBAFrBD,kBAcA5G,4DACjB,SAAAA,UAAwB,IAAA+G,iBAAA1hB,yKAAA2hB,CAAAv9F,KAAAu2F,SAAA,QAAAn9B,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MAAA,OACpBuiB,MAAA4hB,kCAAAx9F,MAAAs9F,iBAAAG,uBAAAlH,UAAAt7F,KAAAoC,MAAAigG,kBAAAt9F,MAAAsF,OAASsR,WACJ8mF,aACL9hB,MAAKsU,YAAc11B,kBAAmBqiC,uBACtCjhB,MAAKqU,UAAY4I,kBAJGjd,yXADS8U,gVAsC7B,GAAIxsF,UAAO7C,OAAQ,CACf,IAAMyU,OAAS9V,KAAKilF,QAAUzqB,eAAex6D,KAAKilF,QAhDvC,SAAjB0Y,eAAkB7nF,OAAQkN,SAC5B,IAAM46E,YAAc56E,QAAQktE,YACtB2N,cAAgBriG,OAAO0M,UAAW4N,QACxC,IAAK,IAAMzZ,OAAOuhG,YACdC,cAAcxhG,KAAO43D,aAAagpC,gBAAgB5gG,KAAM4gG,gBAAe,QAAlDhpC,CAA4Dn+C,OAAOzZ,KAAMyZ,QAElG,OAAO+nF,cA0C4DF,CAAcz5F,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GAAYlE,OAC/E49F,YAAc59F,KAAKkwF,YACzB,IAAK,IAAM7zF,OAAOuhG,YAAa,CAC3B,IAAM/7F,UAAYiU,OAAOzZ,KAAKwF,UAC9B7B,KAAK89F,YAAYzhG,IAAKwF,WAE1B,OAAO7B,KAEX,OAAOA,KAAKilF,4CAGTvB,aAAcxpE,SAAuB,IAAdgF,QAAchb,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MACpC65F,YAAc,EACdC,WAAa,EACXtiC,UAAYgoB,aAAaL,YAAYxrE,MACrCmL,QAAUhjB,KAAKmqF,SAASnnE,QACxBirE,WAAajuF,KAAKoxF,iBACxB,GAAK11B,UAAUuiC,WAAkC,OAArB/jF,QAAQ/F,SAEhC,OADAnU,KAAKyxF,KAAKvyE,QAAS,MACZlf,KAGX,IAAMk+F,SAAWl+F,KAAK09F,UAChB5nF,OAAS9V,KAAK8V,SACdqoF,UACFl8E,MAAOgsE,WAAWhsE,MAClBC,OAAQ+rE,WAAW/rE,QAEjB6sE,eAAiB70E,QAAQ60E,eACzBl9C,IAAM/7B,OAAOqT,QACbi1E,cACAC,WvB7FY,euB6FCvoF,OAAO7Z,KACpBy1F,UAAY1uE,QAAQqrE,gBACpB3nF,OAASgrF,UAAUhrF,OAEnB43F,oBADY53F,OAAOwU,EAAE,IAAKxU,OAAOwU,EAAE,GAAGlU,SAAWw0F,yBAAUt8F,WAE3Dq/F,WAAarkF,QAAQ8O,SACrBw1E,SACAxgD,SACAxyC,KAAOkwD,UAAUnmD,UAAU/J,KAC7B6yF,WACAD,WAAW95F,KAAXjH,MAAA+gG,WAAUK,0BAASjzF,KAAKxG,IAAI,SAAA5J,GAAC,OAAIsgE,UAAUhmD,OAAO,SAACoE,UAAWhf,GAAZ,OAAkBA,IAAMM,IACtEua,WAAW,QAGfyoF,WAAW95F,KAAKo3D,WAGpB,IAAI/yB,OAASzuB,QAAQyuB,OACjB+1D,gBACJ,GAAI/1D,OAAQ,CACR+1D,aAAe/1D,OAAO,OAGtB,IAFA,IAAMg2D,aAAezkF,QAAQykF,aACvBzC,WACGphG,EAAI,EAAG4oB,IAAMg7E,aAAar9F,OAAQvG,EAAI4oB,IAAK5oB,KACD,IAA3C6jG,aAAat6F,QAAQq6F,aAAa5jG,KAClCohG,QAAQ53F,KAAKxJ,GAGrB6tC,OAASA,OAAO3jC,IAAI,SAAA5J,GAAC,OAAIA,EAAEwQ,OAAO,SAAChH,EAAG9J,GAAJ,OAAkC,IAAxBohG,QAAQ73F,QAAQvJ,OAYhE,IATA,IAAM8jG,eAAiB57E,QAAQ67E,6BAA6Bl2D,QAAUzuB,QAAQ/F,UAC1EuO,SAAS,IAGPo8E,SAAW7qC,aAAa/0C,QAAQ4/E,SAAU9+F,KAAKiwF,WAC/C8O,aAAejpF,OAAOgpF,UACpBE,cAAyCD,aAAzCC,cAAuBC,cAAkBF,aAA1Br4F,OACjBk3F,YAAc59F,KAAKkwF,YAEhBp1F,GAAI,EAAGA,GAAIsjG,WAAW/8F,OAAQvG,KAAK,CACxC,IAAIokG,QAAUN,eAAe9jG,IAC7B,GAAIujG,WAAY,CACZ,IAAMtR,WAAaqR,WAAWtjG,IAAGya,UAAUxO,OAAO6E,OAAO,SAAAxQ,GAAC,OAAIA,EAAE4L,OAASw0F,yBAAUt8F,YAC9E8F,IAAI,SAAA5J,GAAC,OAAIA,EAAEC,OAEhB6jG,SADAA,QAAUl8E,QAAQ67E,6BAA6BT,WAAWtjG,IAAGwhB,QAAQywE,aAAerqE,SAAS,MACxEw8E,QAAQ,GAGjC,IAAM5sF,GAAK0sF,cAAcZ,WAAWtjG,IAAImkG,cAAej/F,MAEvDg+C,MAAMljD,KAAK,EAX6B,IAYfqkG,gBAA+ClR,WAAhE9tE,gBAAkCi/E,0BAA8BnR,WAA9BmR,0BACpCC,eAAiBF,gBAAgB9yB,wBACjCizB,aAAerR,WAAWuI,cAAcnqB,wBAExCzkD,WAAa03E,aAAanvE,KAAOkvE,eAAelvE,KAChDtI,UAAYy3E,aAAar2E,IAAMo2E,eAAep2E,IAC9Cs2E,YAAcrB,SAASpjG,IAAKojG,SAASpjG,KAAM,IAAI0kG,gBAAgBL,gBAC7DlR,WAAWU,cAEnB+C,UAAUx3E,QAAUA,QACpBw3E,UAAUvH,SAAWnqF,KAAKmqF,SAC1BuH,UAAU6J,aAAev4E,QAAQu4E,eACjC7J,UAAUiK,UAAY34E,QAAQy8E,mBAC9B/N,UAAU5B,YAAc9sE,QAAQ8sE,cAChC4B,UAAUhO,aAAeA,aACzB6b,YAAYv8E,QAAQ0uE,WACpB,IAAMgO,WAAa9B,YAAYkB,UAiB/B,GAhBAS,YAAYzL,QAAQgL,SAAUxsF,IAC1BzQ,UAAW69F,WACXnmF,MAAO2F,QAAQ3F,QAEFzD,OAAO9V,KAAK8V,UACZo7C,QACGh2C,EAAG,EACHpY,EAAG,EACHmf,MAAOm9E,0BAA0Bn9E,MACjCC,OAAQk9E,0BAA0Bl9E,SAErCksB,QACGlzB,EAAG0M,YAAc9R,OAAOs4B,OAAOlzB,GAAK,GACpCpY,EAAG+kB,WAAa/R,OAAOs4B,OAAOtrC,GAAK,KAGnDisF,eACAwQ,YAAYv2E,SAASu1E,WAAWrjF,EAAI22B,IAAK0sD,WAAWz7F,EAAI+uC,SACrD,KAAIqtD,QAUJ,CACHK,YAAY9N,OACZ,MAXA8N,YAAYI,oBACRzkF,EAAGgkF,QAAQhkF,EACXpY,EAAGo8F,QAAQp8F,EACXmf,MAAOi9E,QAAQj9E,OAAS,EACxBC,OAAQg9E,QAAQh9E,QAAU,IAE1B61E,YAAasG,WACRC,eAAiB,aAAe,gBAAcphG,IAO3D,GAAImhG,WAAY,CACZ,IAAMr1E,SAAWu2E,YAAY5G,UACvBiH,gBAAkBL,YAAY1I,kBAAkB/zE,OAAOupD,wBAI7D,GAFA0xB,aAAe6B,gBAAgB19E,OAAS2vB,IACxCmsD,YAAc4B,gBAAgB39E,MAAQ4vB,IAClCysD,eAAiBP,YAAc9P,WAAW/rE,OAAS87E,WAAa/P,WAAWhsE,MAC3E,MAEJu8E,MAAMl6F,MACF4W,EAAG8N,SAAS9N,EACZpY,EAAGkmB,SAASlmB,EACZmf,MAAO29E,gBAAgB39E,MACvBC,OAAQ09E,gBAAgB19E,OACxBwsE,QAAS6Q,eAKrB,IAAK,IAAMljG,OAAO6hG,SACd,IAAKlgD,MAAM3hD,KAAM,CACb,IAAMqyF,QAAUwP,SAAS7hG,KACzBqyF,QAAQoF,QAAQ55E,QAAQtC,OAAQ,MAC3B82E,QAAQmR,cAAcx+F,SACvBqtF,QAAQz8D,gBACDisE,SAAS7hG,MAU5B,OANIgiG,cClOiB,SAAhByB,cAAiBtB,MAAOttC,OAAQotC,gBACzC,IAAIx7F,EACAof,OACAhH,EACA+G,MACAnnB,EAEE4oB,IAAM86E,MAAMn9F,OACZ0+F,kBAAoB,SAApBA,kBAAqBC,SAAUC,UAAWC,UAC5ChlF,EAAI8kF,SAAS9kF,EACb+G,MAAQ+9E,SAAS/9E,MACjBnf,EAAIk9F,SAASl9F,EACbof,OAAS89E,SAAS99E,OAClB,IAAMw6B,OAAS55C,EAAIof,OACbqO,MAAQrV,EAAI+G,MAEdq8E,gBACI4B,SAAWp9F,EAAKm9F,UAAUn9F,EAAIm9F,UAAU/9E,OAAUw6B,OAASujD,UAAUn9F,KACrEm9F,UAAUn9F,EAAIo9F,SAAWF,SAASl9F,EAAIm9F,UAAU/9E,OAZhD,EAaQw6B,OAbR,IAeGwjD,SAAWhlF,EAAK+kF,UAAU/kF,EAAI+kF,UAAUh+E,MAASsO,MAAQ0vE,UAAU/kF,KAC1E+kF,UAAU/kF,EAAIglF,SAAWF,SAAS9kF,EAAI+kF,UAAUh+E,MAhB5C,EAiBIsO,MAjBJ,IAwBZ,IAHAiuE,MAAMvyF,KAAK,SAAC1O,EAAGoF,GAAJ,OAAW27F,eAAiB/gG,EAAEuF,EAAIH,EAAEG,EAAIvF,EAAE2d,EAAIvY,EAAEuY,IAC3DpgB,EAAI,EAECA,EAAI,EAAGA,EAAI4oB,IAAM,EAAG5oB,IACrBilG,kBAAkBvB,MAAM1jG,GAAI0jG,MAAM1jG,EAAI,IAG1C,GAAK0jG,MAAM1jG,GAAGgI,EAAI07F,MAAM1jG,GAAGonB,OAAUgvC,OAAOhvC,QACnCs8E,MAAM1jG,GAAGogB,EAAIsjF,MAAM1jG,GAAGmnB,MAASivC,OAAOjvC,MAM3C,IALIq8E,eACAE,MAAM1jG,GAAGgI,GAAM07F,MAAM1jG,GAAGonB,OAASs8E,MAAM1jG,GAAGgI,EAAKouD,OAAOhvC,OAEtDs8E,MAAM1jG,GAAGogB,GAAMsjF,MAAM1jG,GAAGmnB,MAAQu8E,MAAM1jG,GAAGogB,EAAKg2C,OAAOjvC,MAEpDnnB,EAAI4oB,IAAM,EAAG5oB,EAAI,EAAGA,IACrBilG,kBAAkBvB,MAAM1jG,GAAI0jG,MAAM1jG,EAAI,IAAI,GDyL1CglG,CAActB,MAAOL,SAAUG,gBAC/BE,MAAM94F,QAAQ,SAAAyrF,KAAG,OAAIA,IAAIzC,QAAQ1lE,SAASmoE,IAAIj2E,EAAGi2E,IAAIruF,GACjD20F,iBAAiB,OAGlBz3F,uCAGLkf,SACF,IAAMg/E,SAAWl+F,KAAK09F,UACtB,IAAK,IAAMrhG,OAAO6hG,SACd,MAAOrhG,eAAe5B,KAAKijG,SAAU7hG,KAAM,CACvC,IAAMyiG,SAAW5/E,QAAQ4/E,UAAY9+F,KAAKiwF,UAC1CiO,SAAS7hG,KAAKy3F,QAAQgL,SAAU,MAChCZ,SAAS7hG,KAAKo1F,gEA/MtB,OACItoE,QAAS,EACTilB,QACIlzB,EAAG,EACHpY,EAAG,GAEPq9F,kBACInB,cAAe,SAAAA,cAAC1sF,GAAI5L,QAAL,OAAiBA,OAAS4L,GAAGgK,QAAQ5V,QAAUiP,WAAW,IAAWrD,KAGxF8tF,kBACIpB,cAAe,SAAAA,cAAC1sF,GAAI5L,QAChB,IAAM20F,WAAa/oF,GAAG5I,gBAChBqjF,WAAavxF,OAAO4I,KAAKi3F,WAAWp0F,gBACpCy6D,SAAWlmE,OAAO4I,KAAKi3F,WAAWx0F,cAClCw5F,gBAAkBpsC,aAAavtD,OAAQg7D,SAASrgE,QAAUqgE,SAAS,QACzE,OAAOpvD,GAAGgK,WAAHhX,OAAAm5F,0BAAe1R,YAAf0R,0BAA8B4B,mBACjC1qF,WAAW,uDAQ3B,OAAO81E,+uDEpDM6U,otBAAkB5P,6SAa5BhN,aAAcxpE,SAAS,IACtBgI,OACAq+E,UACA/2C,GACAvnC,MAJsB25D,MAAA57E,KAAAwgG,aAStBxgG,KAAK8V,SAHL2R,UANsB+4E,aAMtB/4E,UACAg5E,UAPsBD,aAOtBC,UACAC,UARsBF,aAQtBE,UAEEhlC,UAAYgoB,aAAaL,YAAYxrE,MACrCo2E,WAAajuF,KAAKoxF,iBACxB,GAAIl3E,QAAQ/F,UAAYunD,WAAaA,UAAUuiC,UAC3C,OAAOj+F,KAEX,GAAyB,OAArBka,QAAQ/F,WAAsBunD,UAE9B,OADA17D,KAAKyxF,OACEzxF,KAGX,IAAMg8F,QAAUtgC,UAAUnmD,UACpBm8E,UAAY1xF,KAAKmqF,SAASnnE,QAAQqrE,gBAClC/B,KAAOoF,UAAUpF,KACjBG,WAAaiF,UAAUhrF,OACvBA,OAASg9E,aAAah9E,OACtBF,KAAOw1F,QAAQx1F,KACfw1D,aAAeN,UAAUpmD,kBACzBq5E,aAAeV,WAAW4C,gBAE1BuF,YAgCN,GA/BA1vF,OAAOhB,QAAQ,SAACmC,OACZ,IAAM84F,WAAa3kC,aAAan0D,QAAUm0D,aAAan0D,OAAOnG,MACxDu6D,QAAUz1D,KAAKxB,IAAI,SAAA5J,GAAC,OAAIA,EAAEulG,cAC1BC,YAAc,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAIvmF,KAAK,SAACoa,KAC7D,IAAMosE,UAAYpU,WAAWh4D,IAAI,IAAIA,IAAI,IACzC,OAAOosE,WAAaA,UAAU75F,SAAWw0F,yBAAUt8F,YACJ,IAA3C2hG,UAAUlU,aAAatoF,QAAQwD,SAEvC,QAAkB3K,IAAd0jG,WAA2Bp6F,KAAKnF,OAAQ,CACxC,IAAM2F,KAAO45F,UAAU,GACjB9jD,KAAOwvC,KAAKtlF,MAAM45F,UAAU,IAC5B7kG,MAAQkgE,QAAQ,GACtBskC,UAAYzjD,KAAK81C,gBAAkB,EACnCppC,GAAK1M,KAAK61C,cAAc52F,OAASwkG,UAAY,EAAItS,WAAW6S,QAC5D,IAAMxQ,OAAS1U,MAAKuO,SAASnnE,QAAQstE,SAC/ByQ,UAAY/9F,KAAKmK,IAAL9P,MAAA2F,KAAIg+F,4BAAQ1Q,OAAOtrF,IAAI,SAAAurF,OAAK,OAAIA,MAAM0Q,cAAcj6F,UAChE6qC,IAAM7uC,KAAKmK,IAAL9P,MAAA2F,KAAIg+F,4BAAQ1Q,OAAOtrF,IAAI,SAAAurF,OAAK,OAAIA,MAAM2Q,iBAAiBl6F,UACnEkb,OAAS+rE,WAAW/rE,OACpBD,MAAQgsE,WAAWhsE,MACnB,IAAMk/E,QAAU33C,GAAKu3C,UAAY,EAAIlvD,IAAM,EACrCuvD,MAAQ53C,GAAKu3C,UAAY,EAAIlvD,IAAM,EACnCwvD,aAEFA,UAAUjmG,EADD,MAAT4L,KACA,OAAA1B,OAAqB67F,QAArB,SAAA77F,OAAoC87F,MAApC,OAAA97F,OAA+C2c,MAA/C,KAAA3c,OAAwD87F,MAAxD,OAAA97F,OAAmE2c,MAAnE,KAAA3c,OAA4E67F,QAA5E,MAEA,KAAA77F,OAAmB67F,QAAnB,SAAA77F,OAAkC87F,MAAlC,SAAA97F,OAA+C87F,MAA/C,KAAA97F,OAAwD4c,OAAxD,OAAA5c,OAAoE67F,QAApE,KAAA77F,OAA+E4c,OAA/E,MAEJm/E,UAAU55E,UAAYs5E,UAAYN,UAAYC,WAC7C3zF,MAAMy8C,KAAO4sC,SAAS9xF,KAAK+8F,cAGhCjL,SAAS/0F,OAAQ,CACjB,IAAMigG,YAActhG,KAAKgoB,cAAc2mE,aAAc,KAAM,GAAIlnE,WAClDznB,KAAKgoB,cAAcs5E,YAAa,OAAQlL,UAChDn4C,KAAK,IAAK,SAAA7iD,GAAC,OAAIA,EAAEA,IAAG8kB,MAAM,iBAAkB,QAChC+9B,KAAK,QAAS,SAAA7iD,GAAC,OAAIA,EAAEqsB,YAE1C,OAAOznB,yCAIP,IAAMynB,UAAYznB,KAAK8V,SAAS2R,UAC1BwmE,WAAajuF,KAAKoxF,iBACxB5b,6BAAcyY,WAAW4C,iBAAiBlzC,UAA1C,IAAAr4C,OAAwDmiB,YAAawK,iEApFrE,OACIxK,UAAS,GAAAniB,OzBVM,OyBUN,oBACTm7F,UAAS,GAAAn7F,OzBXM,OyBWN,cACTo7F,UAAS,GAAAp7F,OzBZM,OyBYN,+DAKb,OAAOsqF,2BCDFiN,qBACT0E,KAjBW,SAATC,OAAU12F,IAAKkY,QAAS87E,UAAa,IAEnCzb,YAIAv4E,IAJAu4E,YACAE,WAGAz4E,IAHAy4E,WACAhB,QAEAz3E,IAFAy3E,QACAR,YACAj3E,IADAi3E,YAGCsB,YAAYhiF,QAAWkiF,WAAWliF,QAGnC2hB,QAAQytE,sBAAsBlO,QAAQ,MAAQuc,UAAU,GACxD97E,QAAQytE,sBAAsBpN,eAAiByb,UAAU,IAHzD97E,QAAQytE,sBAAsB1O,eAAiB+c,UAAU,IAS7D2C,MAAO,SAAAA,MAAC32F,IAAKkY,SAAY,IAEjBqgE,YAGAv4E,IAHAu4E,YACAE,WAEAz4E,IAFAy4E,WACAxB,YACAj3E,IADAi3E,YAECsB,YAAYhiF,QAAWkiF,WAAWliF,QAGnC2hB,QAAQytE,sBAAsBlN,cAAgB,SAAS,GACvDvgE,QAAQytE,sBAAsBpN,eAAiB,SAAS,IAHxDrgE,QAAQytE,sBAAsB1O,eAAiB,SAAS,IAMhE2f,UAAW,SAAAA,UAAC52F,IAAKkY,SAAY,IAErBqgE,YAKAv4E,IALAu4E,YACAE,WAIAz4E,IAJAy4E,WACAjB,SAGAx3E,IAHAw3E,SACAC,QAEAz3E,IAFAy3E,QACAR,YACAj3E,IADAi3E,YAECsB,YAAYhiF,QAAWkiF,WAAWliF,QAGnC2hB,QAAQytE,sBAAsBnO,SAAS,MAAQ,aAAa,GAC5Dt/D,QAAQytE,sBAAsBlO,QAAQ,MAAQ,aAAa,IAH3Dv/D,QAAQytE,sBAAsB1O,eAAiB,aAAa,wxCCpCnD4f,gEACjB,SAAAA,kBAAwB,IAAArE,iBAAA1hB,qKAAAgmB,CAAA5hG,KAAA2hG,iBAAA,QAAAvoC,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MAAA,OACpBuiB,MAAAimB,2CAAA7hG,MAAAs9F,iBAAAwE,gCAAAH,kBAAA1mG,KAAAoC,MAAAigG,kBAAAt9F,MAAAsF,OAASsR,WACJq5E,UAAY,YACjBrU,MAAKsU,YAAc2M,oBAHCjhB,mZADiBwU,8TAelC1M,aAAcxpE,SAAuB,IAAdgF,QAAchb,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAKxC,OAFA46F,EAFiB9+F,KAAKkwF,YAAYhxE,QAAQ4/E,UAAY9+F,KAAKiwF,YAElDvM,aAAc1jF,KAAMkf,QAAQ4/E,UAAY9+F,KAAKiwF,WAE/CjwF,uDAZP,OAAO2vF,iEAIP,MAAO,s1CCdMoS,2wBAAqB3R,oUAa/B1M,aAAcxpE,SACjB,IAAM8I,QAAUhjB,KAAKmqF,SAASnnE,QACxBg/E,WAAate,aAAaL,YAAYxrE,MAM5C,OALyB,OAArBqC,QAAQ/F,SACR6O,QAAQi/E,eAAeC,YAEvBl/E,QAAQm/E,gBAAgB37F,KAAKw7F,YAE1BhiG,uDAnBP,MAAO,iDAIP,MAAO,wDAIP,OAAO,82DCLf,IA+CqBoiG,oDACjB,SAAAA,eAAwB,IAAA9E,iBAAA1hB,4JAAAymB,CAAAriG,KAAAoiG,cAAA,QAAAhpC,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MAAA,OACpBuiB,MAAA0mB,kCAAAtiG,MAAAs9F,iBAAAiF,uBAAAH,eAAAnnG,KAAAoC,MAAAigG,kBAAAt9F,MAAAsF,OAASsR,WACJ4rF,cACL5mB,MAAK6mB,kBAHe7mB,8XADc8U,gUAsBlC,IAAM1tE,QAAUhjB,KAAKmqF,SAASnnE,QAI9B,OAzES,SAAX0/E,SAAYC,cAAe3/E,QAAS6iE,YACtC7iE,QAAQ0/E,SAAS,SAACE,WACd,IAAMtS,UAyCN,OAvCIsS,WACAA,UAAUl9F,QAAQ,SAACm9F,UACf,IAAMC,KAAOD,SAASC,KAChBC,SAAWJ,cAAcG,MAE/B,GAAIC,UAAYA,SAASC,oBAAqB,CAC1C,IAAMC,iBAAmBJ,SAAS5pF,IAAIiqF,SAChCA,UACFhoF,EAAGg+C,WAAW+pC,iBAAkB,IAAK,SACrCngG,EAAGo2D,WAAW+pC,iBAAkB,IAAK,SACrCzjE,MAAO05B,WAAW+pC,iBAAkB,QAAS,SAC7CniF,MACIjZ,MAAOqxD,WAAW+pC,iBAAkB,OAAQ,SAC5ClnG,MAAO8pF,WAAWsd,qBAGpBC,WAAavd,WAAWjgF,YAAYy6E,aACpChlF,KAAI,GAAAiK,OAAMu9F,SAAS5pF,IAAI5d,KAAnB,KAAAiK,OAA2B89F,YAErC9S,OAAOhsF,MACHjJ,UACAynG,KAAM,QACNO,QAASD,WACT37E,UAAWo+D,WAAWjgF,YAAYuqF,gBAAgB1oE,UAClDy7E,kBACAj8D,WACIjgC,KAAM,YAEVs8F,iBAAiB,EACjBjlD,WAAYwnC,WAAW0d,sBACvBj/D,OAAQ,SAAAA,OAAAw9B,IAAE,OAAIA,GAAGpsD,OAAO,kBAAM,IAC1BC,WAAW,KAEf66E,aAAa,EACbgT,MAAOX,SAAS5pF,IAAI5d,UAK7Bi1F,SA6BPoS,CAFsB1/E,QAAQygF,WAAWd,cAEjB3/E,QAAShjB,MAC1BA,uEAIP,OACI+8E,UAAU,+DASd,OAAO,wCAGJ2G,cACH,IAAMhoB,UAAYgoB,aAAaL,YAAYxrE,MACrCwoE,WAAargF,KAAK4F,YAAYy6E,aAE9Br9D,QAAUhjB,KAAKmqF,SAASnnE,QAU9B,OATeA,QAAQstE,SAAS1kF,OAAO,SAAA2kF,OAAK,OAAIA,MAAMz6E,SAASutF,UAAYhjB,aAEpE36E,QAAQ,SAAC6qF,OACZ,IADsBmT,uBAAAC,sBACF3gF,QAAQ4gF,eAAerT,MAAMz6E,SAAS0tF,OACZK,kCAAkCnoC,WAF1D,GAEfooC,gBAFeJ,uBAAA,GAEE38F,OAFF28F,uBAAA,GAGhBK,qBAAuB,IAAI9uC,oBAAU6uC,gBAAiB/8F,QAE5DwpF,MAAM/pF,KAAKu9F,wBAER/jG,+CAjDP,MAAO,oEAIP,OACIynB,UAAS,GAAAniB,O7BnEM,O6BmEN,mEAKb,OAAOkqF,g1CCpEMwU,2yBAA0B5B,qWAYvC,OACIrlB,UAAU,qDAXd,OAAO2S,sFAIP,OACIjoE,UAAS,GAAAniB,O9BXM,O8BWN,0zCCPA2+F,ovBAAqB7B,iVAYlC,OACIrlB,UAAU,qDAXd,OAAO0S,iFAIP,OACIhoE,UAAS,GAAAniB,O/BXM,O+BWN,+NCTd,IAAM4+E,yCAAkBggB,oCAAAhf,uBAC1Bif,OAAoB,gBACjB9oG,KAAM,cACN6jB,SACI4/E,SAAU,SAEf,kBANwBoF,oCAAAhf,oBAAA,GAAA5/E,OAOvB6+F,MAPuB,KAAA7+F,OAOH6+F,UACpB9oG,KAAM,UACN6jB,SACI4/E,SAAU,mBACVvlF,MAAO,EACP3N,OAAQ,SAAAA,OAAAoX,SAAO,MAA8B,eAA1BA,QAAQlN,SAAS7Z,UAZjBioG,oCAAAhf,oBAe1Bif,YACG9oG,KAAM,cACN6jB,SACI4/E,SAAU,cAEf,aACCzjG,KAAM,UACN6jB,SACI3F,MAAO,OAEZ,YAzBwB2qF,oCAAAhf,oBA0B1Bif,QAAqB,WA1BKD,oCAAAhf,oBA2B1Bif,SACG9oG,KAAM,cACN6jB,SACI4/E,SAAU,UAEf,uBAhCwB5Z,qBCIlBkf,KAAO,OACPC,MAAQ,QACRC,MAAQ,QACRC,KAAO,OAGPC,UACT95F,EAAG,IACHvH,EAAG,IACHshG,GAAI,KACJC,GAAI,KACJC,OAAQ,SACRC,QAAS,UACTC,MAAO,QACPC,OAAQ,UClBC3U,mCACTa,YDHuB,OCIvBD,aAAc,aACdtpE,UAAW,GACXwgB,YAAa,SACbhB,WACIjgC,KDPa,SCSjBynF,eAGAsW,sBAAuB,GACvB7B,UACI1jE,SACAtkB,KACApY,KACA28C,MACAulD,eACIjpG,MAAO,IAGfsiD,YACI8oC,OAAQ,QACR7U,SAAU,KAEd2yB,iBAAiB,uSCbAC,qhBAGb,MAAM,IAAIv7F,MAAM2wD,UAAUC,oEAS1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,wDAU1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,oDAW1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,8DAQ1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,gDAQ1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,4FAa1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,gFAc1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,4FAY1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,8DAU1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,0EAQ1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,wEAQ1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,4EAQ1B,OAAOv6D,6DAIP,MAAM,IAAI2J,MAAM2wD,UAAUC,sDAQ1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,wDAI1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,2DCpJrBf,qLAAQ2rC,EACjB7Y,QACA1C,SACA6K,eACA2Q,WACAtV,aACI77B,aAAc,SAAAA,aAAAT,KAAG,OAAIA,MAEzB6xC,OACIpxC,aAVc1X,wBCFA,UDedxgD,MAAO,KACP49D,aAAc,SAAAA,aAAC32C,QAASlN,QACpBkN,QAAQsiF,cAAgBxvF,OACxB,IAAMlQ,YAAcod,QAAQpd,YACtB2/F,QAAU/qC,kBAAmB50D,YAAYuqF,iBAE/C,OAAOvqF,YAAY4/F,cAAcD,QAASzvF,+LET/C,cAAM2vF,wBAAS,SACTC,qBAAM,MACNC,sBAAO,OACPC,uBAAQ,QAMRC,oBAAkBC,gCAAAC,uBAC1BC,sBAAuB1nC,QAAQC,UADLunC,gCAAAC,oBAE1BC,wBAAyB1nC,QAAQI,YAFPonC,gCAAAC,oBAG1BC,uBAAwB1nC,QAAQE,WAHNsnC,gCAAAC,oBAI1BC,qBAAsB1nC,QAAQG,SAJJsnC,qBCjBlBE,OAAS,SACTC,KAAO,OACPC,KAAO,WACP9B,iBAAQ,QACR+B,QAAU,UACVC,SAAW,WACXC,SAAW,WACXC,IAAM,MACNC,IAAM,MACNC,oBAAW,WACXC,WAAa,aACbC,UAAY,YCdZC,mCAAY,aACZC,SAAW,WACXH,qBAAa,aACbN,kBAAU,UACVH,iBAAS,SAGTI,mBAAW,WAQXS,OAAS,SAUTC,sBAAwB,wLCbjCC,YAcAC,uBAdAD,YACAE,eAaAD,uBAbAC,eACAC,SAYAF,uBAZAE,SACAC,SAWAH,uBAXAG,SACAC,cAUAJ,uBAVAI,cACAC,aASAL,uBATAK,aACAC,gBAQAN,uBARAM,gBACAC,cAOAP,uBAPAO,cACAC,cAMAR,uBANAQ,cAIAlnC,UAEA0mC,uBAFA1mC,UACAmnC,UACAT,uBADAS,UAESC,UAAQC,6BAAAC,aAChBC,OAAmBd,aADHY,6BAAAC,UAEhBC,KAAiBvnC,WAFDqnC,6BAAAC,UAGhBC,SAAqBN,eAHLI,6BAAAC,UAIhBC,SAAqBL,eAJLG,6BAAAC,UAKhBC,UAAsBZ,gBALNU,6BAAAC,UAMhBC,WAAuBP,iBANPK,6BAAAC,UAOhBC,IAAgBX,UAPAS,6BAAAC,UAQhBC,IAAgBV,UARAQ,6BAAAC,UAShBC,oBAAqBT,eATLO,6BAAAC,UAUhBC,KAAiBJ,WAVDE,6BAAAC,UAWhBC,iBAAkBd,aAXFY,6BAAAC,UAYhBC,QAAoBR,cAZJO,WA6Dd,SAASE,0BAAanxF,QACzB,IAAKA,OAAO5P,OAAS2gG,SAAS/wF,OAAO5P,MACjC,MAAM,IAAI2C,MAAJ,GAAArE,OAAasR,OAAO5P,KAApB,+BAEV,IAAKzB,MAAMC,QAAQoR,OAAOma,OACtB,MAAM,IAAIpnB,MAAM,oCAEpB,IAAIq+F,aAAe,KACbj3E,MAAQna,OAAOma,MAErB,GAAIna,OAAO5P,OAASi/F,kBAAUrvF,OAAOikC,aAAc,CAE/C,GADAmtD,aAAeL,SAAS/wF,OAAOikC,cAC3BjkC,OAAOikC,eAAiBitD,IACxB,OAAOE,eAAej3E,MAAMA,OAAOuZ,SAAS1zB,OAAO0zB,UAChD,GAAI1zB,OAAOikC,eAAiBitD,IAC/B,OAAOE,eAAej3E,MAAMA,OAAOoc,MAAMv2B,OAAOu2B,YAGpD66D,aAAeL,SAAS/wF,OAAO5P,MAMnC,OAHI4P,OAAO5P,OAASq/F,oBAChB2B,eAAen7D,OAEZm7D,eAAej3E,MAAMA,OC3GzB,IAAMo/D,6CACTpxE,GAAIs2C,cACJ4yC,aAAa,EACbC,UACInX,aAAc,aAElBoX,gBAAiB,GACjBh7D,KAAM,GACN6jD,YFfuB,OEgBvBvpE,UAAS,GAAAniB,OFhBc,OEgBd,SACTglC,SAAU,EACVuQ,aAAc,SACdutD,eAAe,EACfC,QACIC,SAAU,KACVC,WAAY,MAEhBxQ,YAAa,OACb5nF,aAAc,SAAAA,aAAAqjD,KAAG,OAAIA,KACrBrqC,QAAS,GACT0jB,MAAM,EACN27D,cAAe,KACf1iE,QAAQ,EACRutD,MAAM,EACNoV,cAAc,EACdC,gBAAgB,EAChBC,gBAAgB,EAChBzoF,SACAlZ,KAAM,SACN4lC,WAAY,KACZqQ,WAAY,KACZ6jD,QAAS,EACT8H,QAAS,GCxBPC,yBAAa,SAAbA,WAAcC,SAAUC,SAAUC,cACpC,IAAIV,SACExrD,KAAOgsD,SAAShsD,OAChBhnC,OAASgzF,SAAShzF,SAClBmzF,aAAeH,SAASG,eACxBV,WAAaO,SAASP,aACtB/0E,MAAQspB,KAAKtpB,QAEbpC,OADYoC,MAAMpC,OAASoC,MAAM5B,UAAY4B,MAAMhe,UAGrDuiF,YAGAjiF,OAHAiiF,YACAqQ,cAEAtyF,OAFAsyF,cACAphG,KACA8O,OADA9O,KAGAqhG,OACAY,aADAZ,OAGJC,SAAWD,OAAOC,SAElB,IAAM/pD,SAAWuqD,SAASI,cAkD1B,OAjDAH,SAAS/2E,KAAK,SAAU52B,EAAGsG,OACvB,IAAIynG,OACAC,OACAllC,MAAQqkC,WAAW7mG,OAAS6mG,WAAW7mG,OAAOgf,KAAOtlB,EAEzD8oE,MAAQA,MAAMniE,WAEd,IAAMsnG,aAAeL,aAAariF,WAAWu9C,OAEvCjiD,MAA6B,GAArBonF,aAAapnF,MACrBC,OAA+B,GAAtBmnF,aAAannF,OAExBomF,SAAW,IACXA,SAAW,IAAMA,UAGrB,IAAMgB,SAAW,EAAItmG,KAAKsH,MAAMg+F,SAAW,IACrCiB,oBAAuBD,SAAW,GAAM,EAAKhB,SAAW,IAAMtlG,KAAKgY,KAAKstF,SAAW,KAAOA,UAAY,IAE5Ga,OAASnmG,KAAKoK,KAAKpK,KAAAqK,IAAA6U,OAAU,GAAVlf,KAAAqK,IAAc4U,MAAS,IAAKjf,KAAKs/B,I7J0pBtC,SAAhBknE,cAAgBC,OAAK,OAAIA,MAAQzmG,KAAKg+B,GAAK,I6J1pBewoE,CAAcD,qBAEpD,IAAbD,UAA+B,IAAbA,UAAqBC,mBAAqB,MAAQA,oBAAsB,KAC3FJ,QAAmB,EAATjnF,QAEdknF,OAASnnF,MAGLmnF,OADa,KAAbd,SACSpmF,OACW,MAAbomF,UACGpmF,OAED,EAGT61E,cAAgBiO,sBAChBoD,OAAUhB,eAAiBh3E,MAAM,KAAOh2B,GAAK4L,OAASi/F,iBAAUmD,OAASA,OAAS,EAAIA,OACtF5zB,6BAAcx1E,MACGi+C,KAAK,YADtB,aAAA34C,QACiD8jG,OAAS7qD,SAD1D,sCAAAj5C,QAEuB6jG,OAAS5qD,SAFhC,aAAAj5C,OAEoDgjG,SAFpD,QAIAc,OAAUhB,eAAiBh3E,MAAM,KAAOh2B,GAAK4L,OAASi/F,iBAAUmD,OAASA,OAAS,EAAIA,OAEtF5zB,6BAAcx1E,MACGi+C,KAAK,YADtB,aAAA34C,OACgD8jG,OAAS7qD,SADzD,sCAAAj5C,OAEsB6jG,OAAS5qD,SAF/B,aAAAj5C,OAEmDgjG,SAFnD,OAIJ9yB,6BAAcx1E,MAAMq+C,aACHi0B,SAAS,KAAM5xD,KAAKwjD,SAElC6kC,UASLW,oCAAwB,SAAxBA,sBAAyBC,gBAAiBC,aAAcrrD,UAAa,IAEnEsrD,YACAD,aADAC,YAEE/zF,OAAS8zF,aAAa9zF,SACtBmzF,aAAeW,aAAaX,eAC5BD,aAAeY,aAAal+E,eAAes9E,aAE7CjR,YAEAjiF,OAFAiiF,YACA/G,YACAl7E,OADAk7E,YAGAqX,OACAY,aADAZ,OAGAC,SAEAD,OAFAC,SACYwB,aACZzB,OADAE,WAGEQ,SAAWY,gBAAgBhsD,UAAU,cAI3C,GAHAorD,SAASprD,UAAU,SAAS1rB,UAGxBq2E,UHjGW,QGiGEvQ,aHlGC,WGkGsBA,YAEjC,GAAKuQ,UAAawB,aAElB,CAEH,GADAf,SAASroF,KAAK,IHtGH,QGuGPq3E,aHxGU,WGwGaA,YACvBgR,SAAS9qD,KAAK,IAAK,GACFA,KAAK,IAAK,GACVA,KAAK,YAAa,IAClBv9B,KAAK,IACRg1D,YAAYqzB,SAAU,QAAS,SAAC3tG,EAAGN,GAC7C,OAAI+uG,YAAY/uG,GACL+uG,YAAY/uG,GAAG6lB,UAFL,GAAArb,OAInB0rF,YAJmB,gBAMnB/yC,KAAK,KAAM,KACA/9B,MAAM,UAAW,KAEjBm+B,aACAi0B,SAAS,KACTnoE,GAAG,MAAOy/F,aAAaG,6BACvB9rD,KAAK,KAAM,SAAC7iD,EAAGN,GACZ,MH1HV,WG0Hci9F,aAAgC,IAANj9F,EACnB+uG,YAAY,GAAGvjF,eAElBujF,YAAY,GAAGvjF,eAAiBujF,YAAY,GAAGlpF,MAAMtf,OAAS,GAAKk9C,WAE9Er+B,MAAM,UAAW,GACjBQ,KAAK,SAAA1jB,GAAC,OAAIA,IACVihD,KAAK,IAAK,QAEby3B,YAAYqzB,SAAU,QAAS,SAAC3tG,EAAGN,GAAJ,OAAU+uG,YAAY/uG,GAAG6lB,OAA7C,GAAArb,OAAuD0rF,YAAvD,gBACnBtwE,KAAK,SAAA1jB,GAAC,OAAIA,SA/BpB+rG,SAAS9qD,KAAK,YAAa,SAF3B4qD,yBAAWe,aAAcb,SAAUC,cAqCvC,OAAOD,UAGLiB,+BAAmB,SAAnBA,iBAAoBJ,cAAiB,IAEnCxB,cACAwB,aAAa9zF,SADbsyF,cAGAM,eACAkB,aAAaX,eADbP,eAEElzF,OAASo0F,aAAap0F,SACxB4yF,eAAiB5yF,OAAOnU,QAAUqnG,gBAClCkB,aAAaI,oBAWfC,6BAAiB,SAAjBA,eAAkBC,SAAUnS,YAAar2B,UAAa,IAEpDyoC,eAEAzoC,SAFAyoC,eACAC,eACA1oC,SADA0oC,eAGJ,OAAQrS,aACR,KAAKiO,sBACDkE,SAASjsD,KAAK,YAAd,aAAA34C,SACmB8kG,eAAenoF,MAAQkoF,gBAD1C,KAAA7kG,OAC6D8kG,eAAeloF,OAAS,EADrF,iBAEA,MACJ,KAAK8jF,uBACDkE,SAASjsD,KAAK,YAAd,aAAA34C,OACmB8kG,eAAenoF,MAAQkoF,eAD1C,KAAA7kG,OAC6D8kG,eAAeloF,OAAS,EADrF,gBAEA,MACJ,KAAK8jF,qBACDkE,SAASjsD,KAAK,YAAd,aAAA34C,OACkB8kG,eAAenoF,MAAQ,EADzC,KAAA3c,QAC+C8kG,eAAeloF,OAASioF,eADvE,MAEA,MACJ,KAAKnE,wBACDkE,SAASjsD,KAAK,YAAd,aAAA34C,OACkB8kG,eAAenoF,MAAQ,EADzC,KAAA3c,OAC8C8kG,eAAeloF,OAASioF,eAAiB,EADvF,MAKJ,OAAOD,UChMX,wBASMG,aACF76D,MAAO,YACP86D,QAAS,UACTC,WAAY,OACZ76D,KAAM,KACNd,IAAK,YACLD,KAAM,QACN67D,QAAS,QACTC,QAAS,MACTvxD,KAAM,UAOJc,2BACD,EAAG,EAAG,eAAgBQ,gBAAgB/kC,MAAM,GAAI,YAChD,EA3BkB,IA2BC,UAAW8kC,WAAW9kC,MAAM,GAAI,YACnD,EAAG,IAAoB,eAAgB8kC,WAAW9kC,MAAM,GAAI,YAC5D,GAAI,IAAqB,cAAe8kC,WAAW9kC,MAAM,IAAK,YAC9D,GAAI,KAAqB,kBAAmB8kC,WAAW9kC,MAAM,IAAK,YAClE,GAAI,IAAqB,iBAAkB8kC,WAAW9kC,MAAM,IAAK,YACjE,EA/BkB2jC,IA+BC,SAAUkB,WAAW7kC,MAAM,GAAI,YAClD,EAAG,IAAoB,eAAgB6kC,WAAW7kC,MAAM,GAAI,YAC5D,GAAI,IAAqB,cAAe6kC,WAAW7kC,MAAM,IAAK,YAC9D,GAAI,IAAqB,kBAAmB6kC,WAAW7kC,MAAM,IAAK,YAClE,GAAI,KAAqB,iBAAkB6kC,WAAW7kC,MAAM,IAAK,YACjE,EAnCgB84B,KAmCC,OAAQ8L,SAAS5kC,MAAM,GAAI,SAC5C,EAAG,MAAkB,cAAe4kC,SAAS5kC,MAAM,GAAI,SACvD,EAAG,MAAkB,YAAa4kC,SAAS5kC,MAAM,GAAI,SACrD,GAAI,MAAmB,eAAgB4kC,SAAS5kC,MAAM,IAAK,SAC3D,EAtCe4jC,MAsCC,QAAS3F,QAAQj+B,MAAM,GAAI,QAC3C,EAtCgB6jC,OAsCC,SAAUc,OAAS3kC,MAAM,GAAI,SAC9C,EAtCiB6jC,OAsCC,UAAWa,UAAU1kC,MAAM,GAAI,SACjD,EAAG,OAAmB,WAAY0kC,UAAU1kC,MAAM,GAAI,YACtD,EAAG,QAAmB,cAAe0kC,UAAU1kC,MAAM,GAAI,eACzD,EAxCgB6jC,QAwCC,SAAU3F,SAASl+B,MAAM,GAAI,SAC9C,EAAG,QAAkB,SAAUk+B,SAASl+B,MAAM,GAAI,SAClD,EAAG,QAAkB,SAAUk+B,SAASl+B,MAAM,GAAI,SAClD,EAAG,QAAkB,SAAUk+B,SAASl+B,MAAM,GAAI,SAClD,GAAI,QAAmB,SAAUk+B,SAASl+B,MAAM,IAAK,SACrD,IAAK,QAAoB,UAAWk+B,SAASl+B,MAAM,KAAM,SACzD,IAAM,QAAqB,YAAak+B,SAASl+B,MAAM,KAAO,SAoC7Di1F,sCAAwC,SAAxCA,sCAAyC59D,SAAU9wB,MAAOgH,SAM5D,IALA,IAAI2nF,uBAAyB3wD,yBAAc34C,OAAS,EAChDupG,iBAAmB,EACnBC,sBAAwB,KAGnB/vG,EAAIk/C,yBAAc34C,OAAS,EAAGvG,GAAK,EAAGA,IAAK,CAChD,IAAMgwG,iBAAmB9wD,yBAAcl/C,GACjCiwG,mBAAqB/nG,KAAKsH,MAAMwiC,SAAWg+D,iBAAiB,IAC9DC,oBAAsB/uF,QACtB2uF,uBAAyB7vG,EACzB8vG,iBAAmBG,oBAiB3B,OAbAF,sBAAwB7wD,yBAAc2wD,wBAzCZ,SAAxBK,sBAAyBhoF,QAASioF,WACpC,IACMC,qBADkBloF,QAAQmoF,iBACalpF,MAErCA,MAAUe,QAAQonF,iBAAlBnoF,MAGR,OAF2Bjf,KAAKsH,OAAQ2X,OAASgpF,UAAY,GAAMC,sBAAyBD,WAuCjED,CAAsBhoF,QAAS4nF,kBA1BnB,SAArCQ,mCAAsCpoF,QAAShc,MACjD,IAAMgiG,aAAehmF,QAAQqoF,cAAcrC,aACrCsC,gBAAkBjB,YAAYrjG,MAGpC,OAFgBgiG,aAAariF,WAAW2kF,iBAEzBrpF,MAwBSmpF,CAAmCpoF,QAAS6nF,sBAAsB,KAI9CF,uBAAyB3wD,yBAAc34C,OAAS,IACxFwpG,sBAAwB7wD,yBAAc2wD,uBAAyB,IAE5DE,sBAAsB,oLC3H1B,IAAMU,+BAAoB,SAApBA,kBAAqBvoF,SAC9B,IAAMwoF,gBAAkBxoF,QAAQmoF,iBAC1BM,aAAezoF,QAAQ0oF,cACvBR,qBAAuBM,gBAAgBvpF,MACvC0pF,aAAeF,aAAaxpF,MAE1BA,MAAUe,QAAQonF,iBAAlBnoF,MAEF2pF,SAAW5oG,KAAKsH,OAAO2X,MAAQipF,uBAAyBS,aAAeT,uBAEvE95E,MAAQpO,QAAQwQ,QAAQpC,MDoHH,SAAlBy6E,gBAAmB7oF,QAAS4nF,kBACrC,IAAIkB,oBAAsBlB,iBACpBp1F,OAASwN,QAAQxN,SACjBkrD,QAAU19C,QAAQ+oF,SAElBC,oBAAsBx2F,OAAO,GAAKA,OAAO,GAEzCy2F,6BAA+BjpG,KAAKsH,MAAM0hG,oBAAsBtrC,SAOtE,OAJIkqC,kBAAoBqB,+BACpBH,oBAAsBG,8BAGnBvB,sCAAsCsB,oBAAqBF,oBAAqB9oF,SClInD6oF,CAAgB7oF,QAAS4oF,WAE7D5oF,QAAQimF,cACJhsD,WAAY7rB,SAId86E,sBAAwB,SAAxBA,sBAAyBn7E,MAAO1B,MAGlC,OAFA0B,MAAM,IAAM1B,KACZ0B,MAAM,IAAM1B,KACL0B,OAGLo7E,oBAAsB,SAAtBA,oBAAuBp7E,MAAO1B,MAGhC,OAFA0B,MAAM,IAAM1B,KACZ0B,MAAM,IAAM1B,KACL0B,OAGLq7E,oBAAkBC,4BAAAC,uBACnB5G,qBAAMwG,uBADaG,4BAAAC,oBAEnB7G,wBAASyG,uBAFUG,4BAAAC,oBAGnB3G,sBAAOwG,qBAHYE,4BAAAC,oBAInB1G,uBAAQuG,qBAJWG,qBAOXC,aAAe,SAAfA,aAAgBvpF,QAAShc,KAAMwlG,YAAap+D,QACrDprB,QAAQ+N,MAAMy7E,aACdp+D,QAAUprB,QAAQimF,aAARoD,+BAAA,GAAA/mG,OAA2B0B,KAA3B,UAA0ConC,UAc3Cq+D,iBAAmB,SAAnBA,iBAAoB/rC,QAAS3vC,MAAOvb,OAAQM,QAAW,IAE5DiiF,YAEAjiF,OAFAiiF,YACAkQ,YACAnyF,OADAmyF,YAEE54E,KAhBY,SAAhBq9E,cAAiBC,SAAU57E,MAAOvb,QACpC,IAAMo3F,QAAU5pG,KAAKiY,IAAI8V,MAAM,GAAKA,MAAM,IAGpC87E,KAAOD,SAFDA,SAAWp3F,OAAO,GAAKA,OAAO,IACrBm3F,UAKrB,OAFaC,QADIA,SAAWC,KAAO,GACDA,MAEpB,EAQDH,CAAchsC,QAAS3vC,MAAOvb,QAE3C,OAAIyyF,YACOmE,mBAAmBrU,aAAahnE,MAAO1B,MAE3C0B,OAGE+7E,yBAAc,SAAdA,YAAe9pF,QAAS+pF,aAAgB,IAAAh3C,KAC7C9b,aACA+yD,eACEl3F,OAASkN,QAAQlN,SAH0Bm3F,uBAQ7CjqF,QAAQonF,iBAHD8C,WALsCD,uBAK7ChrF,MACQkrF,YANqCF,uBAM7C/qF,OACAiH,QAP6C8jF,uBAO7C9jF,QAGAF,IAIAE,QAJAF,IACAkH,KAGAhH,QAHAgH,KACAusB,OAEAvzB,QAFAuzB,OACAnsB,MACApH,QADAoH,MAGA68E,SACAL,YADAK,SAhB6CC,uBAqB7CrqF,QAAQimF,eAFRR,aAnB6C4E,uBAmB7C5E,aACAJ,OApB6CgF,uBAoB7ChF,OAGAC,SACAD,OADAC,SAGAF,cAGAtyF,OAHAsyF,cACAD,gBAEAryF,OAFAqyF,gBACAlrD,WACAnnC,OADAmnC,WA5B6CqwD,sBAmC7CtqF,QAAQuqF,oBAJRC,eA/B6CF,sBA+B7CE,eACAC,kBAhC6CH,sBAgC7CG,kBACAC,mBAjC6CJ,sBAiC7CI,mBACAnvD,SAlC6C+uD,sBAkC7C/uD,SAGQovD,cAERH,eAFAtrF,OACO0rF,aACPJ,eADAvrF,MAGE4rF,YAAcpF,aAAeN,gBAAkB,EAC/C2F,aAAgBvF,YAAY,EAAMD,SAAUD,OAAOC,UACnDkD,gBAAkBxoF,QAAQmoF,iBAC1BM,aAAezoF,QAAQ0oF,cACvBhrC,QAAU19C,QAAQ+oF,SAClBv2F,OAASwN,QAAQxN,SACjB20F,eAAiBuD,mBAAmBxrF,OACpCgpF,qBAAuBM,gBAAgBvpF,MACvC0pF,aAAe3oG,KAAKkK,IAAIu+F,aAAaxpF,MAAO2rF,cAC5CG,cAAgB/qG,KAAKkK,IAAIu+F,aAAavpF,OAAQyrF,eAEpD,OAAAtB,4BAAAt2C,QACKowC,MACGjrF,EAAG,SAAAA,KACE+hC,YAAcj6B,QAAQuoF,oBACvB,IAAMN,UAAYjoF,QAAQgrF,gBAAgB3sG,OAM1C2rG,eAAiBG,YAAchD,eAAiB5rD,SAAWsvD,aAH3D5zD,cAAiBizD,YAAcjC,UAAY,GAAMC,sBAAyBD,WAKvDU,cAA6B,IAAbrD,WAE/BwF,YAAYxF,SAAWA,SAEnBruD,aAAe8zD,gBACff,eAAiBG,YACjBlzD,aAAe8zD,cACf/qF,QAAQimF,cAAeP,gBAAgB,EAAOC,gBAAgB,MAGlEwE,YAAchD,gBACdnnF,QAAQimF,cAAe5V,MAAM,IAGjC,IAAM4a,YAAcjrG,KAAKkK,IAAI+sC,aAAc2zD,cAY3C,OAVArB,aAAavpF,QAAS,IAAKypF,iBAAiB/rC,SAAUutC,YAAc,EAChEf,WAAa/8E,KAAOI,MAAQ09E,YAAc,GAAIz4F,OAAQM,QAClDs3F,SAAWD,YAAc,MAEjCnqF,QAAQkrF,eACJjsF,MAAOg4B,aACP/3B,OAAQ8qF,eACRvpF,OAAqB,OAAb6kF,WAGLwF,aAEXhrG,EAAG,SAAAA,IACC,IAAIqrG,cAAgBjB,WACde,YAAcN,cAAgB,EAmBpC,OAjBApB,aAAavpF,QAAS,IAAKypF,iBAAiB/rC,SACvCysC,YAAclkF,IAAMyzB,OAASuxD,YAAaA,aAAcz4F,OAAQM,QAC7Ds3F,SAAWF,WAAa,MAE3BA,WAAa/C,eAAiB0D,aAAgB3C,uBAC/CiD,cAAgB,EAChBnrF,QAAQimF,cAAeP,gBAAgB,EAAOC,gBAAgB,KAGlE3lF,QAAQkrF,eACJjsF,MAAOksF,cACPjsF,OAAQirF,YACR1pF,QAAQ,IAERypF,WAAa/C,gBACbnnF,QAAQimF,cAAe5V,MAAM,IAE1Bya,eA7DnBzB,4BAAAt2C,KAgEKmwC,MACGhrF,EAAG,SAAAA,IACCqxF,aAAavpF,QAAS,KAAM,EAAGkqF,WAAa/8E,KAAOI,OAAQ68E,SAAWD,YAAc,MACpF,IAAMp8E,MAAQ/N,QAAQ+N,QAQtB,GALAkpB,cAAiBlpB,MAAM,GAAKA,MAAM,KAAOksB,YAAcznC,QAAQnU,OAAU6pG,qBAGzE8B,eAAiBG,YAAchD,eAAiB5rD,SAAWsvD,YAEvD5zD,aAAe0xD,cAA6B,IAAbrD,SAE/BwF,YAAYxF,SAAwB,OAAbA,UAAqB,GAAKA,SACjDwF,YAAYvF,YAAa,EAEzBtuD,aAAej3C,KAAKmK,IAAI6/F,eAAgBrB,cAEpCqB,eAAiBrB,cACjB3oF,QAAQimF,cAAeR,cAAc,SAEtC,GAAIxrD,WAAY,CACDiwD,WAAa13F,OAAOnU,OAAU6pG,qBACjCS,cACX3oF,QAAQ+N,OAAOg9E,cAAgB,EAAGb,WAAaa,cAAgB,IAYvE,OATIZ,YAAchD,gBACdnnF,QAAQimF,cAAe5V,MAAM,IAGjCrwE,QAAQkrF,eACJjsF,MAAOg4B,aACP/3B,OAAQ8qF,eACRvpF,OAAqB,OAAb6kF,WAELwF,aAEXhrG,EAAG,SAAAA,IACCypG,aAAavpF,QAAS,KAAMmqF,YAAczwD,OAAQzzB,KAAMmkF,SAAWF,WAAa,MAEhF,IAAIiB,cAAgBjB,WAAa/C,eAAiB5rD,SAAWsvD,YAc7D,OAbIM,eAAiBjD,uBACjBiD,cAAgB,EAChBnrF,QAAQimF,cAAeP,gBAAgB,EAAOC,gBAAgB,KAGlE3lF,QAAQkrF,eACJjsF,MAAOksF,cACPjsF,OAAQirF,YACR1pF,QAAQ,IAERypF,WAAa/C,gBACbnnF,QAAQimF,cAAe5V,MAAM,IAE1Bya,eAvHnBzB,4BAAAt2C,KA0HKkwC,QACG/qF,EAAG,SAAAA,IACC4yF,YAAYvF,YAAa,EACzB,IAAM0F,YAAcL,aAAe,EAInCrB,aAAavpF,QAAS,MAFLolF,cAAgB,EAAI6F,aAEE99E,KAAM+8E,WAAa38E,MAAQ09E,aAC9Db,SAAWD,YAAc,MAE7B,IAAMp8E,MAAQ/N,QAAQ+N,QAGhBq9E,eAAiBX,kBAAkBpsG,QAAUusG,aAAe1C,sBAwBlE,OAvBuBn6E,MAAM,GAAKA,MAAM,GAGnBq9E,gBAAsC,OAApB/F,OAAOC,WACtC6E,YAAcS,aAAeC,YAActvD,SAAW4rD,gBACtD2D,YAAYxF,SAAW,KACvBtlF,QAAQimF,cACJP,gBAAgB,EAChBD,cAAc,MAGlBqF,YAAYxF,UAAY,GACxBtlF,QAAQimF,cACJP,gBAAgB,EAChBD,cAAc,MAMtB0E,YAAchD,gBACdnnF,QAAQimF,cAAe5V,MAAM,IAE1Bya,aAEXhrG,EAAG,SAAAA,IACCgrG,YAAYvF,YAAa,EACzB,IAAM0F,YAAcT,eAAetrF,OAAS,EAa5C,OAVAqqF,aAAavpF,QAAS,KAAMmqF,YAAczwD,QAFzB0rD,cAAgB,EAAI6F,aAEwBA,YAAchlF,KACvEmkF,SAAWF,WAAa,MAGxBA,WAAaU,aAAezD,eAAiB0D,cAC7C7qF,QAAQimF,cAAeP,gBAAgB,IACnCwE,WAAa/C,gBACbnnF,QAAQimF,cAAe5V,MAAM,KAG9Bya,eAhLnB/3C,4hBCpHG,IAAMs4C,iBAAmB,SAAnBA,mBAAoD,IAAhC/F,SAAgCpkG,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,GAArB,EAAG+d,MAAkB/d,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAAXglB,OAAWhe,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EACzDoxG,cAAgBpsF,OAChBqsF,aAAetsF,MACnB,GAAIqmF,SAAU,CACV,IAAMmB,OAAUnB,UAAY,GAAKtlG,KAAKg+B,GAAM,IAC5CutE,aAAevrG,KAAKiY,IAAIiH,OAASlf,KAAKs/B,IAAImnE,QAAUzmG,KAAKiY,IAAIgH,MAAQjf,KAAKq/B,IAAIonE,QAC9E6E,cAAgBtrG,KAAKiY,IAAIgH,MAAQjf,KAAKs/B,IAAImnE,QAAUzmG,KAAKiY,IAAIiH,OAASlf,KAAKq/B,IAAIonE,QAEnF,OAASxnF,MAAOssF,aAAcrsF,OAAQosF,gBAG7BE,iBAAY,SAAZA,UAAaxrF,SACtB,IAAI9H,EAAI,EACJpY,EAAI,EACF2rG,aAAezrF,QAAQyrF,eACvB34F,OAASkN,QAAQlN,SAEnBiiF,YAGAjiF,OAHAiiF,YACA+I,QAEAhrF,OAFAgrF,QACA8H,QACA9yF,OADA8yF,QAEA7Q,cAAgB4N,wBAChBzqF,OAAgBhe,IAAZ4jG,QAAwB2N,aAAaxsF,MAAQ6+E,SAEjD/I,cAAgB2N,uBAChB5iG,OAAgB5F,IAAZ0rG,QAAwB6F,aAAavsF,OAAS0mF,SAEtD5lF,QAAQimF,cAAenI,QAAS5lF,EAAG0tF,QAAS9lG,KAiCnC4rG,2BAA6B,SAA7BA,2BAA8B1rF,SACvC,IAGI2rF,UAHAC,YAAc,GACdC,uBAA0B5sF,MAAO,EAAGC,OAAQ,GAC5C4sF,aAEErB,qBACAj6E,MAAQxQ,QAAQwQ,QAN6Bu7E,sBAOd/rF,QAAQimF,eAArChsD,WAP2C8xD,sBAO3C9xD,WAAYwrD,aAP+BsG,sBAO/BtG,aACZptG,KAAS2nB,QAAQlN,SAAjBza,KACA2tG,aAAiBhmF,QAAQ0I,eAAzBs9E,aACFgG,UAAYx7E,MAAMpC,OAASoC,MAAM5B,UAAY4B,MAAMhe,OAgCzD,OA7BAwzF,aAAazoF,SAASyC,QAAQisF,iBAM9BN,WAHAA,UAAY1xD,YAAc+xD,aAGJhqG,IAAI,SAACkqG,cAAep0G,GACtC,IAAMkQ,MAAQgY,QAAQmsF,iBAAiBD,cAAep0G,EAAG6zG,WAGnDnB,eAAiBxE,aAAariF,WAAW3b,OAa/C,OAVAyiG,kBAAkBnpG,KAAKkpG,gBAGnBA,eAAevrF,MAAQ4sF,sBAAsB5sF,QAC7C2sF,YAAc5jG,MACd8jG,UAAY9rF,QAAQulF,aAAevlF,QAAQulF,aAAaztG,MAExD+zG,sBAAwBrB,eACxBsB,UAAYA,WAAatB,gBAEtBxiG,QAGXg+F,aAAazoF,SAASyC,QAAQosF,iBAI1B1B,mBAHuBjF,aAAeO,aAAariF,WAAWtrB,OAAU4mB,MAAO,EAAGC,OAAQ,GAI1F0sF,wBACAC,4CACApB,oCACAkB,oBACAG,oBACAvwD,SAAUv7B,QAAQkmF,gBAsDbmG,uBAAyB,SAAzBA,uBAA0BrsF,QAASssF,eAAgBv+E,OAC5D,IAAI9O,MACAC,OACE1M,OAASwN,QAAQxN,SACjBg2F,gBAAkBxoF,QAAQmoF,iBAAiBlpF,MACzCs8B,SAAiD+wD,eAAjD/wD,SAAUivD,eAAuC8B,eAAvC9B,eAAgBE,mBAAuB4B,eAAvB5B,mBALoC6B,iBAM9BvsF,QAAQlN,SAAxCqyF,gBAN8DoH,iBAM9DpH,gBAAiBlrD,WAN6CsyD,iBAM7CtyD,WACjBwrD,aAAiBzlF,QAAQimF,eAAzBR,aACQ+G,cAAkB9B,mBAA1BxrF,OACQyrF,cAAuCH,eAA/CtrF,OAA8B0rF,aAAiBJ,eAAxBvrF,MAK/B,GAHAA,MAAQ8O,OAASA,MAAM1vB,OAAS0vB,MAAM,GAAKA,MAAM,GAAyC,GAAlC68E,aAAepC,iBAEvEtpF,OAAS,EACL+6B,WAAY,CACZ,IAAMwyD,YAAczsF,QAAQ0sF,uBADhB35C,MAGR/yD,KAAKkK,IAAL7P,MAAA2F,KAAI2sG,wCAAQ1yD,YAAR33C,OAAAqqG,wCAAuBn6F,UAC3BxS,KAAKmK,IAAL9P,MAAA2F,KAAI2sG,wCAAQ1yD,YAAR33C,OAAAqqG,wCAAuBn6F,WAG/ByM,OAPY8zC,KAAA,GAAAA,KAAA,IAOW/yD,KAAKiY,IAAIw0F,cAAiB7B,aAAe5qF,QAAQmoF,iBAAiBlpF,OAU7F,OALIC,OAHC6O,OAAUA,MAAM1vB,OAGRssG,cAFA3qG,KAAKmK,IAAIygG,aAAcD,gBAQhC1rF,YACAC,OAJJA,SAAWumF,aAAe+G,cAAgBrH,gBAAkB,GAAK5pD,WAgBxDqxD,qBAAuB,SAAvBA,qBAAwB5sF,QAASssF,gBAC1C,IAAIptF,OACAD,MACEzM,OAASwN,QAAQxN,SACf+oC,SAAiD+wD,eAAjD/wD,SAAUivD,eAAuC8B,eAAvC9B,eAAgBE,mBAAuB4B,eAAvB5B,mBAJ2BmC,iBAKrB7sF,QAAQlN,SAAxCqyF,gBALqD0H,iBAKrD1H,gBAAiBlrD,WALoC4yD,iBAKpC5yD,WACjBwrD,aAAiBzlF,QAAQimF,eAAzBR,aACQ+G,cAAkB9B,mBAA1BxrF,OACQyrF,cAAuCH,eAA/CtrF,OAIR,GAFAA,OAAS,EACTD,MAHuDurF,eAAxBvrF,MAI3Bg7B,WAAY,CACZ,IAAMwyD,YAAczsF,QAAQ0sF,uBADhB34C,OAGR/zD,KAAKkK,IAAL7P,MAAA2F,KAAI2sG,wCAAQ1yD,YAAR33C,OAAAqqG,wCAAuBn6F,UAC3BxS,KAAKmK,IAAL9P,MAAA2F,KAAI2sG,wCAAQ1yD,YAAR33C,OAAAqqG,wCAAuBn6F,WAG/B0M,QAPY60C,MAAA,GAAAA,MAAA,IAOY/zD,KAAKiY,IAAIw0F,aAAgB9B,cAIrD,OACIzrF,cACAD,MAJJA,QAAUwmF,aAAe+G,cAAgB,GAAKjxD,SAAW4pD,kBAYhD2H,0BAAqB,SAArBA,mBAAsB9sF,SAC/B,IAAM+N,MAAQ/N,QAAQ+N,QAChBu+E,eAAiBtsF,QAAQuqF,oBAEvBxV,YAAgB/0E,QAAQlN,SAAxBiiF,YACA1E,KAASrwE,QAAQimF,eAAjB5V,KACAwb,sBAAwDS,eAAxDT,sBAAuBF,UAAiCW,eAAjCX,UAAWlB,kBAAsB6B,eAAtB7B,kBAC1BsC,iBAAqBlB,sBAA7B3sF,OACFypF,aAAe3oF,QAAQmoF,iBAAiBlpF,MAC9C,GAAI81E,cAAgB2N,sBAAO3N,cAAgB0N,wBAAQ,KAAAuK,sBAI3CX,uBAAuBrsF,QAASssF,eAAgBv+E,OAFhD9O,OAF2C+tF,sBAE3C/tF,MACAC,QAH2C8tF,sBAG3C9tF,OAYJ,OATK6O,OAAUA,MAAM1vB,SACjB4gB,OAAQwrF,kBAAkBxiG,OAAO,SAACjP,EAAGO,GAAJ,OAC7BP,EAAIgH,KAAKkK,IAAI3Q,EAAE0lB,MAAO1lB,EAAE2lB,QAAUypF,cAAc,KAG3C,IAATtY,OACAnxE,QAAS,EACTD,OAAQ,IAGRA,aACAC,gBA1BmC,IAAA+tF,sBAiCvCL,qBAAqB5sF,QAASssF,gBAF9BrtF,MA/BuCguF,sBA+BvChuF,MACAC,OAhCuC+tF,sBAgCvC/tF,OASJ,OANKA,QAAqB,IAAXA,SACXA,OAASysF,UAAUttG,QAAU0uG,iBAAmB/sF,QAAQmoF,iBAAiBjpF,UAEhE,IAATmxE,OACApxE,MAAQ,IAGRA,YACAC,gBAwDKguF,sBAAiB,SAAjBA,eAAkBltF,QAASxN,QAAW,IAC/B26F,QAAYntF,QAAQlN,SAA5BN,OAMR,OAJI26F,UACA36F,OAAS26F,SAGNl8C,aAAaz+C,YAGX46F,uBAAyB,SAAzBA,uBAA0BptF,QAASxN,QAAW,IAC/Cq3B,KAAS7pB,QAAQlN,SAAjB+2B,KACFrZ,MAAQxQ,QAAQwQ,MAAMl3B,KAAK0mB,SAEjCwQ,QAAQhe,OAAOA,QACfq3B,MAAQrZ,QAAQqZ,OAChB7pB,QAAQqtF,QAAU78E,QAAQhe,UCtWjBq6E,aACTua,kBACAkF,kBACAgB,2BACAx6F,QACI6jD,aAAc,SAAAA,aAAC32C,QAASjnB,OACpB,IAAMw0G,UAAY/0G,OAAO0M,UAAW8a,QAAQiiE,aACtCurB,gBAAkBh2C,kBAAmB+1C,YAC3Cx0G,MAAQy+D,eAAeg2C,gBAAiBz0G,QAElCosG,gBAAkBnlG,KAAKmK,IAAIpR,MAAMosG,gBAAiB,GACxD,IAAMsI,sBDsWkB,SAAvBC,uBAA4D,IAApC5yF,IAAoC5Z,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAA1BysG,KAA0BzsG,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAAf0sG,WAAe1sG,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EACrE,SAAK1B,OAAO4I,KAAK0Z,KAAKzc,SAAW7F,OAAO4I,KAAKusG,MAAMtvG,SAG5CuvG,WAAWh7F,KAAK,SAAAvZ,KAAG,OAAIyhB,IAAIzhB,OAASs0G,KAAKt0G,OC1WVq0G,CAC1B30G,MAAOw0G,WAAY,eAAgB,WAAY,OAAQ,gBAErDM,cAAgB7tF,QAAQ8tF,sBAAsB/0G,OAUpD,OARI00G,wBACAztF,QAAQ+tF,OAAS/tF,QAAQ+kF,YAAYhsG,OACrCinB,QAAQguF,MAAQhuF,QAAQiuF,WAAWl1G,QAGvCinB,QAAQkuF,eAAiB,SAAA9/E,OAAK,OAAIy/E,cAAcz/E,QAEhDpO,QAAQmuF,kBAAkBp1G,OACnBA,QAGfktG,cACItvC,aAAc,SAAAA,aAAC32C,QAASjnB,OACpB,IAAMw0G,UAAY/0G,OAAO0M,UAAW8a,QAAQouF,mBAE5C,OADAr1G,MAAQy+D,eAAe+1C,UAAWx0G,SAI1C0yG,gBACA7kB,SAEA74D,OACI4oC,aAAc,SAAAA,aAAC32C,QAASjnB,OAGpB,OAFAinB,QAAQwQ,QAAQzC,MAAMh1B,OACtBinB,QAAQyrF,aAAa,MACd1yG,QAIfwsG,cACAhqD,YACA2vD,eACIv0C,aAAc,SAAAA,aAAC32C,QAASjnB,OACpB,IAAMw0G,UAAY/0G,OAAO0M,UAAW8a,QAAQquF,oBAE5C,OADAt1G,MAAQy+D,eAAe+1C,UAAWx0G,SAI1C+zF,aACI77B,aAAc,SAAAA,aAAAT,KAAG,OAAIA,ixBCpCR89C,kCAMjB,SAAAA,WAAax7F,OAAQ4V,wKAAc6lF,CAAAvxG,KAAAsxG,YAC/BtxG,KAAK0yE,IAAMrd,cAEXr1D,KAAKqrG,cAAgB3/E,aACrB1rB,KAAK+1F,OAAS,KACd/1F,KAAKwxG,UACLxxG,KAAKqwG,WACLrwG,KAAKyxG,aAAc,EACnBzxG,KAAK0xG,mBACL1xG,KAAK6pG,eAEL,IAAM8H,OAASn3C,kBAAmBx6D,KAAK4F,YAAYuqF,iBAC7CyhB,aAAep3C,eAAem3C,OAAQ77F,QAEtC+7F,SAAWr8B,6BAAc,QACzBwb,YAAc4gB,aAAa5gB,YACjChxF,KAAKivG,gBAAkB53B,qCAAsBw6B,SAAD,GAAAvsG,OAAc0rF,YAAd,WAC5ChxF,KAAKovG,eAAiB/3B,qCAAsBw6B,SAAD,GAAAvsG,OAAc0rF,YAAd,eAE3CtlE,aAAas9E,aAAazoF,SAASvgB,KAAKivG,iBACxC,IAAM6C,KAAOpmF,aAAas9E,aAAariF,WAAW,KAElD3mB,KAAKmrG,kBAAqBlpF,MAAoB,EAAb6vF,KAAK7vF,MAAY,EAAGC,OAAQ4vF,KAAK5vF,OAAS,GAC3EliB,KAAK0rG,cAAgBhgF,aAAas9E,aAAariF,WAAW,UAE1D4yC,sBAAsBv5D,KAAM6vF,aAC5B7vF,KAAK8V,OAAO87F,cAEZ5xG,KAAK+wG,OAAS/wG,KAAK+nG,YAAY/nG,KAAKilF,SACpCjlF,KAAKgxG,MAAQhxG,KAAKixG,WAAWjxG,KAAKilF,SAClCjlF,KAAK+xG,8UAoBL,OAAO/xG,2CAUP,OAAIkE,UAAO7C,QACPrB,KAAK+wG,OAAL7sG,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK+wG,yDAKZ,OADA/wG,KAAKqwG,WACErwG,yCAUP,OAAIkE,UAAO7C,QACPrB,KAAKgxG,MAAL9sG,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKgxG,8CAWZ,GAAI9sG,UAAO7C,OAAQ,CACf,IAAM2wG,YAAc9B,sBAAelwG,KAADkE,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IAKlC,OAJAlE,KAAKwzB,QAAQhe,OAAOw8F,aACpBhyG,KAAKqwG,QAAUrwG,KAAKwzB,QAAQhe,SAC5BxV,KAAKiyG,6BACLjyG,KAAKyuG,aAAa,MACXzuG,KAEX,OAAOA,KAAKqwG,wFAIZrwG,KAAKswG,wBAAwB5B,2BAA2B1uG,2DAUxD,OAAOA,KAAKqrG,8DASHv1F,QAAQ,IAEbq3B,KAIAr3B,OAJAq3B,KAeJ,OATc46D,2BACV5+E,QAHArT,OAHAqT,QAOA0xB,aAJA/kC,OAFA+kC,aAOAvQ,SALAx0B,OADAw0B,SAOA6C,UACApc,MANU/wB,KAAK+wB,QAOf/pB,KAAMhH,KAAK4F,YAAYoB,6EAMRjL,OAAO,IAClB6wC,WAA6B7wC,MAA7B6wC,WAAYz8B,aAAiBpU,MAAjBoU,aAEpB,OAAIy8B,WACO,SAAAxb,OAAK,OAAI,SAACoiC,IAAK14D,GAAN,OAAY8xC,WAAWz8B,aAAaqjD,KAAMA,IAAK14D,EAAGs2B,SAG/D,kBAAM,SAAAoiC,KAAG,OAAIrjD,aAAaqjD,mEAGlB19C,QAAQ,IAEnBuyF,OASAvyF,OATAuyF,OACAhV,KAQAv9E,OARAu9E,KACAqV,eAOA5yF,OAPA4yF,eACAC,eAMA7yF,OANA6yF,eACAF,aAKA3yF,OALA2yF,aACA3H,QAIAhrF,OAJAgrF,QACA8H,QAGA9yF,OAHA8yF,QACA3rD,WAEAnnC,OAFAmnC,WACAi1D,cACAp8F,OADAo8F,cAaJ,OAXAlyG,KAAKipG,cACDZ,cACAhV,UACAqV,8BACAC,8BACAF,0BACA3H,gBACA8H,gBACA3rD,sBACAi1D,8BAEGlyG,mEAIPA,KAAKyuG,aAAa,MAClBzuG,KAAK+wB,UAEL/wB,KAAKmxG,kBAAkBnxG,KAAK8V,oEAGd4K,KAAMhf,MAAOitG,WAG3B,OAAO9sG,EAFW7B,KAAKkxG,gBAENvC,UAAV9sG,CAAqB6e,KAAMhf,qDAS1BoU,QAAQ,IACRiiF,YAAgBjiF,OAAhBiiF,YACFoa,UAAYtM,mBAAmB9N,aAErC,OAAIoa,UACaA,UAAUnyG,KAAKwzB,SAGzB,yDAGIypB,YACX,IAAMgsD,aAAejpG,KAAKipG,eAC1BjpG,KAAK8V,wcAALs8F,IAAiBnJ,cAAchsD,yBAC/Bj9C,KAAKi9C,WAAaA,WAClBj9C,KAAK88C,OAAOG,WAAWA,0EAW8B,IAAtCh7B,MAAsC/d,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,GAA9B,EAAGge,OAA2Bhe,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAAnBisB,QAAmBjlB,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAAVkwG,SAAUlpG,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EACjD4wG,eAED/V,YACA/3F,KAAK8V,SADLiiF,YAGH/3F,KAAKoqG,gBAAiBnoF,YAAOC,cAAQiH,kBACrC,IAAMniB,KAAOhH,KAAK4F,YAAYoB,OAc9B,OAXI8mG,YADA/V,cAAgB2N,sBAAO3N,cAAgB0N,wBACzBqH,yBAAY9sG,MAAQotG,oBAAYpmG,MAAMkU,IAEtC4xF,yBAAY9sG,MAAQotG,oBAAYpmG,MAAMlE,IAIxD9C,KAAKipG,cACDZ,OAAQyF,cAEZ9tG,KAAKqyG,gBACLryG,KAAKsyG,mBACEtyG,iEAGS,IAAAuyG,cACcvyG,KAAK8V,SAA3BiiF,YADQwa,cACRxa,YAAa18F,KADLk3G,cACKl3G,KACfm3G,QAAWza,cAAgB2N,sBAAO3N,cAAgB0N,wBAAU,QAAU,SACtEgN,SAAWzyG,KAAKoqG,iBAAiBoI,SACjCxJ,aAAehpG,KAAK0rB,eAAes9E,aAKzC,OAJAA,aAAazoF,SAASvgB,KAAKovG,gBAC3BpvG,KAAKipG,cACDiJ,cFqIoB,SAAnBQ,iBAAoBr3G,KAAM4mB,MAAO+mF,cAC1C,IAAM2J,QAAU3J,aAAariF,WAAWtrB,MAIxC,OAFA2tG,aAAa3lF,uBAAsB,GAE5B2lF,aAAa1lF,aAAajoB,KAAM4mB,MAAO0wF,QAAQzwF,QAAQ,GE1IvCwwF,CAAiBr3G,KAAMo3G,SAAUzJ,gBAE7ChpG,2DASP,OAAOA,yDAGI4yG,WACX,GAAkB,OAAdA,gBAAoC11G,IAAd01G,UAG1B,OAAO5yG,KAAKwzB,OAALxzB,CAAa4yG,6DAUpB,OAAO5yG,KAAK88C,OAAOyB,yEASO,QAAA6a,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MAE1B,OADAr5D,KAAKsvG,eF7MwB,SAAxBuD,sBAAyB7vF,SAClC,IAAIwqF,kBACInF,OAAWrlF,QAAQimF,eAAnBZ,OACAE,WAAyBF,OAAzBE,WAAYD,SAAaD,OAAbC,SAH0BwK,sBAW1CpE,2BAA2B1rF,SAN3B6rF,sBAL0CiE,sBAK1CjE,sBACAF,UAN0CmE,sBAM1CnE,UACAG,UAP0CgE,sBAO1ChE,UACApB,mBAR0CoF,sBAQ1CpF,mBACAD,kBAT0CqF,sBAS1CrF,kBACAlvD,SAV0Cu0D,sBAU1Cv0D,SAEYw0D,YAAmClE,sBAA3C3sF,OAA4B8wF,WAAenE,sBAAtB5sF,MAM7B,OAAsB,IAHPe,QAAQxN,SAGZnU,OACA,MAQXmsG,eAAiBa,iBAAiB/F,UAJ9BkF,eADAjF,WACiBuG,WAEE7sF,MAAO+wF,WAAY9wF,OAAQ6wF,cAES9wF,MAAOurF,eAAetrF,QAEhE,IAAbq8B,WACAivD,gBAAmBvrF,MAAO,EAAGC,OAAQ,KAGrCurF,oCACAlvD,kBACAivD,8BACAE,sCACAmB,4CACAF,uBEuKyCtxG,WAArB,GAAsB2C,MAAtBsF,OAA+BsR,UAC5C5W,KAAKsvG,2EAeZ,OALKtvG,KAAKyuG,gBACNzuG,KAAKyuG,aFtCsB,SAA1BwE,wBAA2BjwF,SACpC,IAAM+N,MAAQ/N,QAAQ+N,QAChBu+E,eAAiBtsF,QAAQuqF,oBACvBxV,YAAgB/0E,QAAQlN,SAAxBiiF,YAHwCmb,uBAIjBlwF,QAAQimF,eAA/B5V,KAJwC6f,uBAIxC7f,KAAMoV,aAJkCyK,uBAIlCzK,aACNiF,mBAAuB4B,eAAvB5B,mBAER,IAAa,IAATra,KACA,OACIpxE,MAAO,EACPC,OAAQ,GAVgC,IAcjCixF,cAAkBzF,mBAAzBzrF,MAER,GAAI81E,cAAgB2N,sBAAO3N,cAAgB0N,wBAAQ,KAAA2N,uBAI3C/D,uBAAuBrsF,QAASssF,eAAgBv+E,OAFhD9O,QAF2CmxF,uBAE3CnxF,MACAC,SAH2CkxF,uBAG3ClxF,OAIJ,OACID,MAHcjf,KAAKmK,IAAI8U,QAAOkxF,eAI9BjxF,iBAzBwC,IAAAmxF,uBA+B5CzD,qBAAqB5sF,QAASssF,gBAF9BrtF,MA7B4CoxF,uBA6B5CpxF,MACAC,OA9B4CmxF,uBA8B5CnxF,OAKJ,OACID,YACAC,OAJclf,KAAKmK,IAAI+U,OAAQumF,aAAe0K,cAAgB,IEKxCF,CAAwBjzG,OAE9CwuG,iBAAUxuG,MAEHA,KAAKyuG,qDAQR1yG,OACJ,OAAOiE,KAAKwzB,QAAQgB,OAAOz4B,+DAUdinC,GAAIC,IACjB,OAAQD,GAAIC,sDAGFD,GAAIC,IACd,OAAQjjC,KAAKw0B,OAAOwO,IAAKhjC,KAAKw0B,OAAOyO,yEAIrC,OAAOjjC,KAAKwV,+EAGQynC,YACpB,OAAOA,+DAYP,OAAO,gDAWP,OACI5hD,KAAM2E,KAAK3E,KACX2L,KAAMhH,KAAKgH,KACX+pB,MAAO/wB,KAAK+wB,QACZjb,OAAQ9V,KAAK8V,kDAwBjB,OAJI9V,KAAK4pF,UACL5pF,KAAKqyG,gBL3MV,SAASiB,WAAY1J,cACxB,IAAM9zF,OAAS8zF,aAAa9zF,SACtBmzF,aAAeW,aAAaX,eAC5BD,aAAeY,aAAal+E,eAAes9E,aAC3Cpf,MAAQggB,aAAahgB,QACrB74D,MAAQ64E,aAAa74E,QACrB+rB,KAAO8sD,aAAa9sD,OACpBtpB,MAAQo2E,aAAap2E,QAEN+/E,eAEhB3J,aAFDqF,gBACgBuE,kBACf5J,aADDsH,eAGAnZ,YAKCjiF,OALDiiF,YACAoQ,gBAICryF,OAJDqyF,gBACA1gF,UAGC3R,OAHD2R,UACA1I,GAECjJ,OAFDiJ,GACAiyE,YACCl7E,OADDk7E,YAGAqC,KAMA4V,aANA5V,KACAyN,QAKAmI,aALAnI,QACA8H,QAIAK,aAJAL,QACAH,aAGAQ,aAHAR,aACAJ,OAEAY,aAFAZ,OACA6J,cACAjJ,aADAiJ,cAGJ,GAAK7e,KAAL,CAIA,IAAM90C,SAAWqrD,aAAaV,cAExBS,gBAAkBj0B,YAAYF,6BAAcoU,OAAQ,KAAMggB,cAA7B,GAAAtkG,OAA+CmiB,cAC9E,SAAAprB,KAAG,OAAIA,IAAIyZ,SAASiJ,KAGxBiqF,aAAazoF,SAASgzF,gBAEtB,IAAMvE,UAAYx7E,MAAMpC,OAASoC,MAAM5B,UAAY4B,MAAMhe,OAEnD4b,MAAQ0rB,KAAKG,cAAgB+xD,YAEnClyD,KAAKlQ,WAAW4mE,kBAAkBpiF,QAGlC,IAAMg5E,eAAiBpnG,KAAKiY,IAAI8V,MAAM,GAAKA,MAAM,IAG3C0iF,WAAa7J,aAAa0G,0BAA0BzB,sBAG1DlF,gBAAgB1rD,KAAK,YAArB,aAAA34C,OAA+Cw7F,QAA/C,KAAAx7F,OAA0DsjG,QAA1D,MACAoB,+BAAiBJ,eACS,IAAtBvB,OAAOE,YAAqC,IAAbhqD,SAC/BorD,gBAAgBtrD,aACCi0B,SAAS,KACTnoE,GAAG,MAAOy/F,aAAaG,6BACvB9uG,KAAK6hD,MAEtB6sD,gBAAgB1uG,KAAK6hD,MAEzB6sD,gBAAgBhsD,UAAU,SAAS+sB,QAAnC,GAAAplE,OAA8C0rF,YAA9C,WAAmE,GACnE2Y,gBAAgBhsD,UAAU,cAAc+sB,QAAxC,GAAAplE,OAAmD0rF,YAAnD,gBAA6E,GAG5D2Y,gBAAgBhsD,UAAU,cAClC+sB,QAAT,GAAAplE,OAAoB0rF,YAApB,WAAyC,GACxBtmB,QADjB,GAAAplE,OAC4B0rF,YAD5B,WAAA1rF,OACiDyZ,KAAM,GAEvD2qF,oCAAsBC,gBAAiBC,aAAcrrD,UAGrD,IAAM2rD,SAAWx0B,YAAYi0B,gBAAiB,QAASuI,eAA3B,GAAA5sG,OAA8C0rF,YAA9C,eACX/yC,KAAK,cAAe,UACpBysB,QAFA,GAAAplE,OAEW0rF,YAFX,eAAA1rF,OAEoCyZ,KAAM,GAC1C2B,KAAK,SAAAtlB,GAAC,OAAIA,EAAEslB,OAG7BwpF,SAASx/B,QAAQo8B,QAAS2B,cAG1B,IAAMiL,YAActJ,eAAiB,EAE/B1oC,UACF+xC,sBACAl1D,kBACA4pD,gCACAgC,eAAgB+H,cAAchwF,OAC9B0mF,gBACA9H,gBACA4S,wBACAtJ,eAAgBR,aAAaQ,kBAGjCH,6BAAeC,SAAUnS,YAAar2B,WK4G9B4xC,CAAWtzG,OAERA,6CAWP,OADAw1E,6BAAcx1E,KAAK4pF,SAAS33D,SACrBjyB,uDASP,OAAOA,mDAUP,IAAM+wB,MAAQ/wB,KAAK+wB,QACnB,OAAOA,MAAM,GAAKA,MAAM,uEAUxB,IAAMyC,MAAQxzB,KAAKwzB,QACbzC,MAAQyC,MAAMzC,QACdvb,OAASge,MAAMhe,SAErB,OAAOxS,KAAKiY,IAAI8V,MAAM,GAAKA,MAAM,KAAOvb,OAAO,GAAKA,OAAO,0DAU3D,OAAO0/D,QAAQy+B,IAAI3zG,KAAK+xG,sGAIxB,IAAI5yB,UACEa,QAAU,IAAI9K,QAAQ,SAACr7D,SACzBslE,UAAYtlE,UAIhB,OAFA7Z,KAAK+xG,uBAAuBztG,KAAK07E,SAE1B,WACHb,4CAjFJ,OAAOn/E,KAAK0yE,4DArVZ,OAAOyd,4VC/DMyjB,mhBAEJ99F,QAAQ,IAEbib,MACAjb,OADAib,MAEEi3E,aAAeL,SAASrkE,OAE9B,OADAtjC,KAAK+wG,OAAS/I,eAAej3E,MAAMA,OAC5B/wB,KAAK+wG,2DAGD6B,WACX,OAAO5yG,KAAK+wG,OAAO6B,WAAa,yDAGpBp9F,QAIZ,OAHIA,OAAOnU,SACPmU,OAASohD,wBAAwBphD,SAE9BA,4TCpBMq+F,wfAEJ/9F,QAAQ,IAEbib,MAEAjb,OAFAib,MACAoc,KACAr3B,OADAq3B,KAEE66D,aAAeL,SAASp2E,IAE9B,OADAvxB,KAAK+wG,OAAS/I,eAAej3E,MAAMA,OAAOoc,KAAKA,MACxCntC,KAAK+wG,2DAGD6B,WACX,IAAMp/E,MAAQxzB,KAAK+wG,OACnB,OAAI6B,WAAa,EACNp/E,MAAMA,MAAMhe,SAAS,IAGzBge,MAAMo/E,WAAa,yDAGdp9F,QAOZ,OANIA,OAAO,IAAM,IACbA,OAAO,GAAKxS,KAAKmK,IAAI,EAAGqI,OAAO,KAE/BA,OAAO,IAAM,IACbA,OAAO,GAAKxS,KAAKmK,IAAI,EAAGqI,OAAO,KAE5BA,0UC5BMs+F,wfAEJh+F,QAAQ,IAEbib,MAEAjb,OAFAib,MACAuZ,SACAx0B,OADAw0B,SAEE09D,aAAeL,SAASt6F,IAE9B,OADArN,KAAK+wG,OAAS/I,eAAej3E,MAAMA,OAAOuZ,SAASA,UAC5CtqC,KAAK+wG,2DAGD6B,WACX,OAAO5yG,KAAK+wG,OAAO6B,WAAa,yDAGpBp9F,QACZ,OAAOA,47DCRR,IAAMu+F,iBAAeC,8BAAAC,oBACvB1N,IAAMsN,qBADiBG,8BAAAC,iBAEvBzN,IAAMsN,qBAFiBE,8BAAAC,iBAGvBhO,OAAS2N,2BAHcK,kBAMPC,mDACjB,SAAAA,cAAap+F,OAAQ4V,cAAc,mKAAAyoF,CAAAn0G,KAAAk0G,eAC/Bp+F,OAAO82B,WAAa92B,OAAO82B,YAAe,SAAA4mB,KAAG,OAAIA,KADlB4gD,yCAAAp0G,KAAAq0G,8BAAAH,eAAAj5G,KAAA+E,KAEzB8V,OAAQ4V,sZAHqB4lF,qUAW1Bx7F,QAAQ,IAEbq3B,KAIAr3B,OAJAq3B,KACAhkB,QAGArT,OAHAqT,QACA0xB,aAEA/kC,OAFA+kC,aACAvQ,SACAx0B,OADAw0B,SAEEvZ,MAAQ/wB,KAAK+wB,QACbujF,gBAAkBP,gBAAgBl5D,cAExC76C,KAAKu0G,cAAgB,IAAID,gBACzB,IAAI9gF,MAAQxzB,KAAKu0G,cAAcxM,aAC3B5+E,gBACAmhB,kBACA6C,UACApc,cAIJ,OADAyC,MAAQA,MAAMqZ,2DAeH+lE,WACX,GAAkB,OAAdA,gBAAoC11G,IAAd01G,UAG1B,OAAO5yG,KAAKu0G,cAAc5hB,cAAcigB,6DAQ7B,IAAA4B,mBAIPx0G,KAAKipG,eAFLP,eAFO8L,mBAEP9L,eACAC,eAHO6L,mBAGP7L,eAEE7rD,KAAO98C,KAAK88C,OAIlB,OAHAA,KAAKK,eAAiC,IAAnBurD,eAA2B,EAAI,GAClD5rD,KAAKM,eAAiC,IAAnBurD,eAA2B,EAAI,GAE3C7rD,KAAKyB,mDAWZ,GAAIr6C,UAAO7C,OAAQ,CACf,IAAMuxG,UAAY5yG,KAAKu0G,cAAcE,eAAevE,sBAAelwG,KAADkE,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,KAIlE,OAHAksG,uBAAuBpwG,KAAM4yG,WAC7B5yG,KAAKiyG,6BACLjyG,KAAKyuG,aAAa,MACXzuG,KAEX,OAAOA,KAAKqwG,sEAWc,QAAAqE,MAAAt7C,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MAG1B,OAFAq7C,MAAAC,KAAAN,8BAAAH,cAAAt3G,WAAA,oBAAAoD,OAAA/E,KAAAoC,MAAAq3G,OAAA10G,MAAAsF,OAA2BsR,SAC3B5W,KAAKkpG,cACElpG,2DAUM,IAAA40G,oBAIT50G,KAAKipG,eAFLhsD,WAFS23D,oBAET33D,WACAyrD,eAHSkM,oBAGTlM,eAEE5rD,KAAO98C,KAAK88C,OAElB,IAAK4rD,eAED,OADA5rD,KAAKG,eACEj9C,KAGPi9C,YACAA,sBAAsB13C,OAASvF,KAAK88C,OAAOG,WAAWA,YAE1D,IAAM43D,cAAgB70G,KAAKguG,gBAE3BlxD,KAAKG,WAAW43D,eAChB,IAAMzuF,WAAapmB,KAAK0rB,eAAes9E,aACvC5iF,WAAW7F,SAASvgB,KAAKivG,iBACzB,IAAMptG,UAAY7B,KAAKkxG,eAAe2D,eAChCtM,WAAasM,cAAc7vG,IAAI,SAACwuD,IAAK14D,GACvC,IAAM4lB,KAAO7e,UAAU2xD,IAAK14D,GACtBg6G,UAAY1uF,WAAWO,WAAWjG,MAGxC,OADAo0F,UAAUp0F,KAAOA,KACVo0F,YAIX,OADA90G,KAAKuoG,WAAWA,YACTvoG,2DAUP,IAEI+3F,YAEA/3F,KAAK8V,SAFLiiF,YAIA96C,WACAj9C,KAAKipG,eADLhsD,WAEElsB,MAAQ/wB,KAAK+wB,QACb+rB,KAAO98C,KAAK88C,OAEZstD,eAAiBpnG,KAAKiY,IAAI8V,MAAM,GAAKA,MAAM,IAE3C0iF,WAAazzG,KAAKswG,0BAA0BzB,sBAElD,OAAI5xD,YNhJoB,SAAnB83D,iBAAoB3K,eAAgB4K,SAAUl4D,KAAM8sD,cAC7D,IAAIqL,eAAiB,EACjBh4D,cACEurD,cAAkBoB,aAAa9zF,SAA/B0yF,cAEA0M,WADQp4D,KAAKtpB,QAAQpC,QACF/vB,OACnBmqG,gBAAkB5B,aAAauB,iBAAiBlpF,MAqBtD,OAnBAgzF,eAAiBC,WAEbA,YAAcF,SAAWxJ,iBAAmBpB,iBAC5C6K,eAAiBjyG,KAAKsH,MAAM8/F,gBAAkB4K,SAAWxJ,mBAG7DhD,cAAgBA,eAAiByM,eACjCA,eAAiBjyG,KAAKkK,IAAIs7F,cAAexlG,KAAKmK,INtBnB,EMsBwC8nG,kBAEnEh4D,WAAaH,KAAKtpB,QAAQpC,MAAM6jF,iBAEjB5zG,OAAS4zG,iBACpBh4D,WAAaA,WAAWrxC,OAAO,SAAC5O,EAAGlC,GAAJ,OAAUA,EAAI,GAAM,KN3B5B,IM8BvBm6G,iBAEAh4D,aADAA,WAAaH,KAAKtpB,QAAQpC,MN9BC,KM+BF,GAAI6rB,WAAWA,WAAW57C,OAAS,KAEzD47C,WM0HI83D,CAAiB3K,eAFbqJ,WAAW1b,cAAgB0N,yBAAU1N,cAAgB2N,qBAAM,QAAU,UAE9B5oD,KAAM98C,0EAIxD,OAAOwgE,gBAAgBxgE,KAAKipG,eAAehsD,sEAW7B8rD,UAAU,IAEpBhR,YACA/3F,KAAK8V,SADLiiF,YAOAuQ,SAHAtoG,KAAKipG,eADLZ,OAIAC,SAEExrD,KAAO98C,KAAK88C,OACZ1rB,MAAQ0rB,KAAKG,aACbsrD,WAAavoG,KAAKuoG,aAExB,GAAIA,YAAcA,WAAWlnG,OAAQ,KAAA8zG,kBACPn1G,KAAKuoG,aAAa,GAApCtmF,MADyBkzF,kBACzBlzF,MAAOC,OADkBizF,kBAClBjzF,OAEf46B,KAAKI,cAAc,SAAC9hD,GAChB,GAAIA,IAAMg2B,MAAM,GAAI,CAChB,GAAK2mE,cAAgB4N,uBAAQ5N,cAAgB6N,uBACzC,uBAAAtgG,OAAyB4c,OAAU,EAAnC,OAGJ,IAAK61E,cAAgB2N,sBAAO3N,cAAgB0N,2BAAY6C,SACpD,mBAAAhjG,OAAoB2c,MAAQ,EAA5B,QAAqC,EAArC,OAEN,MAAO,KAGjB,OAAO8mF,+CA3KP,OAAO9C,yuCCtDMmP,ssBAAiB9D,uTAmB9B,IACI7wF,WADA8nF,WAAa,GAEX/yF,OAASxV,KAAKwV,SACZwzF,aAAiBhpG,KAAKqrG,cAAtBrC,aACA7/E,QAAYnpB,KAAK8V,SAAjBqT,QALKqrF,mBAMkBx0G,KAAKipG,eAA5BZ,OANKmM,mBAMLnM,OAAQprD,WANHu3D,mBAMGv3D,WANHo4D,oBAO8Cr1G,KAAKkuG,gBAAhDf,YAPHkI,oBAOLnzF,OAA4BgrF,WAPvBmI,oBAOgBpzF,MAAmBwB,OAPnC4xF,oBAOmC5xF,OAPnC6xF,kBAQajH,iBAAiBhG,OAAOC,SAAU4E,WAAYC,aAAhElrF,MARKqzF,kBAQLrzF,MAAOC,OARFozF,kBAQEpzF,OASf,GAPA+6B,YAAcj9C,KAAK88C,OAAOG,WAAWA,YACrCsrD,WAAatrD,YAAcznC,OAG3BwzF,aAAazoF,SAASvgB,KAAKivG,iBAGJ,iBAAZ9lF,QAAsB,CAC7B,IAAMosF,kBAAoBvyG,KAAKkK,IAAI,EAAGlK,KAAKmK,IAAI,EAAGgc,UAClDnpB,KAAKwzB,QAAQrK,QAAQosF,mBAGzB,GAAI//F,QAAUA,OAAOnU,OAAQ,CACzB,IAAMmW,OAASylC,YAAcznC,OACvBq7F,cAAgB7wG,KAAKkxG,eAAe15F,QAC1C+wF,WAAa/wF,OAAOxS,IAAI,SAAC5J,EAAGN,GAIxB,OAHAkuG,aAAa3lF,uBAAsB,GAEnC5C,WAAauoF,aAAa1lF,aAAautF,cAAcz1G,EAAGN,GAAImnB,MAAOC,OAAQuB,QACpEulF,aAAapjG,YAAY4a,YAAYC,cAIpD,OADAzgB,KAAKuoG,WAAWA,YACTvoG,+DAeP,OALKA,KAAKyuG,gBACNzuG,KAAKyuG,aAAaqB,0BAAmB9vG,OAEzCwuG,iBAAUxuG,MAEHA,KAAKyuG,qEASZ,OAAOzuG,KAAK88C,OAAOtpB,QAAQhe,iEAGdg+C,KACb,OAAOxzD,KAAK8vF,aAAL9vF,CAAmBwzD,yEAGPz3D,OAAO,IAAA6/E,MAAA57E,KAClB4sC,WAAe7wC,MAAf6wC,WAER,OAAIA,WACO,SAAAxb,OAAK,OAAI,SAACoiC,IAAK14D,GAAN,OAAY8xC,WAAWgvC,MAAK45B,gBAAgBhiD,KAAMA,IAAK14D,EAAGs2B,SAEvE,kBAAM,SAAAoiC,KAAG,OAAIooB,MAAK45B,gBAAgBhiD,2DAUzC,OAAOxzD,KAAKwzB,QAAQG,8DAST,IAAAihF,oBAIP50G,KAAKipG,eAFLP,eAFOkM,oBAEPlM,eACAC,eAHOiM,oBAGPjM,eAEE7rD,KAAO98C,KAAK88C,OAIlB,OAFAA,KAAKK,cAAcurD,eAAiB,EAAI,GACxC5rD,KAAKM,cAAcurD,eAAiB,EAAI,GACjC7rD,KAAKyB,6DAGFvb,GAAIC,IACd,OAAOjjC,KAAKwzB,QAAQW,aAAa6O,GAAIC,4DASxBD,GAAIC,IACjB,IAAMzP,MAAQxzB,KAAKwzB,QACbzC,MAAQyC,MAAMzC,QACd1Y,QAAU0Y,MAAM,GAAKA,MAAM,GAE3BmgC,OAASlxD,KAAKm0B,aAAa6O,GAAIC,IAGrC,OAFWzP,MAAMnb,QAAU64C,OAAOA,OAAO7vD,OAAS,GAAK6vD,OAAO,IACnD19B,MAAMnb,QAAU64C,OAAO,GAAKA,OAAOA,OAAO7vD,OAAS,IAAMmyB,MAAMG,mDA/H1E,OAAOuyE,yuDCCMuP,yCAEjB,SAAAA,WAAwB,IAAAnY,iBAAA1hB,8JAAA85B,CAAA11G,KAAAy1G,UAAA,QAAAr8C,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MAAA,OACpBuiB,MAAA+5B,oCAAA31G,MAAAs9F,iBAAAsY,yBAAAH,WAAAx6G,KAAAoC,MAAAigG,kBAAAt9F,MAAAsF,OAASsR,WACJm1F,SAAW3/D,IAFIwvC,8XAFU01B,iTAcrBvgF,OACT,IAAIyC,MAAQqiF,cAAAD,yBAAAH,SAAA74G,WAAA,cAAAoD,MAAA/E,KAAA+E,KAAkB+wB,OAG9B,OADAyC,MAAQA,MAAMqZ,+DAeD2mB,KACb,OAAOxzD,KAAKwzB,QAAQoZ,YAAb5sC,CAA0BwzD,yEAGdz3D,OAAO,IAAAigF,OAAAh8E,KAClB4sC,WAAe7wC,MAAf6wC,WAER,OAAIA,WACO,SAACxb,OACJ,IAAM0kF,SAAW1kF,MAAMpsB,IAAI,SAAAhJ,GAAC,OAAIA,EAAEkK,YAClC,OAAO,SAACstD,IAAK14D,GAAN,OAAY8xC,WAAWovC,OAAKw5B,gBAAgBhiD,KAAMA,IAAIttD,UAAWpL,EAAGg7G,YAG5E,kBAAM,SAAAtiD,KAAG,OAAIwoB,OAAKw5B,gBAAgBhiD,yDAS9B,IAAAghD,mBAIPx0G,KAAKipG,eAFLP,eAFO8L,mBAEP9L,eACAC,eAHO6L,mBAGP7L,eAEE7rD,KAAO98C,KAAK88C,OAGlB,OAFAA,KAAKK,eAAiC,IAAnBurD,eAA2B,EAAI,GAClD5rD,KAAKM,eAAiC,IAAnBurD,eAA2B,EAAI,GAClDkN,cAAAD,yBAAAH,SAAA74G,WAAA,cAAAoD,MAAA/E,KAAA+E,4DAUA,OAAOA,KAAKipG,eAAehsD,YAAcj9C,KAAKwzB,QAAQpC,gDAUjD/B,MAEL,OADArvB,KAAK+rG,SAAW/oG,KAAKkK,IAAIlN,KAAK+rG,SAAU18E,MACjCrvB,mEAIPurG,+BAAkBvrG,8CAWlB,GAAIkE,UAAO7C,OAAQ,CACf,IAAM2wG,YAAc9B,sBAAelwG,KAADkE,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IAMlC,OALAksG,uBAAuBpwG,KAAMgyG,aAC7BhyG,KAAKiyG,6BACLjyG,KAAKyuG,aAAa,MRsQG,SAApBsH,kBAAqB/yF,QAASxN,QAAW,IAAAwgG,iBAI9ChzF,QAAQlN,SAFRiiF,YAF8Cie,iBAE9Cje,YACAqV,SAH8C4I,iBAG9C5I,SAGE1sC,QAAU19C,QAAQ+oF,SAExB,GAAI/oF,QAAQ+N,QAAQ1vB,SAAW02F,cAAgB2N,sBAAO3N,cAAgB0N,yBAAS,CAC3EziF,QAAQuoF,oBADmE,IAGvEsD,sBACA7rF,QAAQuqF,oBADRsB,sBAGE5D,UAAYjoF,QAAQgrF,gBAAgB3sG,OANiC40G,sBAQxCjzF,QAAQonF,iBAAnCnoF,MARmEg0F,sBAQnEh0F,MAAOC,OAR4D+zF,sBAQ5D/zF,OAAQiH,QARoD8sF,sBAQpD9sF,QAEnBgH,KAEAhH,QAFAgH,KACAI,MACApH,QADAoH,MAGE0pB,aAAej3C,KAAKkK,IAAI2hG,sBAAsB5sF,OAC9CA,OAASgpF,UAAY,GAAMjoF,QAAQmoF,iBAAiBlpF,OAAUgpF,WAEpEjoF,QAAQkrF,eACJjsF,MAAOg4B,eAGX,IAAMi8D,cAAgBzJ,iBAAiB/rC,SAAUzmB,aAAe,EAC5Dh4B,MAAQkO,KAAOI,MAAQ0pB,aAAe,GAAIzkC,OAAQwN,QAAQlN,UAG9Dy2F,aAAavpF,QAAS,IAAKkzF,cAAe9I,SAAWlrF,OAAS,MAE9Dc,QAAQqvF,iBQvSJ0D,CAAkB/1G,KAAMgyG,aACjBhyG,KAEX,OAAOA,KAAKqwG,kEAeZ,OALKrwG,KAAKyuG,gBACNzuG,KAAKyuG,aAAaqB,0BAAmB9vG,OAEzCwuG,iBAAUxuG,MAEHA,KAAKyuG,mFAIZ,OAAOjuC,gBAAgBxgE,KAAK8V,SAASmnC,0EAWX,QAAAy3D,MAAAt+B,MAAAlyE,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6wE,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAARz/D,OAAQy/D,OAAAnyE,UAAAmyE,OAG1B,OAFAq+B,MAAAmB,cAAAD,yBAAAH,SAAA74G,WAAA,oBAAAoD,OAAA/E,KAAAoC,MAAAq3G,OAAA10G,MAAAsF,OAA2BsR,SAC3B5W,KAAKkpG,cACElpG,2DAUP,IAAIuoG,WACA9nF,WAFSm0F,oBAIkB50G,KAAKipG,eAA5BZ,OAJKuM,oBAILvM,OAAQprD,WAJH23D,oBAIG33D,WAJHo4D,oBAK8Cr1G,KAAKkuG,gBAAhDf,YALHkI,oBAKLnzF,OAA4BgrF,WALvBmI,oBAKgBpzF,MAAmBwB,OALnC4xF,oBAKmC5xF,OACxCulF,aAAiBhpG,KAAKqrG,cAAtBrC,aACFxzF,OAASxV,KAAKguG,gBAEpB/wD,YAAcj9C,KAAK88C,OAAOG,WAAWA,YATxB,IAAAq4D,kBAWajH,iBAAiBhG,OAAOC,SAAU4E,WAAYC,aAAhElrF,MAXKqzF,kBAWLrzF,MAAOC,OAXFozF,kBAWEpzF,OAOf,GALAqmF,WAAatrD,YAAcznC,OAG3BwzF,aAAazoF,SAASvgB,KAAKivG,iBAEvBz5F,QAAUA,OAAOnU,OAAQ,CACzB,IAAMmW,OAASylC,YAAcznC,OACvBq7F,cAAgB7wG,KAAKkxG,eAAe15F,QAC1C+wF,WAAa/wF,OAAOxS,IAAI,SAAC5J,EAAGN,GAIxB,OAHAkuG,aAAa3lF,uBAAsB,GAEnC5C,WAAauoF,aAAa1lF,aAAautF,cAAcz1G,EAAGN,GAAImnB,MAAOC,OAAQuB,QACpEulF,aAAapjG,YAAY4a,YAAYC,cAKpD,OADAzgB,KAAKuoG,WAAWA,YACTvoG,2CAvJP,OAAOmmG,qBC3CFgQ,WACTC,MAAQn2E,IAAK,SAAUb,IAAK,eAC5Bi3E,WAAap2E,IAAK,SAAUb,IAAK,eACjCk3E,SAAWr2E,IAAK,SAAUb,IAAK,eAC/Bm3E,UAAYt2E,IAAK,SAAUb,IAAK,cAChCo3E,eAAiBv2E,IAAK,SAAUb,IAAK,eACrCq3E,iBAAmBx2E,IAAK,SAAUb,IAAK,cACvCs3E,aAAez2E,IAAK,SAAUb,IAAK,eACnCu3E,QAAU12E,IAAK,SAAUb,IAAK,eAC9Bw3E,YAAc32E,IAAK,SAAUb,IAAK,eAClCy3E,YAAc52E,IAAK,SAAUb,IAAK,eAClC03E,WAAa72E,IAAK,SAAUb,IAAK,aACjC23E,SAAW92E,IAAK,SAAUb,IAAK,aAC/B43E,WAAa/2E,IAAK,SAAUb,IAAK,aACjC63E,SAAWh3E,IAAK,SAAUb,IAAK,WAC/B83E,KAAOj3E,IAAK,SAAUb,IAAK,WAC3B+3E,WAAal3E,IAAK,SAAUb,IAAK,YACjCg4E,QAAUn3E,IAAK,SAAUb,IAAK,aAC9Bi4E,OAASp3E,IAAK,SAAUb,IAAK,cAC7Bk4E,YAAcr3E,IAAK,SAAUb,IAAK,aAClCm4E,QAAUt3E,IAAK,SAAUb,IAAK,aAC9Bo4E,MAAQv3E,IAAK,SAAUb,IAAK,aAC5Bq4E,QAAUx3E,IAAK,SAAUb,IAAK,aAC9Bs4E,aAAez3E,IAAK,SAAUb,IAAK,eACnCu4E,cAAgB13E,IAAK,SAAUb,IAAK,eACpCw4E,sBAAwB33E,IAAK,SAAUb,IAAK,eAC5Cy4E,YAAc53E,IAAK,SAAUb,IAAK,eAClC04E,UAAY73E,IAAK,SAAUb,IAAK,eAChC24E,WAAa93E,IAAK,SAAUb,IAAK,eACjC44E,eAAiB/3E,IAAK,SAAUb,IAAK,eACrC64E,OAASh4E,IAAK,SAAUb,IAAK,eAC7B84E,WAAaj4E,IAAK,SAAUb,IAAK,eACjC+4E,UAAYl4E,IAAK,SAAUb,IAAK,eAChCg5E,gBAAkBn4E,IAAK,SAAUb,IAAK,eACtCi5E,QAAUp4E,IAAK,SAAUb,IAAK,eAC9Bk5E,aAAer4E,IAAK,SAAUb,IAAK,eACnCm5E,OAASt4E,IAAK,SAAUb,IAAK,eAC7Bo5E,WAAav4E,IAAK,SAAUb,IAAK,eACjCq5E,KAAOx4E,IAAK,SAAUb,IAAK,eAC3Bs5E,WAAaz4E,IAAK,SAAUb,IAAK,eACjCu5E,YAAc14E,IAAK,SAAUb,IAAK,cAClCw5E,WAAa34E,IAAK,SAAUb,IAAK,cACjCy5E,eAAiB54E,IAAK,SAAUb,IAAK,cACrC05E,MAAQ74E,IAAK,SAAUb,IAAK,cAC5B25E,WAAa94E,IAAK,SAAUb,IAAK,cACjC45E,aAAe/4E,IAAK,SAAUb,IAAK,aACnC65E,QAAUh5E,IAAK,SAAUb,IAAK,aAC9B85E,OAASj5E,IAAK,SAAUb,IAAK,aAC7B+5E,QAAUl5E,IAAK,SAAUb,IAAK,WAC9Bg6E,gBAAkBn5E,IAAK,SAAUb,IAAK,aACtCi6E,OAASp5E,IAAK,SAAUb,IAAK,aAC7Bk6E,WAAar5E,IAAK,SAAUb,IAAK,cACjCm6E,aAAet5E,IAAK,SAAUb,IAAK,cACnCo6E,WAAav5E,IAAK,SAAUb,IAAK,aACjCq6E,MAAQx5E,IAAK,SAAUb,IAAK,WAC5Bs6E,WAAaz5E,IAAK,SAAUb,IAAK,aACjCu6E,YAAc15E,IAAK,SAAUb,IAAK,aAClCw6E,aAAe35E,IAAK,SAAUb,IAAK,cACnCy6E,aAAe55E,IAAK,SAAUb,IAAK,aACnC06E,mBAAqB75E,IAAK,SAAUb,IAAK,aACzC26E,YAAc95E,IAAK,SAAUb,IAAK,eAClC46E,WAAa/5E,IAAK,SAAUb,IAAK,eACjC66E,cAAgBh6E,IAAK,SAAUb,IAAK,eACpC86E,gBAAkBj6E,IAAK,SAAUb,IAAK,cACtC+6E,UAAYl6E,IAAK,SAAUb,IAAK,aAChCg7E,aAAen6E,IAAK,SAAUb,IAAK,aACnCi7E,OAASp6E,IAAK,SAAUb,IAAK,WAC7Bk7E,WAAar6E,IAAK,SAAUb,IAAK,WACjCm7E,kBAAoBt6E,IAAK,SAAUb,IAAK,eACxCo7E,MAAQv6E,IAAK,SAAUb,IAAK,aAC5Bq7E,MAAQx6E,IAAK,SAAUb,IAAK,aAC5Bs7E,WAAaz6E,IAAK,SAAUb,IAAK,eACjCu7E,eAAiB16E,IAAK,SAAUb,IAAK,eACrCw7E,YAAc36E,IAAK,SAAUb,IAAK,eAClCy7E,WAAa56E,IAAK,SAAUb,IAAK,cACjC07E,iBAAmB76E,IAAK,SAAUb,IAAK,cACvC27E,eAAiB96E,IAAK,SAAUb,IAAK,aACrC47E,eAAiB/6E,IAAK,SAAUb,IAAK,cACrC67E,WAAah7E,IAAK,SAAUb,IAAK,cACjC87E,UAAYj7E,IAAK,SAAUb,IAAK,aAChC+7E,MAAQl7E,IAAK,SAAUb,IAAK,aAC5Bg8E,gBAAkBn7E,IAAK,SAAUb,IAAK,eACtCi8E,YAAcp7E,IAAK,SAAUb,IAAK,eAClCk8E,WAAar7E,IAAK,SAAUb,IAAK,eACjCm8E,SAAWt7E,IAAK,SAAUb,IAAK,eAC/Bo8E,cAAgBv7E,IAAK,SAAUb,IAAK,eACpCq8E,aAAex7E,IAAK,SAAUb,IAAK,aACnCs8E,YAAcz7E,IAAK,SAAUb,IAAK,cAClCu8E,gBAAkB17E,IAAK,SAAUb,IAAK,eACtCw8E,WAAa37E,IAAK,SAAUb,IAAK,cACjCy8E,WAAa57E,IAAK,SAAUb,IAAK,cACjC08E,MAAQ77E,IAAK,SAAUb,IAAK,WAC5B28E,YAAc97E,IAAK,SAAUb,IAAK,WAClC48E,UAAY/7E,IAAK,SAAUb,IAAK,WAChC68E,MAAQh8E,IAAK,SAAUb,IAAK,WAC5B88E,cAAgBj8E,IAAK,SAAUb,IAAK,aACpC+8E,UAAYl8E,IAAK,SAAUb,IAAK,eAChCg9E,SAAWn8E,IAAK,SAAUb,IAAK,eAC/Bi9E,MAAQp8E,IAAK,SAAUb,IAAK,eAC5Bk9E,QAAUr8E,IAAK,SAAUb,IAAK,eAC9Bm9E,QAAUt8E,IAAK,SAAUb,IAAK,eAC9Bo9E,SAAWv8E,IAAK,SAAUb,IAAK,aAC/Bq9E,SAAWx8E,IAAK,SAAUb,IAAK,aAC/Bs9E,cAAgBz8E,IAAK,SAAUb,IAAK,cACpCu9E,cAAgB18E,IAAK,SAAUb,IAAK,eACpCw9E,YAAc38E,IAAK,SAAUb,IAAK,cAClCy9E,YAAc58E,IAAK,SAAUb,IAAK,aAClC09E,YAAc78E,IAAK,SAAUb,IAAK,cAClC29E,aAAe98E,IAAK,SAAUb,IAAK,aACnC49E,QAAU/8E,IAAK,SAAUb,IAAK,aAC9B69E,QAAUh9E,IAAK,SAAUb,IAAK,YAC9B89E,eAAiBj9E,IAAK,SAAUb,IAAK,aACrC+9E,WAAal9E,IAAK,SAAUb,IAAK,cACjCg+E,iBAAmBn9E,IAAK,SAAUb,IAAK,eACvCi+E,OAASp9E,IAAK,SAAUb,IAAK,eAC7Bk+E,MAAQr9E,IAAK,SAAUb,IAAK,eAC5Bm+E,UAAYt9E,IAAK,SAAUb,IAAK,eAChCo+E,WAAav9E,IAAK,SAAUb,IAAK,eACjCq+E,OAASx9E,IAAK,SAAUb,IAAK,eAC7Bs+E,WAAaz9E,IAAK,SAAUb,IAAK,eACjCu+E,YAAc19E,IAAK,SAAUb,IAAK,eAClCw+E,YAAc39E,IAAK,SAAUb,IAAK,eAClCy+E,UAAY59E,IAAK,SAAUb,IAAK,eAChC0+E,OAAS79E,IAAK,SAAUb,IAAK,eAC7B2+E,SAAW99E,IAAK,SAAUb,IAAK,eAC/B4+E,aAAe/9E,IAAK,SAAUb,IAAK,eACnC6+E,OAASh+E,IAAK,SAAUb,IAAK,eAC7B8+E,cAAgBj+E,IAAK,SAAUb,IAAK,eACpC++E,OAASl+E,IAAK,SAAUb,IAAK,eAC7Bg/E,eAAiBn+E,IAAK,SAAUb,IAAK,eACrCi/E,WAAap+E,IAAK,SAAUb,IAAK,eACjCk/E,WAAar+E,IAAK,SAAUb,IAAK,eACjCm/E,WAAat+E,IAAK,SAAUb,IAAK,eACjCo/E,QAAUv+E,IAAK,SAAUb,IAAK,eAC9Bq/E,UAAYx+E,IAAK,SAAUb,IAAK,eAChCs/E,MAAQz+E,IAAK,SAAUb,IAAK,eAC5Bu/E,SAAW1+E,IAAK,SAAUb,IAAK,eAC/Bw/E,gBAAkB3+E,IAAK,SAAUb,IAAK,eACtCy/E,WAAa5+E,IAAK,SAAUb,IAAK,eACjC0/E,eAAiB7+E,IAAK,SAAUb,IAAK,YACrC2/E,OAAS9+E,IAAK,SAAUb,IAAK,UCtIpB4/E,SACT,UACA,UACA,UACA,UACA,UACA,WAGSC,uBAAyB,UAEzBC,gBACTnuF,MAAOiuF,QACPjjH,MAAOijH,QAAQ,GACfluF,MAAM,EACNquF,MAAO,EACPn4G,KAAMi/F,weCjBH,IAAMmZ,mBAAe,SAAfA,aAAeC,QAAM,cAAA/5G,OAAwB,IAAZ+5G,OAAO,GAAnB,KAAA/5G,OAA2C,IAAZ+5G,OAAO,GAAtC,MAAA/5G,OAA+D,IAAZ+5G,OAAO,GAA1D,MAAA/5G,OAChC+5G,OAAO,IAAM,EADmB,MAGrBC,mBAAqB,SAArBA,mBAAqBC,YAAU,OAAKA,WAAWx3G,MAAM,UACjDkD,OAAO,SAACiQ,EAAGle,GAAJ,SAAAsI,OAAa4V,GAAb5V,OAAiBtI,EAAEmpB,OAAO,GAAGwkB,eAA7BrlC,OAA6CtI,EAAEoO,MAAM,KAAM,KAEtEo0G,wBAAoB,SAApBA,kBAAqBxiH,EAAGyiH,cACjC,IAAIjgF,MAAQ,GACZ,GAAiB,iBAANxiC,EAGP,GADAA,GADAA,EAAIA,EAAEsD,QAAQ,KAAM,KACdc,cjBUK,QiBTPm6D,YAAYv+D,IjBQJ,SiBRkBu+D,YAAYv+D,GAEtCwiC,QADAA,MAAQxiC,EAAEiI,MAAM,mBACD,GAAK,IAAKu6B,MAAM,GAAK,IAAKA,MAAM,GAAK,IAAKy0B,aAAa7uD,OAAOo6B,MAAM,IAAK,SACrF,GjBII,QiBJA+7B,YAAYv+D,GACnBwiC,M3K21BK,SAAXkgF,SAAYz/E,KAEdA,IAAMA,IAAI3/B,QADa,mCACW,SAACpF,EAAGU,EAAGiK,EAAGlD,GAAV,OAAgB/G,EAAIA,EAAIiK,EAAIA,EAAIlD,EAAIA,IAEtE,IAAMmwB,OAAS,4CAA4C2M,KAAKQ,KAChE,OAAOnN,OAASwoC,SAASp6D,SAAS4xB,OAAO,GAAI,IAAK5xB,SAAS4xB,OAAO,GAAI,IAAK5xB,SAAS4xB,OAAO,GAAI,KAAO,G2Kh2BtF4sF,CAAS1iH,QACd,GjBCI,QiBDAu+D,YAAYv+D,GAAY,CAC/B,IAAMw+D,IAAMx+D,EAAE+F,UAAU/F,EAAEqH,QAAQ,KAAO,EAAGrH,EAAEgqB,YAAY,MAAMjf,MAAM,QACtEy3B,MAAQ87B,SAAQj+D,WAAR,EAAAsiH,wBAAYnkD,WACb26C,UAAUmJ,mBAAmBtiH,MACpCwiC,MAAQ87B,SAAQj+D,WAAR,EAAAsiH,wBAAYxJ,UAAUmJ,mBAAmBtiH,IAAIoiC,IAAIr3B,MAAM,aAKnEy3B,MAHSxiC,aAAauI,MAGdvI,EAFAs+D,SAASmkD,cAIrB,OAAOjgF,OAGEqwD,wBACT/5E,QACI6jD,aAAc,SAAAA,aAAC32C,QAASlN,QACpB,IAAM67F,OAASn3C,kBAAmBx3C,QAAQpd,YAAYuqF,iBAClDr6E,OAAO9O,OAASi/F,mBAChBnwF,OAAOib,MAAQjb,OAAOib,QAAU4gF,OAAO5gF,MAAM,IAC7Cjb,OAAOib,MAAQjb,OAAOib,MAAM1vB,OAAS,EAAIyU,OAAOib,OAASkuF,wBAA1C35G,OAAAq6G,wBAAqE7pG,OAAOib,SAE/F,IAAMw/E,UAAY/1C,eAAem3C,OAAQ3uF,QAAQlN,UAC3C8pG,UAAYplD,eAAe+1C,UAAWz6F,QAO5C,OALI8pG,UAAU7uF,iBAAiBxrB,QAC3Bq6G,UAAU7uF,MAAQ6uF,UAAU7uF,MAAM/rB,IAAI,SAAChI,EAAGlC,GAAJ,OAAU0kH,wBAAkBxiH,EAAGgiH,QAAQlkH,MAC7E8kH,UAAUT,MAAQrpG,OAAOqpG,OAASS,UAAU7uF,MAAM1vB,QAEtDu+G,UAAU7jH,MAAQyjH,wBAAkBI,UAAU7jH,MAAO6jH,UAAU7jH,OACxD6jH,YAGfpqG,UACAge,SACAqsF,iBCtDSC,yBAAoB,SAApBA,kBAAqBlN,UAAWmN,UAAWC,oBACpD,OAAIpN,qBAAqBp1F,sBACdwiG,mBAEJD,WAGEE,yBAAoB,SAApBA,kBAAqBC,QAASC,WAAYn9F,SAEnD,OADoBk2C,WAAWgnD,QAAS,gBAExC,KAAK76G,SACD,OAAO66G,QAAQC,WAAYn9F,SAC/B,KAAKzd,MACD,OAAO26G,QACX,QACI,OAAOC,yrBCXf,IAAMC,wBAAW,SAAXA,SAAY5qG,OAAQ2pG,OACtB,IAAIkB,YAEJ,GAAIlB,iBAAiB55G,MACjB86G,SAAWlB,MAAM/zG,QAAQa,OACzBo0G,SAAWC,iCAAI,IAAIlxG,KAAKoG,OAAO,IAAhBlQ,OAAAg7G,iCAAuBnB,QAAO3pG,OAAO,OAAMvJ,YAG1D,IADA,IAAM4uC,aAAesgB,kCAAkB99D,WAAlB,EAAAijH,iCAAwB9qG,SACpC1a,EAAI,EAAGA,GAAKqkH,MAAOrkH,IACxBulH,SAASvlH,GAAK+/C,aAAa//C,EAAIqkH,OAOvC,OAHIkB,SAAS,GAAK7qG,OAAO,IACrB6qG,SAASn7G,SAEJsQ,cAAQ6qG,oBAGfE,0BAAa,SAAbA,WAAcC,eAAgBzvF,OAChC,IAAI0vF,YAGJ,GAAID,eAFmBx9G,KAAKkK,IAAI6jB,MAAM1vB,OAAQ,IAI1C,IADA,IAAMw5C,aAAewgB,qC7KqtBL,SAAlBqlD,kBAAkB,OAAMC,Q6KrtBuBD,GAAmB3vF,MAAM/rB,IAAI,SAAAhI,GAAC,OAAIoiH,mBAAapiH,MACnFlC,EAAI,EAAGA,EAAI0lH,eAAgB1lH,IAChC2lH,SAAS3lH,GAAK+/C,aAAa//C,GAAK0lH,eAAiB,SAGrDC,SAAW1vF,MAAM3lB,MAAM,EAAGo1G,gBAE9B,OAASC,oBASPG,cAAgB,SAAhBA,cAAiBprG,QACnB,IAAMqrG,WAAarrG,OAEnB,OAASA,OADSA,OAAOxQ,IAAI,SAAC5J,EAAGN,GAAJ,OAAWA,GAAM0a,OAAOnU,OAAS,KAClCw/G,sBAAYC,aAAc,EAAG,KASvDC,qBAAuB,SAAvBA,qBAAwBvrG,OAAQ2pG,MAAOpuF,OAEzC,OAASvb,cAAQqrG,WADErrG,OACUsrG,aAAc,EAAG,GAAI/vF,cAShDiwF,aAAe,SAAfA,aAAgBxrG,OAAQ2pG,MAAOpuF,OAEjC,OAAS8vF,WADUrrG,OACEA,cAAQq3B,MAAM,EAAM9b,cAUvCkwF,6BAAgB,SAAhBA,cAAiBzrG,OAAQ2pG,MAAOpuF,OAAU,IAAAmwF,UACHd,wBAAS5qG,OAAQ2pG,OAA1C0B,WAD4BK,UACpC1rG,OAAoB6qG,SADgBa,UAChBb,SAG5B,OAASQ,sBAAYrrG,OAAQ6qG,SAAUxzE,MAAM,EAAM9b,MAF9BwvF,0BAAWF,SAASh/G,OAAS,EAAG0vB,OAA7C0vF,WAKNU,sCAAyB,SAAzBA,uBAA0B3rG,OAAQ2pG,MAAOpuF,OAAU,IAAAqwF,WACZhB,wBAASxpD,wBAAwBphD,QAASub,MAAM1vB,OAAS,GAElG,OAASw/G,WAH4CO,WAC7C5rG,OAEaA,OAHgC4rG,WACzBf,SAEWxzE,MAAM,EAAM9b,MADlCA,MAAM/rB,IAAI,SAAAhI,GAAC,OAAIoiH,mBAAapiH,OAa3CqkH,YAAc,SAAdA,YAAerP,YAAax+E,MAAOhe,OAAQqrG,YAG7C,OAAOrtF,MADQhe,OADDqrG,WAAWx8G,QAAQ2tG,gBAa/BsP,4BAAe,SAAfA,aAAgBtP,YAAax+E,MAAOhe,QACtC,IAAM+rG,QAAUvP,YAAcx8F,OAAO,KAAOA,OAAOA,OAAOnU,OAAS,GAAKmU,OAAO,IAE/E,OAAOsqG,yBAAkB9N,YAAax+E,MAAM+tF,QAAS/tF,MAAM,KASzDguF,2BAAc,SAAdA,YAAexP,YAAax+E,MAAOhe,QAArB,OAAgCsqG,yBAAkB9N,YAAax+E,MAAMw+E,aACrFx+E,MAAMhe,OAAO,MAiDJisG,eAAiB,SAAjBA,eAAkBC,WAAYC,UAAWC,YAAxB,OA1CX,SAAb/kB,aAAa,IAAA9mC,KAAA,OAAA8rD,8BAAA9rD,QAAA,GAAAzwD,OACXshG,UADW,KAAAthG,OACEshG,UADF,KAAAthG,OACeohG,aAC1BlzE,MAAOkzE,WACPob,YAAa,SAAAA,cAAA,OAAMf,sBACnBhlH,MAAO,SAAAA,QAAA,OAAMulH,+BAJFO,8BAAA9rD,KAAA,GAAAzwD,OAMXshG,UANW,KAAAthG,OAMEuhG,SANF,KAAAvhG,OAMcohG,aACzBlzE,MAAOkzE,WACPob,YAAa,SAAAA,cAAA,OAAMf,sBACnBhlH,MAAO,SAAAA,QAAA,OAAMulH,+BATFO,8BAAA9rD,KAAA,GAAAzwD,OAWXuhG,SAXW,KAAAvhG,OAWCuhG,SAXD,KAAAvhG,OAWaohG,aACxBlzE,MAAOkzE,WACPob,YAAa,SAAAA,cAAA,OAAMlB,eACnB7kH,MAAO,SAAAA,QAAA,OAAMslH,eAdFQ,8BAAA9rD,KAAA,GAAAzwD,OAgBXuhG,SAhBW,KAAAvhG,OAgBCuhG,SAhBD,KAAAvhG,OAgBa8gG,UACxB5yE,MAAO4yE,QACP0b,YAAa,SAAAA,cAAA,OAAMd,cACnBjlH,MAAO,SAAAA,QAAA,OAAMylH,8BAnBFK,8BAAA9rD,KAAA,GAAAzwD,OAqBXshG,UArBW,KAAAthG,OAqBEshG,UArBF,KAAAthG,OAqBe8gG,UAC1B5yE,MAAOyyE,OACP6b,YAAa,SAAAA,cAAA,OAAMX,uCACnBplH,MAAO,SAAAA,QAAA,OAAMylH,8BAxBFK,8BAAA9rD,KAAA,GAAAzwD,OA0BXshG,UA1BW,KAAAthG,OA0BEuhG,SA1BF,KAAAvhG,OA0Bc8gG,UACzB5yE,MAAO8yE,SACPwb,YAAa,SAAAA,cAAA,OAAMb,8BACnBllH,MAAO,SAAAA,QAAA,OAAMylH,8BA7BFzrD,KA2Cf8mC,GAAU,GAAAv3F,OAAMo8G,WAAN,KAAAp8G,OAAoBq8G,UAApB,KAAAr8G,OAAiCs8G,YAAc,2yBCpKxCG,gCAUjB,SAAAA,UAAajsG,iKAAQksG,CAAAhiH,KAAA+hH,WACjBxoD,sBAAsBv5D,KAAM6vF,wBAC5B7vF,KAAK8V,OAAOA,QAEZ9V,KAAKiiH,YAAoC,WAAtBjiH,KAAKilF,QAAQj+E,KAAoB4/F,UAAYC,SAChE7mG,KAAKkiH,WAAoC,WAAtBliH,KAAKilF,QAAQj+E,MAAsBhH,KAAKilF,QAAQn0D,KAAoB+1E,SAAZD,UAE3E5mG,KAAKmiH,YnBqCN,SAASC,cAAepnE,QAO3B,OALIA,QAA8B,iBAAZA,QACS,MAAdA,OAAO,GAAa0rD,qBAEpBN,kBmB1CMgc,CAAcpiH,KAAKilF,QAAQl0D,OAE9C/wB,KAAKqiH,eAAiBriH,KAAKsiH,iBAAiBtiH,KAAKiiH,YAAajiH,KAAKkiH,WAAYliH,KAAKmiH,aACpFniH,KAAK+wG,OAAS/wG,KAAK+nG,YAAY/nG,KAAKqiH,gBAEpCriH,KAAK0yE,IAAMrd,cAEXr1D,KAAKuiH,aAAazsG,OAAON,4SAgChBgtG,eAAe,IAChBzxF,MAAU/wB,KAAK8V,SAAfib,MACR,OAAIA,OAA4B,iBAAXA,MnBlBtB,SAAS0xF,UAAWznE,QACvB,MAAkB,MAAdA,OAAO,GACAusD,gBAAgBmb,8BAAa1nE,SAEjCssD,aAAaob,8BAAa1nE,SmBelBynE,CAAU1xF,OAEdg3E,2BACH/gG,KAAMw7G,cAAchvF,MACpBzC,wEAaU2wF,WAAYC,UAAWC,YACrC,OAAOH,eAAeC,WAAYC,UAAWC,8DAUnCe,eACV,OAAOvD,mBAAauD,yDASd/P,WACN,OAAO5yG,KAAKo/G,aAAap/G,KAAK4iH,YAAYhQ,4DASjCA,WACT,GAAI5yG,KAAKwV,eAA0BtY,IAAd01G,UAAyB,CAC1C,IAAMp/E,MAAQxzB,KAAKwzB,QACbzC,MAAQyC,MAAMzC,MAAQyC,MAAMzC,QAAU,KACtCyO,MAAQx/B,KAAKqiH,eAAetmH,MAAMg1B,MAA1B/wB,CAAiC4yG,UAAWp/E,MAAOxzB,KAAKwV,SAAUxV,KAAK6/G,gBACrF,GAAIrgF,MAAO,CACP,GAAqB,iBAAVA,MAAoB,CAC3B,IAAMg8B,IAAMh8B,MAAMz8B,UAAUy8B,MAAMn7B,QAAQ,KAAO,EAAGm7B,MAAMxY,YAAY,MAAMjf,MAAM,QAClF,OAAOuzD,SAAQj+D,WAAR,EAAAwlH,6BAAYrnD,MAEvB,OAAAqnD,6BAAWrjF,QAGnB,OAAAqjF,6BAAW7iH,KAAK8V,SAAS/Z,2DAUF,IAAbyZ,OAAatR,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MACvB,GAAIsR,OAAOnU,OAAQ,CACf,IAAMmyB,MAAQxzB,KAAKwzB,QACbzC,MAAQyC,MAAMzC,MAAQyC,MAAMzC,QAAU,KAEtC+xF,UADgB9iH,KAAKqiH,eAAeP,aACxBiB,CAAcvtG,OAAQxV,KAAK8V,SAASqpG,MAAOpuF,OAE7D/wB,KAAKwV,OAAOstG,UAAUttG,QACtBstG,UAAU/xF,OAAS/wB,KAAKwzB,QAAQzC,MAAM+xF,UAAU/xF,OAChD/wB,KAAK6/G,aAAaiD,UAAUjC,YAC5B7gH,KAAKwzB,QAAQhe,OAAOstG,UAAUhC,aAAe9gH,KAAKwV,UAEtD,OAAOxV,mDAWP,OACIgH,KAAMhH,KAAK4F,YAAYoB,OACvBwsB,MAAOxzB,KAAKwzB,QACZhe,OAAQxV,KAAKwV,SACbM,OAAQ9V,KAAK8V,gEAIL0pB,MAAOwjF,mBACnB,IAAMjjH,EAAe,IAAXy/B,MAAM,GACVziC,EAAe,IAAXyiC,MAAM,GACVzkC,EAAe,IAAXykC,MAAM,GACVjiC,EAAIyF,KAAKkK,IAAI+mD,aAAaz0B,MAAM,GAAI,GAAI,GACxCyjF,KAAOljH,EAAIijH,kBAAkB,GAC7BE,KAAOnmH,EAAIimH,kBAAkB,GAC7BG,KAAOpoH,EAAIioH,kBAAkB,GAC7BI,KAAOpgH,KAAKkK,IAAI3P,EAAIylH,kBAAkB,IAAM,EAAG,GAErD,OAASxjF,MAAK,QAAAl6B,OAAU29G,KAAV,KAAA39G,OAAkB49G,KAAlB,MAAA59G,OAA2B69G,KAA3B,MAAA79G,OAAoC89G,KAApC,KAA6CvjF,MAAOojF,KAAO,IAAKC,KAAO,IAAKC,KAAO,IAAKC,uCAQtG,OAAOpjH,KAAK0yE,oDAGHlzC,OACT,OAAOggF,wBAAkBhgF,+DApJzB,OAAO0/E,mDAWP,MpBlDa,yBqBZRA,yBACTnjH,MAAO,GACPg1B,OAAQ,GAAI,6qBCShB,IAqFM8rE,oCAAUwmB,6BAAAC,4BAAA,GAAAh+G,OACRuhG,SADQ,KAAAvhG,OACIshG,YACZpzE,MAAOyyE,OACPzwF,OAxFc,SAAhBorG,cAAiBprG,QACnB,IAAMqrG,WAAarrG,OAEnB,OAASA,OADSA,OAAOxQ,IAAI,SAAC5J,EAAGN,GAAJ,OAAWA,GAAM0a,OAAOnU,OAAS,KAClCw/G,sBAAYC,aAAc,EAAG,KAsFrD/vF,MAzBe,SAAjBwyF,eAAkBvR,YAAax+E,MAAOhe,OAAQqrG,YAChD,IACMU,OAAS/rG,OADDqrG,WAAWx8G,QAAQ2tG,cAGjC,OADW32C,qCAAwBF,kCAAHqoD,gCAA6BhwF,MAAMzC,SAC5D7yB,CAAGqjH,WAiBE8B,6BAAAC,yBAAA,GAAAh+G,OAMRshG,UANQ,KAAAthG,OAMKshG,YACbpzE,MAAOyyE,OACPzwF,OAjFa,SAAfwrG,aAAgBxrG,QAElB,OAASqrG,WADUrrG,OACEA,gBAgFjBub,MAjBY,SAAdywF,YAAexP,YAAax+E,MAAOhe,QAArB,OAChBsqG,yBAAkB9N,YAAax+E,MAAMw+E,aAAcx+E,MAAMhe,OAAO,QAOpD6tG,6BAAAC,yBAAA,GAAAh+G,OAWRshG,UAXQ,KAAAthG,OAWKuhG,WACbrzE,MAAOmzE,UACPnxF,OA1Ec,SAAhByrG,cAAiBzrG,OAAQiuG,WAC3B,IAAIC,gBACJ,GAAID,qBAAqBl+G,MACrBm+G,aAAeD,UAAUr4G,QAAQa,YAGjC,IADA,IAAM4uC,aAAesgB,kCAAkB99D,WAAlB,EAAAmmH,gCAAwBhuG,SACpC1a,EAAI,EAAGA,EAAI2oH,UAAW3oH,IAC3B4oH,aAAa5oH,GAAK+/C,aAAa//C,GAAK2oH,UAAY,IAOxD,OAJIC,aAAa,GAAKluG,OAAO,IACzBkuG,aAAax+G,SAGR27G,WAAY6C,aAAcluG,OADjBkuG,aACoC72E,MAAM,IA6DxD9b,MAjDc,SAAhB4yF,cAAiB3R,YAAax+E,MAAOhe,QACvC,IAAM+rG,QAAUvP,YAAcx8F,OAAO,KAAOA,OAAOA,OAAOnU,OAAS,GAAKmU,OAAO,IACzEqlC,aAAesgB,kCAAkB99D,WAAlB,EAAAmmH,gCAAwBhwF,MAAMzC,UACnD,OAAO+uF,yBAAkB9N,YAAan3D,aAAa0mE,QAAS1mE,aAAarlC,OAAO,QAgCpE8tG,0BChGHzzB,uBACT/5E,UACAN,QACImkD,aAAc,SAAAA,aAAC32C,QAASjnB,OAEpB,OADAinB,QAAQwQ,QAAQhe,OAAOzZ,OAChBA,QAGfg1B,SACAyC,SACAqsF,kTCMiB+D,8BAOjB,SAAAA,SAAa9tG,gKAAQ+tG,CAAA7jH,KAAA4jH,UACjBrqD,sBAAsBv5D,KAAM6vF,uBAE5B7vF,KAAK0yE,IAAMrd,cACXr1D,KAAKilF,QAAUzpF,OAAO0M,UAAWlI,KAAK4F,YAAYuqF,gBAAiBr6E,QAEnE9V,KAAKiiH,YAAoC,WAAtBjiH,KAAKilF,QAAQj+E,KAAoB4/F,UAAYC,SAChE7mG,KAAKkiH,WAAatb,UAElB5mG,KAAK8jH,cAAgB9jH,KAAK89F,YAAY99F,KAAKiiH,YAAajiH,KAAKkiH,YAC7DliH,KAAK+wG,OAAS/wG,KAAK+nG,YAAY/nG,KAAK8jH,eACpC9jH,KAAKwxG,OAASxxG,KAAKilF,QAAQl0D,MAE3B/wB,KAAKuiH,aAAazsG,OAAON,wSAYhBksG,WAAYC,WACrB,OFyEsB,SAAjBF,eAAkBC,WAAYC,WAAb,OACzB9kB,mCAAU,GAAAv3F,OAAIo8G,WAAJ,KAAAp8G,OAAkBq8G,YE1ElBF,CAAeC,WAAYC,2DASzB7iB,UAAU,IAEf/tE,MACA/wB,KAAK8V,SADLib,MAEJ,OAAOg3E,2BACH/gG,KAAM83F,SAAStrE,MACfzC,wDAiCgB,IAAf6hF,UAAe1uG,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,GAAH,EAGbnI,MACAiE,KAAK8V,SADL/Z,MAEEy3B,MAAQxzB,KAAKwzB,QACbhe,OAASxV,KAAKwV,WAAa,EAAG,GAEpC,OAAKge,OAAShe,OAAO,KAAOA,OAAO,GAGxBxV,KAAK8jH,cAAc/yF,MAAM6hF,UAAWp/E,MAAOxzB,KAAKwV,SAAUxV,KAAK6/G,gBAF5D9jH,wDAaJyZ,QACV,GAAIA,OAAQ,CACR,IAEMuuG,YAAaC,EAFFhkH,KAAK8jH,cAActuG,QAERA,OAAQxV,KAAK8V,SAAS2tG,WAElDzjH,KAAKwV,OAAOuuG,WAAWvuG,QACvBxV,KAAK6/G,aAAakE,WAAWlD,YAE7B7gH,KAAKwzB,QAAQhe,OAAOuuG,WAAWjD,aAAe9gH,KAAKwV,UAEvD,OAAOxV,mDAWP,OACIgH,KAAMhH,KAAK4F,YAAYoB,OACvBwsB,MAAOxzB,KAAKwzB,QACZhe,OAAQxV,KAAKwV,SACbub,MAAO/wB,KAAK+wB,QACZjb,OAAQ9V,KAAK8V,0CASjB,OAAO9V,KAAK0yE,4DA/EZ,OAAOwsC,4DAWP,MxBzEY,uByBdPA,oCACT+E,UAAW,KACXloH,MAAO,SACPg1B,OAAQ,SAAU,UAAW,OAAQ,QAAS,SAAU,MAAO,aCHtD8+D,wBACT/5E,UACAN,UACAge,SACAqsF,gBACAoE,gTCWiBC,gCAOjB,SAAAA,UAAapuG,iKAAQquG,CAAAnkH,KAAAkkH,WACjB3qD,sBAAsBv5D,KAAM6vF,wBAE5B7vF,KAAK0yE,IAAMrd,cACXr1D,KAAKilF,QAAUzpF,OAAO0M,UAAWlI,KAAK4F,YAAYuqF,iBAClDnwF,KAAKilF,QAAUzqB,eAAex6D,KAAKilF,QAASnvE,QAE5C9V,KAAK+wG,OAAShJ,2BACV/gG,KAAM,UACN+pB,MAAO/wB,KAAKilF,QAAQl0D,QAExB/wB,KAAKuiH,aAAazsG,OAAON,sSAgCnBzZ,OACN,IAAKiE,KAAKwzB,UAAYxzB,KAAKwV,WAAazZ,OAASA,iBAAiByhB,sBAC9D,OAAOxd,KAAK8V,SAAS/Z,MAGzB,GAAIiE,KAAKokH,iBACL,OAAOpkH,KAAKokH,iBAAiBroH,OAGjC,IAAMsoH,UAAYrkH,KAAKwzB,OAALxzB,CAAajE,OAC/B,MAAkB,WAAdsoH,UACO9nD,uBAAU8nD,WAGdA,8DASgB,IAAb7uG,OAAatR,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAUvB,OATIsR,OAAOnU,SACPrB,KAAK6/G,aAAarqG,QAClBxV,KAAKwV,OAAOA,QACZxV,KAAKwzB,QAAQhe,OAAOA,QAEhBxV,KAAK8V,SAASmuG,YACdjkH,KAAKokH,iBCzFS,SAAjBE,eAAkB9uG,OAAQ+uG,aACnC,IAAMC,mBAIN,OAHAhvG,OAAO9P,QAAQ,SAAC3J,OACZyoH,gBAAgBzoH,OAASwoH,YAAYxoH,SAElCyoH,gBDoF6BF,CAAe9uG,OAAQxV,KAAK8V,SAASmuG,aAG9DjkH,mDAWP,OACIgH,KAAMhH,KAAK4F,YAAYoB,OACvBwsB,MAAOxzB,KAAKwzB,QACZhe,OAAQxV,KAAKwV,SACbub,MAAO/wB,KAAK8V,SAASib,MACrBjb,OAAQ9V,KAAK8V,0CASjB,OAAO9V,KAAK0yE,4DA/EZ,OAAOwsC,uEAWP,M3B3Ca,yB6BXRrvB,wBACT/5E,QACI6jD,aAAc,SAAAA,aAAC32C,QAASlN,QAAV,OAAqB0kD,eAAex3C,QAAQlN,SAAUA,SACpE8jD,OAAQ,SAAAA,OAAC52C,QAASlN,QAAW,IACjBib,MAAkBjb,OAAlBib,MAAOvb,OAAWM,OAAXN,OACfub,OAAS/N,QAAQ+N,MAAMA,OACvBvb,QAAUwN,QAAQxN,OAAOA,UAGjCA,UACAub,m8BCDI4tC,eAAQL,QAARK,IAEF8lD,kBAAoB,SAApBA,kBAAqBzhG,SACvB,IAAM0hG,UAAY1hG,QAAQ2hG,SAAS3hG,QAAQqtF,SAC3CqU,UAAUh/G,QAAQ,SAACd,GACfA,EAAE68C,YAAcz+C,KAAKg+B,GAAK,EAC1Bp8B,EAAE+8C,UAAY3+C,KAAKg+B,GAAK,IAE5Bhe,QAAQ4hG,aAAeF,UAAUz5G,OAAO,SAACuM,OAAQpc,GAC7C,IAAMiB,IAAMjB,EAAEoL,KAGd,OAFCgR,OAAOnb,OAASmb,OAAOnb,SACxBmb,OAAOnb,KAAKiI,KAAKlJ,GACVoc,aAQMqtG,gCAOjB,SAAAA,YAA0B,IAAb/uG,OAAa5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,+JAAA4gH,CAAA9kH,KAAA6kH,WACtB7kH,KAAK0yE,IAAMrd,cACXkE,sBAAsBv5D,KAAM6vF,wBAC5B7vF,KAAKilF,QAAUzqB,kBAAmBx6D,KAAK4F,YAAYuqF,iBACnDnwF,KAAK8V,OAAOA,QACZ9V,KAAKwxG,QAAU,EAAG,KAClBxxG,KAAK2kH,SAAWhmD,iBACP5iE,MAAM,SAAAX,GAAC,MAAkB,iBAANA,EAAiB,EAAIA,IACxCi3B,WAAW,MACpBryB,KAAK4kH,oTAOI9lB,UAAU,IAEf/tE,MACA/wB,KAAK8V,SADLib,MAEJ,OAAOg3E,2BACH/gG,KAAM83F,SAAStrE,MACfzC,kEAIO6hF,WACX,OAAO5yG,KAAK4kH,aAAahS,qDAGnBnJ,OACNzpG,KAAK2kH,SAAW3kH,KAAK2kH,SAAS9iE,SAAS4nD,+CAGrB,QAAArwC,KAAAl1D,UAAA7C,OAAXuxG,UAAW,IAAArtG,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAXu5C,UAAWv5C,MAAAn1D,UAAAm1D,MAClB,GAAIu5C,UAAUvxG,OAAQ,KACF0jH,aAAiB/kH,KAAK8V,SAA9BN,OACFA,OAASo9F,UAAU,GAAGvxG,OAASuxG,UAAU,GAAK7L,qBAGpD,OAFA/mG,KAAKqwG,QAAU4P,yBAAkB8E,aAAcvvG,OAAQxV,MACvDykH,kBAAkBzkH,MACXA,KAEX,OAAOA,KAAKqwG,8CAIZ,GAAInsG,UAAM7C,OAAQ,KACC2jH,YAAgBhlH,KAAK8V,SAA5Bib,MACR/wB,KAAKwxG,OAASyO,yBAAkB+E,YAAD9gH,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GAAwBlE,MACvD,IAAMwV,OAASxV,KAAKwV,SAHNyvG,aAAAC,yBAIiBllH,KAAKwxG,OAJtB,GAIP/vD,WAJOwjE,aAAA,GAIKtjE,SAJLsjE,aAAA,GAWd,OANAjlH,KAAK2kH,SACIljE,WAAYA,WAAa,IAAOz+C,KAAKg+B,IACrC2gB,SAAS3+C,KAAKg+B,GAAK2gB,SAAW,KACnCnsC,QAAUA,OAAOnU,QACjBojH,kBAAkBzkH,MAEfA,KAEX,OAAOA,KAAKwxG,+DA9CZ,0BC5CK9mG,EAAI,IAIJvH,EAAI,IAiDJlE,QAAU,UAyBVkmH,KAAO,OAKPC,QAAU,UAKVC,IAAM,MAKNC,IAAM,MAUNjhB,sBAAQ,QAKRC,sBAAQ,QAKRF,qBAAO,OAyBP6B,uBAAS,SAITN,eAAO,OAIPC,gBAAQ,QAiBR2f,KAAO,OAIPC,OAAS,QAITC,OAAS,QAITC,YAAc,YAQdC,WAAa,WA4BbhhB,uBAAS,SAITE,sBAAQ,QAERC,OAAS,SA4BT8gB,QAAU,UAIVC,UAAY,2SCrPzB,sBAAMC,aAAe,SAAfA,aAAgB9iG,SAClB,IAAM+iG,eAAiB/iG,QAAQlN,SAASiwG,eAClCvwG,OAASwN,QAAQqtF,QACvB,GAAIrtF,QAAQwuF,OAAOnwG,OAAQ,CACvB,IAAMmyB,MAAQxQ,QAAQ+tF,OAChBh1G,MAAQy3B,MAAMgB,OAAOuxF,gBAAkBvyF,MAAMgB,OAAO,GAC1DxR,QAAQqtF,SAAW76F,OAAO,GAAKzZ,MAAOyZ,OAAO,IAC7Cge,MAAMhe,OAAOwN,QAAQqtF,WAQR2V,kCAOjB,SAAAA,aAA0B,IAAblwG,OAAa5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,gKAAA+hH,CAAAjmH,KAAAgmH,YACtBhmH,KAAK0yE,IAAMrd,cACXkE,sBAAsBv5D,KAAM6vF,wBAC5B7vF,KAAKwxG,UACLxxG,KAAKkmH,cAAgB,EACrBlmH,KAAKilF,QAAUzqB,kBAAmBx6D,KAAK4F,YAAYuqF,iBACnDnwF,KAAK8V,OAAOA,QACZ9V,KAAK+wG,OAAS/wG,KAAK+nG,aACfv0E,MAAOyyE,yTAYX,GAAI/hG,UAAO7C,OAAQ,CACf,IAAMyU,OAAS0kD,eAAex6D,KAAK8V,SAAN5R,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IAE7B,OADAlE,KAAKilF,QAAUnvE,OACR9V,KAEX,OAAOA,KAAKilF,wDAGH6Z,UACT,OAAOiJ,2BACH/gG,KAAM83F,SAAStrE,MACfzC,MAAO/wB,KAAK+wB,kDAKhB,GAAI7sB,UAAU7C,OAAQ,KACF0jH,aAAiB/kH,KAAK8V,SAA9BN,OACJA,OAASyqG,yBAAkB8E,aAAD7gH,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GAA6BlE,MAC3DwV,OAASohD,wBAAwBphD,QACjCxV,KAAK+wG,OAAOv7F,OAAOA,QACnBxV,KAAKqwG,QAAU76F,OACfswG,aAAa9lH,MAEjB,OAAOA,KAAKqwG,8DAGAuC,WACZ,YAAkB11G,IAAd01G,UACO5yG,KAAK+wB,QAAQ,GAEjB/wB,KAAK+wG,OAAO6B,iEAGPA,WACZ,YAAkB11G,IAAd01G,UACO5yG,KAAK+wB,QAAQ,GAET/wB,KAAK+wG,OAAO6B,WAAa5yG,KAAKkmH,oDAIhC,QAAA9sD,KAAAl1D,UAAA7C,OAAP0vB,OAAO,IAAAxrB,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAPtoC,OAAOsoC,MAAAn1D,UAAAm1D,MACb,GAAItoC,OAAM1vB,OAAQ,KAAAkxG,cAC0BvyG,KAAK8V,SAArCqT,QADMopF,cACNppF,QAAgB67F,YADVzS,cACGxhF,MACXo1F,eAAiBp1F,OAAM,GAAG/rB,IAAI,SAACJ,EAAG9J,GAAJ,OAAU8J,GAAK9J,GAAKquB,QAAQruB,GAAKquB,QAAQruB,MACvEsrH,SAAWnG,yBAAkB+E,YAAamB,eAAgBnmH,MAChEA,KAAKwxG,OAAS4U,SACdpmH,KAAK+wG,OAAOhgF,MAAMq1F,UAClBN,aAAa9lH,MAEjB,OAAOA,KAAKwxG,+DAGCh+C,KAEb,OADAxzD,KAAKkmH,cAAgB1yD,IACdxzD,6DA/DP,OACImpB,SAAU,EAAG,GACb48F,eAAgB,6MC9C5B,IAAMM,mBAGO,UAHPA,oBAIQ,WCICC,iBDEcC,mCAAAC,qBATd,YAUa1e,MADCye,mCAAAC,kBAExBH,mBAAqBve,QAFGye,mCAAAC,kBAGxBH,oBAAsBve,MCLZ,SAAC/gG,OAAQP,KAAMsP,QAC1B,IAAMyG,QAAUzG,OAAOyG,mBAAmBhX,MAAQuQ,OAAOyG,SAAWzG,OAAOyG,SACrEkqG,eAAiBlqG,QAAQvX,IAAI,SAAA+8D,WAAS,OAAIh7D,OAAO8E,UAAU,SAAAzQ,GAAC,OAAIA,EAAEC,OAAS0mE,cAEjF,QAA2C7kE,IAAvCupH,eAAepsG,KAAK,SAAAjf,GAAC,OAAW,IAAPA,IACzB,MAAM,IAAIuO,MAAJ,iBAAArE,OAA2BiX,QAA3B,yBAGV,IAAMmqG,YAAc3oD,6BAChB35D,KAAMqiH,eACNjgH,YASJ,OANAkgH,YAAYhhH,QAAQ,SAACtK,GACjB,IAAMiB,IAAMjB,EAAEiB,IACVmhB,sBAAkB9N,UAAUrT,OAC5BjB,EAAEiB,IAAMmhB,sBAAkB7N,eAAetT,QAG1CqqH,cCZKC,uMCPhB,IAAMC,cAAYC,iCAAAC,iBCJO,WFOxB,SAASH,kBAAmB5/G,OAAQP,KAAMsP,QACtC,OAAOtP,OCJMqgH,iCAAAC,cCHI,QDKK/7E,iBAFT87E,iCAAAC,cCFI,QCgEP,SAAC//G,OAAQP,KAAMsP,QAC1B,IAAMixG,YAAcjxG,OAAOixG,YACrBC,WAAalxG,OAAO/Z,MACpBwgB,QAAUzG,OAAOyG,QACjBtQ,KAAO6J,OAAO7J,MAAQ,aACtBg7G,eAzDY,SAAhBC,cAAiB1gH,KAAMO,OAAQigH,WAAYD,YAAaxqG,SAC1D,IAAMmqG,YAAc37E,gBAAMhkC,OAAQP,MAC9B+V,QAASwqG,cAEPI,iBAAmBpgH,OAAO8E,UAAU,SAAAzQ,GAAC,OAAIA,EAAEC,OAAS0rH,cACpDK,gBAAkBrgH,OAAO8E,UAAU,SAAAzQ,GAAC,OAAIA,EAAEC,OAAS2rH,aACnDK,eAAiBtgH,OAAO8E,UAAU,SAAAzQ,GAAC,OAAIA,EAAEC,OAASkhB,UAClD+qG,WAAa9gH,KAAKxB,IAAI,SAAA5J,GAAC,OAAIA,EAAEisH,kBAAiBz7G,OAAO,SAACiqF,KAAM9e,IAAKtiD,KAAZ,OAAoBA,IAAIpwB,QAAQwxF,QAAU9e,MAAK9qE,OACpGs7G,WAAaxgH,OAAOkE,OAAO,SAACwxE,IAAK3+D,IAAKhjB,GAExC,OADA2hF,IAAI3hF,GAAKgjB,IAAIziB,KACNohF,SA8BX,OACIj2E,KA7BYkgH,YAAY1hH,IAAI,SAACyvB,KAC7B,IAAM+yF,UACAC,OAAShzF,IAAIjd,OAAOvM,OAAO,SAACwxE,IAAKmX,KAUnC,OATAnX,IAAMmX,IAAI3oF,OAAO,SAAC6S,IAAK/hB,MAAOjB,GAO1B,OANIA,IAAMusH,gBACNvpG,IAAI/hB,OAAS63F,IAAIwzB,iBACjBI,OAAOzrH,OAAS63F,KACT94F,IAAMssH,kBACbtpG,IAAIypG,WAAWzsH,IAAMiB,OAElB+hB,KACR2+D,UAcP,OAXAgrC,OAAOC,OAASF,OAEhBF,WAAW5hH,QAAQ,SAACiiH,WAChB,QAA0BzqH,IAAtBuqH,OAAOE,WAA0B,CACjCF,OAAOE,WAAa,EACpB,IAAMC,OAAS,IAAIriH,MAAMkvB,IAAIjd,OAAO,GAAGnW,QACvCumH,OAAOT,kBAAoB1yF,IAAIp4B,IAC/BurH,OAAOP,gBAAkBM,UACzBF,OAAOC,OAAOC,WAAaC,UAG5BH,SAKPrjH,KAAMkjH,YAeaJ,CAAc1gH,KAAMO,OAAQigH,WAAYD,YAAaxqG,SACtEnY,KAAO6iH,eAAe7iH,KACtBY,OACA6iH,QAAU/xG,OAAO+xG,QACjBC,WAAa/gH,OAAO8E,UAAU,SAAAzQ,GAAC,OAAIA,EAAEC,OAASwsH,UAC9CE,aAAehhH,OAAO8E,UAAU,SAAAzQ,GAAC,OAAIA,EAAEC,OAASkhB,WAClC,IAAhBurG,aACA1jH,KAAKsB,QAAQ,SAACrJ,KACV,IAAMhB,KAAOmL,KAAK6T,KAAK,SAAAjf,GAAC,OAAIA,EAAE2sH,gBAAkB1rH,MAChD2I,IAAI3I,KAAOhB,KAAKysH,cAEpBb,eAAe7iH,KAAK6H,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUqC,IAAIzH,GAAG6kE,cAAcp9D,IAAIrC,OAGhE,IAAMqlH,UAAY1qD,oBACdl5D,KAAM6iH,eAAe7iH,KACrBgqC,OAAQt4B,OAAOs4B,QAAU,YACzB70B,MAAOtN,KACPzF,KAAMygH,eAAezgH,OAOzB,OALAwhH,UAAUtiH,QAAQ,SAACuiH,YACfA,WAAWviH,QAAQ,SAACs2F,SAChBA,QAAQx1F,KAAOw1F,QAAQx1F,KAAKkhH,OAAOO,WAAW5rH,SAG/C2rH,YF5FOlB,eAqBHoB,+EARf,SAASA,iBAAkBlhH,MACvB,IAAMigC,UAAY2/E,aAAa5/G,MAC/B,GAAyB,mBAAdigC,UACP,MAAM,IAAIt9B,MAAM,oCAEpB,OAAOs9B,+xCGXX,IAAMi/D,aAAO4B,2BAAU5B,KACfiiB,MAAqB5rE,kBAAd6rE,kBAAc7rE,sBAEvB8rE,uBAAiB,SAAjBA,eAAkBxuB,UAAW31B,MAAOokD,UAAWC,WACjD,IAAMr0G,KAAOgwD,MAAMhwD,KACbs0G,WAAav0D,aAAa//C,KAAKs0G,WAAWF,WAAYp0G,KAAKu0G,cAAcH,YACzEI,UAAY7uB,UAAUwuB,eAAeG,WAAYD,WAGvD,OADAr0G,KAAKs0G,WAAWF,WAAaI,UAAU7oF,KAChC6oF,WAGEj4B,8BAAwB,SAAxBA,sBAAyBztE,QAAS0gE,aAAcilC,kBAAmB7yG,QAC5E,IAAM8yG,SAAW5lG,QAAQ6lG,uBAAuBnlC,cAE1CmW,UADO72E,QAAQspE,OACE9sD,MACjBniC,MAAQyY,OAAOzY,MACfgzF,gBAAkBv6E,OAAOu6E,gBAC/Bs4B,kBAAkBjjH,QAAQ,SAACwa,OACvB,IAAMooG,UAAYpoG,MAAMlZ,KACxB4hH,SAASljH,QAAQ,SAACif,MACdA,KAAKzE,MAAMooG,UAAY,SAACltH,GAAM,IAAA0tH,QAC4B1tH,EAAE8Y,KAAhD60G,eADkBD,QAClBC,eAAgBP,WADEM,QACFN,WAAYC,cADVK,QACUL,cAEpC,GADAM,eAAe14B,iBAAmB04B,eAAe14B,qBAC7ChzF,QAAU0rH,eAAe14B,iBAAiBi4B,WAI1C,OAFAS,eAAe14B,iBAAiBi4B,WAAapoG,MAAMqoG,UACrCF,uBAAexuB,UAAWz+F,EAAGktH,UAAWpoG,MAAMqoG,WAAW/oF,MAG3E,IAAKniC,OAAS0rH,eAAe14B,iBAAiBi4B,WAG1C,OADAS,eAAe14B,iBAAiBi4B,WAAa,KACtCD,uBAAexuB,UAAWz+F,EAAGktH,UAAWpoG,MAAMqoG,UAAUvjH,IAAI,SAAAhI,GAAC,OAAKA,KAAIwiC,MAZvD,IAAAu3B,MAAAiyD,sBAcLR,WAAWF,WAAaE,WAAWF,WAAaG,cAAcH,WAdzD,GAcnBvoH,EAdmBg3D,MAAA,GAchBh6D,EAdgBg6D,MAAA,GAcbh8D,EAdag8D,MAAA,GAcVx5D,EAdUw5D,MAAA,GAe1B,cAAAzxD,OAAmB,IAAJvF,EAAf,KAAAuF,OAA8B,IAAJvI,EAA1B,MAAAuI,OAA0C,IAAJvK,EAAtC,OAAAuK,OAAmD/H,EAAnD,YAoCH0rH,sBAAgB,SAAhBA,cAAiB38B,MAAS,IAAA48B,MAAAF,uBACXxkB,SAAS95F,EAAG85F,SAASrhG,GAAG6B,IAAI,SAAAhI,GAAC,OAAIsvF,KAAKtvF,KAD3B,GAC5BuvF,MAD4B28B,MAAA,GACrB18B,MADqB08B,MAAA,GAAAC,MAAAH,uBAETz8B,MAAOC,OAAOxnF,IAAI,SAAAhI,GAAC,OAAIA,GAAKA,EAAEw2B,UAFrB,GAGnC,OACI+4D,YACAC,YACA48B,OAN+BD,MAAA,GAO/BE,OAP+BF,MAAA,KAW1BG,2BAAyBC,uBAAAC,yBACjCrB,MAAQ,SAACjlB,SAAUlnC,cAChB,IAAMytD,eAON,OANCjlB,SAASG,OAAQH,SAASI,QAASJ,SAASK,MAAOL,SAASM,OAAQT,MAAOC,MAAOF,KAAMG,MACpF7+F,QAAQ,SAAC1I,GACN,IAAM6K,MAAQqxD,WAAWgqC,SAAUlmG,EAAG,SACtCysH,YAAW,GAAAnkH,OAAItI,EAAJ,UAAgB6K,MAC3B4hH,YAAW,GAAAnkH,OAAItI,EAAJ,eAAqBk8D,WAAW8C,aAAcn0D,MAAO,WAEjE4hH,cATuBF,uBAAAC,sBAWjCpB,kBAAY,SAACllB,SAAUlnC,cACpB,IAAMytD,eASN,OARCjlB,SAAS95F,EAAG85F,SAASrhG,EAAGqhG,SAASC,GAAID,SAASE,GAAIL,MAAOC,MAAOF,KAAMG,MAAM7+F,QAAQ,SAAC1I,GAClF,IAAM6K,MAAQqxD,WAAWgqC,SAAUlmG,EAAG,SACtCysH,YAAW,GAAAnkH,OAAItI,EAAJ,UAAgB6K,MAC3B4hH,YAAW,GAAAnkH,OAAItI,EAAJ,eAAqBk8D,WAAW8C,aAAcn0D,MAAO,SAChE4hH,YAAW,GAAAnkH,OAAItI,EAAJ,cAAoBk8D,WAAW8C,aAAcn0D,MAAO,MAAO,QACtE4hH,YAAW,GAAAnkH,OAAItI,EAAJ,iBAAuBk8D,WAAW8C,aAAcn0D,MAAO,MAAO,aAGtE4hH,cArBuBD,uBAuDzBE,uBAAyB,SAAzBA,uBAA0BtuH,EAAGN,EAAG0L,KAAMwc,SAC/C,IAAMyE,UAAYzE,QAAQlN,SAAS6zG,oBAC/BC,aAAe,GAInB,OAHIniG,qBAAqBpiB,WACrBukH,aAAeniG,UAAUrsB,EAAGN,EAAG0L,KAAMwc,UAElC4mG,cAGLC,iBAAeN,uBAAAO,oBAChB3B,MAAQ,SAACrkB,gBAAiBimB,iBAAkB/tD,cAAiB,IAEtDguD,iBAIAD,iBAJAC,iBACAC,gBAGAF,iBAHAE,gBACAC,kBAEAH,iBAFAG,kBACAC,iBACAJ,iBADAI,iBAEEC,UAAY5uH,OAAO4I,KAAK43D,cAAc36D,OAM5C,OAAOyiG,gBAAgB9+F,IAAI,SAAAwB,MAAI,OAAIA,KAAKxB,IAAI,SAAC5J,GACzC,IAAMivH,UACF53D,OAAQr3D,EAAE4uH,kBACVvgB,WAA2BvsG,IAApB+sH,gBAAgC7uH,EAAE6uH,iBAAmB,EAC5DK,QAASlvH,EAAE8uH,mBACXK,OAAQnvH,EAAE+uH,mBAOd,OALC9lB,MAAOC,MAAOF,KAAMG,MAAM7+F,QAAQ,SAAC8kH,KAChCH,SAASG,KAAOpvH,EAAE2uH,iBAAgB,GAAAzkH,OAAIklH,IAAJ,kBAEtCH,SAAS/lF,OAASlpC,EAClBivH,SAASI,MAAQrvH,EAAEgvH,WACZC,aACPz+G,OAAO,SAAAxQ,GAAC,OAAIA,EAAEiG,WA3BLkoH,uBAAAO,iBA6BhB1B,kBAAY,SAACtkB,gBAAiBimB,iBAAkB/tD,aAAc0uD,eAAkB,IAEzE79B,WAKAk9B,iBALAl9B,WACA89B,YAIAZ,iBAJAY,YACAC,YAGAb,iBAHAa,YACAC,aAEAd,iBAFAc,aACAC,aACAf,iBADAe,aAEEV,UAAY5uH,OAAO4I,KAAK43D,cAAc36D,OAK5C,OAAOyiG,gBAAgB9+F,IAAI,SAACwB,MAExB,O9C9MS,U8C6MMkkH,cAA0BlkH,KAAKgR,OAAShR,MACzCxB,IAAI,SAAC5J,GACf,IACI2vH,MAGIjoH,EACA28C,GACAvkC,EACA6xB,GAPJs9E,Y9ChNC,U8CkNDK,eACAK,MAAQ3vH,EAAEoL,SAKNpL,EAAE,IAAMA,EAAE,IACV0H,EAAIiqC,GAAK3xC,EAAE,GACX8f,EAAIukC,GAAKrkD,EAAE,KAEX0H,EAAIiqC,GAAK3xC,EAAE,GACX8f,EAAIukC,GAAKrkD,EAAE,KAGfivH,SAAWx9B,aAAe2O,yBAAUv8F,SAChCic,IACA6xB,MACAjqC,EAAGioH,MAAMH,aACTnrE,GAAIsrE,MAAMH,eAEV1vG,EAAG6vG,MAAMJ,aACT59E,GAAIg+E,MAAMJ,aACV7nH,IACA28C,QAEKnb,OAASymF,MAClBV,SAASI,MAAQM,MAAMX,YACtB/lB,MAAOC,MAAOF,KAAMG,MAAM7+F,QAAQ,SAAC8kH,KAChCH,SAASG,KAAOO,MAAMhB,iBAAgB,GAAAzkH,OAAIklH,IAAJ,qBAG1CH,UACInvG,EAAG9f,EAAEuvH,aACL7nH,EAAG1H,EAAEwvH,aACL79E,GAAI3xC,EAAEyvH,cACNprE,GAAIrkD,EAAE0vH,gBAEDxmF,OAASlpC,EAClBivH,SAASI,MAAQrvH,EAAEgvH,YAClB/lB,MAAOC,MAAOF,KAAMG,MAAM7+F,QAAQ,SAAC8kH,KAChCH,SAASG,KAAOpvH,EAAE2uH,iBAAgB,GAAAzkH,OAAIklH,IAAJ,mBAG1C,OAAOH,aAEZz+G,OAAO,SAAAxQ,GAAC,OAAIA,EAAEiG,WA5FJyoH,kBAgHRkB,kBAAgBzB,uBAAA0B,qBACxB9C,MAAQ,SAAC3hH,KAAM0kH,WACZ,IAAMp1G,OAASo1G,UAAUp1G,SACjB7J,KAAS6J,OAAT7J,KACJk/G,YAAc3kH,KAAK,GACjB4kH,aAAelyD,WAAWpjD,OAAOotF,SAASonB,QAAS,SAMzD,OALIr+G,OACAk/G,YAAcA,YAAYl/G,KAAK,SAAC1O,EAAGoF,GAAJ,M9CpQlB,Q8CoQ6BsJ,KAAqB1O,EAAEk1D,OAAS9vD,EAAE8vD,OAAS9vD,EAAE8vD,OAASl1D,EAAEk1D,WAKlGA,OAHiBoD,kBAAkBrvD,MAAOg+F,SAASG,OAAQymB,aAC3D5mB,SAASI,QAAUJ,SAASG,SAG5B8E,MAAO0hB,YAAYnmH,IAAI,SAAA5J,GAAC,OAAIA,EAAEquG,QAC9B8gB,OAAQY,YAAYnmH,IAAI,SAAA5J,GAAC,OAAIA,EAAEmvH,YAddhB,uBAAA0B,kBAiBxB7C,kBAAY,SAAC5hH,KAAM0kH,WAChB,IAAMR,cAAgBQ,UAAUR,gBAC1BX,iBAAmBmB,UAAUG,oBAE/BC,cAMAvB,iBANAuB,cACAC,cAKAxB,iBALAwB,cACA7+B,OAIAq9B,iBAJAr9B,OACAE,OAGAm9B,iBAHAn9B,OACA4+B,QAEAzB,iBAFAyB,QACAC,QACA1B,iBADA0B,QAEE30D,WACA40D,KAAOlnB,SAASrhG,EAChBwoH,KAAOnnB,SAAS95F,EAUtB,OATIgiF,SACA51B,QAAQ57C,EAAI26C,kBAAkBrvD,KAAMglH,S9CnT3B,U8CmTsCd,eAA2BiB,KAAMnnB,SAASC,KAAOknB,KAAMA,MAClGL,gBAEJ1+B,SACA91B,QAAQh0D,EAAI+yD,kBAAkBrvD,KAAMilH,S9CvT3B,U8CuTsCf,eAA2BlmB,SAASE,GAAIF,SAASrhG,IAC3FuoH,KAAMA,MAAOH,gBAGfz0D,UAxCcm0D,mBA4ChBW,oBAAsB,SAAtBA,oBAAuB94D,QAAS2N,QAAW,IAAAorD,MACpD/4D,QAAQtsD,MAAKqlH,UAAGvmH,OAAHjI,MAAAwuH,MAAAC,0BAAarrD,SAAQ70D,OAAO,SAAAxQ,GAAC,YAAgB8B,IAAZ9B,EAAEqvH,QAAqBzlH,IAAI,SAAC5J,GACtE,IAAMsoD,MAAQtoD,EAAE0yB,OAChB,OACI5S,EAAGwoC,MAAMxoC,EACTpY,EAAG4gD,MAAM5gD,EACT0D,KAAMpL,OAYL2wH,oBAAc,SAAdA,YAAepjF,OAAQiuC,OAAQ3kD,QACxC,IAAK,IAAM51B,OAAOu6E,YACP/5E,eAAe5B,KAAK27E,OAAQv6E,MAC/BssC,OAAOzoB,MAAM7jB,IAAK41B,OAAS,KAAO2kD,OAAOv6E,OAiCxC2vH,eAAiB,SAAjBA,eAAkBhpG,QAASy9C,QACpC,IAAMwrD,WAAajpG,QAAQkpG,oBAC3B,OAAID,WACOA,WAAWxrD,OAAQz9C,SAAWoD,WAAYpD,QAAQqoF,cAAcjlF,aAEpEq6C,QAyBE0rD,2BAAqB,SAArBA,mBAAsBnpG,QAASopG,mBACxC,IAAMC,UAAYrpG,QAAQqoG,oBACpB/+B,KAAOtpE,QAAQspE,OACfo+B,cAAgB1nG,QAAQ0nG,gBACxB50G,OAASkN,QAAQlN,SACjBw8E,UAAYtvE,QAAQspG,WAE1B,OAAQ,IAAK,KAAKtnH,IAAI,SAACgC,MACnB,IAAIulH,KAAO,EACPC,UAAY,EACZrjG,QAAU,EACVsjG,gBACJ,GAAIJ,UAAS,GAAA/mH,OAAI0B,KAAJ,gBAAyBw0F,yBAAUt8F,UAAW,CACvD,IAAIwtH,iBAEE/f,SADa0f,UAAS,GAAA/mH,OAAI0B,KAAJ,mBAA4B8tD,gCAAiBj2D,SAC3CmkB,QAAQ2pG,YAAYhxB,UAAU30F,MAAQ,EAC9D81C,KAAOwvC,KAAKtlF,MACZ6qC,IAAM/7B,OAAM,MAAAxQ,OAAO0B,KAAK2jC,gBACxBiiF,aAAe92G,OAAO82G,aACtBxoH,KAAOgoH,kBACP54F,MAAQspB,KAAKtpB,QACnBg5F,UAjCgB,SAAfK,aAAgB/vE,KAAM4jB,SAC/B,IACMz+C,MAAQ66B,KAAK81C,eACbp/D,MAAQspB,KAAKtpB,QACbzC,MAAQyC,MAAMzC,QACdvb,OAASge,MAAMhe,SAIrB,OAHCyM,OAAqBjf,KAAKiY,IAAI8V,MAAM,GAAKA,MAAM,IAAM/tB,KAAKiY,IAAIzF,OAAO,GAAKA,OAAO,IAAOkrD,QA2BrEmsD,CAAa/vE,KAAM6vD,UAC/B,IAAMmgB,gBAAkBhwE,KAAKl3C,YAAYoB,SAAWk/F,aAC9C6mB,YAAcjwE,KAAKhnC,SAASqT,QAIlC,GAAsB,UAAlBuhG,cAA2B,CAC3B,IAAMsC,aAAeF,gBAAkB,EAAIC,YAAcP,UAAY,EACrEl6B,UAAUvhE,OAAOi8F,aAAcR,UAAYQ,eAAex3G,OAAOpR,MAAMyvB,aAAa+4F,cACpFL,KAAOj6B,UAAU3+D,YACjB+4F,iBAAmBF,WAAaM,gBAAkB,EAAIC,YAAcP,WACpEC,aAAeroH,KAAKY,IAAI,SAAA3I,KAAG,OAAIi2F,UAAUj2F,MAAQywH,gBAAkB,EAAKN,UAAY,UACjF,QAAYtvH,IAAR20C,IAAmB,CAC1B,IAAIzD,OACJ,GAAI0+E,gBAAiB,CACjB,IAAMh8F,KAAO0C,MAAM1C,OACnBsd,OAAS5a,MAAMrK,UAAY2H,KAC3By7F,KAAO/4F,MAAMG,YAAcya,YAE3Bm+E,KAAOC,UAEXC,aAAeroH,KAAKY,IAAI,kBAAO8nH,iBAAoB1+E,OAAS,GAAOm+E,KAAO,SAI1EG,iBADAH,KAAOC,WADPrjG,QAAU2jG,gBAAkB,EAAIC,YAAcP,WAG9CC,aAAeroH,KAAKY,IAAI,kBAAO8nH,gBAAkB,GAAMP,KAAO,IAGlEC,UAAYE,iBACZvjG,QAAU2jG,gBAAkBC,YAAcjwE,KAAKtpB,QAAQ1C,OAASi8F,YAAcP,UAGlF,OACID,UACAE,0BACAD,oBACArjG,oBA6BC8jG,oCAA8B,SAA9BA,4BAA+BjqG,SAIxC,OApBgC,SAA9BkqG,4BAA+BnD,iBAAkB/mG,QAASmqG,cAC5D,IAAMnxD,aAAeh5C,QAAQxc,OAAO8O,kBAC5Bo3E,OAA2Cq9B,iBAA3Cr9B,OAAQE,OAAmCm9B,iBAAnCn9B,OAAQC,WAA2Bk9B,iBAA3Bl9B,WAAYC,WAAei9B,iBAAfj9B,WAC9BsgC,gBAAkB,SAAU,UAAU/yG,KAAK,SAAArT,MAAI,OACjD+iH,iBAAgB,GAAAzkH,OAAI0B,KAAJ,WAAoBw0F,yBAAUt8F,YAElD,QACKwtF,QACAE,QACAugC,aACDj0D,WAAW8C,aAAamxD,cAAe,MAAO,UAAY3xB,yBAAUv8F,QACpE4tF,aAAe2O,yBAAUt8F,WAAa4tF,aAAe0O,yBAAUt8F,UAC/DkuH,gBAAkBrD,iBAAiBqD,kBAAoBD,cAQvDD,CAHqBlqG,QAAQqoG,oBAGiBroG,QAF7BA,QAAQlN,SAASmxB,UAAU1qB,SAEyB3G,KAAK,SAAA7Z,OAAK,OAAIA,Q9C5enE,W8C+eb,MAKEsxH,kCAA4B,SAA5BA,0BAA6BrqG,SACtC,IAAMsqG,6BAA+BL,oCAA4BjqG,SACjE,GAAIsqG,6BACA,OAAOA,6BAHuC,IAAAC,sBAW9CvqG,QAAQqoG,oBAJR3+B,OAP8C6gC,sBAO9C7gC,OACAE,OAR8C2gC,sBAQ9C3gC,OACAC,WAT8C0gC,sBAS9C1gC,WACAC,WAV8CygC,sBAU9CzgC,WAEEqgC,aAAenqG,QAAQlN,SAASmxB,UAAU1qB,QAC1CixG,gCAAkCt0D,WAAWl2C,QAAQsiF,cAAe,YAAa,QACnFolB,cAAgB1nG,QAAQlN,SAASmxB,UAAUjgC,KAE/C,IAAKwmH,+BAAiCL,cAAgBtgC,aAAeC,WAAY,CAC7E,IAAMlrB,aAAeirB,aAAe2O,yBAAUv8F,QAAUytF,OAASE,OAEjE89B,c9CjfkB,Q8CgfgBzpD,4CAA+Bj+C,QAAQxc,OAAQo7D,cAAxEA,c9CxgBI,QACA,Q8C2gBjB,OAAO8oD,eAME+C,8BAAwB,SAAxBA,sBAAyBjnH,KAAM1L,EAAGmhE,QAASivD,WACpD,IAAMwC,qBACAl2G,OAAShR,KAAKgR,OACd0rF,SAAWgoB,UAAUp1G,SAASotF,SACpC,IAAK,IAAM7mG,OAAOmb,OAAQ,CACtB,IAAMzb,MAAQm9D,WAAWgqC,SAAS7mG,KAAM,SACpCN,iBAAiBsJ,SACjBqoH,kBAAkBrxH,KAAON,MAAMyb,OAAQ1c,EAAGmhE,QAASivD,WAEnDwC,kBAAkBrxH,KAAOmb,OAAOnb,KAGxC,OAAOqxH,mBAGEC,gBAAkB,SAAlBA,gBAAmBC,SAAU/zB,WAAX,OAC3B4uB,cAAejtH,OAAO4I,KAAKwpH,UAAU3iH,OAAO,SAACwxE,IAAKpgF,KAI9C,OAHIuxH,SAASvxH,OACTogF,IAAIpgF,KAAOw9F,UAAUg0B,YAAYD,SAASvxH,OAEvCogF,SAEX+rC,cACAO,oBAGE+E,cAAgB,SAAhBA,cAAiBr7D,OAAQs7D,KAAMtkB,MAAOr7D,QAAtB,OAAiCqkB,OAASzvD,KAAK+qH,MAAMtkB,OAASr7D,QAE9E4/E,iBAAmB,SAAnBA,iBAAoBv7D,OAAQg3C,MAAO3I,QAAS8H,SAAzB,OACrB1tF,EAAG4yG,cAAcr7D,OAAQ,MAAOg3C,MAAO3I,SACvCh+F,EAAGgrH,cAAcr7D,OAAQ,MAAOg3C,MAAOb,WAG9BqlB,uBAAyB,SAAzBA,uBAA0BxtD,OAAQg0B,aAG3C,IAH8E,IAAtBy5B,UAAsBhqH,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,IAAAA,UAAA,GACxE48F,QAAUrM,YAAYxyE,MAAQ,EAC9B2mF,QAAUnU,YAAYvyE,OAAS,EAC5BpnB,EAAI,EAAG4oB,IAAM+8C,OAAOp/D,OAAQvG,EAAI4oB,IAAK5oB,IAAK,CAC/C,IAAM4oD,MAAQ+c,OAAO3lE,GAD0BqzH,cAEJzqE,MAAM51B,OAAzC27E,MAFuC0kB,cAEvC1kB,MAAOh3C,OAFgC07D,cAEhC17D,OAAQ63D,QAFwB6D,cAExB7D,QAASC,OAFe4D,cAEf5D,OAEhC,GADA7mE,MAAM51B,OAASkgG,iBAAiBv7D,OAAQg3C,MAAO3I,QAAS8H,SACpDslB,UAAW,CACX,IAAMpgG,OAAS41B,MAAM51B,OAASkgG,iBAAiB1D,QAASC,OAAQzpB,QAAS8H,SAD9DwlB,kBAEcJ,iBAAiBv7D,OAAQg3C,MAAO3I,QAAS8H,SAAvD77D,GAFAqhF,kBAEHlzG,EAAUukC,GAFP2uE,kBAEItrH,EACfgrB,OAAOif,GAAKA,GACZjf,OAAO2xB,GAAKA,IAGpB,OAAOghB,QAGE4tD,SAAW,SAAXA,SAAY7nH,KAAM8lF,MAG3B,IAHoC,IAE9BgiC,SADyBhiC,KAAvBpxE,EAAuBoxE,KAAbxpF,GAEThI,EAAI,EAAG4oB,IAAM4qG,QAAQjtH,OAAQvG,EAAI4oB,IAAK5oB,IAAK,CAChD,IAAMgiD,KAAOwxE,QAAQxzH,GACrB,GAAIgiD,KAAKl3C,YAAYoB,SAAWk/F,aAAM,wBAClC,IAAM7pG,IAAMvB,EAAI,IAAM,IAEhBohG,QADMp/C,KAAKtnC,SACGvK,OAAO,SAACwxE,IAAK73E,EAAGy3D,KAEhC,OADAogB,IAAI73E,GAAKy3D,IACFogB,SAGX,OADAj2E,KAAKyF,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUu5F,QAAQ3+F,EAAElB,MAAQ6/F,QAAQv5F,EAAEtG,QAChD,QARkC,GAQlC,MAGR,OAAOmK,MCnlBJ,IAAM+nH,8LAAeC,I3CFR,Q2CIZzyH,MAAO,sqBCAR,IAAMiiF,cAELxkB,OAAO,GAAAl0D,OAAImpH,0BAAiB9yE,sBAArB,KAAAr2C,O5CNK,S4COZ0B,KAAM,4BACNu/D,SAAU,SAAAA,SAACvjD,QAAD+yC,MAAuB,IAAVvvD,KAAUkoH,2BAAA34D,KAAA,MACvBjgD,OAASkN,QAAQlN,SACvB,GAAItP,MAAQsP,OAAQ,CACZkN,QAAQ2rG,cACR3rG,QAAQ4rG,YAAYtqH,KAAKkC,MAEzBwc,QAAQ4rG,aAAepoH,MAE3B,IAAMqoH,cAAgB/4G,OAAOotF,SAC7B,GAAI2rB,cAAe,CACf,IAAM7yD,aAAex1D,KAAK8O,kBACpB+1G,kBAAoB/B,0BAA0BtmG,QAAQqiF,SAASwpB,cAAe7yD,cAMpF,GALAh5C,QAAQqoG,kBAAkBA,mBAC1BroG,QAAQ8rG,uBACR9rG,QAAQ+rG,iBAAmB/rG,QAAQgsG,mBAAmBxoH,KAAMsP,OACxDkN,QAAQ0nG,gBAAiBW,mBAC7BroG,QAAQisG,gBAAkBjsG,QAAQksG,kBAAkBlsG,QAAQ+rG,iBAAkB/yD,eAC/C,IAA3BlmD,OAAOwtF,gBAA2B,CAClC,IAAM9tF,OAASwN,QAAQmsG,wBAAwBnsG,QAAQisG,gBACnDjsG,QAAQqoG,oBAAqBroG,QAAQxc,OAAO8O,mBAChD0N,QAAQxN,OAAOA,YAK/B2tD,UAAW,SAAAA,UAAAngD,SAAO,OAAIA,QAAQoiF,UAAUjiC,y9FCJhD,IAAMisD,SAAWX,0BAAiB7yE,uBAAwB6yE,0BAAiB9yE,uBACrE0zE,QAAUZ,0BAAiB5yE,uBAqBZyzE,4CAqBjB,SAAAA,UAAa9oH,KAAM8lF,KAAMx2E,QAA2B,IAAA8lE,MAAnBlwD,aAAmBxnB,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,qKAAAqrH,CAAAvvH,KAAAsvH,WAChD1zC,oLAAA4zC,CAAAxvH,KAAAyvH,0BAAAH,WAAAr0H,KAAA+E,OAEAu5D,sBAAsBm2D,iCAAA9zC,OAAMpiB,aAC5BoiB,MAAK0Q,KAAKA,MACV1Q,MAAK+zC,MAAM/zC,MAAKh2E,YAAYy6E,aAAehrB,eAC3CumB,MAAKlwD,aAAaA,cAClBkwD,MAAKg0C,WACLh0C,MAAKgzC,eACLhzC,MAAKlJ,IAAMrd,cACXumB,MAAKi0C,gBACLj0C,MAAKm2B,0BACLn2B,MAAKk0C,iBACLl0C,MAAK0pB,cAAgB,KAb2B1pB,iYArBjBspB,6SA8E/B,GAAIhhG,UAAO7C,OAAQ,CACf,IAAMoM,MAAQzN,KAAK+vH,OAAL7rH,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACNi/D,UAAcnjE,KAAKolG,UAAnBjiC,UAOR,OANA11D,MAAM8uE,gBAAgBpZ,UAAWmsD,UAAUjvC,aAAcrgF,MAEzDk+E,iBAAWl+E,KAAMuuH,aAAc9gH,OAC3B6sE,aAAcnX,UACdA,UAAS,GAAA79D,OAAKmpH,0BAAiB9yE,yBAE5B37C,KAEX,OAAOA,KAAK+vH,+CAIZ,IAAM3wG,KAAI,GAAA9Z,OAAMmpH,0BAAiB7yE,uBAAvB,KAAAt2C,O7C7II,U6C8IRmI,MAAQzN,KAAKyN,QACnB,GAAIvJ,UAAI7C,OAAQ,KAAA2uH,eAC2BhwH,KAAKolG,UAApC6qB,gBADID,eACJC,gBAAiB9sD,UADb6sD,eACa7sD,UACnB3tD,OAASy+C,aAAaxmD,MAAM9R,IAAIyjB,KAAM6wG,qBAG5C,OAFAz6G,OAAO2tD,WAAPj/D,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACAlE,KAAKyN,QAAQ6uE,OAAOl9D,KAAM5J,OAAQy6G,iBAC3BjwH,KAEX,OAAOA,KAAKyN,QAAQ9R,IAAIyjB,KAAMpf,KAAKolG,UAAUjiC,yEAiE7C,OAAIj/D,UAAU7C,QACVrB,KAAKkwH,mBAALhsH,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKkwH,iFAIZ,OAAIhsH,UAAkB7C,QAClBrB,KAAKmwH,mBAALjsH,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKmwH,yDAmBZ,OAAIjsH,UAAO7C,QACPrB,KAAKowH,OAALlsH,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKowH,QAAUpwH,KAAK4F,YAAYy6E,iEAIvC,OAAIn8E,UAAO7C,QACPrB,KAAKqrG,cAALnnG,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKqrG,oEAKZ,OADArrG,KAAK2uH,eAAgB,EACd3uH,yDAKP,OADAA,KAAK2uH,eAAgB,EACd3uH,KAAKwG,KAAKxG,KAAK4uH,YAAY,kDAWlC,OAAO5uH,KAAK8V,yCAWZ,OAAO9V,KAAK0yE,kEAaIhX,UAAW5lD,OAAQ40G,cAAeW,mBAClD,OH9KqB,SAAhBgF,cAAiB30D,UAAW5lD,OAAQ40G,cAAeX,kBAC5D,IAAMvjH,KAAOk1D,UAAUnmD,SAAUiE,SAAS,IACpCzS,OAASP,KAAKO,OACdkgC,UAAYnxB,OAAOmxB,UAErBylD,OAIAq9B,iBAJAr9B,OACAE,OAGAm9B,iBAHAn9B,OACAC,WAEAk9B,iBAFAl9B,WACAC,WACAi9B,iBADAj9B,WAEEi6B,YAAcl6B,aAAe2O,yBAAUv8F,QAAU2tF,OAASF,OAEhE,OAAOw7B,kBAAiBwC,cAAjBxC,CAAgCnhH,OAAQP,KAAKA,MAChD+V,QAAS0qB,UAAU1qB,QACnBwqG,wBACA96G,KAAMg7B,UAAUh7B,MAAQ,OACxBmiC,OAAQnH,UAAUmH,OAClBy5E,QAAS5gF,UAAU4gF,QACnB9rH,MAAO+wF,aAAe0O,yBAAUv8F,QAAU2tF,OAASF,QACpDlmF,KAAKgF,MG2JG6kH,CAAc30D,UAAW5lD,OAAQ40G,cAAeW,2FAYlC7kH,MACrB,IAAIswD,WAMJ,OALgB92D,KAAKwG,OAAOy3F,YAGxBnnC,QAAUk0D,iBAAiBhrH,KAAKqlG,SAAS7+F,KAAMxG,OAE5C82D,4DAaIw5D,cAAc,IAAAC,eACcvwH,KAAKolG,UAApC6qB,gBADiBM,eACjBN,gBAAiB9sD,UADAotD,eACAptD,UACnBrM,QAAUoC,WAAWl5D,KAAKyN,QAC3B9R,IADsB,GAAA2J,OACfmpH,0BAAiB7yE,uBADF,KAAAt2C,O7ClVb,U6CmVyD2qH,iBAAkB9sD,WACzF,YAAwBjmE,IAAjBozH,aAA6Bx5D,QAAQw5D,kBAAsBx5D,oEASnDgtC,iBACf,OHrFyB,SAApBorB,kBAAqBprB,gBAAiB9gF,SAC/C,IAAM0nG,cAAgB1nG,QAAQ0nG,gBACxB8F,mB9C3Qc,a8C2QO9F,eAA8B5mB,iBAAmBA,gBACtEimB,iBAAmB/mG,QAAQqoG,oBAC3BrvD,aAAeh5C,QAAQxc,OAAO8O,kBACpC,OAAOu0G,gBAAgB7mG,QAAQqiF,SAASmrB,mBAAoBzG,iBAAkB/tD,aAAc0uD,eGgFjFwE,CAAkBprB,gBAAiB9jG,gEAwB1C,OAAO,yEAGYqwF,gBAAiB3M,aAAcrmF,MAAOu5E,QACzD,IAEI+xC,mBAFsB3oH,KAAK8V,SAAS24E,iBAEE4B,kBAC1Cs4B,kBAAoB/xC,QAAU+xC,oBAE1Bl4B,8BAAsBzwF,KAAM0jF,aAAcilC,mBACtCtrH,YACAgzF,wFAOR,OADArwF,KAAKywH,aAAc,EACZzwH,yDAKP,OADAA,KAAKywH,aAAc,EACZzwH,yEAIPA,KAAK0wH,eHiGoB,SAApBC,kBAAoB3tG,SAAO,OAAIiqG,oCAA4BjqG,UAAYA,QAAQlN,SAASmxB,UAAUjgC,KGjGjF2pH,CAAkB3wH,4DAIxC,OAAOA,KAAK0wH,uDAQZ,OAAO1wH,iDAUP,MAAO,4CAQD,IAAA4wH,eACiC5wH,KAAKolG,UAApCjiC,UADFytD,eACEztD,UAAW8sD,gBADbW,eACaX,gBACbxiH,MAAQzN,KAAKyN,QACnBA,MAAMswE,mBAAmB5a,UAAWmsD,UAAUjvC,cAC9C,IACMwwC,QADepjH,MAAM9R,IAAN,GAAA2J,OAAampH,0BAAiB7yE,uBAA9B,YACQq0E,iBAG7B,OAFAY,gBAAmBA,QAAQ1tD,WAC3BqS,6BAAcx1E,KAAK4pF,SAAS33D,SACrBjyB,mDAUC3D,IAAKmK,MACb,GAAY,OAARnK,IACA,OAAO2D,KAEX,IAAM8wH,SAAW9wH,KAAK+wH,UAGtB,OAFCD,SAASz0H,OAASy0H,SAASz0H,SAC5By0H,SAASz0H,KAAKiI,KAAKkC,MACZxG,mDAWP,OAAIkE,UAAU7C,QACVrB,KAAKgxH,WAAL9sH,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKgxH,iFAWQxqH,MACpB,IAAMO,OAAS/G,KAAKwG,OAAO+U,YACrBygD,aAAeh8D,KAAKwG,OAAO8O,kBAC3BwmD,oBAHoBm1D,sBASlBjxH,KAAKqrH,oBAJLx+B,WALkBokC,sBAKlBpkC,WACAC,WANkBmkC,sBAMlBnkC,WACAJ,OAPkBukC,sBAOlBvkC,OACAE,OARkBqkC,sBAQlBrkC,OARkBs8B,MAAAgI,0BAWIrkC,WAAYC,YAAY9nF,IAAI,SAAAgC,MAAI,OAAIA,OAASw0F,yBAAUv8F,UAX3D,GAWnBkyH,SAXmBjI,MAAA,GAWTkI,SAXSlI,MAAA,GAoB1B,GARAniH,OAAOrB,QAAQ,SAACtK,EAAGN,GACf,IAAMO,KAAOD,EAAEC,KACX2gE,aAAa3gE,MAAM4d,IAAIjS,OAASw0F,yBAAUt8F,YAC1C48D,YAAY,GAAGx3D,KAAKjJ,MACpBygE,YAAY,GAAGx3D,KAAKkC,KAAK1L,OAI7Bq2H,UAAYC,SAAU,KAAAC,cAAAC,eAChBC,cAAgBv1D,aAAa0wB,QAAQhrF,MACrC8vH,cAAgBx1D,aAAa4wB,QAAQlrF,OAC3C2vH,cAAAv1D,YAAY,IAAGx3D,KAAfjH,MAAAg0H,eAAwB3kC,OAAQE,UAChC0kC,eAAAx1D,YAAY,IAAGx3D,KAAfjH,MAAAi0H,gBAAwB9qH,KAAK+qH,eAAgB/qH,KAAKgrH,iBAEtD,OAAO11D,8DAIP,OAAO,oDAIP,OACI5gD,EAAG,EACHpY,EAAG,2DAKP,OACIoY,EAAG,EACHpY,EAAG,6EAyBeg5D,aAA0B,IAAA/F,KAM5CwxD,WACA/vG,OAP+B1B,OAAa5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAC1CutH,YAAc37G,OAAO27G,YACrB/uG,QAAU5M,OAAO4M,QACvB,IAAK1iB,KAAKwG,OACN,SAIJ,GAAIs1D,uBAAuB7G,oBAAW,CAClC,IAAM+mC,QAAUlgC,YAAYvmD,UAC5BgyG,WAAavrB,QAAQj1F,OAAO/B,IAAI,SAAA5J,GAAC,OAAIA,EAAEC,OACvCmc,OAASwkF,QAAQx1F,UAEjB+gH,WAAazrD,YAAY,GACzBtkD,OAASskD,YAAY1wD,MAAM,EAAG0wD,YAAYz6D,QAG9C,IAAMo/D,OAASzgE,KAAK4vH,QACd5zD,aAAeh8D,KAAKwG,OAAO8O,kBAE3Bo8G,gBAAiB37D,SAAGzwD,OAAHjI,MAAA04D,KAAA47D,6BAAalxD,SAAQ70D,OAAO,SAAC83C,OAAU,IAClDpf,OAAkBof,MAAlBpf,OAAQmmF,MAAU/mE,MAAV+mE,MAEhB,OAAOlD,WAAW9xG,MAAM,SAAC5N,MAAOw0D,KAC5B,OAAIx0D,SAASm0D,cAAgBA,aAAan0D,OAAOoR,IAAIjS,OAASw0F,yBAAUt8F,WACY,IAAzEsY,OAAO3L,UAAU,SAAAzQ,GAAC,OAAIA,EAAEihE,OAAS/3B,OAAO03B,aAAan0D,OAAOnG,SAC5DmG,QAAUo0C,gBAAeC,SACoB,IAA7C1kC,OAAO3L,UAAU,SAAAzQ,GAAC,OAAIA,EAAEihE,OAASouD,YAIpD,OAAOgH,YAAcC,eAAiBA,eAAe1sH,IAAI,SAAC5J,GACtD,IAAM0iB,IAAM3I,MAAM/Z,GAClB,GAAIsnB,QAAS,CACT,IAAMoL,OAAShQ,IAAIgQ,QAAUhQ,IAC7B,QAAiB5gB,IAAb4gB,IAAIgD,KAAoB,CACxB,IAAM8wG,QAA0C,EAAhC5uH,KAAKoK,KAAK0Q,IAAIgD,KAAO9d,KAAKg+B,IAC1ClT,OAAO7L,MAAQ2vG,QACf9jG,OAAO5L,OAAS0vG,QAChB9jG,OAAO5S,GAAK02G,QAAU,EACtB9jG,OAAOhrB,GAAK8uH,QAAU,YAED10H,IAAjB4wB,OAAO7L,QACP6L,OAAO7L,MAAQ,QAEG/kB,IAAlB4wB,OAAO5L,SACP4L,OAAO5L,OAAS,GAK5B,OAAOpE,IAAIgQ,QAAUhQ,MACtB7R,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAEuF,EAAIH,EAAEG,gGAGKg5D,aAAa,IAUxC8+B,aACA4vB,IAXwCqH,qBACe/1D,YAAYvmD,UAAzDu8G,eAD8BD,qBACpCrrH,KAA8BurH,iBADMF,qBACd9qH,OACxBkgH,eAAiBjnH,KAAKivH,gBACtBjzD,aAAeh8D,KAAKwG,OAAO8O,kBAHW08G,uBASxChyH,KAAKqrH,oBAJLz+B,OALwColC,uBAKxCplC,OACAF,OANwCslC,uBAMxCtlC,OACAI,WAPwCklC,uBAOxCllC,WAPwCklC,uBAQxCnlC,aAIe2O,yBAAUv8F,SACzB27F,aAAe5+B,aAAa0wB,QAAQhrF,MACpC8oH,IAAM,KACC19B,aAAe0O,yBAAUv8F,UAChC27F,aAAe5+B,aAAa4wB,QAAQlrF,MACpC8oH,IAAM,KAGV,IAAM1mB,mBAsBN,OArBAmjB,eAAevhH,QAAQ,SAACu2D,SACpBA,QAAQv2D,QAAQ,SAACs2F,SACb,IAAMi2B,SAAWj2B,QAAQ13D,OAGzB,GAFcytF,iBAAiBt8G,MAAM,SAACqI,IAAKhjB,GAAN,OACmD,IAApFg3H,eAAejmH,UAAU,SAAAzQ,GAAC,OAAI62H,SAASj2D,aAAal+C,IAAIziB,MAAMqG,SAAWtG,EAAEN,OACpE,CACP,IAAMo3H,eAAiBl2B,QAAQwuB,KACzB52B,IAAMoI,QAAQ13D,OACdymF,SACN,IAAK,IAAM1uH,OAAO2/D,aAAc,CAC5B,IAAMt6D,MAAQs6D,aAAa3/D,KAAKqF,MAChCqpH,MAAM1uH,KAAOu3F,IAAIlyF,OACbA,QAAUk5F,eACVmwB,MAAM1uH,KAAO61H,gBAGrBpuB,gBAAgBx/F,KAAKymH,aAKzBjnB,gBAAiB9jG,KAAKwG,OAAO+U,mFAajBzQ,KAGpB,IAFA,IAAMqnH,aAAenyH,KAAK8vH,cACpBsC,SACGt3H,EAAI,EAAG4oB,IAAM5Y,IAAIzJ,OAAQvG,EAAI4oB,IAAK5oB,IAAK,CAC5C,IAAM6pB,KAAOwtG,aAAarnH,IAAIhQ,IAC1B6pB,MACAytG,MAAM9tH,KAAKqgB,MAGnB,OAAOytG,4DAUP,OAAOl9C,QAAQy+B,IAAI3zG,KAAK+xG,sGAIxB,IAAI5yB,UACEa,QAAU,IAAI9K,QAAQ,SAACr7D,SACzBslE,UAAYtlE,UAIhB,OAFA7Z,KAAK+xG,uBAAuBztG,KAAK07E,SAE1B,WACHb,qEAKJ,GAAIn/E,KAAKqlG,UAAY9oD,kBACjB,OAAO,GAAAj3C,OAAImpH,0BAAiB5yE,uBAArB,mBAFG,IAAAw2E,eAI6CryH,KAAKolG,UAA1CktB,SAJRD,eAINE,aAAsCC,SAJhCH,eAIkBI,aAChC,OAAO,GAAAntH,OAAImpH,0BAAiB5yE,uBAArB,cAAAv2C,OAAwDgtH,SAAxD,QAAAhtH,OACAmpH,0BAAiB5yE,uBADjB,cAAAv2C,OACoDktH,SADpD,oDArmBP,QAEQh9G,OAAQ,MAEZha,OAAO4I,KAAKmqH,cAActjH,OAAO,SAACwxE,IAAK73E,GAEnC,OADA63E,IAAI73E,GAAK2pH,aAAa3pH,GAAG7I,MAClB0gF,8DAMf,OACIhvE,SAAKnI,OAAAqsH,6BAAM3zC,eACPh3E,KAAM,yBACNwyD,OAAK,GAAAl0D,OAAM8pH,QAAQ,GAAd,KAAA9pH,O7CxGD,S6CwGCA,OAAAqsH,8BACG,IAAK,IAAK,UAAU3sH,IAAI,SAAAgC,MAAI,SAAA1B,OAAO+pH,QAAP,YAAA/pH,OAAyB0B,UAC7Du/D,SAAU,SAAAA,SAACvjD,UHyWA,SAAd0vG,YAAe1vG,SACxB,IAAM4mE,MAAQ5mE,QAAQ4mE,QAClBA,QACA5mE,QAAQu0E,OAAO3N,OACf5mE,QAAQ0I,eAAeinG,UAAUr2C,OAAOngC,aAAYE,eAAe,EAAMr5B,QAAQoiF,UAAU6qB,kBG5W/EyC,CAAY1vG,UAEhBs3D,aAAc,SAAAA,aAACt3D,SAAY,IAAA+zC,MAAA67D,iBAC2B5vG,QAAQoiF,UAAlDmtB,aADeK,iBACfL,aAAcE,aADCG,iBACDH,aAActvD,UADbyvD,iBACazvD,UACpC,OAAA0vD,0BAAA97D,SAAA,GAAAzxD,OACQ8pH,QAAQ,GADhB,KAAA9pH,O7C/GA,Q6CgHqC69D,WADrC0vD,0BAAA97D,MAAA,GAAAzxD,OAEQ+pH,QAFR,gBAAA/pH,OAEgCmtH,aAFhC,MAAAI,0BAAA97D,MAAA,GAAAzxD,OAGQ+pH,QAHR,gBAAA/pH,OAGgCitH,aAHhC,MAAAM,0BAAA97D,MAAA,GAAAzxD,OAIQ+pH,QAJR,qBAAA/pH,OAIqCitH,aAJrC,KAAAjtH,OAIqDmtH,eAJrD17D,UAQR47D,sFAMJ,OADmBrD,UAAUwD,WACX9tH,IAAI,SAACqtE,MAAOv3E,GAAR,OAAcU,OAAO4I,KAAKiuE,OAAOrtE,IAAI,SAAAoa,MAAI,SAAA9Z,OAAO8pH,QAAQt0H,GAAf,KAAAwK,OAAqB8Z,kDAmC9D,QAAAg6C,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MACtB,OAAA05D,qBAAW/yH,KAAQ4W,8DAcnB,OACIqwB,WACIjgC,KAAM,iEAkBIo3E,KAAM40C,UACxB,OAAOx4D,eAAe4jB,KAAM40C,0DAkB5B,MAAO,qEAoHP,OAAO,mBClUT90E,cAAOogB,QAAQpgB,KAEfxmC,kBAAW,SAAXA,SAAYtc,GAAM,IACZ0yB,OAAW1yB,EAAX0yB,OACR,OAAoB,OAAbA,OAAOhrB,GAA2B,OAAbgrB,OAAO5S,GAQ1B+3G,kBAAW,SAAXA,SAAYjwG,SACrB,IAAI0uG,eACInhC,MAAyFvtE,QAAzFutE,MAAOvxE,UAAkFgE,QAAlFhE,UAAWyhD,OAAuEz9C,QAAvEy9C,OAAQx4B,YAA+DjlB,QAA/DilB,YAAag9D,gBAAkDjiF,QAAlDiiF,gBAAiBx9E,UAAiCzE,QAAjCyE,UAAWvH,MAAsB8C,QAAtB9C,MAAOm+B,WAAer7B,QAAfq7B,WAC5EurC,MAAQpU,6BAAcx2D,WAAWi/B,KAAK,QAASx2B,WAC/CyrG,oBAAsBj1D,kBAAkBh2B,aACxCkrF,SAAWj1E,gBACJ8F,MAAMkvE,qBACNh4G,EAAE,SAAA9f,GAAC,OAAIA,EAAE0yB,OAAO5S,IAChBpY,EAAE,SAAA1H,GAAC,OAAIA,EAAE0yB,OAAOhrB,IAChBihD,QAAQrsC,mBAErBg6G,eAAiBjxD,OACbwkC,kBACAysB,eAAiBjxD,OAAO70D,OAAO8L,oBAGnCq0G,oBAAYniC,MAAO1pE,OACnB,IAAIu1D,QAAUC,YAAYkU,MAAO,OAAQnpB,OAAOp/D,QAAUo/D,OAAO,GAAGh5C,eASpE,OARAguD,QAAQx3B,KAAK,QAAS,SAAA7iD,GAAC,OAAIA,IACtBijD,WAAW0+B,WACZtH,QAAUA,QAAQp3B,aACjBi0B,SAASj0B,WAAWi0B,UACpBnoE,GAAG,MAAOomF,MAAMwZ,8BAErBt0B,QAAQx3B,KAAK,IAAKk1E,SAASzB,iBACVxxG,MAAM,eAAgB,GAChCu1D,SC5CE0a,mCACTa,YnDHuB,OmDIvBD,aAAc,aACdtpE,UAAW,GACXwgB,YAAa,SACbhB,WACIjgC,KAAM,SAEVynF,aACIiT,YACI16F,KAAM,SACNuhH,WAAY,EAAG,GAAI,GAAI,KAE3BhnB,OACIv6F,KAAM,SACNuhH,WAAY,EAAG,EAAG,GAAK,KAE3B9mB,QACIz6F,KAAM,SACNuhH,WAAY,EAAG,EAAG,GAAK,MAG/BxjB,sBAAuB,GACvB7B,UACI1jE,SACAtkB,KACApY,KACAkiG,eACIjpG,MAAO,IAGfsiD,YACI8oC,OAAQ,QACR7U,SAAU,KAEd2yB,iBAAiB,srCCHAmuB,oCAOjB,SAAAA,YAAsB,IAAA91B,iBAAA1hB,yJAAAy3C,CAAArzH,KAAAozH,WAAA,QAAAh6D,KAAAl1D,UAAA7C,OAANkmE,KAAM,IAAAhiE,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAANkO,KAAMlO,MAAAn1D,UAAAm1D,MAAA,OAClBuiB,MAAA03C,+BAAAtzH,MAAAs9F,iBAAAi2B,oBAAAH,YAAAn4H,KAAAoC,MAAAigG,kBAAAt9F,MAAAsF,OAASiiE,SACJvO,SAAW,IAAIF,qBAFF8iB,qXAPa0zC,6RAiB/B,MAAO,qDA4BP,OAAO2D,0EAeMzsH,MAAM,IAAAw1E,OAAAh8E,KACfygE,UACE6rB,KAAOtsF,KAAKssF,OACZC,MAAQD,KAAKpxE,EACbsxE,MAAQF,KAAKxpF,EACb+2F,UAAYvN,KAAK9sD,MALJyxF,sBAMgBjxH,KAAKqrH,oBAAhCx+B,WANWokC,sBAMXpkC,WAAYC,WANDmkC,sBAMCnkC,WACd0mC,OAAS3mC,aAAe2O,yBAAUt8F,UAClCu0H,OAAS3mC,aAAe0O,yBAAUt8F,UAClC7C,IAAMm3H,OAAShvB,SAAS95F,EAAK+oH,OAASjvB,SAASrhG,EAAI,KA0CzD,OAzCAkrH,SAAS7nH,KAAM8lF,MACf7rB,OAASj6D,KAAKxB,IAAI,SAAC5J,EAAGN,GAClB,IAAM44H,IAAMnnC,MAAMoG,cAAcv3F,EAAE8f,GAAKqxE,MAAMqG,eAAiB,EACxD+gC,IAAMnnC,MAAMmG,cAAcv3F,EAAE0H,GAAK0pF,MAAMoG,eAAiB,EACxDpzD,MAAQq6D,UAAUQ,SAASj/F,EAAEokC,OAE7Bo0F,kBAAoBnG,+BACtBj2G,QACI0D,EAAGw4G,IACH5wH,EAAG6wH,IACHn0F,aAEJh5B,KAAMpL,GACPN,EAAG0L,KAAMw1E,QAENt4B,OACF1F,SACAlwB,QACI5S,EAAG9f,EAAE8f,aAAasC,sBAAoB,KAAOo2G,kBAAkB14G,EAC/DpY,EAAG1H,EAAE0H,aAAa0a,sBAAoB,KAAOo2G,kBAAkB9wH,GAEnEod,OACI2zG,OAAQD,kBAAkBp0F,MAC1Bi4C,eAAgB,GAEpBgzC,MAAOrvH,EAAEqvH,MACTnmF,OAAQlpC,EAAEkpC,OACVpwB,KAAMy5G,iBACFkG,OAAQD,kBAAkBp0F,OAC3Bq6D,YAIP,OAFAn2C,MAAMj8B,UAAYiiG,uBAAuBtuH,EAAGN,EAAG0L,KAAMw1E,QACrDA,OAAK83C,WAAW14H,EAAEiB,KAAMqnD,OACjBA,QAIX+c,QAFAA,OAASurD,eAAehsH,KAAMygE,SAEd70D,OAAO,SAAC83C,OAAU,IACtB51B,OAAW41B,MAAX51B,OACR,OAAQ/gB,MAAM+gB,OAAO5S,KAAOnO,MAAM+gB,OAAOhrB,2CAUzCkc,WAAW,IACXyhD,OACAszD,gBACA7zG,MAHW6gE,OAAA/gF,KAKT8V,OAAS9V,KAAK8V,SAEhBotF,SAKAptF,OALAotF,SACAj7D,YAIAnyB,OAJAmyB,YACAxgB,UAGA3R,OAHA2R,UACAspE,aAEAj7E,OAFAi7E,aACA1yC,WACAvoC,OADAuoC,WAEE4oE,eAAiBjnH,KAAKivH,gBACtBnrB,gBAAkB9jG,KAAK+uH,iBACvB/yD,aAAeh8D,KAAKwG,OAAO8O,kBAC3Bg3E,KAAOtsF,KAAKssF,OACZloF,KAAO0/F,gBAAgB9+F,IAAI,SAAA5J,GAAC,OAAIA,EAAEiB,MAClC46F,mBAAqBx+B,sBAAsBs4B,aAAc/wF,KAAK+e,KAAMjJ,OAAOk7E,aAC3EgjC,mBAAqBx+C,6BAAcx2D,WACnCi1G,WAAa/wB,SAAS1jE,MAAM33B,MAC5BqsH,gBAAkBl4D,aAAai4D,aAAej4D,aAAai4D,YAAYvyH,MAoD7E,OAlDA1B,KAAK4vH,WACL5vH,KAAK+wH,aACLiD,mBAAmBtpD,QAAQusB,mBAAmB10F,KAAK,MAAM,GACzDyxH,mBAAmBtpD,QAAQjjD,WAAW,GACtCiuD,YAAY12D,UAAW,IAAKioG,eAAgB,MACxCjpE,MAAO,SAAAA,MAACjT,QN2KQ,SAAfopF,aAAgBvqC,MAAO5mE,SAChC,IAAIoxG,gBACAtmG,OACIuwB,WAAkCr7B,QAAlCq7B,WAAYg2E,kBAAsBrxG,QAAtBqxG,kBACZ/hD,SAA+Bj0B,WAA/Bi0B,SAAU6U,OAAqB9oC,WAArB8oC,OAAQpK,SAAa1+B,WAAb0+B,SACtBs3C,oBACA19C,yBAAUiT,MAAM9mE,OAAQuxG,kBAAkBr2E,OAC1ClwB,OAASumG,kBAAkBvmG,OASvBsmG,gBARCr3C,SAQiB6M,MAPAA,MAAMvrC,aACnBk0B,KAAK7a,QAAQyvB,SACb7U,SAASA,UACTnoE,GAAG,MAAO,WACP4hH,oBAAYv2C,6BAAcx1E,MAAO8tB,QAAQ,KAKrDi+F,oBAAYqI,gBAAiBtmG,SM5LrBqmG,CAAappF,OACTsT,sBACAg2E,mBACIr2E,OACIs2E,iBAAkB,EAClB78C,eAAgBsJ,OAAKwzC,eAAe,iBAExCzmG,QACIwmG,iBAAkBpxB,SAAS8B,cAAcjpG,WAKzD+xB,OAAQ,SAAAA,OAACid,MAAOkxB,QAASnhE,GAKrB,IAAI0kC,MAJJihC,OAASsgB,OAAKyzC,gBAAgBv4D,SAC9B8kB,OAAK6uC,QAAQtrH,KAAKm8D,QAClBszD,gBAAkB,GAAAzuH,OAAG2xF,mBAAmB,GAAtB,KAAA3xF,OAA4BlB,KAAKtJ,IAAMA,GAAIsG,cAG7D,IAAMqzH,WAAavxB,SAAS1jE,MAAMzjC,MAC5B24H,SAAWj0D,OAAOpmD,KAAK,SAAAjf,GAAC,OAAkC,OAA9BA,EAAEkpC,OAAO4vF,uBACLh3H,IAA9B9B,EAAEkpC,OAAO4vF,mBAGb10F,MADAi1F,WACQA,WAAWx4D,QAASnhE,EAAGmsH,gBAEvB36B,KAAK9sD,MAAM66D,SAASq6B,UAAYA,SAASpwF,OAAO4vF,kBAG5Dh0G,MAAQ6gE,OAAKwzC,aAAa/0F,OAC1BuhD,OAAK4zC,WAAL5zC,EACIwP,MAAOxP,OACP/hE,UAAW+rB,MAAMjoB,OACjBmlB,wBACAw4B,cACAh5C,UAAWssG,gBACX11E,sBACAn+B,MAAOA,UACP+kF,gBAAiBnvF,OAAOmvF,oBAGjC,SAAA7pG,GAAC,OAAIA,EAAE,GAAGkpC,OAAO4vF,kBAAoB94H,EAAE,GAAGqvH,QAE7CmB,oBAAoB5rH,KAAKg5D,SAAUh5D,KAAK4vH,SACjC5vH,uDAQGw/B,OACV,OACIq0F,OAAQr0F,MACRi4C,eAAgB,6DAUPv8D,EAAGpY,EAAGgT,QACnB,IAAI8+G,aAAe9+G,OAAO8+G,aACpBpuH,KAAOxG,KAAKwG,OAElB,IAAKA,MAASA,MAAQA,KAAKy3F,UACvB,OAAO,KAGX22B,kBAAgC13H,IAAjB03H,aAA6BA,aAAe50H,KAAK8V,SAASivF,sBACzE,IAAMrhD,MAAQ1jD,KAAKg5D,SAAS3+C,KAAKa,EAAGpY,EAAG8xH,cACjC7nC,WAAa7zB,WAAWxV,MAAO,OAAQ,OAAQ,UAErD,GAAIA,MAAO,KAAAmxE,iBACmBnxE,MAAMl9C,KAAKA,KAA7B89B,OADDuwF,iBACCvwF,OAAQmmF,MADToK,iBACSpK,MAEhB,OACI1rG,GAFgB/e,KAAK80H,uBAAuBxwF,OAAQmmF,OAGpD19B,aACI7xE,EAAG6xE,WAAW7xE,EACdpY,EAAGiqF,WAAWjqF,EACdmf,MAAO,EACPC,OAAQ,IAEZ6yG,QAAS/0H,KAAK+e,MAGtB,OAAO,uDAlOP,MAAO,6DAYP,OAAOoxE,sFAGW/R,KAAM40C,UACxB,IAAMl9G,OAASw5G,qBAAU9pB,cAAcpnB,KAAM40C,UACvC9vB,SAAWptF,OAAOotF,SAClBj8D,UAAYnxB,OAAOmxB,UACnBgtF,WAAa/wB,SAAS1jE,OAAS0jE,SAAS1jE,MAAM33B,MAKpD,OAHIosH,aAAehtF,UAAU1qB,UACzB0qB,UAAU1qB,QAAU03G,YAEjBn+G,qEAYP,OAAO,kqBC5Ef,IAAMuuC,cAAOia,QAAQja,KAsCN2wE,cAhC6B,SAAXA,SAAYp+G,QACzC,IAAI86G,eACInhC,MAAyF35E,OAAzF25E,MAAOvxE,UAAkFpI,OAAlFoI,UAAWyhD,OAAuE7pD,OAAvE6pD,OAAQvgD,MAA+DtJ,OAA/DsJ,MAAOm+B,WAAwDznC,OAAxDynC,WAAY52B,UAA4C7Q,OAA5C6Q,UAAWw9E,gBAAiCruF,OAAjCquF,gBAAiBh9D,YAAgBrxB,OAAhBqxB,YAEjEgtF,WAAyB52E,WAAjC8oC,OAAoB7U,SAAaj0B,WAAbi0B,SACtBsX,MAAQpU,6BAAcx2D,WACtBk0G,oBAAsBj1D,kBAAkBh2B,aACxCyV,UAAYksC,MAAMjsC,UAAU,QAAQn3C,KAAKi6D,OAAOp/D,QAAUo/D,OAAO,GAAGh5C,eAPtByhG,MAAAgM,wBAQX,QAAS,UAAUlwH,IAAI,SAAAhI,GAAC,OAAIqnD,gBAAOL,MAAMkvE,qBACjEh4G,EAAE,SAAA9f,GAAC,OAAIA,EAAE4B,GAAGke,IACZkkC,GAAG,SAAAhkD,GAAC,OAAIA,EAAE4B,GAAG8F,IACb28C,GAAG,SAAArkD,GAAC,OAAIA,EAAE4B,GAAGyiD,KACbsE,QAAQ,SAAA3oD,GAAC,OAAe,OAAXA,EAAE4B,GAAG8F,MAZiB,GAQ7CqyH,cAR6CjM,MAAA,GAQ9BkM,eAR8BlM,MAAA,GAepDwI,eAAiBjxD,OACjBmpB,MAAM3rC,KAAK,QAASx2B,WAChBw9E,kBACAysB,eAAiBjxD,OAAO70D,OAAO,SAAAxQ,GAAC,OAAmB,OAAfA,EAAE0yB,OAAOhrB,KAEjD,IAAMuyH,eAAiB33E,UAAUM,QAAQvwB,OAAO,QAAQwwB,KAAK,IAAKk3E,cAAczD,iBAChFh0E,UAAUS,MAAMk3E,gBAAgBh3E,aAAak0B,KAAK7a,QAAQu9D,aACzC3iD,SAASA,UACTnoE,GAAG,MAAOomF,MAAMwZ,6BAChB9rD,KAAK,IAAKm3E,eAAe1D,iBACzB1/F,KAAK,SAAU52B,GACZ,IAAMq6E,QAAUD,6BAAcx1E,MAC9By1E,QAAQx3B,KAAK,QAAS7iD,GACtBI,OAAO4I,KAAK8b,OAAOxa,QAAQ,SAAArJ,KAAG,OAAIo5E,QAAQv1D,MAAM7jB,IAAK6jB,MAAM7jB,irDCL9Di5H,4qBAAkBlC,mTAwBV5sH,KAAM6kH,kBAAmBrvD,cAC9C,IAAMlF,QAAUy+D,SAAAC,oBAAAF,UAAA14H,WAAA,0BAAAoD,MAAA/E,KAAA+E,KAA8BwG,KAAMw1D,cAQpD,OAPCwoC,SAAS95F,EAAG85F,SAASrhG,GAAGuC,QAAQ,SAACsB,MACcqkH,kBADL,GAAA/lH,OAC3B0B,KAD2B,gBAErBw0F,yBAAUv8F,SAAWi6D,WAAWpC,QAAQ9vD,MAAO,YAC7D8vD,QAAQ9vD,MAAM,GAAKhE,KAAKkK,IAAI4pD,QAAQ9vD,MAAM,GAAI,GAC9C8vD,QAAQ9vD,MAAM,GAAKhE,KAAKmK,IAAI,EAAG2pD,QAAQ9vD,MAAM,OAG9C8vD,sDAQP,OAAOk+D,sEAUMxuH,MAAM,IAAAo1E,MAAA57E,KACfygE,UACEiqD,cAAgB1qH,KAAK0qH,gBACrBp+B,KAAOtsF,KAAKssF,OACZuN,UAAYvN,KAAK9sD,MACjB1pB,OAAS9V,KAAK8V,SACdkmD,aAAeh8D,KAAKwG,OAAO8O,kBANd27G,sBAOiBjxH,KAAKqrH,oBAAjC3+B,OAPWukC,sBAOXvkC,OAAQE,OAPGqkC,sBAOHrkC,OAAQ6+B,QAPLwF,sBAOKxF,QAPLgK,eAWhBxM,sBAAc38B,MAFbC,MATekpC,eASflpC,MACAC,MAVeipC,eAUfjpC,MAEEkpC,YAAc5/G,OAAO6zG,oBACrB6J,OAASx3D,aAAa0wB,SAAW1wB,aAAa0wB,QAAQzzE,IAAIjS,OAASw0F,yBAAUt8F,UAC7Eu0H,OAASz3D,aAAa4wB,SAAW5wB,aAAa4wB,QAAQ3zE,IAAIjS,OAASw0F,yBAAUt8F,UAC7E7C,IAAMm3H,OAAS,IAAOC,OAAS,IAAM,KACrCkC,QAAUnpC,MAAMh3E,SAAS,GACzBogH,QAAUD,QAAU,EAAInpC,MAAMmG,cAAc,GAAKnG,MAAMmG,cAAcgjC,SAkD3E,OAjDAtH,SAAS7nH,KAAM8lF,MACf7rB,OAASj6D,KAAKxB,IAAI,SAAC5J,EAAGN,GAClB,IAAI0kC,MACEk0F,IAAMnnC,MAAMoG,cAAcv3F,EAAE8f,GAAKqxE,MAAMqG,eAAiB,EACxD+gC,IAAMnnC,MAAMmG,cAAcv3F,EAAE0H,GAC5B+yH,KAAQpK,StD7GL,UsD6GgBf,cAA2Bl+B,MAAMmG,cAAcv3F,EAAEqkD,IAAMm2E,QAChFp2F,MAAQq6D,UAAUQ,SAASj/F,EAAEokC,OAC7B,IAAMs2F,SAAW16H,EAAE0H,aAAa0a,sBAC1Bu4G,UAAY36H,EAAEqkD,cAAcjiC,sBAC5Bw4G,eAAiBvI,+BACnBj2G,QACI0D,EAAGw4G,IACH5wH,EAAG6wH,IACHl0E,GAAIo2E,KACJr2F,aAEJh5B,KAAMpL,GACPN,EAAG0L,KAAMo1E,OAEN17D,OACFxG,KAFJ8lB,MAAQw2F,eAAex2F,OAKjBkkB,OACF1F,OACI9iC,EAAGw4G,IACH5wH,EAAGgzH,SAAW,KAAOF,QACrBn2E,GAAIs2E,UAAY,KAAOH,SAE3B9nG,QACI5S,EAAGw4G,IACH5wH,EAAGgzH,SAAW,KAAOE,eAAelzH,EACpC28C,GAAIs2E,UAAY,KAAOC,eAAev2E,IAE1Cnb,OAAQlpC,EAAEkpC,OACVmmF,MAAOrvH,EAAEqvH,MACThjG,UAAWiuG,YAAcA,YAAYt6H,EAAGN,EAAG0L,KAAMo1E,OAAQ,GACzD17D,YACAhM,KAAMy5G,gBAAgBztG,MAAO25E,YAIjC,OAFAn2C,MAAMj8B,UAAYiiG,uBAAuBtuH,EAAGN,EAAG0L,KAAMo1E,OACrDA,MAAKk4C,WAAW14H,EAAEiB,KAAMqnD,OACjBA,QAGX+c,QADAA,OAASurD,eAAehsH,KAAMygE,SACd70D,OAAO,SAAC83C,OACpB,IAAM51B,OAAS41B,MAAM51B,OACrB,OAAQ/gB,MAAM+gB,OAAO5S,KAAOnO,MAAM+gB,OAAOhrB,yEAM7C9C,KAAK0wH,eAAiBrD,kCAA0BrtH,wDAQtCw/B,OACV,OACI9lB,KAAM8lB,+DA/HV,OAAO2wD,kFAWP,MAAO,wBClDFA,kCACTa,YvDHuB,OuDIvBD,aAAc,YACd5nE,SAAWF,IAAK,EAAGyzB,OAAQ,EAAGvsB,KAAM,EAAGI,MAAO,GAC9C9I,UAAW,GACXgnE,aACIiT,YACI16F,KAAM,OACNuhH,WAAY,EAAG,GAAI,GAAI,KAE3BhnB,OACIv6F,KAAM,OACNuhH,WAAY,EAAG,EAAG,GAAK,KAE3B9mB,QACIz6F,KAAM,OACNuhH,WAAY,EAAG,EAAG,GAAK,MAG/BrmG,OAAQ,IACRD,MAAO,IACPhW,KAAM,GACNg4B,QAAS,UAAW,OAAQ,QAAS,SAAU,SAAU,UACzDgD,WACIjgC,KAAM,YAEVk8F,UACI+yB,gBACIl6H,MAAO,OAEXm6H,mBACIn6H,MAAO,SAEX0tG,OACI1tG,MAAO,KAEX02D,QACI12D,MAAO,KAEXgkC,SACIhkC,MAAO,KAEXyjC,OACIzjC,MAAO,KAEXu6F,OACIv6F,MAAO,KAEX+kB,MACI/kB,MAAO,MAGfsiD,YACI8oC,OAAQ,QACR7U,SAAU,KAEd6jD,QACIz0B,WACIj6E,UAAS,GAAAniB,OvD5DM,OuD4DN,yBAEb8wH,SACI3uG,UAAS,GAAAniB,OvD/DM,OuD+DN,uBAEb+wH,UACI5uG,UAAS,GAAAniB,OvDlEM,OuDkEN,s1DCnDrB,IAAMk7C,QAAM8d,QAAQ9d,IAWC81E,kCAEjB,SAAAA,SAAa9vH,KAAM8lF,KAAMx2E,OAAQ4V,cAAc,IAAAkwD,MAAA,wJAAA26C,CAAAv2H,KAAAs2H,WAC3C16C,MAAA46C,8BAAAx2H,KAAAy2H,mBAAAH,UAAAr7H,KAAA+E,KAAMwG,KAAM8lF,KAAMx2E,OAAQ4V,gBACrBgrG,gBAFsC96C,kXAFb0zC,yRAuB9B,MAAO,+DAWMp0G,EAAGpY,GAAgB,IAAbgT,OAAa5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAC1Bm9F,UAAY7rB,6BAAc1/D,OAAOqwD,MAAMx9B,QAAQniC,OAAO,GAC5D,GAAI0uD,eAAemsC,WAAY,KACnB/8D,OAAkB+8D,UAAlB/8D,OAAQmmF,MAAUppB,UAAVopB,MAChB,OACI1rG,GAAI/e,KAAK80H,uBAAuBxwF,OAAQmmF,OACxCsK,QAAS/0H,KAAK+e,MAGtB,OAAO,6DAGMvY,MAAM,IAAAw1E,OAAAh8E,KAAA22H,WACqC32H,KAAKssF,OAArDmd,MADWktB,WACXltB,MAAc5P,UADH88B,WACJn3F,MAA0Bo3F,WADtBD,WACclkE,OAC3BokE,YACAC,SAAW92H,KAAK4vH,QAAQ,OACxBnvD,UACAs2D,UAgDN,OA9CA/2H,KAAK02H,gBACLI,SAASpxH,QAAQ,SAAC1I,EAAG0E,OACjBs6E,OAAK06C,aAAa15H,EAAEytH,QAAUztH,EAAG0E,OACjCm1H,SAAS75H,EAAE0E,OAAS1E,IAExBwJ,KAAKd,QAAQ,SAACtK,EAAGN,GACb,IAAMk8H,OAASvtB,MAAM9W,cAAcv3F,EAAEquG,OACrC,GAAIutB,OAAQ,EACPD,OAAO37H,EAAEquG,SAAWstB,OAAO37H,EAAEquG,OAAS,GAD/B,IAAAwtB,QAEyBD,OAAOD,OAAO37H,EAAEquG,UAAzChoD,WAFAw1E,QAEAx1E,WAAYE,SAFZs1E,QAEYt1E,SACdu1E,IAAM97H,EAAEqvH,MACRmJ,kBAAoBnG,+BACtBj2G,QACIi7C,OAAQmkE,WAAWO,eAAe/7H,EAAEq3D,QACpC63D,QAASsM,WAAWQ,eAAeh8H,EAAEkvH,SACrC9qF,MAAOq6D,UAAUQ,SAASj/F,EAAEokC,OAC5B+qF,OAAQ9oE,WACRgoD,MAAO9nD,SACPF,sBACAE,kBACA01E,YAAa51E,WACb61E,UAAW31E,UAEfn7C,KAAMpL,GACPN,EAAG0L,KAAMw1E,QACNx8C,MAAQo0F,kBAAkBp0F,MAChCihC,OAAOn8D,MACHggC,OAAQlpC,EAAEkpC,OACV5iC,MAAO5G,EACPkjD,SACAlwB,QACIy8F,OAAQqJ,kBAAkBrJ,OAC1B9gB,MAAOmqB,kBAAkBnqB,MACzB6gB,QAASsJ,kBAAkBtJ,QAC3B73D,OAAQmhE,kBAAkBnhE,QAE9BjzB,YACAtrB,KAAMy5G,iBACFj0G,KAAM8lB,OACPq6D,WACH4wB,MAAOyM,IACPK,cAAev7C,OAAK06C,aAAaQ,KAAOl7C,OAAK06C,aAAaQ,KAAK,GCrHnD,SAAnBM,iBAAoBV,SAAUW,UAAWz0G,SAClD,IAAM00G,QAAUZ,SAASW,UAAY,GAC/BE,QAAUb,SAASW,WAFqCG,uBAAAC,yBAG/B70G,QAAQspE,OAAOmd,MAAM14E,QAHU,GAGvD0wB,WAHuDm2E,uBAAA,GAG3Cj2E,SAH2Ci2E,uBAAA,GAI9D,OAAIF,SAAWC,SAEP7pG,QACIy8F,OAAQrxD,WAAWw+D,QAAS,SAAU,SACtCjuB,MAAOvwC,WAAWy+D,QAAS,SAAU,YAGrCA,SASR7pG,QACIy8F,QAAS9oE,WAAa,IAAMz+C,KAAKg+B,GAAK,EAAI,IAC1CyoE,OAAQhoD,WAAa,IAAMz+C,KAAKg+B,GAAK,EAAI,OATzClT,QACIy8F,QAAS5oE,SAAW,IAAM3+C,KAAKg+B,GAAK,EAAI,IACxCyoE,OAAQ9nD,SAAW,IAAM3+C,KAAKg+B,GAAK,EAAI,MDuG/Bw2F,CAAiBX,SAAU/7H,EAAGkhF,aAIvCvb,6CAUHzhD,WAAW,IAAA+hE,OAAA/gF,KACTy0F,YAAcz0F,KAAKy0F,cADV+L,aASZxgG,KAAK8V,SANJk7E,YAHWwP,aAGXxP,YACAD,aAJWyP,aAIXzP,aACAhyB,aALWyhC,aAKXzhC,aACAld,SANW2+C,aAMX3+C,SACAmd,UAPWwhC,aAOXxhC,UACA3gB,WARWmiD,aAQXniD,WAEEy5E,cAAgBr/D,sBAAsBs4B,aAAc/wF,KAAK+e,KAAMiyE,aAE/Dj5E,KAAO/X,KAAK+3H,OAASv3E,UAClBue,aAAaA,cACbtd,WAAW,SAAArmD,GAAC,OAAIA,EAAE0yB,OAAOy8F,OAASvnH,KAAKg+B,GAAK,IAC5C2gB,SAAS,SAAAvmD,GAAC,OAAIA,EAAE0yB,OAAO27E,MAAQzmG,KAAKg+B,GAAK,IACzC6gB,SAASA,UACTmd,UAAUA,WACVzd,YAAY,SAAAnmD,GAAC,OAAIA,EAAE0yB,OAAO2kC,SAC1BpR,YAAY,SAAAjmD,GAAC,OAAIA,EAAE0yB,OAAOw8F,UAEnCtqH,KAAK4vH,QAAU5vH,KAAKivH,gBAAgBjqH,IAAI,SAAAyvB,KAAG,OAAIssD,OAAKyzC,gBAAgB//F,OACpE,IAAM09F,aAAenyH,KAAK8vH,iBAEpBjqH,EAAI6vE,YAAYF,6BAAcx2D,WAAY,IAAKhf,KAAK4vH,QAArC,GAAAtqH,OAAiDwyH,cAAc,GAA/D,WACZptD,QADC,GAAAplE,OACUwyH,cAAc,GADxB,WACoC,GACrC75E,KAAK,YAFJ,aAAA34C,OAE8BmvF,YAAYxyE,MAAQ,EAFlD,2BAAA3c,OAGImvF,YAAYvyE,OAAS,EAHzB,MAoBJ81G,oBACFC,YAAc,EAqBlB,OAPAviD,YAAY7vE,EAAG,IAAK,SAAAzK,GAAC,OAAIA,GAAd,GAAAkK,OAAoBwyH,cAAc,KAErChqG,OAjCM,SAARskD,MAASztD,MACX+wD,YAAY/wD,KAAM,OAAQ,SAAAvpB,GAAC,OAAKA,IAArB,GAAAkK,OAA4BwyH,cAAc,GAA1C,UACN53G,MAAM,OAAQ,SAAA9kB,GAAC,OAAIA,EAAEokC,QACrBxN,KAAK,SAAU52B,GACZ+2H,aAAa/2H,EAAEqvH,OAASj1C,6BAAcx1E,QAEzCq+C,aACAi0B,SAASj0B,WAAWi0B,UACpBnoE,GAAG,MAAO42E,OAAKgpB,6BACft2B,UAAU,IAAK,mBAAAra,KAAAl1D,UAAA7C,OAAIuV,OAAJ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAIziD,OAAJyiD,MAAAn1D,UAAAm1D,MAAA,OC9IR,SAAX6+D,SAAYngH,KAAMpV,GAC3B,IAAMuhE,MAAQvhE,EAAE,GAChB,OAAO,SAAU3G,GACb,OAAO+b,KAAK8iC,4BAAeqpB,MAAMqzD,cAAerzD,MAApCrpB,CAA2C7+C,KD2IhBk8H,CAASngH,KAAMnB,UAC7CqnC,KAAK,QAAS,SAAC7iD,EAAGN,GACf,IAAMq9H,gBAAkBzO,uBAAuBtuH,EAAGN,EAAGimF,OAAK6uC,QAAS7uC,QACnE,SAAAz7E,OAAUwyH,cAAc,GAAxB,UAAAxyH,OAAmCwyH,cAAc,GAAjD,UAAAxyH,OAA4DlK,EAAEsG,MAA9D,8BAAA4D,OACM6yH,oBAqBVr6E,KAhBU,SAAZs6E,UAAazzG,KAAMvpB,GACrB,IAAIi9H,QAAUL,iBAAiBC,aACzBK,eAAiBL,YAClBI,QAEMA,QAAQA,QAAQh3H,OAAS,GAAG6iE,MAAMxiE,QAAUtG,EAAEsG,MAAQ,EAC7D22H,QAAQ/zH,MAAOqgB,UAAMu/C,MAAO9oE,IAE5B68H,cAJAI,UAAa1zG,UAAMu/C,MAAO9oE,IAM9B48H,iBAAiBM,gBAAkBD,WAQtBp6E,KAAK,QAAS,SAAC7iD,EAAGN,GAAJ,SAAAwK,OAAawyH,cAAc,GAA3B,KAAAxyH,OAAiCwyH,cAAc,GAA/C,KAAAxyH,OAAqDxK,KClKhE,SAAfy9H,aAAgBP,iBAAkB35E,WAAYtmC,MACnDigH,iBAAiB32H,OAAS,GAC1B22H,iBAAiBtyH,QAAQ,SAAC8yH,oBACtB,IAAM/2E,WAAa+2E,mBAAmB,GAAGt0D,MAAMp2C,OAAOy8F,OAChD5oE,SAAW62E,mBAAmBA,mBAAmBn3H,OAAS,GAAG6iE,MAAMp2C,OAAO27E,MAC1En5E,IAAiB,EAAVttB,KAAKg+B,GAASygB,YAA0B,EAAVz+C,KAAKg+B,GAAUygB,WAAaE,UAEvE62E,mBAAmB9yH,QAAQ,SAAC1I,GAAM,IACtB2nB,KAAgB3nB,EAAhB2nB,KAAMu/C,MAAUlnE,EAAVknE,MAEdv/C,KAAKqN,KAAK,WACN,IAAMymG,MAAQjjD,6BAAcx1E,MAC5By4H,MAAM96E,UAAU,QACCU,aACAi0B,SAASj0B,WAAWi0B,UACpBmB,UAAU,IAAK,kBAAM,SAAUz3E,GAC5B,OAAO+b,KAAK8iC,4BAAeqpB,OACvBp2C,QACIy8F,OAAQj6F,IACRm5E,MAAOn5E,IACPmiC,OAAQyR,MAAMzR,OACd63D,QAASpmD,MAAMomD,UALXzvE,CAOT7+C,OAENi2B,SACjBwmG,MAAMxmG,eDyIlBsmG,CAAaP,iBAAkB35E,WAAYtmC,MACpC/X,+EAGe87D,aACtB,IAAK97D,KAAKwG,OACN,SAEJ,IAAM+gH,WAAazrD,YAAY,GACzBtkD,OAASskD,YAAY1wD,MAAM,EAAG0wD,YAAYz6D,QAC1Cq3H,UAAYljD,6BAAcx1E,KAAK4pF,SAASjsC,UAAU,QAAQn3C,OAC1Dw1D,aAAeh8D,KAAKwG,OAAO8O,kBAa3BqjH,YAXeD,UAAU9sH,OAAO,SAACgtH,OAAU,IACrCt0F,OAAkBs0F,MAAlBt0F,OAAQmmF,MAAUmO,MAAVnO,MAChB,OAAOlD,WAAW9xG,MAAM,SAAC5N,MAAOw0D,KAC5B,OAAIx0D,SAASm0D,cAAgBA,aAAan0D,OAAOoR,IAAIjS,OAASw0F,yBAAUt8F,WACY,IAAzEsY,OAAO3L,UAAU,SAAAzQ,GAAC,OAAIA,EAAEihE,OAAS/3B,OAAO03B,aAAan0D,OAAOnG,SAC5DmG,QAAUo0C,gBAAeC,SACoB,IAA7C1kC,OAAO3L,UAAU,SAAAzQ,GAAC,OAAIA,EAAEihE,OAASouD,YAKnB,GACjC,GAAIkO,YAAa,CACb,IAAMlkC,YAAcz0F,KAAKy0F,cACnBp0B,SAAWrgE,KAAK+3H,OAAO13D,SAASs4D,aACtC,QACIz9G,EAAGmlD,SAAS,GAAKo0B,YAAYxyE,MAAQ,EACrCnf,EAAGu9D,SAAS,GAAKo0B,YAAYvyE,OAAS,EACtCD,MAAO,EACPC,OAAQ,IAGhB,iEAlMA,OAAOiuE,iFAIP,MAAO,sBE6BA0oC,cA5DE,SAAXA,SAAY75G,UAAWxY,KAAMsP,OAAQo1G,WACvC,IAAMxtE,UAAY83B,6BAAcx2D,WAAW2+B,UAAU,KAAKn3C,KAAKA,MACvD4f,WAAe8kG,UAAU7f,cAAzBjlF,WACF+rG,aAAejH,UAAU4E,cAEzBgJ,eAAiBp7E,UAAUM,QAAQvwB,OAAO,KAC3CuE,KAAK,SAAUgqE,SACZtlB,wBAAS12E,KAAMg8F,QAAQh+C,SAE1BG,MAAMT,WACLx9B,MAAQm3D,qCAAsB7B,6BAAcx2D,WAAYlJ,OAAO2R,WAC/D9F,SAAWzgB,SAASgf,MAAMyB,SAAU,IA8C1C,OA5CAyE,WAAW7F,SAASL,OACpB44G,eAAe9mG,KAAK,SAAUgqE,SAC1B,IAAMvmB,QAAUD,6BAAcx1E,MAC9BmyH,aAAan2B,QAAQyuB,OAASh1C,QAFK,IAK/BsjD,cAFIjrG,OAAsDkuE,QAAtDluE,OAAQpN,KAA8Cs7E,QAA9Ct7E,KAAM8e,MAAwCw8D,QAAxCx8D,MAAOw5F,WAAiCh9B,QAAjCg9B,WAAmBC,UAAcj9B,QAArB97E,MACnCg5G,WAAal9B,QAAQk9B,WAE3B,GAAIH,cAAgBG,WAAWn9H,MAAO,CAClC,IACIszB,KADE8pG,kBAAoBD,WAAW/vG,QADHiwG,sBAGRhzG,WAAWO,WAAWq1E,QAAQt7E,MAAhDuB,MAH0Bm3G,sBAG1Bn3G,MAAOC,OAHmBk3G,sBAGnBl3G,OACTm3G,aAAe3jD,YAAYD,QAAS,QAAS,IAG/CpmD,KADe,QAAf2pG,WACO/2G,MACe,UAAf+2G,WACA,EAEA/2G,MAAQ,EAGnBy0D,wBAAS2iD,aAAav2G,QAClB5H,EAAG4S,OAAO5S,EAAImU,KAAO8pG,kBAAoB,EACzCr2H,EAAGgrB,OAAOhrB,EAAI6e,SAAWw3G,kBAAoB,EAC7Cl3G,MAAOA,MAAQk3G,kBACfj3G,OAAQA,OAASi3G,oBAErBD,YAAcviD,yBAAU0iD,cACpBH,WAAYH,gBAGpB,IAAMxhD,OAAS7B,YAAYD,QAAS,OAAQ,SAAAr6E,GAAC,OAAKA,KAAIslB,KAAKA,MACrDwpF,SAAW3yB,OAAOz0D,OACxBm2G,WAAatiD,yBAAUuzB,SAAU+uB,WACjCz5F,OAASm3C,yBAAUuzB,UACfxwF,KAAM8lB,QAEVw8D,QAAQv0E,WAAa8vD,OAAO7M,QAAQsxB,QAAQv0E,WAAW,GACvDivD,wBAASwzB,SAAUp8E,QACnBypD,OAAOt5B,KAAK,cAAe+6E,YAC3BzhD,OAAOt5B,KAAK,qBAAsB+9C,QAAQ,uBAC1CzkB,OAAOt5B,KAAK,YAAZ,UAAA34C,OAAmC02F,QAAQsM,SAA3C,KAAAhjG,OAAuDwoB,OAAO5S,EAA9D,KAAA5V,OAAmEwoB,OAAOhrB,EAA1E,QAEJ46C,UAAUI,OAAO7rB,SACVyrB,WCrEEyyC,mCACTY,aAAc,aACdC,Y3DJuB,O2DKvBvpE,UAAW,GACXwf,WACIjgC,KAAM,YAEVynF,aACIiT,YACI16F,KAAM,OACNuhH,WAAY,EAAG,GAAI,GAAI,KAE3BhnB,OACIv6F,KAAM,OACNuhH,WAAY,EAAG,EAAG,GAAK,KAE3B9mB,QACIz6F,KAAM,OACNuhH,WAAY,EAAG,EAAG,GAAK,MAG/BlqE,YACI8oC,OAAQ,QACR7U,SAAU,KAEd4wB,UACI1jE,SACA1e,QACA2xC,UACAg3C,SACA/oF,MACI3kB,MAAO,GACP8F,UAAW,SAAAA,UAAC2xD,IAAK14D,EAAG0L,KAAMwc,SAEtB,OADoBA,QAAQ8sE,aACrBA,CAAYt8B,MAEvB0lE,YACI/vG,QAAS,KAGjBm/E,UACIvsG,MAAO,GAEXu9H,sBACIv9H,MAAO,WAGfo6H,QACIz0B,WACIj6E,UAAS,GAAAniB,O3DnDM,O2DmDN,0BAEb8wH,SACI3uG,UAAS,GAAAniB,O3DtDM,O2DsDN,wBAEb+wH,UACI5uG,UAAS,GAAAniB,O3DzDM,O2DyDN,y0DC1CrB,IAAMi0H,gBAAkBppC,kCAAc+S,SAChCs2B,kBAAoBD,gBAAgB,sBAAsBx9H,MAC1D09H,YAAcF,gBAAgBjxB,SAASvsG,MAEvC29H,kBACFC,MAAO,SAAAA,MAACnzH,KAAMsP,OAAQo1G,WAWlB,IAVA,IAAIzqD,UACE6rB,KAAO4+B,UAAU5+B,OACjB4W,SAAWgoB,UAAUp1G,SAASotF,SAC9B02B,aAAe12B,SAASxiF,KACdk2G,WAAmDtqC,KAA3D75B,OAA2BonC,UAAgCvN,KAAvC9sD,MAAyBq6F,UAAcvtC,KAArBmd,MAC3BqwB,cAAkBF,aAA7B/3H,UACFk4H,mBAAqB72B,SAASxiF,KAAKw4G,WACnCC,kBAAoBY,mBAAmB5wG,QACvC6wG,gBAAkBD,mBAAmBh+H,MACrCg7H,UACGj8H,EAAI,EAAG4oB,IAAMld,KAAKnF,OAAQvG,EAAI4oB,IAAK5oB,IAAK,CAC7C,IAAMM,EAAIoL,KAAK1L,GACTwpC,OAASlpC,EAAEkpC,OACX5jB,KAAOtlB,EAAEslB,KAET8e,MAAQq6D,UAAUQ,SAASj/F,EAAEokC,OAC7BizB,OAASmkE,WAAWO,eAAe/7H,EAAEq3D,QACrCukE,OAAS6C,UAAUlnC,cAAcv3F,EAAEquG,QACxCstB,OAAO37H,EAAEquG,SAAWstB,OAAO37H,EAAEquG,OAAS,GARM,IAAAwtB,QASZD,OAAOD,OAAO37H,EAAEquG,UAAzChoD,WATqCw1E,QASrCx1E,WAAYE,SATyBs1E,QASzBt1E,SAGds4E,YAAcxM,+BAChBj2G,QACIiyF,OAHOhoD,WAAaE,UAAY,EAIhC8Q,cACAjzB,YACA9e,UACA+gC,sBACAE,kBACA2mD,SAAUmxB,YACVH,qBAAsBE,mBAE1BhzH,KAAMpL,GACPN,EAAG0L,KAAM0kH,WACNxnE,OACF1F,SACAlwB,QACI27E,MAAOwwB,YAAYxwB,MACnBh3C,OAAQwnE,YAAYxnE,QAExB/xC,KAAMo5G,cAAgBA,cAAcp5G,KAAM5lB,EAAG0L,KAAM0kH,WAAa+O,YAAYv5G,KAC5E8e,MAAOy6F,YAAYz6F,MACnB8oE,SAAU2xB,YAAY3xB,SACtB4wB,YACIn9H,MAAOi+H,2BAA2B30H,SAAW20H,gBAAgB5+H,EAAGN,EAAG0L,KAAM0kH,WAAa,KACtF/hG,QAASgwG,mBAEbG,qBAAsBW,YAAY,sBAClC/lH,KAAMy5G,iBACFj0G,KAAMugH,YAAYz6F,OACnBq6D,WACH35E,SACAokB,cACAmmF,MAAOrvH,EAAEqvH,OAGb/mE,MAAMj8B,UAAYiiG,uBAAuBtuH,EAAGN,EAAG0L,KAAM0kH,WACrDzqD,OAAOn8D,KAAKo/C,OAShB,OAJA+c,QAFAA,OAASwtD,uBAAuBjC,eAAed,UAAWzqD,QAASyqD,UAAUz2B,gBAE7D7oF,OAAO,SAACxQ,GACpB,IAAM0yB,OAAS1yB,EAAE0yB,OACjB,OAAQ/gB,MAAM+gB,OAAO5S,KAAOnO,MAAM+gB,OAAOhrB,MAIjDo3H,UAAW,SAAAA,UAAC1zH,KAAMsP,OAAQo1G,WAetB,IAdA,IAAIzqD,UACE6rB,KAAO4+B,UAAU5+B,OACjBuN,UAAYvN,KAAK9sD,MACjB0jE,SAAWgoB,UAAUp1G,SAASotF,SAC9B02B,aAAe12B,SAASxiF,KACfy5G,UAA+CP,aAAtD/xH,MAAkB9L,MAAoC69H,aAApC79H,MAAkB+9H,cAAkBF,aAA7B/3H,UAC3Bm6D,aAAekvD,UAAU1kH,OAAO8O,kBAEhCykH,mBAAqB72B,SAASxiF,KAAKw4G,WACnCC,kBAAoBY,mBAAmB5wG,QACvC6wG,gBAAkBD,mBAAmBh+H,MACrCq+H,eAAiBD,UAAYn+D,aAAam+D,YAAcn+D,aAAam+D,WAAWz4H,OAAS,EACzFiqH,KAAOnnB,SAAS95F,EAChBghH,KAAOlnB,SAASrhG,EAdc8yD,MAAA,SAAAA,MAe3Bn7D,EAAO4oB,KACZ,IAAMtoB,EAAIoL,KAAK1L,GACT84F,IAAMx4F,EAAEkpC,OACR+1F,UAAYF,UAAYvmC,IAAIwmC,gBAAkBr+H,MAlBpBmtH,MAAAoR,oBAoBZ3O,KAAMD,MAAM1mH,IAAI,SAAAgC,MAAI,OAAKslF,KAAKtlF,MAAQslF,KAAKtlF,MAAM2rF,cAAcv3F,EAAE4L,OAC7EslF,KAAKtlF,MAAM4rF,eAAiB,EAAI,IArBR,GAoBzB8gC,IApByBxK,MAAA,GAoBpByK,IApBoBzK,MAAA,GAuB1B1pF,MAAQq6D,UAAUQ,SAASj/F,EAAEokC,MAAOq6D,WACpC+5B,kBAAoBnG,+BACtBj2G,QACI0D,EAAGw4G,IACH5wH,EAAG6wH,IACHjzG,KAAM25G,UACN76F,YACA8oE,SAAUmxB,YACVH,qBAAsBE,mBAE1BhzH,KAAMpL,GACPN,EAAG0L,KAAM0kH,WACNxnE,OACF1F,SACAlwB,QACI5S,EAAG04G,kBAAkB14G,EACrBpY,EAAG8wH,kBAAkB9wH,GAEzB4d,KAAMo5G,cAAclG,kBAAkBlzG,KAAM5lB,EAAG0L,KAAM0kH,WACrD1rF,MAAOo0F,kBAAkBp0F,MACzB05F,YACIn9H,MAAOi+H,2BAA2B30H,SAAW20H,gBAAgB5+H,EAAGN,EAAG0L,KAAM0kH,WAAa,KACtF/hG,QAASgwG,mBAEbG,qBAAsB1F,kBAAkB,sBACxCtrB,SAAUsrB,kBAAkBtrB,SAC5Bp0F,KAAMy5G,iBACFj0G,KAAMk6G,kBAAkBp0F,OACzBq6D,WACH35E,SACAokB,OAAQlpC,EAAEkpC,OACVmmF,MAAOrvH,EAAEqvH,OAGb/mE,MAAMj8B,UAAYiiG,uBAAuBtuH,EAAGN,EAAG0L,KAAM0kH,WACrDzqD,OAAOn8D,KAAKo/C,QA3CP5oD,EAAI,EAAG4oB,IAAMld,KAAKnF,OAAQvG,EAAI4oB,IAAK5oB,IAAKm7D,MAAxCn7D,GAmDT,OAJA2lE,QADAA,OAASurD,eAAed,UAAWzqD,SACnB70D,OAAO,SAACxQ,GACpB,IAAM0yB,OAAS1yB,EAAE0yB,OACjB,OAAQ/gB,MAAM+gB,OAAO5S,KAAOnO,MAAM+gB,OAAOhrB,OAiBhCy3H,4qBAAkBjL,6RAc/B,MAAO,qEAGS97D,KAChB,OAAOkmE,iBAAiBlmE,6DAUXhtD,MAAmB,IAAbsP,OAAa5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAChC,OAAOw1H,iBAAiB15H,KAAKqlG,SAAS7+F,KAAMsP,OAAQ9V,4CAQhDgf,WAAW,IAAA48D,MAAA57E,KACT8V,OAAS9V,KAAK8V,SACdmxG,eAAiBjnH,KAAKivH,gBACtBxnG,UAAY3R,OAAO2R,UACnBwvE,mBAAqBx+B,sBAAsB3iD,OAAOi7E,aAAc/wF,KAAK+e,KAAMjJ,OAAOk7E,aAsBxF,OArB2Bxb,6BAAcx2D,WAEtB0rD,QAAnB,GAAAplE,OAA8B2xF,mBAAmB10F,KAAK,KAAtD,KAAA+C,OAA8DmiB,YAAa,GAC3EznB,KAAK8vH,iBAELj5C,+BACIrwE,KAAMygH,eACNx5F,OAAQ,IACRi2C,SAAU,IACV1kD,oBACAgT,KAAM,SAAAA,KAACiqC,QAASlxB,OACZ,IAAMjoB,KAAOioB,MAAMjoB,OACb29C,OAASmb,MAAK44C,gBAAgBv4D,WAAa2f,OACjDjF,yBAAU7zD,MACN03G,c5DxNc,W4D0NlB3B,cAAS/1G,KAAM29C,QACXh5C,UAAWwvE,mBAAmB,IAC/Brb,UAGJ57E,6DAzDP,OAAOmwF,kFAIP,MAAO,wBCtEAsqC,eAvCgC,SAAdA,YAAe7jH,QAAW,IAC/C25E,MAAoD35E,OAApD25E,MAAOvxE,UAA6CpI,OAA7CoI,UAAWyhD,OAAkC7pD,OAAlC6pD,OAAQpiB,WAA0BznC,OAA1BynC,WAAY52B,UAAc7Q,OAAd6Q,UACtC6qD,SAA+Bj0B,WAA/Bi0B,SAAU6U,OAAqB9oC,WAArB8oC,OAAQpK,SAAa1+B,WAAb0+B,SACpB6M,MAAQpU,6BAAcx2D,WACtBmzG,aAAe5hC,MAAMu/B,cAE3B,OADAlmC,MAAM3rC,KAAK,QAASx2B,WACbiuD,YAAYkU,MAAO,IAAKnpB,OAAQ,MACnCziB,MAAO,SAAAA,MAACjT,MAAO3vC,GAAM,IACT4iD,MAAU5iD,EAAV4iD,MACRjT,MAAMkT,KAAK,YAAX,aAAA34C,OAAqC04C,MAAM9iC,EAA3C,KAAA5V,OAAgD04C,MAAMl7C,EAAtD,OAEJgrB,OAAQ,SAAAA,OAACid,MAAO3vC,IAvDJ,SAAds/H,YAAwBt/H,EAAGu/H,cAAc,IACnCrkC,MAAwBl7F,EAAxBk7F,MAAOx1E,KAAiB1lB,EAAjB0lB,KAAMgN,OAAW1yB,EAAX0yB,OAErB,GAAIwoE,iBAAiBphB,QACjBohB,MAAMnW,KAAK,SAACy6C,KACRx/H,EAAEk7F,MAAQskC,IACVF,YAAYt/H,EAAGu/H,qBAEhB,GAAIrkC,iBAAiBukC,QAAS,CACjC,IAAIC,SAAWxkC,MAAMtwB,WAAU,GAE/B,GAAwC,QAApC80D,SAASC,SAAS35H,cAAyB,CAC3C,IAAM45H,IAAMF,SAASE,KAAOF,SAASG,MACrCH,SAAWv8G,SAAS2Q,gBAAgB,6BAA8B,UACzD5E,aAAa,OAAQ0wG,KAElC,IAAME,aAAe1lD,6BAAcslD,UACT,SAAtBA,SAASC,UAA6C,UAAtBD,SAASC,SACzCG,aAAaj9E,KAAK,YAAlB,SAAA34C,OAAwCwb,KAAO,IAA/C,OAEAo6G,aAAaj9E,KAAK,SAAUn9B,MAC5Bo6G,aAAaj9E,KAAK,QAASn9B,OAE/Bo6G,aAAaj9E,KAAK,KAAMn9B,KAAO,GAC/Bo6G,aAAaj9E,KAAK,KAAMn9B,KAAO,GAC/B40D,YAAYilD,aAAc,kBAAMG,WAAW,SACxC,GAAqB,iBAAVxkC,MAAoB,CAClC,IAAI6kC,QAIAA,QA5CM,SAAZC,UAAa74G,KACf,SAAI,0CAA0CzP,KAAKyP,MAAQ,UAAUzP,KAAKyP,MAAQA,IAAIlhB,OAAS,GAwCvF+5H,CAAU9kC,OACAA,MAEA/5B,uBAAU+5B,OAAOx1E,KAAKA,KAAtBy7C,CAA4BzuC,QAE1C4nD,YAAYilD,aAAc,OAAQ,SAAAn0H,MAAI,OAAKA,QAAOy3C,KAAK,IAAKk9E,cAE5D//H,EAAEk7F,MAAQ,SACVokC,YAAYt/H,EAAGu/H,cAoBXD,CAAYt/H,EAAG2vC,OACfonF,aAAa/2H,EAAEqvH,OAAS1/E,MAFN,IAGVjd,OAAkB1yB,EAAlB0yB,OAAQ5N,MAAU9kB,EAAV8kB,MAChB24C,eAAe34C,MAAO,SAAA7jB,KAAG,OAAI0uC,MAAM7qB,MAAM7jB,IAAK6jB,MAAM7jB,QACpD0uC,MAAMkT,KAAK,QAASx2B,WACpBsjB,MAAM2/B,QAAQtvE,EAAEqsB,WAAW,GACtBs1D,WACDhyC,MAAQA,MAAMsT,aACTi0B,SAASj0B,WAAWi0B,UACpBnoE,GAAG,MAAOomF,MAAMwZ,8BAEzBh/D,MAAMkT,KAAK,YAAX,aAAA34C,OAAqCwoB,OAAO5S,EAA5C,KAAA5V,OAAiDwoB,OAAOhrB,EAAxD,OAEJg7C,KAAM,SAAAA,KAACu9E,WACEt+C,SAODs+C,UAAUppG,SANVopG,UAAUh9E,aAAak0B,KAAK7a,QAAQyvB,SACnC7U,SAASA,UACTnoE,GAAG,MAAO,kBAAMkxH,UAAUppG,WAC1B/R,MAAM,eAAgB,GACtBA,MAAM,iBAAkB,KAKlCtJ,OAAOi/D,QC1GDsa,oCACTY,aAAc,cACdtpE,UAAW,GACXupE,Y9DLuB,O8DMvBsqC,cAAe,SACf7sC,aACIiT,YACI16F,KAAM,SACNuhH,WAAY,EAAG,EAAG,EAAG,KAEzBhnB,OACIv6F,KAAM,OACNuhH,WAAY,EAAG,EAAG,GAAK,KAE3B9mB,QACIz6F,KAAM,OACNuhH,WAAY,EAAG,EAAG,GAAK,MAI/BqE,aAAc,GACd7nB,sBAAuB,GACvB99D,WACIjgC,KAAM,YAEVq3C,YACI8oC,OAAQ,QACR7U,SAAU,KAEd4wB,UACIpiF,MACI/kB,MAAO,IAEXyjC,SACAq0F,QACI93H,MAAO,mBAEX2d,QACA48E,OACIv6F,MAAO,UAEXmf,KACApY,KACAkiG,eACIjpG,MAAO,IAEXw/H,aACIx/H,MAAO,KAGfy/H,QAAS,SAAU,QAAS,UAAW,SAAU,OAAQ,MAAO,YAChEC,OAAQ,GAAI,GAAI,GAAI,GAAI,GAAI,2xECnBXC,sCAOjB,SAAAA,aAAsB,IAAAp+B,iBAAA1hB,0JAAA+/C,CAAA37H,KAAA07H,YAAA,QAAAtiE,KAAAl1D,UAAA7C,OAANkmE,KAAM,IAAAhiE,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAANkO,KAAMlO,MAAAn1D,UAAAm1D,MAAA,OAClBuiB,MAAAggD,gCAAA57H,MAAAs9F,iBAAAu+B,qBAAAH,aAAAzgI,KAAAoC,MAAAigG,kBAAAt9F,MAAAsF,OAASiiE,SACJvO,SAAW,IAAIF,qBACpB8iB,MAAK0wC,WAAahsD,OAAO5sC,OAHPkoD,wXAPc0zC,iSAchC,MAAO,4DAsCM9oH,MAoBb,IApBgC,IAAAw1E,OAAAh8E,KAAb8V,OAAa5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAC5Bu8D,UACEyiC,SAAWljG,KAAK8V,SAASotF,SACzB5W,KAAOtsF,KAAKssF,OAEdpxE,EAEAgoF,SAFAhoF,EACApY,EACAogG,SADApgG,EAEE4pF,OAASxxE,EAAErT,MACX+kF,OAAS9pF,EAAE+E,MACHkyF,SAA+BzN,KAArCxrE,KAAuBg5E,UAAcxN,KAArBgK,MAClBt6B,aAAeh8D,KAAKwG,OAAO8O,kBAC3Bk+G,OAASx3D,aAAa0wB,SAAW1wB,aAAa0wB,QAAQzzE,IAAIjS,OAASw0F,yBAAUt8F,UAC7Eu0H,OAASz3D,aAAa4wB,SAAW5wB,aAAa4wB,QAAQ3zE,IAAIjS,OAASw0F,yBAAUt8F,UAC7E7C,IAAMm3H,OAAShvB,SAAS95F,EAAK+oH,OAASjvB,SAASrhG,EAAI,KACnDsxF,YAAcz0F,KAAKy0F,cACnBoF,UAAYvN,KAAK9sD,MAhBSs8F,eAiBGhmH,OAAOs4B,OAA/B2tF,QAjBqBD,eAiBxB5gH,EAAe8gH,QAjBSF,eAiBZh5H,EACd+wH,OAAS3wB,SAAS2wB,OAAO93H,MAlBCk6D,MAAA,SAAAA,MAoBvBn7D,EAAO4oB,KACZ,IAAMtoB,EAAIoL,KAAK1L,GACTgmB,KAAOi5E,SAASQ,QAAQn/F,EAAE0lB,MAC1Bw1E,MAAQwD,UAAUQ,SAASl/F,EAAEk7F,OAvBP4yB,MAAA+S,qBAyBVz3B,SAAS95F,EAAG85F,SAASrhG,GAAG6B,IAAI,SAACgC,MAC3C,IAAMjL,MAAoB,OAAZX,EAAE4L,WAAiB9J,EAAY9B,EAAE4L,MACzC2zF,QAAU3zF,OAASw9F,SAAS95F,EAAI+pF,YAAYxyE,MAAQwyE,YAAYvyE,OACtE,OAAQghF,SAASl8F,MAAMa,MAAsBykF,KAAKtlF,MAAM2rF,cAAc52F,OAAvC4+F,QAAU,IA5BjB,GAyBvB+4B,IAzBuBxK,MAAA,GAyBlByK,IAzBkBzK,MAAA,GA+B5BwK,KAAOqI,QACPpI,KAAOqI,QAEP,IAAIx8F,MAAQq6D,UAAUQ,SAASj/F,EAAEokC,OAE3Bo0F,kBAAoBnG,+BACtBj2G,QACI0D,EAAGw4G,IACH5wH,EAAG6wH,IACHn0F,YACA82D,YACAx1E,UACAta,KAAMpL,GAEVoL,KAAMpL,GACPN,EAAG0L,KAAMw1E,QAGN97D,OACFxG,KAHJ8lB,MAAQo0F,kBAAkBp0F,MAItBq0F,eAEE98C,KACF77D,EAAG04G,kBAAkB14G,EACrBpY,EAAG8wH,kBAAkB9wH,GAGzB,IAAKiK,MAAM2mH,OAAS3mH,MAAM4mH,KAAM,CAC5B,IAAMjwE,OACF1F,MAAO+4B,IACPjpD,OAAQipD,IACRuf,MAAOs9B,kBAAkBt9B,MACzBx1E,KAAM9d,KAAKiY,IAAI24G,kBAAkB9yG,MACjC5M,KAAMy5G,gBAAgBztG,MAAO25E,WAC7B35E,YACAokB,OAAQlpC,EAAEkpC,OACVmmF,MAAOrvH,EAAEqvH,OAEb/mE,MAAMj8B,UAAYiiG,uBAAuBtuH,EAAGN,EAAG0L,KAAMw1E,QACrDvb,OAAOn8D,KAAKo/C,OACZs4B,OAAK83C,WAAW14H,EAAEiB,KAAMqnD,SAnDvB5oD,EAAI,EAAG4oB,IAAMld,KAAKnF,OAAQvG,EAAI4oB,IAAK5oB,IAAKm7D,MAAxCn7D,GAuDT,OADA2lE,OAASurD,eAAehsH,KAAMygE,8CAU1BzhD,WAAW,IAEX+0G,gBAFWhzC,OAAA/gF,KACXk8H,QAAU,EAERpmH,OAAS9V,KAAK8V,SACd1R,KAAOpE,KAAK+uH,iBAAiB/pH,IAAI,SAAA5J,GAAC,OAAIA,EAAEiB,MACtCgiD,WAAqDvoC,OAArDuoC,WAAY52B,UAAyC3R,OAAzC2R,UAAWspE,aAA8Bj7E,OAA9Bi7E,aAAcC,YAAgBl7E,OAAhBk7E,YACvCi2B,eAAiBjnH,KAAKivH,gBACtB+E,mBAAqBx+C,6BAAcx2D,WACnCi4E,mBAAqBx+B,sBAAsBs4B,aAAc/wF,KAAK+e,KAAMiyE,aAC1EhxF,KAAK4vH,WACL5vH,KAAK+wH,aAELiD,mBAAmBtpD,QAAQusB,mBAAmB10F,KAAK,MAAM,GAAMmoE,QAAQjjD,WAAW,GAElFznB,KAAK4vH,QAAU5vH,KAAKm8H,mBAAmBlV,eAAgB7iH,MACvDpE,KAAK8vH,iBAEL,IAAM/oH,OAAS/G,KAAKwG,OAAO+U,YAkB3B,OAjBAm6D,YAAY12D,UAAW,IAAKhf,KAAK4vH,QAAS,MACtC9hG,OAAQ,SAAAA,OAACid,MAAO01B,QACZy7D,QAAUl5H,KAAKmK,IAAL9P,MAAA2F,MAASk5H,SAAL52H,OAAA82H,wBAAiB37D,OAAOz7D,IAAI,SAAA5J,GAAC,OAAIA,EAAE0lB,UACjDizG,gBAAe,GAAAzuH,OAAM2xF,mBAAmB,IACxClW,OAAKn7E,YAAYy2H,QAAjBt7C,EACIwP,MAAOxP,OACP/hE,UAAW+rB,MAAMjoB,OACjB29C,cACAx4B,YAAanyB,OAAOmyB,YACpBxgB,UAAWssG,gBACX11E,sBACAw3B,MAAO,SAAAA,MAAAjxE,GAAC,OjByUH,SAAZ03H,UAAah4F,OAAQv9B,QAAT,OAAoBu9B,OAAO14B,OAAO,SAAC4nD,IAAK14D,GAAN,OAAYiM,OAAOjM,IAC1EiM,OAAOjM,GAAGkM,OAASw0F,yBAAUt8F,YAAWqD,OiB1UZ+5H,CAAU13H,EAAE0/B,OAAQv9B,aAGzC,SAAAP,MAAI,OAAIA,KAAK,GAAGikH,QACnBzqH,KAAKu8H,SAA0C,EAA/Bv5H,KAAKoK,KAAK8uH,QAAUl5H,KAAKg+B,IACzC4qF,oBAAoB5rH,KAAKg5D,SAAUh5D,KAAK4vH,SACjC5vH,mEAGSinH,eAAgB7iH,MAAM,IAAA68E,OAAAjhF,KAAAw8H,qBAAAP,oBACA9P,2BAAmBnsH,KAAMoE,MADzB,GAC/Bq4H,aAD+BD,qBAAA,GACjBE,cADiBF,qBAAA,GAEhCG,cAAgBF,aAAahQ,iBAC7BmQ,cAAgBF,cAAcjQ,iBACpC,OAAOxF,eAAejiH,IAAI,SAACi3D,QAASnhE,GAChC,IAAM+hI,gBAAkB57C,OAAK67C,qBAAqBH,cAAc7hI,GAAI8hI,cAAc9hI,GAAI2hI,aAAalQ,KAC/FmQ,cAAcnQ,MAClB,OAAOtrC,OAAKuzC,gBAAgBv4D,QAAS4gE,mBACtCjxH,OAAO,SAAAxQ,GAAC,OAAIA,EAAEiG,2EAGC06H,QAASC,QAASe,UAAWC,YAC/C,OACI5uF,QACIlzB,GAAI6gH,SAAW,GAAKgB,UAAY,EAChCj6H,GAAIk5H,SAAW,GAAKgB,WAAa,GAErCzQ,MACIrxG,EAAG6hH,UACHj6H,EAAGk6H,qEAWE9hH,EAAGpY,GAChB,IAAMm6H,cAAgBj6H,KAAKmK,IAAInN,KAAKu8H,SAAUv8H,KAAK8V,SAASivF,uBAE5D,IAAK/kG,KAAKwG,OACN,OAAO,KAGX,IAAMk9C,MAAQ1jD,KAAKg5D,SAAS3+C,KAAKa,EAAGpY,EAAGm6H,eACjClwC,WAAarpC,OAASA,MAAMl9C,KAAKA,KAAKsnB,OACtC2kC,OAAS/O,MAAQ1gD,KAAKoK,KAAKs2C,MAAMl9C,KAAKA,KAAKsa,KAAO9d,KAAKg+B,IAAM,EAEnE,GAAI0iB,MAAO,KAAAmxE,iBACmBnxE,MAAMl9C,KAAKA,KAA7B89B,OADDuwF,iBACCvwF,OAAQmmF,MADToK,iBACSpK,MAEhB,OACI1rG,GAFgB/e,KAAK80H,uBAAuBxwF,OAAQmmF,OAGpD19B,aACI7xE,EAAG6xE,WAAW7xE,EACdpY,EAAGiqF,WAAWjqF,EACdmf,MAAOwwC,OACPvwC,OAAQuwC,SAEZsiE,QAAS/0H,KAAK+e,MAGtB,OAAO,6DA/MP,OAAOoxE,uFAGW/R,KAAM40C,UACxB,IAAMl9G,OAASw5G,qBAAU9pB,cAAcpnB,KAAM40C,UACvC9vB,SAAWptF,OAAOotF,SAClBj8D,UAAYnxB,OAAOmxB,UACnBgtF,WAAa/wB,SAAS1jE,OAAS0jE,SAAS1jE,MAAM33B,MAKpD,OAHIosH,aACAhtF,UAAU1qB,QAAU03G,YAEjBn+G,uDAIP,MAAO,gDAIP,OAAO2kH,iCChCyByC,mBAAY,SAAZA,UAAatmH,QAAW,IACpD25E,MAAoC35E,OAApC25E,MAAO9vB,OAA6B7pD,OAA7B6pD,OAAQzhD,UAAqBpI,OAArBoI,UAAW62D,MAAUj/D,OAAVi/D,MAC5Bs8C,aAAe5hC,MAAMu/B,cAQ3B,OAAOp6C,YAAY12D,UAAW,OAAQyhD,OAAQ,MAN1CziB,MADc,SAAAA,MACPr5B,KAAMvpB,IAfF,SAAb+hI,WAAcx4G,KAAMvpB,GACtB,IAAMsiD,UAAY/4B,KACZq5B,MAAQ5iD,EAAE4iD,UAChBxiD,OAAOkS,QAAQswC,OAAOt4C,QAAQ,SAAAu4C,MAAI,OAAMlxC,MAAMkxC,KAAK,KAAOP,UAAUO,KAAKA,KAAK,GAAIA,KAAK,MAYjEk/E,CAAWx4G,KAAMvpB,IACnC0yB,OAFc,SAAAA,OAENnJ,KAAMvpB,EAAGN,GACbq3H,aAAa/2H,EAAEqvH,OAAS9lG,KAxCb,SAAjBy4G,eAAkB7sC,MAAO5rE,KAAMu/C,MAAOxiE,MAAOshB,SAAY,IACnDq7B,WAAer7B,QAAfq7B,WACAi0B,SAA+Bj0B,WAA/Bi0B,SAAUyK,SAAqB1+B,WAArB0+B,SAAUoK,OAAW9oC,WAAX8oC,OACtBzpC,UAAY/4B,KAEZ04G,cAAgBtgD,SAAWr/B,UAC7BA,UAAUW,aACTi0B,SAASA,UACTC,KAAK7a,QAAQyvB,SACbh9E,GAAG,MAAOomF,MAAMwZ,6BACfj8E,OAASo2C,MAAMp2C,QAAUo2C,MACzB6nD,YAAc7nD,MAAMhkD,UAC1BgkD,MAAMz8C,WAAai2B,UAAUgtB,QAAQxG,MAAMz8C,WAAW,GACtDjsB,OAAOkS,QAAQogB,QAAQpoB,QAAQ,SAAAu4C,MAAI,OAAMlxC,MAAMkxC,KAAK,KAAOo/E,cAAcp/E,KAAKA,KAAK,GAAIA,KAAK,MAC5FziD,OAAOkS,QAAQq+G,aAAarmH,QAAQ,SAAAklB,UAAQ,OAAI8yB,UAAUx9B,MAAM0K,SAAS,GAAIA,SAAS,MA2B9EwyG,CAAe7sC,MAAO5rE,KAAMvpB,EAAGN,EAAG8b,UAGqBi/D,QCpDtDsa,kCACTa,YjEHuB,OiEIvBD,aAAc,YACdtpE,UAAW,GACXgnE,aACIiT,YACI16F,KAAM,OACNuhH,WAAY,EAAG,GAAI,GAAI,KAE3BhnB,OACIv6F,KAAM,OACNuhH,WAAY,EAAG,EAAG,GAAK,KAE3B9mB,QACIz6F,KAAM,OACNuhH,WAAY,EAAG,EAAG,GAAK,MAG/BthF,WACIjgC,KAAM,SAEVq3C,YACI8oC,OAAQ,QACR7U,SAAU,KAEds6C,aAAc,GACd1pB,UACI1jE,SACAtkB,KACApY,KACAiqC,MACA0S,OAEJ02E,QACIz0B,WACIj6E,UAAS,GAAAniB,OjErCM,OiEqCN,yBAEb8wH,SACI3uG,UAAS,GAAAniB,OjExCM,OiEwCN,uBAEb+wH,UACI5uG,UAAS,GAAAniB,OjE3CM,OiE2CN,ysBCvCrB,IAAMg4H,mBACFpiH,EAAG,SAAAA,EAACw4G,IAAK6J,cAAeC,YAArB,OAAqCD,eAAiB7J,IAAK8J,aAAeA,WAAY9J,MACzF5wH,EAAG,SAAAA,EAAC6wH,IAAK4J,cAAeC,YAArB,OAAqCD,eAAiBC,WAAY7J,MAAQA,IAAK6J,cAYhFC,6BAAoB,SAApBA,kBAAqBz2H,KAAM02H,SAAU5nH,OAAQtP,MAC/C,IAWIuwE,IAXE4mD,UAAqB,MAAT32H,KAAe,QAAU,SADa+uD,MAE7BjgD,OAAM,GAAAxQ,OAAI0B,KAAJ,cAAsB02H,SAAQ,GAAAp4H,OAAI0B,KAAJ,UAAxD8uD,UAFiDC,KAAA,GAEtCjZ,KAFsCiZ,KAAA,GAIpD20D,cAIA50G,OAJA40G,cACAkT,aAGA9nH,OAHA8nH,aACAC,WAEA/nH,OAFA+nH,WACAppC,YACA3+E,OADA2+E,YAGEqpC,UAAYF,aAAa7hI,MAC3BiiD,MAAQ,EAER+kB,MAAQ,EACRg7D,WAAa,EACjB,QAAkB7gI,IAAd44D,UACA,GAAIhgD,OAAM,GAAAxQ,OAAI0B,KAAJ,WAAmB,CACzB,IAEIkG,IACAC,IAHE6wH,OAASx3H,KAAKQ,MACdi3H,OAASz3H,KAAI,GAAAlB,OAAI0B,KAAJ,MAGnB,GAAe,OAAXg3H,QAA8B,OAAXC,OACnB,OACIF,gBAAY7gI,EACZ8gD,WAAO9gD,EACP65E,SAAK75E,EACL6lE,WAAO7lE,GAEJ44D,YAAcs3B,8BAAepuF,YAAc82D,YAAchB,gCAAiBj2D,UACjFqO,IAAMlK,KAAKkK,IAAI8wH,OAAQC,QACvB9wH,IAAMnK,KAAKmK,IAAI6wH,OAAQC,UAEvB/wH,IAAM8wH,OACN7wH,IAAM8wH,QAEV,IAAMh3B,OAAkB,MAATjgG,MAAgBkG,IAAKC,MAAQA,IAAKD,KACjD6pE,IAAMj6B,KAAK61C,cAAcsU,OAAO,IAAMnqD,KAAK81C,eAAiB,EAC5D7vB,MAAQ//D,KAAKiY,IAAI6hC,KAAK61C,cAAcsU,OAAO,IAAMlwB,KAAOj6B,KAAK81C,eAAiB,EAE9E50C,MAAQ+4B,IACRgnD,WAAa,OACV,GAAIjoE,YAAchB,gCAAiBl2D,aAAek3D,YAAchB,gCAAiBj2D,SAAU,CAK9F,GAJAk4E,IAAMj6B,KAAK61C,cAAcnsF,KAAKQ,QACzB62H,WAAoB,MAAT72H,KAAe,iBAAmB,oBAAsB,GAExE+7D,MAAQ86D,WAAoB,MAAT72H,KAAe,WAAa,kBAC7B9J,IAAd4gI,UAAyB,CACzB,IAAMI,OAASJ,UAAY/6D,MAC3BA,OAASm7D,OACTnnD,KAAOmnD,OAAS,EAEpBlgF,MAAQ+4B,IACRgnD,WAAah7D,UACV,CACH,IAAMo7D,UAAYrhF,KAAKtnC,SAAS,GAC1BgoH,WAAaW,UAAY,EAAIrhF,KAAK61C,cAAc,GAAK71C,KAAK61C,cAAcwrC,WAC9EpnD,IAAMj6B,KAAK61C,cAAcnsF,KAAKQ,OAC9B,IAAIkmF,OAASpwC,KAAK61C,cAAcnsF,KAAI,GAAAlB,OAAI0B,KAAJ,OAEpC+2H,WAAa,EACb,IAAMR,cAAgB/2H,KAAKQ,MAAQ,EACnC,GlE9ES,UkE8EL0jH,cAAyB,KAAA0T,uBAAAC,yBACTf,kBAAkBt2H,MAAM+vE,IAAKwmD,cAAeC,YADnC,GACxBzmD,IADwBqnD,uBAAA,GACnBlxC,OADmBkxC,uBAAA,GAG7Br7D,MAAQ//D,KAAKiY,IAAI87D,IAAMmW,QACvBlvC,MAAQw/E,gBAGZzmD,IAAM,EACNhU,MAAQ0xB,YAAYkpC,WAGxB,OACII,sBACA//E,YACA+4B,QACAhU,cAYFu7D,kBAAoB,SAApBA,kBAAqB93H,KAAMsP,OAAQw2E,MACrC,IAAMoxC,UACFnxC,MAAOD,KAAKpxE,EACZsxE,MAAOF,KAAKxpF,GAH8By7H,mBAU1Cd,6BAAkB,IAAKC,SAAU5nH,OAAQtP,MAJ7Bg4H,WAN8BD,mBAM1CR,WACOU,OAPmCF,mBAO1CvgF,MACK0gF,KARqCH,mBAQ1CxnD,IACO90D,MATmCs8G,mBAS1Cx7D,MAT0C47D,oBAiB1ClB,6BAAkB,IAAKC,SAAU5nH,OAAQtP,MAJ7Bo4H,YAb8BD,oBAa1CZ,WAKJ,OACI//E,OACI9iC,EAAGujH,OACH37H,EArBsC67H,oBAc1C3gF,MAQI/7B,MAAOu8G,WACPt8G,OAAQ08G,aAEZ9wG,QACI5S,EAAGwjH,KACH57H,EA3BsC67H,oBAe1C5nD,IAaI90D,YACAC,OA7BsCy8G,oBAgB1C57D,8sFCvGR,IAAM9jE,YAAUu8F,yBAAUv8F,QACpBshE,cAAYD,OAAO5sC,KAaJmrG,kCAIjB,SAAAA,WAAwB,IAAAvhC,iBAAA1hB,wJAAAkjD,CAAA9+H,KAAA6+H,UAAA,QAAAzlE,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MAAA,OACpBuiB,MAAAmjD,8BAAA/+H,MAAAs9F,iBAAA0hC,mBAAAH,WAAA5jI,KAAAoC,MAAAigG,kBAAAt9F,MAAAsF,OAASsR,WACJ01G,WAAa/rD,gBAClBqb,MAAKqjD,cACD/jH,EAAG,EACHpY,EAAG,GAEP84E,MAAKsjD,WACDhkH,EAAG,EACHpY,EAAG,GAEP84E,MAAKm1C,aAXen1C,kXAJU0zC,yRAyB9B,MAAO,+EAmDc9oH,KAAMujH,iBAAkB/tD,cAC7C,IAAMxmD,OAAS2pH,QAAAH,mBAAAH,SAAAjiI,WAAA,0BAAAoD,MAAA/E,KAAA+E,KAA8BwG,KAAMujH,iBAAkB/tD,cAWrE,OAVC,IAAK,KAAKt2D,QAAQ,SAACtK,GACZ2uH,iBAAgB,GAAAzkH,OAAIlK,EAAJ,gBAAsB6D,aAAWi6D,WAAW1jD,OAAOpa,GAAI,YACnE2uH,iBAAgB,GAAAzkH,OAAIlK,EAAJ,WAChBoa,OAAOpa,GAAKoa,OAAOpa,GAAG6Q,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAIoF,KAEzC6S,OAAOpa,GAAG,GAAK4H,KAAKkK,IAAIsI,OAAOpa,GAAG,GAAI,GACtCoa,OAAOpa,GAAG,GAAK4H,KAAKmK,IAAI,EAAGqI,OAAOpa,GAAG,QAI1Coa,+DAWMhP,KAAMq3H,YACnB,ODe2B,SAAtBuB,oBAAuBp8G,QAASxc,KAAMq3H,YAkB/C,IAjBA,IAAIp9D,UACEyiC,SAAWlgF,QAAQlN,SAASotF,SAC5B5W,KAAOtpE,QAAQspE,OACfuN,UAAYvN,KAAK9sD,MACjBo+F,aAAe16B,SAASpiF,SALgCysG,sBAWtDvqG,QAAQqoG,oBAJRG,QAPsD+B,sBAOtD/B,QACAC,QARsD8B,sBAQtD9B,QACAH,cATsDiC,sBAStDjC,cACAC,cAVsDgC,sBAUtDhC,cAEF92B,YAAczxE,QAAQyxE,cACtB++B,OAASlI,gBAAkBx2D,gCAAiBl2D,aAAe0sH,gBAAkBx2D,gCAAiBj2D,SAC9F40H,OAASlI,gBAAkBz2D,gCAAiBl2D,aAAe2sH,gBAAkBz2D,gCAAiBj2D,SAC9FxC,IAAMm3H,OAAS,IAAOC,OAAS,IAAM,KACrC/I,cAAgB1nG,QAAQ0nG,gBAErB5vH,EAAI,EAAG4oB,IAAMld,KAAKnF,OAAQvG,EAAI4oB,IAAK5oB,IAAK,CAC7C,IAAMM,EAAIoL,KAAK1L,GACTiyF,WAAauxC,kBAAkBljI,GACjCyxF,WAAYy+B,cACZx+B,WAAYy+B,cACZC,gBACAC,gBACAf,4BACAj2B,wBACAopC,sBACAD,2BACDtxC,MAEC9sD,MAAQq6D,UAAUQ,SAASj/F,EAAEokC,OAE3B1R,OAASi/D,WAAWj/D,OACpB8lG,kBAAoBnG,+BACtBj2G,QACI0D,EAAG4S,OAAO5S,EACVpY,EAAGgrB,OAAOhrB,EACVmf,MAAO6L,OAAO7L,MACdC,OAAQ4L,OAAO5L,OACfsd,aAEJh5B,KAAMpL,GACPN,EAAG0L,KAAMwc,SACZwc,MAAQo0F,kBAAkBp0F,MA1BmB,IA2BrCtkB,EAAwB04G,kBAAxB14G,EAAGpY,EAAqB8wH,kBAArB9wH,EAAGmf,MAAkB2xG,kBAAlB3xG,MAAOC,OAAW0xG,kBAAX1xG,OACfhC,OACFxG,KAAM8lB,OAGV,IAAKzyB,MAAMmO,KAAOnO,MAAMjK,SAAkB5F,IAAZ9B,EAAEqvH,MAAqB,CACjD,IAAI/mE,MAAQ,MACZA,OACI1F,MAAO+uC,WAAW/uC,MAClBlwB,QACI5S,IACApY,IACAmf,YACAC,eAEJoiB,OAAQlpC,EAAEkpC,OACVmmF,MAAOrvH,EAAEqvH,MACTvqG,YACAhM,KAAMy5G,gBAAgBztG,MAAO25E,aAE3BpyE,UAAYiiG,uBAAuBtuH,EAAGN,EAAG0L,KAAMwc,SACrDy9C,OAAOn8D,KAAKo/C,OAEZ1gC,QAAQ8wG,WAAW14H,EAAEiB,KAAMqnD,QAKnC,OADA+c,OAASurD,eAAehpG,QAASy9C,QCvFtB2+D,CAAoBp/H,KAAMwG,KAAMq3H,kDAQnC7+G,WAAW,IAAAg9D,OAAAh8E,KACT8V,OAAS9V,KAAK8V,SACduoC,WAAavoC,OAAOuoC,WACpBghF,kBAAoBr/H,KAAKivH,gBAEzB7qH,KADkBpE,KAAK+uH,iBACA/pH,IAAI,SAAA5J,GAAC,OAAIA,EAAEiB,MAClC2/D,aAAeh8D,KAAKwG,OAAO8O,kBAC3Bg3E,KAAOtsF,KAAKssF,OACZpqE,OAASoqE,KAAKxpF,GAAKwpF,KAAKxpF,EAAE0wB,QAAQzC,QAAQ,GAC1C9O,MAAQqqE,KAAKpxE,GAAKoxE,KAAKpxE,EAAEsY,QAAQzC,QAAQ,GACzCggE,aAAej7E,OAAOi7E,aACtBkG,mBAAqBx+B,sBAAsBs4B,aAAc/wF,KAAK+e,KAAMjJ,OAAOk7E,aAC3EvpE,UAAY3R,OAAO2R,UACnBusG,mBAAqBx+C,6BAAcx2D,WACnC+tE,WAAavxF,OAAOgc,OAAOwkD,cAAcpwD,OAAO,SAAA5O,GAAC,OAAIA,EAAEic,IAAIjS,OAASw0F,yBAAUt8F,YAC/E8F,IAAI,SAAAhI,GAAC,OAAIA,EAAE0E,QAgChB,OA/BAsyH,mBAAmBtpD,QAAQusB,mBAAmB10F,KAAK,MAAM,GACzDyxH,mBAAmBtpD,QAAQjjD,WAAW,G5H8D1B,SAAd63G,YAAetgH,UAAWy1E,YAAa11E,IACzC,IAAMwgH,gBAAkB7pD,YAAYhgE,WAAOsJ,WAAY,YAAa,GAAjC,IAAA1Z,OAAyCyZ,KACvD22D,YAAY6pD,gBAAiB,QAAS,IAC9CthF,KAAK,IAAKw2C,YAAYv5E,GAClB+iC,KAAK,IAAKw2C,YAAYv5E,GACtB+iC,KAAK,QAASw2C,YAAYxyE,OAC1Bg8B,KAAK,SAAUw2C,YAAYvyE,QAC5Cq9G,gBAAgBthF,KAAK,YAArB,QAAA34C,OAA0CyZ,GAA1C,M4HpEIugH,CAAYtgH,WACR9D,EAAG,EACHpY,EAAG,EACHmf,YACAC,eAJO,MAAA5c,OAKFtF,KAAK+e,OAEd/e,KAAK4vH,QAAU5vH,KAAKm8H,mBAAmBkD,kBAAmBj7H,MAC1DpE,KAAK8vH,iBAELj5C,+BACIrwE,KAAMxG,KAAK4vH,QACX5wG,oBACA0kD,SAAU,IACVj2C,OAAQ,IACRuE,KAAM,SAAAA,KAACyuC,OAAQ11B,MAAOjwC,GAClB,IAAMi5H,gBAAkB,GAAAzuH,OAAG2xF,mBAAmB,GAAtB,KAAA3xF,OAA4BlB,KAAKtJ,IAAMA,GAAIsG,cACnE2pC,MAAM7qB,MAAM,UAAW,SACvBg9G,oBACI3sC,MAAOvU,OACPh9D,UAAW+rB,MAAMjoB,OACjB29C,cACAh5C,UAAWssG,gBACX11E,sBACAn+B,SACA21D,MAAO,SAAAA,MAAAz6E,GAAC,OAAI2xF,WAAW/nF,IAAI,SAAA3I,KAAG,OAAIjB,EAAEkpC,OAAOjoC,OAAMkG,KAAK,WAI3DvC,mEAWSinH,eAAgB7iH,MAAM,IAAA28E,OAAA/gF,KAAAw8H,qBAAAgD,kBACMrT,2BAAmBnsH,KAAMoE,MAD/B,GAC/Bq7H,gBAD+BjD,qBAAA,GACdkD,iBADclD,qBAAA,GAEhCmD,gBAAkBF,gBAAgBhT,iBAClCmT,iBAAmBF,iBAAiBjT,iBAW1C,OAVAzsH,KAAKk/H,WACDhkH,EAAGukH,gBAAgBjT,WAAa,EAChC1pH,EAAG48H,iBAAiBlT,WAAa,GAErCxsH,KAAKi/H,cACD/jH,EAAGukH,gBAAgBt2G,SAAW,EAC9BrmB,EAAG48H,iBAAiBv2G,SAAW,GAGnCnpB,KAAK+wH,aACE9J,eAAejiH,IAAI,SAACwB,KAAM1L,GAAP,OAAaimF,OAAKyzC,gBAAgBhuH,MAEpDq5H,SAAUJ,gBAAgBlT,KAC1BuT,eAAgBH,gBAAgB7kI,IAAM,EACtCilI,UAAWL,iBAAiBnT,KAC5ByT,gBAAiBJ,iBAAiB9kI,IAAM,8DAKhD,OAAOkF,KAAKi/H,iFAIZj/H,KAAK0wH,eAAiBrD,kCAA0BrtH,8DASnCkb,EAAGpY,GAChB,IAAK9C,KAAKwG,OACN,OAAO,KAEX,IACIzK,MACA0kE,OACAw/D,gBACA9Y,iBACA5uD,WACAuD,YACAokE,WAAa,KACXxkE,UAAY17D,KAAKwG,OACjBw1F,QAAUtgC,UAAUnmD,UACpBymD,aAAeN,UAAUpmD,kBACzBg3E,KAAOtsF,KAAKssF,OACZ9lF,KAAOw1F,QAAQx1F,KACfsqH,SAAW9wH,KAAK+wH,UAjBHE,sBAuBXjxH,KAAKqrH,oBAJL3+B,OAnBWukC,sBAmBXvkC,OACAE,OApBWqkC,sBAoBXrkC,OACA0+B,cArBW2F,sBAqBX3F,cACAC,cAtBW0F,sBAsBX1F,cAGJD,gBAAkBl+B,8BAAepuF,YAEjCjD,MADOuwF,KAAKxpF,EACC0xB,OAAO1xB,GACpBqkH,iBAAmBnrD,aAAa4wB,QAAQlrF,MACxCu+H,gBAAkB1U,gBAGlBxvH,MADOuwF,KAAKpxE,EACCsZ,OAAOtZ,GACpBisG,iBAAmBnrD,aAAa0wB,QAAQhrF,MACxCu+H,gBAAkB3U,eAGlB2U,kBAAoBnrE,gCAAiBl2D,cACrC6hE,OAASqwD,SAAS/0H,QAGlBkkI,kBAAoBnrE,gCAAiBj2D,WACrC05D,WAAa4nE,sBAAI,IAAI/wH,IAAI5I,KAAKxB,IAAI,SAAA5J,GAAC,OAAIA,EAAE+rH,sBAEzC1mD,OAASqwD,SADT/0H,MAAQu8D,gBAAgBC,WAAYx8D,SAGxC,IAAM2nB,IAAM+8C,QAAUA,OAAOp/D,OAC7Bo/D,QAAUA,OAAOx0D,KAAK,SAAC2zD,GAAIwgE,IAAL,OAAYxgE,GAAG9xC,OAAOhrB,EAAIs9H,GAAGtyG,OAAOhrB,IAC1D,IAAK,IAAIhI,EAAI,EAAGA,EAAI4oB,IAAK5oB,IAAK,CAC1B,IAAM4oD,MAAQ+c,OAAO3lE,GACfgzB,OAAS41B,MAAM51B,OACrB,GAAI5S,GAAK4S,OAAO5S,GAAKA,GAAM4S,OAAO7L,MAAQ6L,OAAO5S,GAAMpY,GAAKgrB,OAAOhrB,GAAKA,GAAMgrB,OAAO5L,OAAS4L,OAAOhrB,EAAI,CACrGo9H,WAAax8E,MACb,MAEJw8E,WAAa,KAGjB,IAAM1oH,OAAS0oH,YAAcA,WAAW57F,OAIxC,OAHI9sB,SACAskD,YAAc97D,KAAK80H,uBAAuBt9G,OAAQ0oH,WAAWzV,QAE1DyV,YACHnzC,YAAamzC,WAAWpyG,QACxB/O,GAAI+8C,YACJi5D,QAAS/0H,KAAK+e,MACdmhH,6DAIJ,OAAOlgI,KAAKk/H,4DAIZ,OAAO,oDAjPP,MAAO,4DAQP,OAAO/uC,qFAYW/R,KAAM40C,UACxB,IAAMl9G,OAASw5G,qBAAU9pB,cAAcpnB,KAAM40C,UAEvCiB,WADWn+G,OAAOotF,SACI1jE,MAAM33B,MAC5Bo/B,UAAYnxB,OAAOmxB,UAKzB,OAHIgtF,aACAhtF,UAAU1qB,QAAU03G,YAEjBn+G,uBChGFq6E,mCACTY,aAAc,aACdtpE,UAAW,GACXupE,YpELuB,OoEMvBvC,aACIiT,YACI16F,KAAM,SACNuhH,WAAY,EAAG,GAAI,GAAI,KAE3BhnB,OACIv6F,KAAM,SACNuhH,WAAY,EAAG,EAAG,GAAI,KAE1B9mB,QACIz6F,KAAM,SACNuhH,WAAY,EAAG,EAAG,GAAI,MAG9BqE,aAAc,GACd3lF,WACIjgC,KAAM,YAEVq3C,YACI8oC,OAAQ,QACR7U,SAAU,KAEdrqC,YAAa,SACbi7D,UACI1jE,SACAtkB,KACApY,KACAiqC,MACA0S,MACAgT,UACA63D,WACA7gB,SACA8gB,UACAvlB,eACIjpG,MAAO,IAEXw/H,aACIx/H,MAAO,KAGfo6H,QACIz0B,WACIj6E,UAAS,GAAAniB,OpEhDM,OoEgDN,0BAEb8wH,SACI3uG,UAAS,GAAAniB,OpEnDM,OoEmDN,wBAEb+wH,UACI5uG,UAAS,GAAAniB,OpEtDM,OoEsDN,2BCpDf44C,mBAAOogB,QAAQpgB,KAOqBmiF,cAAA,SAACzpH,QAAW,IAC1C6pD,OAA4D7pD,OAA5D6pD,OAAQzhD,UAAoDpI,OAApDoI,UAAW62D,MAAyCj/D,OAAzCi/D,MAAOpuD,UAAkC7Q,OAAlC6Q,UAAWwgB,YAAuBrxB,OAAvBqxB,YAAasoD,MAAU35E,OAAV25E,MACpD3G,MAAQpU,6BAAcx2D,WACtBoS,MAAQw4D,MAAMjsC,UAAU,QAAQn3C,KAAKi6D,OAAQoV,OAC7CyqD,WAAalvG,MAAM4sB,QAAQvwB,OAAO,QAClC0kG,aAAe5hC,MAAMu/B,cAS3B,OARAlmC,MAAM3rC,KAAK,QAASx2B,WAAa,IACjC64G,WAAWtuG,KAAK,SAAU52B,GACtB,IAAMsiD,UAAY83B,6BAAcx1E,MAC1Bg+C,MAAQ5iD,EAAE4iD,UAChBxiD,OAAOkS,QAAQswC,OAAOt4C,QAAQ,SAAAu4C,MAAI,OAAMlxC,MAAMkxC,KAAK,KAAOP,UAAUO,KAAKA,KAAK,GAAIA,KAAK,QAG3F7sB,MAAM0sB,OAAO7rB,SACNb,MAAM+sB,MAAMmiF,YACFtuG,KAAK,SAAU52B,GACZ,IAAMsiD,UAAY83B,6BAAcx1E,MAChCmyH,aAAa/2H,EAAEqvH,OAAS/sE,UACxB,IAAM5vB,OAAS1yB,EAAE0yB,OACXi+F,YAAc3wH,EAAE8kB,UAChB6sB,QAAmB7vC,IAAd4wB,OAAOif,GAAmBjf,OAAOif,GAAKjf,OAAO5S,EAClDukC,QAAmBviD,IAAd4wB,OAAO2xB,GAAmB3xB,OAAO2xB,GAAK3xB,OAAOhrB,EAClDowH,oBAAsBj1D,kBAAkBh2B,aACxCkrF,SAAWj1E,qBACZ8F,MAAMkvE,qBACNh4G,EAAE,SAAAle,GAAC,OAAIA,EAAE,KACT8F,EAAE,SAAA9F,GAAC,OAAIA,EAAE,KACd5B,EAAEqsB,WAAai2B,UAAUgtB,QAAQtvE,EAAEqsB,WAAW,GAC9Ci2B,UAAUO,KAAK,IAAKk1E,WAAWrlG,OAAO5S,EAAG4S,OAAOhrB,IAAKiqC,GAAI0S,OACzDjkD,OAAOkS,QAAQq+G,aAAarmH,QAAQ,SAAAklB,UAAQ,OAAI8yB,UAAUx9B,MAAM0K,SAAS,GAAIA,SAAS,wrCC7B9G,IAAM8uG,uBACFC,MAAO,SAAAA,MAACnzH,MAAiCtC,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,IAAAA,UAAA,GASrC,IATqC,IAAdgnH,UAAchnH,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAC/BovF,KAAO4+B,UAAU5+B,OACnB7rB,UACYm2D,WAAqDtqC,KAA7D75B,OAA2BonE,UAAkCvtC,KAAzCmd,MAA0B82B,WAAej0C,KAAvBi+B,OACxC91B,YAAcy2B,UAAUz2B,cAExBoF,UAAYvN,KAAK9sD,MACjBu3F,UACAyJ,WACG1lI,EAAI,EAAG4oB,IAAMld,KAAKnF,OAAQvG,EAAI4oB,IAAK5oB,IAAK,CAC7C,IAAMM,EAAIoL,KAAK1L,GACT0kC,MAAQq6D,UAAUQ,SAASj/F,EAAEokC,OAC7Bw3F,OAAS6C,UAAUlnC,cAAcv3F,EAAEquG,QACxCstB,OAAO37H,EAAEquG,SAAWstB,OAAO37H,EAAEquG,OAAS,GAJM,IAAAwtB,QAKZD,OAAOD,OAAO37H,EAAEquG,UAAzChoD,WALqCw1E,QAKrCx1E,WAAYE,SALyBs1E,QAKzBt1E,SACd8+E,QAAUF,WAAW5tC,cAAcv3F,EAAEmvH,SAC1CiW,QAAQplI,EAAEmvH,UAAYiW,QAAQplI,EAAEmvH,QAAU,GAPE,IAAAmW,SAQYD,QAAQD,QAAQplI,EAAEmvH,WAAvD8M,YARyBqJ,SAQrCj/E,WAAmC61E,UAREoJ,SAQZ/+E,SAC3B8Q,OAASmkE,WAAWO,eAAe/7H,EAAEq3D,QACrCg3C,OAAShoD,WAAaE,UAAY,EAClC4oE,QAAU8M,YAAcC,WAAa,EACrC2C,YAAcxM,+BAChBj2G,QACIi7C,cACA63D,QAASsM,WAAWQ,eAAeh8H,EAAEkvH,SACrC9qF,YACAiqE,YACA8gB,cACA9oE,sBACAE,kBACA01E,wBACAC,qBAEJ9wH,KAAMpL,GACPN,EAAG0L,KAAM0kH,WACNhrG,OACF2zG,OAAQoG,YAAYz6F,OAGlBkkB,OACF1F,SACAlwB,QACI2kC,OAAQwnE,YAAYxnE,OACpB63D,QAAS2P,YAAY3P,QACrB7gB,MAAOwwB,YAAYxwB,MACnB8gB,OAAQ0P,YAAY1P,QAExBrqG,YACAokB,OAAQlpC,EAAEkpC,OACVmmF,MAAOrvH,EAAEqvH,MACTv2G,KAAMy5G,gBAAgBztG,MAAO25E,YAEjCn2C,MAAMj8B,UAAYiiG,uBAAuBtuH,EAAGN,EAAG0L,KAAM0kH,WACrDzqD,OAAOn8D,KAAKo/C,OAGhB,OADA+c,OAASwtD,uBAAuBjC,eAAed,UAAWzqD,QAASg0B,aAAa,IAGpFylC,UAAW,SAAAA,UAAC1zH,MAsBR,IAtByC,IAA3BsP,OAA2B5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAAdgnH,UAAchnH,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EACnCovF,KAAO4+B,UAAU5+B,OACnB7rB,UAFqCg1D,eAMjCxM,sBAAc38B,MAFdC,MAJiCkpC,eAIjClpC,MACAC,MALiCipC,eAKjCjpC,MALiCm0C,sBAcjCzV,UAAUG,oBANV3+B,OARiCi0C,sBAQjCj0C,OACAE,OATiC+zC,sBASjC/zC,OACA4+B,QAViCmV,sBAUjCnV,QACAC,QAXiCkV,sBAWjClV,QACA5+B,WAZiC8zC,sBAYjC9zC,WACAC,WAbiC6zC,sBAajC7zC,WAEF0mC,OAAS3mC,aAAe2O,yBAAUt8F,UAClCu0H,OAAS3mC,aAAe0O,yBAAUt8F,UAClC7C,IAAMm3H,OAAShvB,SAAS95F,EAAK+oH,OAASjvB,SAASrhG,EAAI,KACnDsxF,YAAcy2B,UAAUz2B,cACxBoF,UAAYvN,KAAK9sD,MAnBkBs8F,eAoBNhmH,OAAOs4B,OAA/B2tF,QApB8BD,eAoBjC5gH,EAAe8gH,QApBkBF,eAoBrBh5H,EApBqB89H,aAqBV9qH,OAAOy2G,KAA3BsU,MArB8BD,aAqBjC1lH,EAAa4lH,MArBoBF,aAqBvB99H,EACThI,EAAI,EAAG4oB,IAAMld,KAAKnF,OAAQvG,EAAI4oB,IAAK5oB,IAAK,CAC7C,IAAI44H,SAAG,EACHqN,UAAI,EACJlL,UAAI,EACJlC,SAAG,EACDv4H,EAAIoL,KAAK1L,GACT84F,IAAMx4F,EAAEkpC,OACVooD,SAEAq0C,MADArN,IAAMnnC,MAAMoG,cAAcv3F,EAAE8f,GAAK6gH,SACpB8E,OAGbj0C,SAEAipC,KAAe,QADflC,IAAMnnC,MAAMmG,cAAcv3F,EAAE0H,GAAKk5H,SACXrI,IAAMmN,MAAQ,MAGnCp0C,SACDgnC,IAAM,EACNqN,KAAOtsC,YAAYxyE,MACdlV,MAAM4mH,OAEPkC,KADAlC,KAAOmN,MAAQ,IAKlBl0C,SACD+mC,IAAM,EACNkC,KAAOphC,YAAYvyE,OACnB6+G,KAAOrN,KAAOmN,MAAQ,GAGtBrV,UACAuV,KAAOx0C,MAAMoG,cAAcv3F,EAAE2xC,IAAM8zF,MACnClN,KAAOmN,MAAQ,EACfjL,MAAQiL,MAAQ,GAGhBrV,UACAoK,KAAOrpC,MAAMmG,cAAcv3F,EAAEqkD,IAAMqhF,MACnCpN,KAAOmN,MAAQ,EACfE,MAAQF,MAAQ,GAEpB,IAAMrhG,MAAQq6D,UAAUQ,SAASj/F,EAAEokC,OAC7Bo0F,kBAAoBnG,+BACtBj2G,QACI0D,EAAGw4G,IACH5wH,EAAG6wH,IACH5mF,GAAIg0F,KACJthF,GAAIo2E,KACJr2F,aAEJh5B,KAAMpL,GACPN,EAAG0L,KAAM0kH,WACNhrG,OACF2zG,OAAQD,kBAAkBp0F,OAG9B,IAAKzyB,MAAM2mH,OAAS3mH,MAAM4mH,KAAM,CAC5B,IAAMjwE,OACF1F,SACAlwB,QACI5S,EAAG04G,kBAAkB14G,EACrBpY,EAAG8wH,kBAAkB9wH,EACrBiqC,GAAI6mF,kBAAkB7mF,GACtB0S,GAAIm0E,kBAAkBn0E,IAE1Bv/B,YACAokB,OAAQsvD,IACR62B,MAAOrvH,EAAEqvH,MACTv2G,KAAMy5G,gBAAgBztG,MAAO25E,YAEjCn2C,MAAMj8B,UAAYiiG,uBAAuBtuH,EAAGN,EAAG0L,KAAM0kH,WACrDzqD,OAAOn8D,KAAKo/C,OACZwnE,UAAU4I,WAAW14H,EAAEiB,KAAMqnD,QAIrC,OADA+c,OAASurD,eAAed,UAAWzqD,UAetBugE,6qBAAkBtF,yRA0C/B,MAAO,+DAUMl1H,KAAMsP,QACnB,OAAO4jH,sBAAiB15H,KAAKqlG,SAAS7+F,KAAMsP,OAAQ9V,wEAGlC+7H,QAASC,QAASe,UAAWC,YAC/C,OACI5uF,QACIlzB,EAAI6gH,SAAW,EACfj5H,EAAIk5H,SAAW,GAEnBzP,MACIrxG,EAAG6hH,UACHj6H,EAAGk6H,qEAtDX,OAAO7sC,kFAWP,MAAO,+CAWP,OAAO8wC,+BCtNFC,uBAAa,OACbC,sBAAY,MACZC,uBAAa,OACbC,uBAAa,OACbC,wBAAc,QACdC,sBAAY,MACZC,uBAAa,OACbC,yBAAe,SACfC,uBAAa,6fCN1B,oBAqBMC,iBAAmB,SAAnBA,iBAAoBz+B,UAEtB,IAAK,IAAM7mG,OAAO6mG,SACe,iBAAlBA,SAAS7mG,OAChB6mG,SAAS7mG,MACLwL,MAAOq7F,SAAS7mG,QC1BjBulI,kBDyCO,WAClB,IAAMC,mBACAC,YACFC,iBAAkB,SAAAA,iBAACC,KACfF,WAAWG,eAAiBD,KAEhCE,kBAAmB,SAAAA,kBAACp/B,KAAMD,UACtB,IAAIs/B,eACEC,KAAOP,gBAAgB/+B,MACvByC,QAAU/qC,kBAAmBqoC,UAGnC,GAAIu/B,KACAD,eAAiBC,KAAKp9H,IAAI,SAACq9H,cACvB,IAAMC,QAGN,OA1DS,SAAvBC,qBAAwB9nE,KAAMxlC,WAAY4tE,SAAU2/B,WACtD,IAAK,IAAMnmI,OAAO44B,WACd,GAAIz5B,OAAOqB,eAAe5B,KAAKg6B,WAAY54B,KAAM,CAC7C,IAAIomI,UAAI,EACJ/5C,eAAS,EACPzvE,IAAMgc,WAAW54B,KACnB64D,eAAej8C,MACfwhD,KAAKp+D,QACLkmI,qBAAqB9nE,KAAKp+D,KAAM4c,IAAK4pF,SAAU2/B,YACzB,iBAARvpH,MAAqBwpH,KAAOxpH,IAAIlR,MAAM,OAAS06H,KAAK,KAAOD,eAEvDtlI,KADlBwrF,UAAYxvB,WAAU77D,WAAV,GAAWwlG,UAAXv9F,OAAAo9H,gCAAwBD,KAAKr3H,MAAM,EAAGq3H,KAAKphI,cAEnDo5D,KAAKp+D,KAAOqsF,WAGhBjuB,KAAKp+D,KAAO4c,KAyCRspH,CAAqBD,KAAMD,aAAc98B,QAASzC,MAClD6+B,iBAAiBW,KAAKp/B,UACfo/B,WAER,CACH,IAAMp/B,SAAWqC,QAAQrC,SAEzBy+B,iBAAiBz+B,UACjBi/B,eAAiB58B,QAGrB,OAAO48B,gBAEXQ,iBAAkB,SAAAA,iBAAC9/B,UAAwB,QAAAzpC,KAAAl1D,UAAA7C,OAAXuV,OAAW,IAAArR,MAAA6zD,KAAA,EAAAA,KAAA,KAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAXziD,OAAWyiD,KAAA,GAAAn1D,UAAAm1D,MACvC,IAAMspC,cAAgBm/B,WAAWG,eAE3BW,WADN//B,SAAaA,oBAAoBt9F,MAAsBs9F,UAAZA,WAChB79F,IAAI,SAAC69H,UAC5B,IAAMC,iBAAmBngC,cAAckgC,SAAS//B,MAChD,OAAOggC,iBAAiB1mI,OAAjBiB,MAAAylI,iBAA2BlsH,UAEtC,OAA4B,IAArBgsH,UAAUvhI,OAAeuhI,UAAU,GAAKA,WAEnDG,cAAe,SAAAA,cAAAjgC,MAAI,OAAIg/B,WAAWG,eAAen/B,OASjDkgC,cAAe,SAAAA,cAACR,UAAW5/B,WACvBi/B,gBAAgBW,WAAa5/B,WAEjCqgC,oBAAqB,SAAAA,oBAACpgC,UAClB,IAAM0C,QAAU/qC,kBAAmBqoC,UAEnC,OADA8+B,iBAAiBp8B,QAAQrC,UAClBqC,UAGf,OAAOu8B,WAvDW,+KEjCf,0BAAMoB,gBAAcC,wBAAAC,mBACtBC,uBAAyB/N,gBADH6N,wBAAAC,gBAEtBC,sBAAwB/M,cAFF6M,wBAAAC,gBAGtBC,uBAAyBjQ,gBAHH+P,wBAAAC,gBAItBC,uBAAyB9I,gBAJH4I,wBAAAC,gBAKtBC,wBAA0B3H,kBALJyH,wBAAAC,gBAMtBC,uBAAyBrC,gBANHmC,wBAAAC,gBAOtBC,sBAAwBxE,cAPFsE,wBAAAC,gBAQtBC,uBAAyB/T,sBARH8T,mPCY3B,IAAAE,eAAAC,0CAAAC,yBrCQsB,aqCRtBD,0CAAAC,sBAEKre,SAFLoe,0CAAAC,sBAGKpe,YAHLme,0CAAAC,sBAIKn/B,0BAJLk/B,0CAAAC,sBAKKl/B,0BALLi/B,0CAAAC,sBAMKp/B,yBANLm/B,0CAAAC,sBrCuGsB,aqCvGtBD,0CAAAC,sBrC4GsB,aqC5GtBD,0CAAAC,sBrCiHyB,gBqCjHzBA,+UC+BeC,6fArCP,MAAM,IAAI95H,MAAM2wD,UAAUC,wDAY1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,8DAU1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,kEAW1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,2NC/C3B,IAAM+tB,oBAAkBo7C,oCAAA1+C,uBAC1B2+C,wBAAQziD,MACLkF,YAAa+d,2BAAW5Y,OACxB1e,OAAO,IAHgB62D,oCAAA1+C,oBAK1B2+C,wBAAQxiD,OACLiF,YAAa+d,2BAAW3Y,aANDk4C,oCAAA1+C,oBAQ1B2+C,wBAAQriD,WACL8E,YAAa+d,2BAAWv7F,QACxBikE,OAAO,IAVgB62D,oCAAA1+C,oBAY1B2+C,wBAAQpiD,WACL6E,YAAa+d,2BAAW5Y,OACxB1e,OAAO,IAdgB62D,oCAAA1+C,oBAgB1B2+C,wBAAQtiD,OACL+E,YAAa+d,2BAAWv7F,QACxBikE,OAAO,IAlBgBmY,spCCaxB,IA4FM4+C,wBAAmB,SAAnBA,iBAAoBhhC,WAC7B,IAAMihC,iBAoBN,OAnBAjhC,UAAUl9F,QAAQ,SAACm9F,SAAU/nG,GACzB,IAAMme,IAAM4pF,SAAS5pF,IACf6pF,KAAOD,SAASC,KACtB,GAAK7pF,IAUIA,IAAI5d,OACL4d,IAAI5d,KAAJ,GAAAiK,OAAcw9F,KAAd,KAAAx9F,OAAsBxK,IAE1B+oI,cAAcv/H,KAAKu+F,cAbb,CACN,IAAMihC,MAAQlC,kBAAaM,kBAAkBr/B,SAASC,KAAMD,UACvDihC,MAAMzoI,OACPyoI,MAAMzoI,KAAN,GAAAiK,OAAgBw9F,KAAhB,KAAAx9F,OAAwBxK,IAE5B+oI,cAAcv/H,MACVw+F,KAAMD,SAASC,KACf7pF,IAAK6qH,WASVD,eA6BHn5H,SAAyC85F,SAAzC95F,EAAGvH,SAAsCqhG,SAAtCrhG,EAAGwhG,cAAmCH,SAAnCG,OAAQE,aAA2BL,SAA3BK,MAAOC,cAAoBN,SAApBM,OAAQF,QAAYJ,SAAZI,QAgCxBm/B,6BAAwB,SAAxBA,sBAAyBzzC,OAAQ7D,WAAYu3C,eAAgBhoE,cACtE,IAAIlF,WA2BJ,OA1BAw5B,OAASA,OAAO1kF,OAAO,SAAA2kF,OAAK,OAA8B,OAA1BA,MAAM0zC,mBAC/Bv+H,QAAQ,SAAC6qF,OACZ,IAAI2zC,gBACEpuH,OAASy6E,MAAMz6E,SAEfquH,YAAc5zC,MAAM0zC,gBACpBlP,QAAUxkC,MAAMxxE,KAEF,OAAhBolH,cAAmD,IAA3BruH,OAAOwtF,kBAC/B4gC,aAAe1oI,OAAOkS,QAAQy2H,aAC9BrtE,QAAUotE,aAAaj5H,OAAO,SAACm5H,YAAa5uH,QACxC,IAAM86G,aAAe96G,OAAO,GACtBorF,UAAYojC,eAAejP,SAASzE,cACpCzoH,MAAQqxD,WAAWuzB,WAAY6jC,aAAc1vB,YAClDwjC,YAAY9T,gBAAkB8T,YAAY9T,kBAC3C,IAAM+T,eAAiBD,YAAY9T,cACnC,GAAIzoH,MAAO,CACP,IAAMy8H,SAAQ,GAAAh/H,OAAMuC,OACpBw8H,eAAeC,UAAYD,eAAeC,cAC1CD,eAAeC,UA5BZ,SAAjBp0B,eAAkB16F,OAAQ+uH,QAASjU,aAAcx6D,WACnD,OAAIw6D,eAAiBzrB,cAASyrB,eAAiBxrB,cACpCtvF,OAAOlQ,OAAOi/H,QAAQ34H,OAAO,SAAAxQ,GAAC,OAA2B,IAAvBoa,OAAOnR,QAAQjJ,MAErDy7D,aAAarhD,OAAQ+uH,SAAUzuE,WAwBKo6C,CAAem0B,eAAeC,UACrD9uH,OAAO,GAAI86G,aAAct0D,aAAan0D,MAAM8kF,aAAa,IAAI1zE,IAAI1K,SAEzE,OAAO61H,aACRttE,YAGJA,SAGE0tE,oBAAe,SAAfA,aAAgBxhH,QAAShE,UAAWsxE,OAAQmE,aACrDzxE,QAAQyhH,kBAAkBC,QAASpkD,OAAQgQ,OAAQ14E,OAAQ,aAAcyoE,WAAY,UACrF,IACM2Q,YADShuE,QAAQlN,SACIk7E,YACrB2zC,cAAgB3hH,QAAQstE,SAASrkF,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAEuY,SAASyD,MAAQ5W,EAAEmT,SAASyD,QAC9EqrH,iBAAmBlvD,YAAY12D,UAAW,KAAM,GAAlB,GAAA1Z,OAAyB0rF,YAAzB,iBAC9B6zC,cjOuMiB,SAArBC,mBAAsBC,OA4BxB,IA3BA,IAAMC,mBACAC,WACA7gI,KAAO5I,OAAO4I,KAAK2gI,OAQnBG,MAAQ,SAARA,MAAS7pI,MACX,GAAI2pI,gBAAgB3jI,SAAW+C,KAAK/C,OAChC,OAAO,EAEX4jI,QAAQ5pI,OAAQ,EAEhB,IADA,IAAM0wB,MAAQg5G,MAAM1pI,MACX2B,EAAI,EAAGA,EAAI+uB,MAAM1qB,OAAQrE,IAAK,CACnC,IAAM8uB,IAAMC,MAAM/uB,GACbioI,QAAQn5G,MACTo5G,MAAMp5G,KAKd,OADAk5G,gBAAgB1gI,KAAKjJ,OACd,GAGFP,EAAI,EAAGA,EAAIsJ,KAAK/C,SACjB6jI,MAAM9gI,KAAKtJ,IADcA,KAIjC,OAAOkqI,gBiOvOeF,CAAmB9hH,QAAQmiH,gBAC3Cn9D,UACN0N,YAAYkvD,iBAAkB,IAAKD,cAAe,MAC9C72G,OAAQ,SAAAA,OAACid,MAAOwlD,OACZvoB,OAAOuoB,MAAMo/B,UACT5kF,YACAwlD,gBAKKs0C,cAAc7/H,IAAI,SAAA3J,MAAI,OAAI2sE,OAAO3sE,QACzCqK,QAAQ,SAACnK,GACd,IAAMg1F,MAAQh1F,EAAEg1F,MACVxlD,MAAQxvC,EAAEwvC,MAChBwlD,MAAMkE,YAAYA,aAClBlE,MAAMo8B,WACFhxB,UAAW34E,QAAQoiH,cAEG,IAA1B70C,MAAMz6E,SAASyhF,QAAoBhH,MAAM3G,MAAM7+C,MAAMjoB,WAmChDuiH,YAAc,SAAdA,YAAe/0C,OAAQg1C,SAAUvpI,OAAnB,OAA6Bu0F,OAAO1kF,OAAO,SAAC2kF,OAEnE,OAD0B,SAAb+0C,SAAsB/0C,MAAM3qF,YAAYy6E,aAAekQ,MAAMo/B,WAC1D5zH,SAGPwpI,eAAiB,SAAjBA,eAAkBj1C,OAAQg1C,SAAUvpI,OAC7Cu0F,OAAO1kF,OAAO,SAACsvD,MAEX,OAD0B,SAAboqE,SAAsBpqE,KAAKplD,SAASgtF,KAAO5nC,KAAKy0D,WAChD5zH,QACTm/D,KAAKjpC,UACE,MAQNuzG,oBAAsB,SAAtBA,oBAAuBv1H,MACRA,KAAKw1H,iBACbtlD,KAAK,WACjBlwE,KAAKw1H,iBAAmB,IAAIvwD,QAAQ,SAACr7D,SACjC5J,KAAKy1H,iBAAmB7rH,UAE5B2rH,oBAAoBv1H,SAcfs8F,oBAAe,SAAfA,aAAgBvpF,SACzB,IACgB2iH,WADH3iH,QAAQspE,OACb75B,OACJkzE,YACAA,WAAWjgI,QAAQ,SAACo3C,MAChBA,KAAK/rB,MAfa,SAAjB60G,eAAkB3jH,MAAOC,QAAwB,IAAhBpM,OAAgB5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAEtDm9C,YAEAvrC,OAFAurC,YACAE,YACAzrC,OADAyrC,YAGJ,OAAQF,aAAe,EAAGE,aAAev+C,KAAKkK,IAAIgV,OAC9CD,OAAS,GAQM2jH,CAAe5iH,QAAQf,QAASe,QAAQd,cAKlD2jH,uBAAkB,SAAlBA,gBAAmB7iH,SAAY,IAAA8iH,gBACL9iH,QAAQtc,SADHwiH,MAAA6c,0BAAAD,gBAChC5qH,EADgC4qH,gBACpBhjI,GAC8BkC,IAAI,SAAA0B,QAAM,OAAIA,OAC3D+O,MAAM,SAAA5N,OAAK,OAAIA,MAAMb,SAAWw0F,yBAAUv8F,YAHP,GAEjC+mI,UAFiC9c,MAAA,GAEtB+c,UAFsB/c,MAAA,GAIxC,OAAO8c,WAAaC,WAGlBC,OAAS,SAATA,OAAUzxG,IAAKm/D,KAEjB,IADA,IAAIv3F,IAAMu3F,IAAIn/D,IAAI,IACT35B,EAAI,EAAG4oB,IAAM+Q,IAAIpzB,OAAQvG,EAAI4oB,IAAK5oB,IACvCuB,IAAG,GAAAiJ,OAAMjJ,IAAN,KAAAiJ,OAAasuF,IAAIn/D,IAAI35B,KAE5B,OAAOuB,KC7UE8pI,UAAY,YACZC,UAAY,+zCCGjB7E,qBAA0B8B,4BAA1B9B,UAAWC,sBAAe6B,4BAAf7B,WAEbv7B,kBAAS6B,2BAAU7B,OAqEZogC,mCAA0B,SAA1BA,wBAA2BrjH,QAASlN,OAAQ9O,MAAlB,OAA4B,IAAK,KAAKhC,IAAI,SAACshI,UAC9E,IAAMh6C,KAAOtpE,QAAQspE,OACrB,OAAKA,KAAKg6C,WAGGryE,aAAan+C,OAAOwwH,WAAaxwH,OAAOwwH,UAAUjzC,KAZvC,SAAtBkzC,oBAAuBlzC,KAAMv2C,MAC/B,OAAIA,KAAKl3C,YAAYoB,SAAWi/F,mBACrB5S,KAWPkzC,CAAoBzwH,OAAOu9E,KAAM/G,KAAKg6C,UAAU,KAzE7B,SAArBE,mBAAsBxjH,QAASspE,KAAMtlF,KAAM+wF,aAAgB,IAAA0uC,YAAAC,MACzDxjC,SAUqCyjC,UATnC7wH,OAASkN,QAAQlN,SACfk7E,YAAsCl7E,OAAtCk7E,YAAa41C,UAAyB9wH,OAAzB8wH,UAAWC,UAAc/wH,OAAd+wH,UAC1BC,cAAgBF,UAAUpnG,MAC1BunG,cAAgBH,UAAUG,cAC1Bh2C,aAAe/pF,OAASm/H,UAAYU,UAAU91C,aAAe61C,UAAU71C,aACvEi2C,cAAgBH,UAAU9uC,aAAav4D,MACvCsd,KAAOwvC,KAAKyL,aAAa,GACzBkvC,cAAgBnqF,KAAKl3C,YAAYoB,SAAWi/F,kBAE9Cj/F,OAASm/H,WAAac,eACdC,0BAAAP,aACH5uC,YADG,GAAAzyF,OACcyyF,YADd,UAAAmvC,0BAAAP,UAAA,GAAArhI,OAEAyyF,YAFA,QAAAzyF,OAEoByyF,YAFpB,WAARmL,SAAQyjC,WAKRzjC,SAAWgkC,6BACNnvC,YAA2B,GAAAzyF,OAAMyyF,YAAnBkvC,cAAa,gBAGpC/jC,SAAS1jE,OACLzjC,MAAO,SAAAA,MAACyK,KAAM1L,GACV,IAAMqsI,iBAAmBF,eAAiBnqF,KAAKtnC,SAAS,GAAK,EAC7D,OAAIxO,OAASm/H,UACFa,cAAclsI,EAAI,GAEtBqsI,kBAA0C,IAAtB3gI,KAAKuxF,aAAqBgvC,cAAgBD,gBA3BhB,IAAAM,cA8B9BpkH,QAAQspE,OAA/B9sD,MA9BqD4nG,cA8BrD5nG,MAAO82D,MA9B8C8wC,cA8B9C9wC,MAAOx1E,KA9BuCsmH,cA8BvCtmH,KACtB,OACImU,YAAUwxG,aACN11C,aAAY,GAAAzrF,OAAKyrF,aAAL,KAAAzrF,OAAqByyF,aACjCtwE,UAAW3R,OAAO2R,UAClBpsB,KAAM08F,YACNuL,iBAAiB,EACjBqmB,oBAAqB,SAAAA,oBAACnjH,KAAM1L,GAQxB,OANyBmsI,eAAiBnqF,KAAKtnC,SAAS,GAAK,GAC1B,IAAXhP,KAAK1D,GAAWkE,OAASm/H,UACpC,GAAA7gI,OAAM0rF,YAAN,mBAEA,GAAA1rF,OAAM0rF,YAAN,UAAA1rF,OAA0B0B,KAA1B,KAAA1B,OAAkCyyF,YAAlC,KAAAzyF,OAAiDxK,EAAI,KAXhEosI,0BAAAT,YAAA,MAAAnhI,OAeCyyF,YAAYptD,eAAkB3jC,OAASm/H,UAAY,OAAIjpI,GAfxDgqI,0BAAAT,YAAA,WAgBNvjC,UAhBMujC,aAkBVn6C,MAAIo6C,SAAAQ,0BAAAR,MACC3uC,YAAcj7C,MADfoqF,0BAAAR,MAAA,QAEOlnG,MAAM,IAFb0nG,0BAAAR,MAAA,QAGOpwC,MAAM,IAHb4wC,0BAAAR,MAAA,OAIM5lH,KAAK,IAJX4lH,OAMJl2C,aAAa,GAmBHg2C,CAAmBxjH,QAASspE,KAAMtlF,KAAMs/H,UAL3C,OAMZ16H,OAAO,SAAAxQ,GAAC,OAAU,OAANA,KAETisI,kBAAoB7rI,OAAOgc,OAAOs9C,iCAAkB7pD,OAAO,SAACwxE,IAAK73E,GAEnE,OADA63E,IAAI73E,GAAK,EACF63E,SAEL6qD,2BAAkB,SAAlBA,gBAAkB/4H,SAAO,OAAM84H,kBAAkB94H,SAA0CA,QAA/BumD,gCAAiBl2D,aA6FtE2oI,2BAA6B,SAA7BA,2BAA8BvkH,SACvC,IAAMspE,KAAOtpE,QAAQspE,OACfs6C,UAAY5jH,QAAQwkH,WACpBX,UAAY7jH,QAAQykH,WAC1B,GAAIb,UAAUvlI,QAAUwlI,UAAUxlI,OAAQ,KAAA00D,KAChC2xE,cAhGkB,SAAnBC,iBAAoBr7C,KAAM5lF,OAAQs1D,cAC3C,IAAM4rE,YA0CN,OAxCC,IAAK,KAAKliI,QAAQ,SAACsB,MAChB,IAAIoqB,MAAQk7D,KAAKtlF,MAAM,GAAGgnG,gBACpBz/F,QAAU2qD,WAAW8C,aAAc9C,WAAWxyD,OAAQM,KAAM,GAAG2lF,aAAa,GAAI,MAAO,WACvFk7C,YACA9gI,SAEE1L,KAAM,SACN2L,KAAM,YAEN3L,KAAM,SACN2L,KAAM,YAGN3L,KAAM,UACN2L,KAAM,YAEN3L,KAAM,UACN2L,KAAM,YAEN3L,KAAM,OACN2L,KAAM,YACNuH,QAAS+4H,2BAAgB/4H,WAEzBlT,KAAM,OACN2L,KAAM,YACNuH,QAAS+4H,2BAAgB/4H,WAG3BmV,IAAM1gB,KAAKmK,IAAIikB,MAAM/vB,QAC3B+vB,MAAQ7iB,UAAYumD,gCAAiBj2D,SAAWuyB,MAAMpsB,IAAI,SAAA5J,GAAC,OAAIA,EAAE8K,YAAakrB,MAC9E,IAAK,IAAIt2B,EAAI,EAAGA,EAAI4oB,IAAK5oB,GAAK,EAAG,KAAAgtI,eAC7BD,SAASvjI,MAAT4iI,0BAAAY,kBAAA,GAAAxiI,OACQ0B,KADR,SACsBoqB,MAAMt2B,IAD5BosI,0BAAAY,eAAA,GAAAxiI,OAEQ0B,KAFR,UAEuBoqB,MAAMt2B,EAAI,IAFjCosI,0BAAAY,eAAA,GAAAxiI,OAGQ0B,KAHR,OAGoBoqB,MAAMt2B,IAH1BosI,0BAAAY,eAAA,GAAAxiI,OAIQ0B,KAJR,OAIoBoqB,MAAMt2B,IAJ1BgtI,iBAOJF,SAAS5gI,MAAQ,IAAIiuD,oBAAU4yE,SAAU9gI,UAEtC6gI,SAqDmBD,CAAiBr7C,KAAMtpE,QAAQtc,SAAUsc,QAAQxc,OAAO8O,oBAC9EygD,SAAGzwD,OAAHjI,MAAA04D,KAAAgyE,6BAAalB,WAAbvhI,OAAAyiI,6BAA2BnB,aAAWlhI,QAAQ,SAACw1D,MAC3CA,KAAK10D,KAAK00D,KAAKoxB,OAAOpxE,EAAIwsH,cAAcxsH,EAAIwsH,cAAc5kI,wqCCzLtE,WAgBaklI,qCAA0B,SAA1BA,wBAA2BhlH,SAAY,IACxCmgD,UAAcngD,QAAQoiF,UAAtBjiC,UACF3tD,OAASuuH,6BAAsB/gH,QAAQstE,SAAUttE,QAAQtc,SAAUsc,QAAQilH,gBAC7EjlH,QAAQxc,OAAO8O,mBACnB0N,QAAQvV,QAAQ6uE,OAAhB,GAAAh3E,OAA0BmpH,0BAAiBhzE,sBAA3C,KAAAn2C,OCnBkB,UDmBkEkQ,OAAQ2tD,YAGnF6a,2BAELh3E,KAAM,4BACNwyD,OCnCiB,YDoCjB+M,SAAU,SAAAA,SAACvjD,QAAD+yC,MAA4B,IAAf6sC,UAAeslC,+BAAAnyE,KAAA,MAC5BoyE,UAAYnlH,QAAQtc,SAC1B,GAAIk8F,WAAaulC,UAAW,EA7Bf,SAAnBC,iBAAoBxlC,UAAW5/E,SACjC,IAAMqlH,UAAYrlH,QAAQw/E,WACpB8lC,WAMN,IAAK,IAAMjsI,OALXumG,UAAUl9F,QAAQ,SAACm9F,SAAU/nG,GACzB,IAAMikB,GAAKk1C,aAAa4uC,SAASxnG,KAAV,GAAAiK,OAAmBu9F,SAASC,KAA5B,KAAAx9F,OAAoCxK,IAC3DwtI,QAAQvpH,KAAM,IAGAspH,UACRhsI,OAAOisI,UACTD,UAAUhsI,KAAKqJ,QAAQ,SAAA6qF,OAAK,OAAIA,MAAMt+D,kBAC/Bo2G,UAAUhsI,MAmBb+rI,CAAiBxlC,UAAW5/E,SAC5B,IAAMulH,gBAAkBvlH,QAAQwlH,iBAC5BC,YAAc7lC,UAClB2lC,gBAAgB7iI,QAAQ,SAACgjI,OACrBD,eAAWnjI,OAAAqjI,+BAAOF,aAAPE,+BAAuBD,MAAM9lC,eAE5C5/E,QAAQ0/E,SAAS+lC,aACjB,IAAMxgC,YAAcjlF,QAAQstE,SAAS16E,KAAK,SAAAslD,MAAI,OAAIA,KAAK0tE,iBACtD,IAAK,KAAKljI,QAAQ,SAACsB,MACAitD,aAAaiF,WAAWl2C,QAAQspE,OAAQtlF,UAChDtB,QAAQ,SAACo3C,MACbA,KAAKhnC,QACDmyF,8BAIZjlF,QAAQyhH,kBAAkBC,QACtBpkD,OAAQt9D,QAAQstE,SAChB14E,OAAQ,cACRyoE,WAAY,cAMxBr5E,KAAM,4BACNwyD,OCnEY,QDoEZ+M,SAAU,SAAAA,SAACvjD,QAAD6oG,OAA4B,IAAfnwD,UAAewsE,+BAAArc,MAAA,MAClC,GAAInwD,UAAW,CACX,IAAMmtE,QAAU7lH,QAAQspE,OAClBqP,aACA8D,oBAENjkG,OAAOkS,QpO2nCA,SAAjBo7H,eAAkBptE,WACpB,IAAMqtE,kBAMN,OALAvtI,OAAOkS,QAAQguD,UAAUhyD,gBAAgBzC,gBAAgBvB,QAAQ,SAAAsjI,OAA2B,IAAAC,MAAA9yE,eAAA6yE,MAAA,GAAzBjnE,UAAyBknE,MAAA,GAAdhtC,SAAcgtC,MAAA,GACpFhtC,SAAS1tF,YAAc1P,WACvBkqI,eAAehnE,WAAak6B,YAG7B8sC,eoOloCoBD,CAAeptE,YAAYh2D,QAAQ,SAAAsjI,OAA2B,IAAAC,MAAAf,+BAAAc,MAAA,GAAzBjnE,UAAyBknE,MAAA,GAAdhtC,SAAcgtC,MAAA,GACzExpC,iBAAiB19B,WAAak6B,SAASitC,iCAG3C1tI,OAAOkS,QAAQsV,QAAQtc,UAAUhB,QAAQ,SAAAyjI,OAAqB,IAAAC,MAAAlB,+BAAAiB,MAAA,GAAnBniI,KAAmBoiI,MAAA,GAAZvhI,MAAYqgI,+BAAAkB,MAAA,SAC1D,GAAIvhI,MAAO,CACP,IAAM8kG,SAAWlN,iBAAgB,GAAAn6F,OAAIuC,QACjC8kG,WACAhR,UAAU30F,MAAQ2lG,SAClBk8B,QAAQ7hI,MAAMtB,QAAQ,SAAAo3C,MAAI,OAAIA,KAAK4jB,QAAQisC,gBAKvD3pF,QAAQqmH,kBAAoB5pC,iBAC5Bz8E,QAAQoiH,WAAazpC,UACrB,IAAMxR,SAAWnnE,QAAQmnE,WACnBm/C,aAAetmH,QAAQumH,aAAa,GAC1Cp/C,SAASq/C,mBAAmBxmH,QAAQxc,OAAOujF,WAC3CI,SAASs/C,0BAA0BH,kBAK3CtiI,KAAM,4BACNwyD,OCpGc,UDqGd+M,SAAU,SAAAA,SAACvjD,QAAD0mH,OAAyB,IAAZ5zH,OAAYoyH,+BAAAwB,MAAA,MAC3B5zH,SACAkN,QAAQmnE,WAAWr0E,OAAOA,OAAO24E,aD0Cd,SAAtBk7C,oBAAuB3mH,SAChC,IAAM4mH,OAAS5mH,QAAQlN,SACjBsvF,QAAUpiF,QAAQoiF,UAClB33F,MAAQuV,QAAQvV,QAChBkuF,UAAY34E,QAAQoiH,YACzBe,UAAWC,WAAW1gI,QAAQ,SAACsB,MAC5B,IAAI87F,KACAhtF,OACA9O,OAASm/H,WACTrjC,KAAOy+B,qBACPzrH,OAAS8zH,OAAO/C,YAEhB/jC,KAAO0+B,sBACP1rH,OAAS8zH,OAAOhD,WAEpB,IAAMiD,YAAcxD,mCAAwBrjH,QAASlN,OAAQ9O,MAEvD2zD,IAAG,IAAAr1D,OAAO0B,KAAP,aACTgc,QAAQ23C,KAAOD,6BAAgB13C,QAAQ23C,KAAM,SAACmvE,WAC1C,IAAM5uE,KAAO0mE,kBAAae,kBAAmB7/B,YAC7C5nC,KAAKxvC,aAAa1I,QAAQqoF,eAC1B,IAAMhwG,KAAOyuI,UAAU70G,WAAW55B,KAQlC,OAPA6/D,KAAKkqC,SACDmtB,aAAcntB,QAAQktB,SACtBG,aAAcrtB,QAAQotB,SACtBrvD,UAAS,GAAA79D,OAAK8/F,QAAQjiC,WAAb79D,OAAyB0B,MAAzB1B,OAAgCjK,MACzC40H,gBAAiB7qB,QAAQjiC,YAExB11D,MAAMA,OACJytD,MACR2uE,YAAa,SAAAC,WAAS,OAAIA,UAAU70G,WAAW55B,OAClD2nB,QAAQ23C,KAAK3oC,KAAK,SAACu+D,MAAOu5C,WACtB,IAAM70G,WAAa60G,UAAU70G,WACvB6uG,MAAQlC,kBAAaM,kBAAkBp/B,KAAM7tE,YAC7C4zG,QAAUiB,UAAUx9C,KAC1BiE,MAAMz6E,OAAOguH,OACRnX,WACGhxB,sBAEHrP,KAAKu8C,WAEd7lH,QAAO,IAAA1d,OAAK0B,OAAUgc,QAAQ23C,KAAKM,eClF3B0uE,CAAoB3mH,aAK5Bhc,KAAM,4BACNwyD,OC7GY,OAMK,aDwGjB+M,SAAU,SAAAA,SAACvjD,QAAD+mH,OAAAC,QAA2C,IAA9BtuE,UAA8BwsE,+BAAA6B,OAAA,MAAf9iG,UAAeihG,+BAAA8B,OAAA,MACjD,GAAItuE,UAAW,CACX,IAAM0iC,WHrEa,SAAtB6rC,oBAAuBhjG,UAAWy0B,WAC3C,IAAM0iC,cACN,IAAK,IAAM/hG,OAAO4qC,UACd,MAAOpqC,eAAe5B,KAAKgsC,UAAW5qC,KAAM,CACxC,IAAM6tI,aAAejjG,UAAU5qC,KAC/B+hG,WAAW/hG,KAAO6tI,aAAaxuE,WAIvC,OAAO0iC,WG4DwB6rC,CAAoBhjG,UAAWy0B,WAC5C0pC,QAAUpiF,QAAQoiF,UACxBpiF,QAAQvV,QAAQ6uE,OAAhB,GAAAh3E,OAA0BmpH,0BAAiB/yE,qBAA3C,KAAAp2C,OC3Ge,mBD4GX84F,WAAYgH,QAAQjiC,eAKhCn8D,KAAM,4BACNwyD,OClHuB,kBAIT,UD+Gd+M,SAAU,SAAAA,SAACvjD,QAADmnH,OAAAC,QAA8C,IAAjCtmC,gBAAiCokC,+BAAAiC,OAAA,MAAZ75C,OAAY43C,+BAAAkC,OAAA,MAC9CC,kBAAoBrnH,QAAQilH,gBAC5BqC,QAAUtnH,QAAQspE,OAClB5wB,UAAY14C,QAAQxc,OACtBs9F,iBAAmBxT,QAAUg6C,SAAWD,oBACxCrnH,QAAQyhH,kBAAkBC,QAASpkD,OAAQgQ,OAAQ14E,OAAQ,eAAgByoE,WAAY,UHGrE,SAArBkqD,mBAAsBj6C,OAAQxuB,GAAI0oE,uBAC3Cl6C,OAAO5qF,QAAQ,SAAC6qF,OACZ,IAAMk6C,WAAal6C,MAAMz6E,SAASwuB,OAC5Bo3B,UAAY+uE,sBAAsBplI,SAAWolI,WAAW3oE,IACzD0oE,sBAAsBC,aAAe3oE,GAC1CyuB,MAAM/pF,KAAKk1D,aGPH6uE,CAAmBj6C,OAAQ50B,UAAWooC,iBACtC9gF,QAAQ0nH,qBHnHc,SAAzBC,uBAA0Br6C,OAAQt0B,cAC3C,IAAM4uE,+BAoBN,IAAK,IAAMvuI,OAlBXi0F,OAAO5qF,QAAQ,SAAC6qF,OAAU,IAAAs6C,sBAOlBt6C,MAAM86B,oBALN4I,WAFkB4W,sBAElB5W,WACA6W,UAHkBD,sBAGlBC,UACAC,WAJkBF,sBAIlBE,WAIErpE,UARgBmpE,sBAKlBn+C,OALkBm+C,sBAMlBj+C,QAE8BhhF,OAAO,SAAA/D,OAAK,OAAIm0D,aAAan0D,QAAUm0D,aAAan0D,OAAOoR,IAAIjS,OAC7Fw0F,yBAAUv8F,WACbg1H,WAAY6W,UAAWC,YAAYrlI,QAAQ,SAACmC,OACsD,IAAAmjI,sBAA3F9xE,WAAW8C,aAAcn0D,MAAO,MAAO,UAAY2zF,yBAAUt8F,WAAawiE,SAASrgE,UAClFupI,4BAA4B/iI,SAAW+iI,4BAA4B/iI,YACpEmjI,sBAAAJ,4BAA4B/iI,QAAOvD,KAAnCjH,MAAA2tI,sBAAAC,6BAA2CvpE,gBAKrCkpE,iCACP/tI,eAAe5B,KAAK2vI,4BAA6BvuI,OACpDuuI,4BAA4BvuI,KAA5B4uI,6BAAuC,IAAI77H,IAAIw7H,4BAA4BvuI,QAGnF,OAAOuuI,4BGyFoCD,CAAuBr6C,OAClD50B,UAAUpmD,kBAAmB0N,QAAQy2E,iBHSvB,SAArByxC,mBAAsB5+C,KAAMgE,OAAQ0zC,gBAC7C1zC,OAAO5qF,QAAQ,SAAC6qF,OACZ,IAAMwkC,QAAUxkC,MAAMxxE,KAChB8pH,WAENhwE,eAAeyzB,KAAM,SAACjwF,KAClB,IAAM8uI,QAAUnH,eAAejP,SAC/B,GAAIoW,QAAS,CACT,IAAM7c,QAAUhiC,KAAKjwF,SACfukG,UAAYuqC,QAAQ9uI,MAAQ,EAAI8uI,QAAQ9uI,KAAOiyH,QAAQjtH,OAAS,EACtEirF,KAAKjwF,OAASwsI,QAAQxsI,KAAO43D,aAAaq4B,KAAKjwF,KAAKukG,gBAG5DplG,OAAO4I,KAAKykI,SAASxnI,QAAUkvF,MAAMjE,KAAKu8C,WGrBlCqC,CAAmBZ,QAASh6C,OAAQ+5C,mBACpCrnH,QAAQyhH,kBAAkBC,QAASpkD,OAAQgQ,OAAQ14E,OAAQ,UAAWyoE,WAAY,2LElI3F,IAAMwP,iBAAKu7C,yBAAAC,UJQa,oBIRbD,yBAAAC,OJSY,oBITZD,yBAAAC,OJUU,kBIVVD,yBAAAC,OJYS,iBIZTD,yBAAAC,OAAA,mBAAAD,yBAAAC,OAAA,QAOVp3E,cACI/4C,KACApY,QATMsoI,yBAAAC,OAAA,UAaVp3E,cACI/4C,KACApY,MAEJ62D,aAAc,SAAAA,aAAC32C,QAASjnB,OAAV,OAAoBy+D,gBAC9Bt/C,KACApY,MACD/G,UApBOqvI,yBAAAC,OAAA,cAAAD,yBAAAC,OAAA,eAAAD,yBAAAC,OAAA,yBAAAD,yBAAAC,OAAA,eA0BVp3E,aAAc,SAAAA,aAAAT,KAAG,OAAIA,OA1BX43E,yBAAAC,OAAA,YAAAA,8gBCDlB,IAoCaC,kBACTC,MAAO,SAAAA,MAACziC,SAAU0iC,mBAAoBhxH,YAClC,IAAMixH,YAAcjxH,WAAWN,QACzB/F,SAvCW,SAAnBu3H,iBAAoB5iC,SAAU0iC,mBAAoBhxH,YACpD,IACMwhF,QAAUwvC,mBAAmB,GAAGj2H,UAChCo2H,aAAenxH,WAAWN,QAAQ/F,SAClC+D,kBAAoBsC,WAAWtC,kBAC/BnR,OAASi1F,QAAQj1F,OACjB6kI,SAAW9iC,SAAStiG,OAAO8O,kBAC3B9O,KAAOw1F,QAAQx1F,KA0BrB,OAzB2BsiG,SAAS/pF,OAASvE,WAAWnD,SAGzCs0H,aAEuB,OAAtBzzH,kBAA8BnR,OAAOkE,OAAO,SAACwxE,IAAK3+D,IAAKpc,OAC/D,IAAIqvB,MACElpB,MAAQiW,IAAIziB,KACZ4gG,SAAW2vC,SAAS/jI,OAEpBgkI,aADO5vC,WAAaA,SAAShjF,IAAI1K,QAAU0tF,SAAShjF,IAAI1K,QAAU0tF,SAAShjF,IAAIjS,SACxD8tD,gCAAiBl2D,YAE9C,OAAKq9F,UAODlrE,MAHC86G,YAGOrlI,KAAKxB,IAAI,SAAA5J,GAAC,OAAIA,EAAEsG,UAFfsB,KAAKkK,IAAL7P,MAAA2F,KAAI8oI,oCAAQtlI,KAAKxB,IAAI,SAAA5J,GAAC,OAAIA,EAAEsG,WAAUsB,KAAKmK,IAAL9P,MAAA2F,KAAI8oI,oCAAQtlI,KAAKxB,IAAI,SAAA5J,GAAC,OAAIA,EAAEsG,YAI/E+6E,IAAI50E,OAASkpB,MACN0rD,KATIA,SAUN,KAQQivD,CAAiB5iC,SAAU0iC,mBAAoBhxH,YAC1DN,QAAU1e,OAAO0M,UAAWujI,aAElC,OADAvxH,QAAQ/F,SAAWA,SACZ+F,SAGX6xH,UAAW,SAAAA,UAACjjC,SAAU0iC,mBAAoBhxH,YACtC,IAAMixH,YAAcjxH,WAAWN,QACzBhC,kBAAoBsC,WAAWtC,kBAC/B8jF,QAAUwvC,mBAAmB,GAAGj2H,UAClCxO,OAASi1F,QAAQj1F,OACfmT,QAAU1e,OAAO0M,UAAWujI,aAClC1kI,OAASi1F,QAAQj1F,OACjB,IAAMP,KAAOw1F,QAAQx1F,KACfm4F,aAAe53F,OAAO/B,IAAI,SAAA5J,GAAC,OAAIA,EAAEC,OAIvC,OAHA6e,QAAQ/F,UAAY+D,mBAAqBszH,mBAAmB,GAAGvtC,UAAY,MACtEU,cADcr5F,OAAAwmI,oCACGtlI,OACtB0T,QAAQykF,aAAezmF,kBAAoBA,kBAAkBqD,YAAYvW,IAAI,SAAA5J,GAAC,OAAIA,EAAEC,UAC7E6e,wgBCzDf,IA0Ba8xH,gCAAkB,SAAlBA,gBAAmBljC,SAAUlxF,QAAwB,IAC1D+rE,gBAD0C7tE,OAAgB5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAExDgW,QAAUpE,OAAOoE,QACjBwpE,aAAe5tE,OAAO4tE,aACtBuoD,oBAAsBn2H,OAAOo2H,kBAAkBt0H,YAC/Cs0H,kBAAoBD,oBAAoBvlI,WACxC+mB,OAASw+G,oBAAoBx+G,OAC7BtZ,SAAW+F,QAAQ/F,SACnB6O,QAAU8lF,SAAS9lF,QACnB04C,UAAY14C,QAAQumH,aAAa,GACjClyH,SAAW2L,QAAQjE,KACnBotH,aAAerjC,SAAShmB,cACxBoB,mBAAqB4kB,SAAS5jB,oBAC9BknD,YAAc1oD,aAAaL,YAAYxrE,MACvCmkD,aAAeN,UAAUpmD,kBAC/B4E,QAAQmyH,WAAah1H,SACrB6C,QAAQtC,OAASA,OACjBsC,QAAQoyH,aAAetpH,QAAQupH,cAC/B,IACMC,qBAD0B1jC,SAAShkB,yBACYltE,SAAWA,OAE5D60H,cACa,OAAbt4H,SACAwvE,gBAAkB,KACXzuB,eAAe/gD,WACtBs4H,WAAajxI,OAAO4I,KAAK+P,cACzBwvE,gBAAkByoD,YAAcA,YAAY9vH,QAAQmwH,YAAc,OAElEA,WAAat4H,SAAS,GACtBwvE,gBAAkByoD,YAAcA,YAAY9vH,QAAQmwH,YAAc,MAGtE,IAAMC,cAAgB1pH,QAAQ0pH,gBAC9B,GAAwB,OAApB/oD,iBAA4BuoD,kBAAkB7qI,OAAQ,CACtD,IAAMqF,OAASi9E,gBAAgBpuE,UAAUxO,OAAO/B,IAAI,SAAA5J,GAAC,OAAIA,EAAEC,OAC3DsoF,gBA7DsB,SAAxBgpD,sBAAyB7qE,GAAIt7D,MAC/B,IAAMw1F,QAAUl6B,GAAGvsD,UACbq3H,QAAU5wC,QAAQj1F,OAClB8lI,MAAQ7wC,QAAQx1F,KAChBqhI,YACAiF,cAAgBtmI,KAAK,GAAGxB,IAAI,SAAA5J,GAAC,OAC/BC,KAAI,GAAAiK,OAAKlK,GACT4L,KAAMw0F,yBAAUt8F,UAChBqP,QAASnT,EAAEmT,aAETw+H,eAAiBvmI,KAAK,GAa5B,OAXAqmI,MAAMnnI,QAAQ,SAACtK,GACX,IAAM2vH,SACN6hB,QAAQlnI,QAAQ,SAACoY,IAAKhjB,GAClBiwH,MAAMjtG,IAAIziB,MAAQD,EAAEN,KAExBgyI,cAAcpnI,QAAQ,SAACoY,IAAKhjB,GACxBiwH,MAAMjtG,IAAIziB,MAAQ0xI,eAAejyI,KAErC+sI,SAASvjI,KAAKymH,SAGX,IAAI91D,oBAAU4yE,YAAdviI,OAAA0nI,kCAA4BJ,SAA5BI,kCAAwCF,iBAsCzBH,CAAsBhpD,gBAAiB+oD,eACzDD,WAAah/G,UAAMnoB,OAAA0nI,kCAAOtmI,QAAPsmI,kCAAkBd,oBAAqBA,kBAC1DvoD,gBAAkBA,gBAAgBrnE,QAAQmwH,YAG9C,IAAIn1H,6BAA8B,EAC9Bm1H,WAAWprI,QAAUorI,WAAWh3H,MAAM,SAAA5N,OAAK,OAAIm0D,aAAan0D,QAC5Dm0D,aAAan0D,OAAOoR,IAAIjS,OAASw0F,yBAAUv8F,YAC3CqY,6BAA8B,GAGlC,IAAM+rF,QAAUrgF,QAAQupH,cACxBryH,QAAQtC,OAASA,OACjB,IAAMq1H,kBAAoBnkC,SAASvkB,SAASC,YAAYgoD,sBAClDvyH,kBAAkBgzH,mBAAoBA,kBAAkBrnI,YAAY2hF,UAEpE7vE,SAAW,SAAXA,SAAYw1H,MAAOC,iBACrB,IAAMjnD,QAAUhC,mBAAmBgpD,MAAMp3H,OAAO8B,QAC1C2vE,SAAU2lD,MAAMp3H,OAAOutF,SACzBnd,QAAQtwE,KAAK,SAAAxa,GAAC,OAAI+wI,aAAa/wI,EAAEC,MAAQD,GAAGwK,YAAY2hF,YAC5D,OAAO2lD,MAAMp3H,OAAOutF,UAAY8pC,gBAAgB9pC,SAAW9b,SAGzD6lD,gBAAkBtkC,SAASvkB,SAASC,YAAY5sE,QAChD2vE,UAAU6lD,iBAAkBA,gBAAgBxnI,YAAY2hF,UAC1D/sE,YACAN,gBACAtC,cACAzD,SAAUwvE,gBACV1pE,gBAAiBstE,QACjBjwE,wDACA+rF,gBACAhsF,SAAUkwE,QAAU8b,QAAUhsF,SAC9BK,kBACA21H,QAAS,SAAAA,QAACC,SAAUnjD,UAAX,OAAyBvyE,SAAW40H,sBACzCc,SAASpzH,QAAQoyH,eAAiBniD,SAASnnE,QAAQupH,gBAG3D7wE,UAAUgsB,UAAU/D,gBAAiBnpE,YAAY,GAE7C5C,SAAW40H,uBACXhyH,YACIN,gBACA7C,SAAU4C,gBAAkBopF,QAAUhsF,SACtClD,SAAUwvE,gBACV1pE,gCACA3C,wDACAM,OAAQ40H,qBACRnpC,gBACA1rF,cAAeC,SAAW40H,qBAC1Ba,QAAS,SAAAA,QAACC,SAAUnjD,UAAX,OAAwBmjD,SAASpzH,QAAQoyH,eAAiBniD,SAASnnE,QAAQupH,eACpF70H,mBAGJgkD,UAAUgsB,UAAU/D,gBAAiBnpE,YAAY,GAC7CC,sBAAuB,SAAAA,sBAAC8yH,UAAWzyD,SAAZ,OAAwByyD,UAAUlqC,UAAYvoB,QAAQuoB,4tCChHzF,IAAMmqC,0BAAmB,SAAnBA,iBAAoB/B,YAAazoH,QAAS6mE,gBAAmB,IACvD3xE,kBAAuC2xE,eAAvC3xE,kBAAmByrE,gBAAoBkG,eAApBlG,gBACrB3nB,aAAe9jD,kBAAkB5C,kBACjCm4H,uBAAyBjyI,OAAO4I,KAAK43D,cAAcpwD,OAAO,SAAA/D,OAAK,OACjEm0D,aAAan0D,OAAOoR,IAAIjS,OAASw0F,yBAAUv8F,UACzCwtI,WAAajxI,OAAO4I,KAAKu/E,gBAAgB,GAAGruE,mBAC5Co4H,gBAAkBjC,YAAYa,eAAiBtpH,QAAQupH,cAC7D,OAAOzsE,uBAAU2tE,uBAAwBhB,YAAYprI,QAAUqsI,iBAO9CC,0CACjB,SAAAA,eAAwB,IAAArwC,iBAAA1hB,iKAAAgyD,CAAA5tI,KAAA2tI,cAAA,QAAAv0E,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MAAA,OACpBuiB,MAAAiyD,mCAAA7tI,MAAAs9F,iBAAAwwC,wBAAAH,eAAA1yI,KAAAoC,MAAAigG,kBAAAt9F,MAAAsF,OAASsR,WAOLm3H,6BALAtiD,QAKAsiD,6BAJAp+C,YAIAo+C,6BAHAv+C,QAGAu+C,6BAFAt+C,cAEAs+C,6BADAr+C,oBAIgBhqF,QAAQ,SAACmgF,YACzBjK,MAAKoyD,mCAAmCnoD,WAAY2nD,0BAAkB,wBAZtD5xD,gYADcoI,qTAgB3B+C,UAAW7sE,QAASwpE,aAAcZ,aACzCkpD,gCAAgBhsI,KAAM+mF,WAClB7sE,gBACAwpE,0BACAZ,wBACAopD,kBAAmBlsI,KAAK4kF,+FAIN9B,YAAa5oE,QAAS2vE,gBAC5C,IAAM7mE,QAAUhjB,KAAKgjB,QACfirH,OAASjrH,QAAQjE,KACjBmvH,UAAYlrH,QAAQupH,cACpB4B,wBAA0BtkD,eAAe4hD,aAAe5hD,eAAe4hD,YAAYa,aACnF8B,aAAevkD,eAAe4hD,aAAe5hD,eAAe4hD,YAAYY,WACxEgC,kBAAoBruI,KAAK6kF,mBACzBypD,oBAAsBtuI,KAAK8iF,cAC3ByrD,gBAAiBH,cAAeA,eAAiBH,OAEjDjmD,sBAAwB9tE,QAAQ4oE,cAClCoD,QAAShsE,QAAQ4oE,YACjBsD,YAAalsE,QAAQtC,UACpBkrE,YAyBL,OAxBAkF,sBAAsBtiF,QAAQ,SAACtK,GAC3B,IAAIozI,cAAgBpzI,EAAE8qF,QACtBsoD,cAAgBA,cAAc5iI,OAAO,SAACa,IAElC,GADgB6hI,oBAAoB7hI,GAAGpR,MAAQoR,IAAI7G,YAAY2hF,YACb,IAAnCsC,eAAe5vE,gBAC1B,OAAO,EAEX,IAAKs0H,gBAAuC,OAArBr0H,QAAQ/F,SAAmB,CAC9C,IAAMs6H,mBAAqBjzI,OAAOgc,OAAO62H,kBAAkB5hI,GAAGpR,MAAQoR,SAC9DyL,kBAA6C2xE,eAA7C3xE,kBAAyByrE,gBAAoBkG,eAA1BrjF,KAC3B,OAAOioI,mBAAmBptI,QAASotI,mBAAmBh5H,MAAM,SAAAi5H,SAAO,OAC/DA,QAAQ7kD,eAAe4hD,YAAazoH,SAChC9K,oCACAyrE,oCAGZ,OAAIwqD,0BAA4BD,YAAaK,iBACb,IAArB9hI,GAAGkL,gBAKlBvc,EAAE8qF,QAAUsoD,gBAETxmD,4FAGaN,WACpB,OAAqB,IAAdA,kFAGe,IAAA1L,OAAAh8E,KACtB,OAAO,SAACwG,KAAMsP,QACV,IAAImE,iBAAkB,EAChB+I,QAAUg5D,OAAKh5D,QACrB,GAAKA,QAAQ4mE,QAAb,CAHqB,IAAA+kD,sBRyQS,SAA7BC,2BAA8B/2H,MAAOg3H,UAAWntE,SAAUotE,eACnE,IAAIC,eADiFC,mBAE5DH,UAAUt5H,UAA3B/O,KAF6EwoI,mBAE7ExoI,KAAMO,OAFuEioI,mBAEvEjoI,OACR+iF,eACAmlD,cAEN,GAAIloI,OAAO1F,OAAQ,CACf,IAAMuqI,SAAW/zH,MAAMvC,kBACjB45H,aACAhzE,eAAiBwF,SAAW36D,OAAO/B,IAAI,SAAC5J,EAAGihE,KAAJ,OAAYA,MACrD7gE,OAAO4I,KAAKyT,MAAMnO,gBAAgBzC,gBAAgBjC,IAAI,SAAA5J,GAAC,OAAIwwI,SAASxwI,GAAGsG,QAC3E8E,KAAKd,QAAQ,SAACkuF,KACV,IAAMv3F,IAAM6pI,OAAOhqE,eAAgB03B,KAC7B70E,GAAK+vH,cAAczyI,KACrBA,OAAOyyI,gBACPhlD,YAAYxlF,KAAKya,IACjBmwH,UAAUnwH,IAAM,KAGxBgwH,eAAiBl3H,MAAMnC,OAAO,SAAChP,OAAQ5L,GACnC,OAAKo0I,UAAUp0I,KACXm0I,WAAW3qI,KAAKxJ,IACT,KAIX6a,WAAW,SAGfo5H,eAAiBF,UAGrB,OACIh3H,OAAQg3H,UAAWE,gBACnBjlD,wBACAmlD,uBQlSQL,CAA2B5rH,QAAQxc,OAAQA,KAAMq/H,uBAAgB7iH,SAAUA,QAAQmsH,oBAH5ExrD,gBAPUgrD,sBAOjB92H,MACAiyE,YARiB6kD,sBAQjB7kD,YACAmlD,WATiBN,sBASjBM,WAGSG,UAITt5H,OAJAu3H,QACAn1H,kBAGApC,OAHAoC,kBACAN,OAEA9B,OAFA8B,OACS6zH,YACT31H,OADAoE,QAIEA,SADYoxH,iBAAiB1zH,SAAW0zH,iBAAiBS,WACrC/oH,QAAS2gE,gBAAiB7tE,QAC9Cu5H,iBAAmBrzD,OAAK+I,kBAE1BsoD,QADc7xI,OAAOgc,OAAO63H,iBAAiBz3H,SAAWy3H,iBAAiB,UACrD55H,MAAM,SAAAvX,IAAE,OAAIA,GAAGutI,gBAAmBzoH,SACtD9K,oCACAyrE,oCAOJ,GAJIyrD,YACA/B,QAAU+B,UAAUt5H,OAAQkmE,UAAqB,IAAZqxD,SAGrCA,QAAS,CACT,IAAMnnD,QAAUlK,OAAKkJ,oBAAoBttE,QACnC02H,oBAAsBtyD,OAAK8G,cACjC7oE,gBAAkBnE,OAAOutF,QACrBnd,QAAQtwE,KAAK,SAAAxa,GAAC,OAAIkzI,oBAAoBlzI,EAAEC,MAAQD,GAAGwK,YAAY2hF,YAAazxE,OAAOmE,gBAEvF,IAAM4vE,gBACFnC,WAAW,EACXlhF,KAAMm9E,gBACNmG,wBACAmlD,sBACAxD,wBACAvzH,oCACAX,YAAY,EACZF,SAAUvB,OAAOqC,oBACjB8B,gBAAiBnE,OAAOmE,iBAG5B+hE,OAAKoJ,eAAextE,SAChBsC,gBACA2vE,8BACA5vE,iCAEJ+hE,OAAK2M,kBAAkB/wE,OAAQsC,QAAS2vE,qFAK9BzD,YAClB,IAAM5/E,KAAOxG,KAAKgjB,QAAQxc,OAI1B,OAHIA,MACAxG,KAAKwpI,mBAAmBhjI,KAAK+O,UAAU/J,KAAM46E,YAE1CpmF,6CAKP,OADAA,KAAKgjB,QAAQumH,aAAa,GAAG/rD,YAAY,eAClCx9E,+iBC9JR,0BCIMmwF,kCACTa,YTPuB,OSQvBD,aAAc,cACdtpE,UAAW,GACX6nH,iBAAkB,sBAClBvpB,eAAgB,GAChB6gB,WACI71C,aAAc,kBACdtpE,UAAW,GACX4rE,MAAM,EACN7zD,MAAO,UACPunG,cAAe,WAEnBF,WACI91C,aAAc,kBACdtpE,UAAW,GACX4rE,MAAM,EACNvwF,GACI08B,OAAQ,OAAQ,YAEpBtkB,GACIskB,OAAQ,OAAQ,aAGxB+vG,kBAAmB,YACnB9gD,aACIC,SACIzyF,KTxBgB,iBS2BxBuzI,oBAAqB,osBC/BzB,IAAAC,mBAAAC,iCAAAC,yBPLsB,UOOd5zI,MAAO,KACPmY,MACIylD,aAAc,SAAAA,aAAC7jD,OAAQy6F,WAAT,OACV/1C,eAAe+1C,WAAa/1C,kBAAmB21B,kCAAgBr6E,YAL/E45H,iCAAAC,sBPFyB,YOYjB5zI,MAAO,KACPmY,MACI0lD,OAAQ,SAAAA,OAAAipC,UAAQ,OAAI+gC,wBAAiB/gC,cAZjD6sC,iCAAAC,sBPEyB,aOcjB5zI,MAAO,OAhBf2zI,iCAAAC,sBPOsB,UOYd5zI,MAAO,OAnBf2zI,iCAAAC,sBPJoB,QO0BZ5zI,MAAO,KACPmY,MACI2qE,UAAW,SAAAA,UAAAzjF,GAAC,OAAIA,aAAa65D,qBAC7B2E,OAAQ,SAAAA,OAACpzD,KAAMwc,SAWX,GAVAA,QAAQmsH,iBAAoB,SAACt3H,OACzB,IAAI+3H,UAAY,KAChB,OAAO,WACH,OAAIA,YAGJA,UXkTI,SAAfC,aAAgBh4H,MAAOmL,SAChC,IAAM4sH,aADsCE,eAEJj4H,MAAMtC,UAAhC0mD,QAF8B6zE,eAEpCtpI,KAAeO,OAFqB+oI,eAErB/oI,OAAQyE,KAFaskI,eAEbtkI,KACzBwwD,aAAenkD,MAAMvC,kBACrBy6H,aAAelK,uBAAgB7iH,SAAWjc,OAAO/B,IAAI,SAAC5J,EAAGN,GAAJ,OAAUA,IAC7CU,OAAO4I,KAAKyT,MAAMnO,gBAAgBzC,gBAAgBjC,IAAI,SAAA5J,GAAC,OAAI4gE,aAAa5gE,GAAGsG,QAKnG,OAJAu6D,QAAQv2D,QAAQ,SAACkuF,IAAK94F,GAClB,IAAMuB,IAAM6pI,OAAO6J,aAAcn8C,KACjCg8C,UAAUvzI,KAAOmP,KAAK1Q,KAEnB80I,UW5TyBC,CAAah4H,MAAOmL,WANZ,CASzBxc,MACCwc,QAAQC,OAAQ,CAChB,IAAMsmH,WAAavmH,QAAQumH,aAC3BvmH,QAAQumH,cAARjkI,OAAA0qI,gCAAuBzG,aAAY/iI,YAChC,CACH,IAAMypI,QAAUjtH,QAAQumH,aAAa,GACrC0G,SAAWA,QAAQzyD,YAAY,eAC/Bx6D,QAAQumH,YAAY/iI,YA1CxCkpI,iCAAAC,sBPG+B,mBO6CvB5zI,MAAO,OAhDf2zI,iCAAAC,sBAAA,SAmDQ5zI,MAAO,OAnDf2zI,iCAAAC,sBAAA,UAsDQ5zI,MAAO,OAtDf4zI,w2ECmCA,IACMO,QAAUzhB,0BAAiBhzE,sBAAuBgzE,0BAAiB/yE,sBACnE2zE,oBAAUZ,0BAAiB5yE,uBAYZs0F,kCAQjB,SAAAA,WAAa1sC,SAAU/3E,cAAc,IAAAkwD,MAAA57E,+JAAAowI,CAAApwI,KAAAmwI,YACjCnwI,KAAK0yE,IAAMrd,cACXr1D,KAAKqrG,cAAgB3/E,aACrB1rB,KAAK0lI,iBAAmB,KACxB1lI,KAAKylI,iBAAmB,IAAIvwD,QAAQ,SAACr7D,SACjC+hE,MAAK8pD,iBAAmB7rH,UAE5B2rH,oBAAoBxlI,MACpBA,KAAKykI,kBAAoB/4G,aAAa2kH,iBACtCrwI,KAAKwiG,cACLxiG,KAAKswI,oBAAsB,KAC3BtwI,KAAKuwI,oBAAsB,KAC3BvwI,KAAKwnI,cACLxnI,KAAKynI,cACLznI,KAAKioI,mBACLjoI,KAAKwoI,oBACL5G,kBAAaG,iBAAiBt+B,SAASd,eACvCppC,sBAAsBv5D,KAAM6vF,iBAC5B7vF,KAAKyjG,SAASA,UACdzjG,KAAKupI,6SA8EL,GAAIrlI,UAAO7C,OAAQ,CACf,IAAMoM,MAAQzN,KAAK+vH,OAAL7rH,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GADCssI,oBAEqBxwI,KAAKqrG,cAAjCsnB,UAFO6d,oBAEP7d,UAAW8d,aAFJD,oBAEIC,aACXttE,UAAcnjE,KAAKolG,UAAnBjiC,UAcR,OAZA11D,MAAM8uE,gBAAgBpZ,UA5Hd,OA4HsCnjE,MAC9C2yH,UAAUp2C,gBAAgBpZ,UA7HlB,OA6H0CnjE,MAClDk+E,iBAAWl+E,KAAMuuH,kBAAc9gH,OAC3B6sE,aAAcnX,UACdA,UAAS,GAAA79D,OAAKmpH,0BAAiB/yE,wBAGnC17C,KAAKmqF,SAAS,IAAIwjD,sBAAa3tI,MAC3BykF,SAAUjpF,OAAO0M,UAAWkhF,gBAAiBqnD,aAAarnD,iBAC1D5E,YAAahpF,OAAO0M,UAAW2gF,4BAAoB4nD,aAAa5nD,oBAChEnD,uBAAwB4C,oBACzB9sF,OAAO0M,UAAW46E,iCAAa2tD,aAAa3tD,aAAcoB,0CACtDlkF,KAEX,OAAOA,KAAK+vH,mDAyBZ,OAAI7rH,UAAS7C,QACTrB,KAAK0wI,UAALxsI,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK0wI,0CAUZ,OAAO1wI,KAAK0yE,kDAKZ,OADA1yE,KAAKyN,QAAQ8tE,YACNv7E,uDAKP,OADAA,KAAKyN,QAAQguE,cACNz7E,iEAIP,OAAIkE,UAAO7C,OACArB,KAEJA,KAAKqpI,wDAQRrqH,WACJ,IAAMlJ,OAAS9V,KAAK8V,SACZ2R,UAA8D3R,OAA9D2R,UAAWspE,aAAmDj7E,OAAnDi7E,aAAcy+C,oBAAqC15H,OAArC05H,oBAAqBx+C,YAAgBl7E,OAAhBk7E,YAChDiG,mBAAqBx+B,sBAAsBs4B,aAAc/wF,KAAK+e,KAAMjJ,OAAOk7E,aAC3E/uE,MAAQjiB,KAAKiiB,QACbC,OAASliB,KAAKkiB,SACd8xG,mBAAqBx+C,6BAAcx2D,WAAWkB,MAAM,WAAY,YAEtElgB,KAAK2wI,SAAWj7D,YAAYs+C,mBAAoB,OAAQ,MAAOvsG,WAC9CvH,MAAM,QADP,GAAA5a,OACmB2c,MADnB,OAC8B/B,MAAM,SADpC,GAAA5a,OACiD4c,OADjD,OAGhB,IAAMY,KAAO9iB,KAAK2wI,SAAS7tH,OAC3B4zD,wBAAS5zD,MACLb,YACAC,cACA0uH,MAAO35C,mBAAmB10F,KAAK,OAGnCgqG,oBAAavsG,MV1De,SAAvB6wI,qBAAwB7tH,QAAShE,WAC1C,IACMgyE,YADShuE,QAAQlN,SACIk7E,YACrB41C,UAAY5jH,QAAQwkH,WACpBX,UAAY7jH,QAAQykH,WACpBhzC,aACFxyE,MAAOe,QAAQf,QACfC,OAAQc,QAAQd,UAEd4uH,oBAAsBp7D,YAAY12D,UAAW,KAAM,GAAlB,GAAA1Z,OAAyB0rF,YAAzB,KAAA1rF,OD/MV,wBCiN3BshI,UAAD,GAAAthI,OAAe0rF,YAAf,KAAA1rF,ODnNuC,gBCoN/BuhI,UAAD,GAAAvhI,OAAe0rF,YAAf,KAAA1rF,ODnNgC,gBCmN+BI,QAAQ,SAACwnI,OAAU,IAAA6D,OAAAC,yBACxC9D,MADwC,GACvEtK,UADuEmO,OAAA,GAC5DE,iBAD4DF,OAAA,GAExE1/C,WAAa3b,YAAYo7D,oBAAqB,KAAM,GAA5B,IAAAxrI,OAAoC2rI,mBAC5DxpH,UAAS,GAAAniB,OAAM2rI,iBAAN,UACfv7D,YAAY2b,WAAY,IAAKuxC,UAAlB,IAAAt9H,OAAiCmiB,YACxCqG,OAAQ,SAAAA,OAACid,MAAO+9D,UACZA,SAAS6jB,WAAYhxB,UAAW34E,QAAQoiH,aACnC3wC,YAAYA,aACZ7K,MAAM7+C,MAAMjoB,aUuCjC+tH,CAAqB7wI,KAAM8iB,MAC3B0hH,oBAAaxkI,KAAM8iB,KAAM9iB,KAAKswF,UAC1BruE,YACAC,gBAEJliB,KAAKkxI,iBZ8BwB,SAAxBC,sBAAyBnyH,UAAWyI,WAAZ,OAA0BiuD,YAAY12D,UAAW,KAAM,GAAIyI,WAAW3E,OY9B3EquH,CAAsBruH,KAAD,GAAAxd,OAAU0rF,YAAV,KAAA1rF,OAAyBkqI,sBACtE,IAAMrlD,SAAWnqF,KAAKmqF,WAEtB,OH3QuB,SAAlBinD,gBAAmBtuD,YAAaqH,UACzC,IAAK,IAAM9tF,OAAOymF,iBACPjmF,eAAe5B,KAAK6nF,YAAazmF,OACpCymF,YAAYzmF,eAAgBq0F,+BAAuB5N,YAAYzmF,KAAK+0F,eAAe,WAE/E,OADgBjH,SAASnnE,QACVorE,sBAEnBtL,YAAYzmF,KAAKyzF,YAAY3F,SAASnnE,QAAQ8sE,gBGmQlDshD,CAAgBjnD,SAASrH,cAAeqH,UACjCnqF,yCAIP,OAAOA,KAAKylI,uEAaZ,OADAzlI,KAAKijB,QAAS,EACPjjB,yDAaP,OAFAA,KAAKijB,QAAS,EACdjjB,KAAKupI,YAAYvpI,KAAKupI,aAAa,KAC5BvpI,mEAwBP,IAAMqxI,QAAUrxI,KAAK2wI,UAAY3wI,KAAK2wI,SAAS7tH,OACzCb,MAAQjiB,KAAKiiB,QACbC,OAASliB,KAAKkiB,SAHHovH,sBAIUtxI,KAAKuxI,qBAAxBl7C,GAJSi7C,sBAITj7C,GAAItJ,WAJKukD,sBAILvkD,WACZ,OACIyJ,cAAex2F,KAAK4pF,QACpB+E,aAAc0iD,QACdpvH,YACAC,cACA2uE,gBAAiB7wF,KAAKkxI,iBACtB/wH,gBAAiBk2E,GACjB+I,0BAA2BrS,WAC3B+T,QAAS,EACT8H,QAAS,iDAUb,OACItY,OAAQtwF,KAAKswF,SAAStrF,IAAI,SAAAurF,OAAK,OAAIA,MAAMj1E,cACzCxF,OAAQ9V,KAAK8V,SACbw2E,KAAMtsF,KAAKssF,OAAOtnF,IAAI,SAAA83C,MAAI,OAAIA,KAAKxhC,qDAKvC,OAAIpX,UAAM7C,QACNrB,KAAK+1F,OAAL7xF,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACAlE,KAAKu3F,OAALrzF,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IACAlE,KAAKmqF,WAAW3B,yBACTxoF,MAEJA,KAAK+1F,iDAyBNy7C,iBAAiB,IAAAz7E,KAAAimB,OAAAh8E,KACvB,GAAIwxI,2BAA2BnsI,SAE3B,OADArF,KAAKwoI,iBAAiBlkI,KAAKktI,iBACpBxxI,KAEX,IAAMyxI,iBAAmB7N,wBAAiBj2G,QAAQ6jH,kBAE5CnJ,UAAYroI,KAAKwiG,WACjB8lC,WACA76H,OACF6iF,UACAohD,YACIzhI,KAAMjQ,OAGV2xI,WAAa,EACXvsC,QAAUplG,KAAKolG,UACf9U,OAASmhD,iBAAiBxlI,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAEgc,MAAQ5W,EAAE4W,QAAOtO,OAAO,SAAC2mI,UAAW/uC,UAAa,IAAAgvC,WACxF58G,WAAa4tE,SAAS5pF,IACtB64H,OAAS78G,WAAW55B,KACpB02I,OAASpkH,QAAQsH,YACjB6tC,cACNivE,OAAOrsI,QAAQ,SAACuT,KACZA,IAAIM,MAAQspF,SAAStpF,MAAQo4H,WAC7B,IAAMxuE,UAAS,GAAA79D,OAAM8/F,QAAQjiC,UAAd,KAAA79D,OAA2B2T,IAAI6pF,KAA/B,KAAAx9F,OAAuC+vD,eACtDyN,WAAWx+D,KAAK6+D,aAEpBwuE,YAAcI,OAAO1wI,OACrB,IAAMuhI,UZrWa,SAAlBoP,gBAAmBhvH,QAASiS,WAAYg9G,cAAenvE,YAChE,IAAI8/D,UAAYqP,cACVvmH,aAAe1I,QAAQqoF,cACvBjG,QAAUpiF,QAAQoiF,UACnB6sC,gBACDrP,UAAYhB,kBAAae,iBAAiB1tG,YAC1CtH,QAAQi1G,WAAWl9H,QAAQ,SAACw1D,KAAMpgE,GAC9BogE,KAAKkqC,SACDmtB,aAAcntB,QAAQktB,SACtBG,aAAcrtB,QAAQotB,SACtBrvD,UAAWL,WAAWhoE,GACtBm1H,gBAAiB7qB,QAAQjiC,YAExBz3C,aAAaA,cACbje,MAAMuV,QAAQvV,YAG3B,IAAM6iF,UACA4hD,YAAcvkH,QAAQi1G,WAgB5B,OAfA3tG,WAAatH,QAAQsH,aACVhqB,OAAO,SAACwxE,IAAKxjE,IAAKojD,KACzB,IAAMysC,SAAWopC,YAAY71E,KAW7B,OAVAysC,SAASzD,MAAMriF,QAAQqiF,SACvByD,SAAShzF,OAAOmD,KAChB6vF,SAAShZ,YAAY9sE,QAAQ8sE,eAC7BgZ,SAAS6jB,WACLhxB,UAAW34E,QAAQoiH,aAEnBnsH,IAAI5d,MACJytG,SAAS6mB,MAAM12G,IAAI5d,MAEvBi1F,OAAOwY,SAAS6mB,SAAW7mB,SACpBrsB,SAEJ6T,OYmUmB0hD,CAAgBh2D,OAAM/mD,WAAYozG,UAAUyJ,QAAShvE,YACvEr1D,MAAM6iF,OAAS90F,OAAO0M,OAAOuF,MAAM6iF,OAAQsyC,WAC3C,IAAMuP,eAAiB32I,OAAOgc,OAAOorH,WAIrC,OAHAgP,WAAYC,WAAAD,WAAUtsI,OAAVjI,MAAAw0I,WAAAO,8BAAoBD,iBAChC9J,UAAUyJ,QAAUK,eACpB7J,QAAQwJ,QAAUA,OACXF,eAGXnkI,MAAMwC,KAAOjQ,KACb,IAAMqyI,aACAT,WAAY77E,SAAGzwD,OAAHjI,MAAA04D,KAAAq8E,8BAAa52I,OAAOgc,OAAOxX,KAAKwiG,cAclD,OAbAovC,UAAUlsI,QAAQ,SAAC6qF,OACf,IAAMo/B,MAAQp/B,MAAMo/B,QACpBliH,MAAM6iF,OAAOq/B,OAASp/B,MACtB8hD,UAAU1iB,YAEdr/B,OAAO5qF,QAAQ,SAAC6qF,OACZ,IAAM+hD,OZlVsB,SAA3BC,yBAA4BrnB,UAAWz9G,OAChD,IAAMy+G,kBAAoBhB,UAAUp1G,SAASo2G,sBACvCsmB,WAAatmB,kBAAkBsmB,WACjCF,UACJ,GAAIE,WAAY,CACZ,IAAMC,SAAWD,WAAW/kI,OAC5B6kI,OAASG,SAASH,OAClBpnB,UAAUgB,kBAAkBumB,SAASv0I,SAC9BguH,6BAA6B7mH,UACpC6lH,UAAUgB,kBAAkBA,mBAEhC,OAAOomB,OYuUgBC,CAAyBhiD,MAAO9iF,OAC/C4kI,UAAU9hD,MAAMo/B,SAAW2iB,SAG/BtyI,KAAKmlI,eAAiBkN,UACtBryI,KAAKioI,gBAAkBzsI,OAAO0M,OAAOlI,KAAKioI,gBZrRjB,SAApByK,kBAAqBpiD,OAAQ5pF,QACtC,IAAMs9H,kBAmBN,OAlBA1zC,OAAO5qF,QAAQ,SAAC6qF,OAAU,IAAAoiD,cACKpiD,MAAMz6E,SAAzBgnC,KADc61F,cACd71F,KAAMomD,SADQyvC,cACRzvC,SACRnkF,GAAKwxE,MAAMxxE,MAChBrU,SAAGvH,SAAG0hG,aAAOC,cAAQH,eAAQj/F,QAAQ,SAACsB,MACnC,IAAItF,MACEkxI,cAAgB15E,WAAWgqC,SAAUl8F,KAAM,SAC3C6rI,cAAgB7rI,OAAS29F,cAAS1wC,aAAa2+E,cAAe15E,WAAWgqC,SAAU0B,QAAS,UAC5F1rC,WAAWgqC,SAAUl8F,KAAM,SAC3Ba,MAAQosD,aAAaiF,WAAWpc,KAAM91C,MAAO6rI,eAE/CnxI,MADAgF,OAAOM,OAASN,OAAOM,MAAM3F,OACrBqF,OAAOM,MAAM6E,UAAU,SAAAg1F,WAAS,OAA+C,IAA3CA,UAAUlU,aAAatoF,QAAQwD,SAEnE,GAEXm8H,eAAejlH,MAAQilH,eAAejlH,QACvCilH,eAAejlH,IAAI/X,MAAQtF,UAG5BsiI,eYiQwD0O,CAAkBpiD,OAAQtwF,KAAK0G,WAC1F1G,KAAKswF,OAAOshD,WACLthD,+CAUP,IAAMjQ,WAAargF,KAAK4F,YAAYy6E,aAD9ByyD,qBAEkC9yI,KAAKqrG,cAArCglC,iBAFFyC,qBAEEzC,iBAAkB1d,UAFpBmgB,qBAEoBngB,UAClBxvD,UAAcnjE,KAAKolG,UAAnBjiC,UACRktE,iBAAiB3L,QAASpkD,OAAQtgF,KAAM4X,OAAQ,eAAgByoE,WAAY,SAC5E,IAAMiQ,OAAStwF,KAAKswF,SAUpB,OATAtwF,KAAKyN,QAAQswE,mBAAmB5a,UAAWkd,YAC3CsyC,UAAU50C,mBAAmB5a,UA9ZjB,QA+ZZqS,6BAAcx1E,KAAK4pF,SAAS33D,SAC5BjyB,KAAKmqF,WAAWl4D,SAEhBo+G,iBAAiB3L,QAASpkD,OAAQgQ,OAAQ14E,OAAQ,eAAgByoE,WAAY,aAC9E/6E,OAAA8sI,8BAAI9hD,QAAJ8hD,8BAAepyI,KAAKwnI,YAApB4K,8BAAmCpyI,KAAKynI,aAAY/hI,QAAQ,SAAA6qF,OAAK,OAAIA,MAAMt+D,WAC3Eo+G,iBAAiB3L,QAASpkD,OAAQgQ,OAAQ14E,OAAQ,UAAWyoE,WAAY,UACzEgwD,iBAAiB3L,QAASpkD,OAAQtgF,KAAM4X,OAAQ,UAAWyoE,WAAY,SAChErgF,qFAUkB87D,YAAa7/D,KAAM82I,aAC5C,GAAoB,OAAhBj3E,YACA,OAAO,KAEX,IAAMJ,UAAYq3E,aAAe/yI,KAAKwG,OACtC,OAAOq1D,yCAA4BH,UAAWI,YAAa7/D,oDAY3D,OADA+D,KAAKwG,KAAKxG,KAAKupI,aAAa,IACrBvpI,2DAUP,OACI05F,oBAAqB15F,KAAK0qI,qBAC1BhkI,OAAQ1G,KAAK0G,SACbF,KAAMxG,KAAKwG,OACX8lF,KAAMtsF,KAAKssF,8DAKf,OAAOtsF,KAAKyN,QAAQ9R,IAAb,GAAA2J,OAAoBmpH,0BAAiBhzE,sBAArC,WAAqEz7C,KAAKolG,UAAUjiC,yFASlE,IAAAq9B,aACaxgG,KAAK8V,SAAnCk7E,YADiBwP,aACjBxP,YAAaD,aADIyP,aACJzP,aACrB,OAAO,IAAAzrF,OAAK0rF,YAAL,KAAA1rF,OAAoByrF,uEAYd/pF,MAEb,OADeq+H,YAAYrlI,KAAKswF,SAAU,OAAQtpF,4DAatC3L,MAEZ,OADegqI,YAAYrlI,KAAKswF,SAAU,OAAQj1F,MACpC,2DA2BD6f,EAAGpY,EAAGgT,QACnB,IAAIu0G,UACAtrG,GAAI,MAEFi0H,SZxU4B,SAA7BC,2BAA8BjwH,QAASgG,UAChD,IAAMtiB,OAASsc,QAAQtc,SACvB,IAAKA,OAAOwU,EAAE7Z,SAAWqF,OAAO5D,EAAEzB,OAC9B,OAAO,KAEX,IAAMmF,KAAOwc,QAAQxc,OACf8lF,KAAOtpE,QAAQspE,OACftwB,aAAex1D,KAAK8O,kBACpBo3E,OAASxzB,WAAWxyD,OAAQ,IAAK,GAAGimF,aAAa,GACjDC,OAAS1zB,WAAWxyD,OAAQ,IAAK,GAAGimF,aAAa,GACjDE,WAAa7wB,aAAa0wB,QAAQzzE,IAAI1K,QACtCu+E,WAAa9wB,aAAa4wB,QAAQ3zE,IAAI1K,QAEtC2kI,WAAa,IAAKrmD,WAAYH,SAAU,IAAKI,WAAYF,SAASvyE,KAAK,SAAA6yH,OAAK,OAC9EA,MAAM,KAAOp4E,gCAAiBl2D,aAAesuI,MAAM,KAAOp4E,gCAAiBj2D,WAE/E,IAAKq0I,UAAarmD,aAAeO,8BAAepuF,YAAc8tF,aAAeM,8BAAepuF,WACxF,OAAO,KAEX,IAAM6I,MAAQqrI,SAAS,GACjBxxI,MAAQs6D,aAAan0D,OAAOnG,MAC9BrF,IAAMiwF,KAAK4mD,SAAS,IAAI,GAAG1+G,OAAOxL,SAASkqH,SAAS,KACxD,GAAIA,SAAS,KAAOp+E,gCAAiBj2D,SAAU,CAC3C,IAAM05D,WAAa0yE,6BAAI,IAAI77H,IAAI5I,KAAK+O,UAAU/O,KAAKxB,IAAI,SAAA5J,GAAC,OAAIA,EAAEsG,WAC9DrF,IAAMi8D,gBAAgBC,WAAYl8D,KAGtC,YAAea,IAARb,MAAsBwL,QAASxL,MAAQ,KY6SzB42I,CAA2BjzI,MACxCkb,IACApY,MAGJ,GAAiB,OAAbkwI,UAAqBl9H,OAAOg5E,aAAc,CAC1Cu7B,SAAStrG,GAAKi0H,SACd,IAAMG,SAAWnzI,KAAKozI,qBAAqBl4H,EAAGpY,EAAGgT,QAEjD,OADAu0G,SAAS1hF,OAASwqG,UAAYA,SAASp0H,GAAKo0H,SAASp0H,GAAKsrG,SAAStrG,GAC5DsrG,SAGX,IAAMgpB,QAAUrzI,KAAKozI,qBAAqBl4H,EAAGpY,EAAGgT,UAAaiJ,GAAI,MAIjE,OAHAsrG,SAAW7uH,OAAO0M,UAAWmrI,UAEpB1qG,OAAS0qG,QAAQt0H,GACnBsrG,2EAGWnvG,EAAGpY,EAAGykE,MAMxB,IALA,IAAM+oB,OAAStwF,KAAKswF,SACd5sE,IAAM4sE,OAAOjvF,OACfqiD,MAAQ,KAGH5oD,EAAI,EAAGA,EAAI4oB,IAAK5oB,IAAK,CAC1B,IAAMy1F,MAAQD,OAAOx1F,GAKrB,IAH2B,IADZy1F,MAAMz6E,SACV06E,cACP9sC,MAAQ6sC,MAAM1B,gBAAgB3zE,EAAGpY,EAAGykE,OAEpC7jB,MACA,OAAOA,MAGf,OAAOA,wFAsDmBoY,aAA0B,IAAbhmD,OAAa5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAChDu8D,UACA6yE,kBAAoBx3E,YACxB,GAAoB,OAAhBA,YACA,SAEJ,IAAMw0B,OAAStwF,KAAKswF,SACd5sE,IAAM4sE,OAAOjvF,OACf6zD,eAAe4G,eACfw3E,mBAAqB93I,OAAO4I,KAAK03D,cACjCw3E,qBAAiBhuI,OAAA8sI,8BAAOkB,mBAAPlB,8B7O8XN,SAAjBmB,eAAiB9+G,KAAG,OAAIA,IAAI,GAAGzvB,IAAI,SAACw2D,IAAK1gE,GAAN,OAAY25B,IAAIzvB,IAAI,SAAA4uF,KAAG,OAAIA,IAAI94F,O6O9Xdy4I,CAAe/3I,OAAOgc,OAAOskD,iBAE/E,IAAK,IAAIhhE,EAAI,EAAGA,EAAI4oB,IAAK5oB,IAAK,CAC1B,IAAMy1F,MAAQD,OAAOx1F,IACc,IAA/By1F,MAAMz6E,SAAS06E,cACf/vB,UAAMn7D,OAAA8sI,8BAAO3xE,QAAP2xE,8BAAkB7hD,MAAMijD,yBAAyBF,kBAAmBx9H,WAGlF,OAAO2qD,mEAWQplE,MAEf,OADAkqI,eAAe,OAAQlqI,MAChB2E,mEAWSgH,MAEhB,OADAu+H,eAAe,OAAQv+H,MAChBhH,uDAlnBP,MA7CY,mDAiDZ,QAEQwV,OAAQ,MAEZha,OAAO4I,KAAMmqH,mBAAetjH,OAAO,SAACwxE,IAAK73E,GAErC,OADA63E,IAAI73E,GAAK2pH,kBAAa3pH,GAAG7I,MAClB0gF,kFAOf,OADkB0zD,WAAWrd,WACZ9tH,IAAI,SAACqtE,MAAOv3E,GAAR,OAAcU,OAAO4I,KAAKiuE,OAAOrtE,IAAI,SAAAoa,MAAI,SAAA9Z,OAAO4qI,OAAOp1I,GAAd,KAAAwK,OAAoB8Z,8DAIlF,OACI3R,SAAKnI,OAAA8sI,8BAAMp0D,yBAAYh5E,IAAI,SAAC5J,GACxB,IAAMG,EAAIC,OAAO0M,UAAW9M,GACtBq4I,QAAUvD,OAAO,GAEvB,OADA30I,EAAEi+D,MAAQj+D,EAAEi+D,MAAMx0D,IAAI,SAAAoa,MAAI,SAAA9Z,OAAOmuI,QAAP,KAAAnuI,OAAkB8Z,QACrC7jB,OAEPyL,KAAM,4BACNwyD,OAAO,GAAAl0D,OAAImpH,0BAAiB7yE,uBAArB,YACP2qB,SAAUyhE,uCAEVhhI,KAAM,4BACNwyD,OAAK,GAAAl0D,OAAM4qI,OAAO,GAAb,KAAA5qI,ORlHA,SQkHA,GAAAA,OACE4qI,OAAO,GADT,KAAA5qI,ORjHC,WQiHDA,OAAA8sI,+BAEG,IAAK,KAAKptI,IAAI,SAAAgC,MAAI,SAAA1B,OAAO+pH,oBAAP,YAAA/pH,OAAyB0B,UACnDu/D,SAAU,SAAAA,SAACvjD,QAAD+zC,MAAA80D,OAAoC,IAAvB5pG,MAAuByxH,0BAAA38E,MAAA,MAAZ70C,OAAYwxH,0BAAA7nB,MAAA,MACtC5pG,OAASC,QACTqlH,2BAA2BvkH,UAGnCs3D,aAAc,SAAAA,aAACt3D,SAAY,IAAAimH,MAAArW,iBACmB5vG,QAAQoiF,UAA1CktB,SADeM,iBACfN,SAAUE,SADKI,iBACLJ,SAAUrvD,UADLyvD,iBACKzvD,UAC5B,OAAAwwE,2BAAA1K,SAAA,GAAA3jI,OACQ4qI,OAAO,GADf,KAAA5qI,OR5HC,SQ6H8B69D,WAD/BwwE,2BAAA1K,MAAA,GAAA3jI,OAEQ4qI,OAAO,GAFf,KAAA5qI,OR3HE,UQ6H8B69D,WAFhCwwE,2BAAA1K,MAAA,GAAA3jI,OAGQ+pH,oBAHR,gBAAA/pH,OAGgCktH,SAHhC,MAAAmhB,2BAAA1K,MAAA,GAAA3jI,OAIQ+pH,oBAJR,gBAAA/pH,OAIgCgtH,SAJhC,MAAA2W,UAQRtW,YAEQ3rH,KAAM,yBACNwyD,OAAQrd,aAAYE,eACpBkqB,SAAU,SAAAA,SAACvjD,QAADmmH,OACN,GAD8BuK,0BAAAvK,MAAA,MACnB,CACP,IAAMh/C,SAAWnnE,QAAQmnE,YHvHZ,SAA5BypD,0BAA6B5wH,SACtC,IAAM4jE,kBAAoB5jE,QAAQqiE,mBAClC7pF,OAAOkS,QAAQk5E,mBAAmBlhF,QAAQ,SAACwnI,OACvC,IAAMrnD,WAAaqnD,MAAM,GACzBlqH,QAAQwkE,mBAARnqF,MAAA2lB,SAA2B6iE,WAAWxqF,MAA/BiK,OAAAuuI,kCAAwChuD,WAAWjvE,YAE9DoM,QAAQqiE,sBGkHgBuuD,CAA0BzpD,UHjIpB,SAArB2pD,mBAAsB9wH,SAC/B,IAAM2jE,cAAgB3jE,QAAQoiE,eAC9B,IAAK,IAAM/oF,OAAOsqF,cACVA,cAActqF,KAAK4d,wBACZ+I,QAAQoiE,eAAe/oF,KG8Hdy3I,CAAmB3pD,UAEvBnnE,QAAQ0iH,mBACR1iH,QAAQyhH,kBAAkBC,QACtBpkD,OAAQt9D,QAAQstE,SAChB14E,OAAQ,QACRyoE,WAAY,sDAwCV,QAAAjnB,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MACtB,OAAA06E,sBAAW/zI,KAAQ4W,0TCvLNo9H,yeAQb,MAAM,IAAIrqI,MAAM2wD,UAAUC,4DAS1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,qxCCuFnB05E,kCA7FX,SAAAA,eAAsB,IAAAr4D,kKAAAs4D,CAAAl0I,KAAAi0I,cAClBr4D,MAAAu4D,wCAAAn0I,KAAAo0I,6BAAAH,cAAAh5I,KAAA+E,OADkB,QAAAo5D,KAAAl1D,UAAA7C,OAANgzI,KAAM,IAAA9uI,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAANg7E,KAAMh7E,MAAAn1D,UAAAm1D,MAAA,OAElBuiB,MAAKy4D,KAAKA,MAFQz4D,0YAPCo4D,gTAanB,OAAI9vI,UAAO7C,QACPrB,KAAKs0I,MAALpwI,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKs0I,0CAGH,QAAAl+D,MAAAlyE,UAAA7C,OAAJygE,GAAI,IAAAv8D,MAAA6wE,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAJvU,GAAIuU,OAAAnyE,UAAAmyE,OACT,OAAIvU,GAAGzgE,QACHrB,KAAKq0I,OAAO3uI,QAAQ,SAAAtK,GAAC,OAAIA,EAAEoL,KAAKs7D,GAAG,MACnC9hE,KAAKu0I,MAAQzyE,GAAG,GACT9hE,MAEJA,KAAKu0I,sDAWZ,OADav0I,KAAKq0I,OACNrvI,IAAI,SAAAwvI,QAAM,OAAIA,OAAO7nD,aAAa,yCAS9C,OAAO3sF,KAAKq0I,OAAO,GAAGrtI,mDAItB,OAAOhH,KAAKq0I,OAAOrvI,IAAI,SAAA5J,GAAC,OAAIA,EAAE2G,aAAYQ,KAAK,yDAS/C,OAAOvC,KAAKq0I,OAAO,GAAGlkI,qDAGlBqH,QACJ,OAAOxX,KAAKq0I,OAAO,GAAGp0I,OAAOuX,4DAI7B,OAAOxX,KAAKwG,OAAO8O,kBAAkBtV,KAAKq0I,OAAO,IAAIp7H,8CAUrD,OAAOjZ,KAAKq0I,OAAO,GAAG9lI,0DAUtB,OAAOvO,KAAKq0I,OAAO,GAAGI,+DAStB,OAAOz0I,KAAKq0I,OAAOrvI,IAAI,SAAA5J,GAAC,OAAIA,EAAEqT,gBAAelM,KAAK,gvCClGrCmyI,8CAOjB,SAAAA,eAAar5I,MAAM,IAAAugF,MAAA,+JAAA+4D,CAAA30I,KAAA00I,iBACf94D,MAAAg5D,qCAAA50I,KAAA60I,0BAAAH,gBAAAz5I,KAAA+E,QACK80I,OAAOz5I,MAFGugF,sYAPqBo4D,6SAmBpC,OAAI9vI,UAAK7C,QACLrB,KAAK+0I,QAAL7wI,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK+0I,4CAIZ,OAAI7wI,UAAG7C,QACHrB,KAAKu0I,MAALrwI,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKu0I,kDAIZ,OAAOv0I,KAAK80I,6DAUZ,MAAoB,YAAhB90I,KAAKgH,OACahH,KAAKwG,OAAOkD,gBAAgB7C,aAAa7G,KAAK80I,UAC/C3kI,eACZ,SAAAqjD,KAAG,OAAIA,2CAGZh8C,QACJ,GAAIA,QAA6B,aAAnBxX,KAAKuO,UAA0B,CACzC,IAAM1M,UAAY7B,KAAKwG,OAAOkD,gBAAgBzC,eAAejH,KAAK80I,UAAU/tI,SAAS9G,OAC/E+0I,SAAW,IAAI33H,iCAAkBxb,WACvC2V,OAASA,OAAOxS,IAAI,SAAAhI,GAAC,OAAIg4I,SAAS7vI,cAAcnI,KAEpD,OAAOwa,qDAUP,GAAIxX,KAAKuO,YAAcumD,gCAAiBj2D,SAAU,CAC9C,IAAMo2I,WAAaj1I,KAAKwG,OAAOkD,gBAAgBzC,eAAejH,KAAK80I,UAAU/tI,SAAS9G,OACtF,OAAO,SAAAuzD,KAAG,OAAIn2C,iCAAkB7Y,SAASgvD,IAAKyhF,aAElD,OAAO,SAAAzhF,KAAG,OAAIA,qDAUd,OAAQxzD,KAAK80I,8CAWb,OADiB90I,KAAKwG,OAAO8O,kBAAkBtV,KAAK80I,UAAU77H,IAC9CjS,+CAWhB,IAAMkuI,SAAWl1I,KAAKwG,OAAO8O,kBAAkBtV,KAAK80I,UAAU77H,IAC9D,OAAOi8H,SAAS3mI,SAAW2mI,SAASluI,qDAUpC,OADmBhH,KAAKwG,OAAOkD,gBACb/C,YAAY3G,KAAK80I,UAAU5L,qEAQzCiM,SACJ,OAAOn1I,KAAK80I,WAAaK,QAAQL,2DASjC,OAAOjzE,yBAAyB7hE,KAAKwG,OAAQxG,KAAK80I,8DASlD,OAAO90I,KAAKwG,OAAO8O,kBAAkBtV,KAAK80I,UAAU77H,msCC7I5D,IAmFMm8H,6BAAe,SAAfA,aAAgBC,UAAW3uI,QAC7B,IAAM2tI,QAUN,OARA3tI,QAAUA,OAAOhB,QAAQ,SAACmC,OAClBA,iBAAiBosI,eACjBI,KAAK/vI,KAAKuD,OACVA,MAAMrB,KAAK6uI,YAEXhB,KAAK/vI,KAAK,IAAIowI,0BAAe7sI,OAAOrB,KAAK6uI,cAG1ChB,MAWEiB,gCAAkB,SAAlBA,gBAAmBD,UAAWv/H,QAAW,IAAAozG,MAAAqsB,+BACjBpwB,KAAMC,SAASpgH,IAAI,SAAC0B,QACjD,IAAM8uI,iBA5CU,SAAlBC,gBAAmB3/H,OAAQ9O,MAC7B,IAAM8S,aACApT,OAASoP,OAAO9O,MAQtB,OANMN,OAAO,aAAcnB,OAGvBuU,UAAU,GAAKpT,OAAO,OACtBoT,UAAU,GAAKpT,OAAO,QAHtBoT,UAAU,GAAKpT,OAKZoT,UAkCsB27H,CAAgB3/H,OAAQpP,QAC3CgvI,WAAaN,6BAAaC,UAAWG,iBAAiB,KAK5D,OAHIA,iBAAiB,KACjBE,UAAU,GAAKN,6BAAaC,UAAWG,iBAAiB,KA/GhD,SAAdG,YAAeC,WAAY5uI,MAC7B,IAAM6uI,qBACAC,mBACAC,oBACAC,uBAENJ,WAAWlwI,QAAQ,SAACuwI,UAAWv0I,OAC3Bu0I,UAAUvwI,QAAQ,SAACmC,OxDsCF,cwDrCTA,MAAMb,QACN6uI,aAAan0I,OAAO4C,KAAKuD,OxDyNjB,awDxNRA,MAAM0G,UAAyBwnI,YAAYr0I,OAAO4C,KAAKuD,OAASmuI,eAAet0I,OAAO4C,KAAKuD,QAE3FiuI,WAAWp0I,OAAO4C,KAAKuD,WAKnC,IAAMquI,cAAgBJ,WAAW,GAAGz0I,QAAUy0I,WAAW,GAAKA,WAAW,GAAGz0I,OAAS,GAGrF,IAAKu0I,WAAW,KAEZE,WAAW,GAAK9uI,OAASo+G,QAAU0wB,WAAW,MAE9CA,WAAW,GAAK9uI,OAASo+G,QAAU0wB,WAAW,MAE9CD,aAAa,MAEbA,aAAa,GAAKA,aAAa,GACT,IAAlBK,eAAqB,CACrB,IAAMC,iBAAa7wI,OAAA8wI,kCAAOP,aAAa,IAApBO,kCAA2BP,aAAa,KACvD7uI,OAASo+G,SACTywB,aAAa,GAAKM,cAAcA,cAAc90I,OAAS,IAAM80I,cAAcA,cAAc90I,OAAS,OAElG80I,cAActxI,QAAQ,EAAG,IAEzBgxI,aAAa,MAEjBA,aAAa,GAAbO,kCAAsBD,eAQ9B,OAJIN,aAAa,GAAGx0I,QAAUw0I,aAAa,GAAGx0I,QAAU60I,cAAgB,IACpEL,aAAa,MAAbvwI,OAAA8wI,kCAAsBP,aAAa,IAAnCO,kCAA0CP,aAAa,KACvDA,aAAa,QAGbnvI,OAAQmvI,aAAa7wI,IAAI,SAACqgE,KAAMvqE,GAAP,OAAoB,IAANA,EACnCg7I,WAAWh7I,GAAGwK,OAAOuwI,aAAa/6I,IAAM+6I,aAAa/6I,GAAGwK,OAAOwwI,WAAWh7I,MAC9EiyF,cAAUznF,OAAA8wI,kCAAMP,aAAa,IAAnBO,kCAA0BP,aAAa,KACjDn0E,YAAQp8D,OAAA8wI,kCAAMN,WAAW,IAAjBM,kCAAwBN,WAAW,KAC3CO,YAAQ/wI,OAAA8wI,kCAAML,YAAY,IAAlBK,kCAAyBL,YAAY,KAC7CO,eAAWhxI,OAAA8wI,kCAAMJ,eAAe,IAArBI,kCAA4BJ,eAAe,MA6D/CL,CAAYD,UAAWhvI,UARgB,GAC3C6vI,SAD2CrtB,MAAA,GACjCstB,YADiCttB,MAAA,GAWtC/yB,KAKRogD,SALA7vI,OACY+vI,cAIZF,SAJAxpD,WACU2pD,YAGVH,SAHA70E,SACUi1E,kBAEVJ,SAFAF,SACaO,qBACbL,SADAD,YAGQvjI,QAKRyjI,YALA9vI,OACYmwI,iBAIZL,YAJAzpD,WACU+pD,eAGVN,YAHA90E,SAIJ,OACIy0B,UACAsgD,4BACAC,wBACAC,oCACAC,0CACA7jI,gBACAgkI,qBARAP,YAFAH,SAWAW,wBATAR,YADAF,YAWAO,kCACAC,6+BC1IaG,uiBAQb,MAAM,IAAIttI,MAAM2wD,UAAUC,0EAS1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,wEAS1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,8DAI1B,OAAIr2D,UAAK7C,QACLrB,KAAKk3I,WAAa18E,eAAex6D,KAAKk3I,eAANhzI,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IACzBlE,MAEJA,KAAKk3I,iEAWA7B,UAAWv/H,QAEvB,OADA9V,KAAKqsH,UAAUipB,gCAAgBD,UAAWv/H,SACnC9V,KAAKqsH,wDAWZ,OAAInoH,UAAO7C,QACPrB,KAAKm3I,UAALjzI,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKm3I,0DAWZ,OAAIjzI,UAAO7C,QACPrB,KAAKo3I,YAALlzI,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKq3I,2EAU0B,IAAvBC,SAAuBpzI,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAARwC,OAAQxC,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAAAq6I,oBAAAC,6BACTC,8BAAkBnyB,IAAK5+G,OAAOyvF,KAAMmhD,UAD3B,GAC/BI,UAD+BH,oBAAA,GACpBI,QADoBJ,oBAAA,GAAAK,oBAAAJ,6BAETC,8BzDKf,SyDLyC/wI,OAAOqM,QAASukI,UAFjC,GAE/BO,UAF+BD,oBAAA,GAEpBE,QAFoBF,oBAAA,GAYtC,OARA53I,KAAKs3I,UACD1jD,IAAK+jD,QACLI,OAAQD,UAEZ93I,KAAKg4I,YACDpkD,IAAK8jD,UACLK,OAAQF,YAEL73I,0BC5GFi4I,WACT30G,OAAQ4wE,6BACRxgF,KAAM0hF,mBACNihC,SAAU5gC,mBACV30F,KAAM8iG,mBACNpkF,MAAOuiF,qBACPzrB,MAAO4tB,sBCHEg0B,sCACT9kD,UAAW0U,2BAAU5B,KACrBowC,YAAaxuC,2BAAU5B,KACvBmwC,SAAUvuC,2BAAU3B,KACpBxL,QAASmN,2BAAU7B,OACnBp9D,WAAYi/D,2BAAU7B,kgBCM1B,IA8GakyC,mCAAsB,SAAtBA,oBAAuB7R,SAAUja,UAAW+rB,aAAc1a,SAAUxhC,QAASm8C,aACtF,IAAIC,QACIC,UAA2B7a,SAA3B6a,UAAWzoD,YAAgB4tC,SAAhB5tC,YACb0oD,eACE9xI,OAAkB2lH,UAAlB3lH,OAAQhF,MAAU2qH,UAAV3qH,MAEVsD,IADgBozI,aAAdK,UACa,GAAAnzI,OAAIghI,SAAJ,YAEfoS,cAAgBC,WAAWrS,SAAU5kI,OAuB3C,OAtBAgF,OAAOhB,QAAQ,SAACmC,MAAO+4F,WACnB03C,QAAUK,WAAWrS,SAAU5kI,MAAOk/F,UAAWs3C,qCAAiBrwI,MAAM0G,YACxE,IAEIuuC,KAFE87F,WAzHQ,SAAhBC,cAAiBC,SAAUjxI,MAAOuwI,aAAcl8C,QAASm8C,aAC3D,IAAIU,gBACIr3I,MAA+Bo3I,SAA/Bp3I,MAAOk/F,UAAwBk4C,SAAxBl4C,UAAW0lC,SAAawS,SAAbxS,SAClBxwH,OAAqBsiI,aAArBtiI,OAAQkT,SAAaovH,aAAbpvH,SACRspG,SAA0Bp2B,QAA1Bo2B,SAAU0mB,YAAgB98C,QAAhB88C,YACZC,kBAAoBnjI,OAAOw2E,MAAQx2E,OAAOw2E,KAAKg6C,cAK/C4S,gBAFgD,mBAAtBD,kBAChC,kBAAMA,mBAAoBA,mBACc3mB,SAAU0mB,aAC9CvsD,WAAY5kF,MAAM8kF,aAClB0rD,0BAIJ,IAAKa,eACD,SAYAH,gB5DuNY,S4DxNZ/vH,UAFoBs9G,WAAanjI,GADjC6iG,iCAJAL,KAIAK,iCAHAJ,QAGAI,iCAFAN,IAEAM,iCADAP,SAKkC7E,WAEhB53E,SAEtB,IAAM4vH,YACF75H,GAAE,GAAAzZ,OAAKghI,SAAL,KAAAhhI,OAAiB5D,MAAjB,KAAA4D,OAA0Bs7F,WAC5BvlG,KAAMwM,MAAM4G,cACZ5G,MAAOA,MAAM9F,WACboO,aAActI,MAAMsI,eACpB4nF,YAAaghD,gBACbtwC,cAAc,EACdpV,MAAM,EACNrsF,KAAMkxI,qCAAiBrwI,MAAM0G,YAKjC,OAHA2qI,eAAej8F,WAAap1C,MAAM5H,OAAOi5I,eAAej8F,YACxDi8F,eAAe1jI,OAAS3N,MAAM5H,OAAOi5I,eAAe1jI,QAE7CglD,eAAeo+E,WAAYM,gBA2EXL,EAAgBn3I,YAAOk/F,oBAAW0lC,mBAAYz+H,MAAOuwI,aAAcl8C,QAASm8C,aAG1FrzI,IAAI6F,IAAIytI,WAGTx7F,KAAO93C,IAAIrJ,IAAI28I,UACVa,eAAgB,EACrBr8F,KAAKhnC,OAAO8iI,aAJZ97F,KApEa,SAAnBs8F,iBAAoBR,WAAY/wI,MAAOuwI,cAAiB,IAClDpvC,aAAiBovC,aAAjBpvC,aAGR,OADmB,IAAIqwC,EADXpB,UAAUC,qCAAiBrwI,MAAM0G,aAClBqqI,YAAc5vC,4BAiE1BowC,CAAiBR,WAAY/wI,MAAOuwI,cAM/Ct7F,KAAKgzC,YAAYA,aACjB0oD,YAAYl0I,KAAKw4C,MACjB93C,IAAI8F,IAAIwtI,QAASx7F,QAGjB07F,YAAYn3I,SACZ2D,IAAI8F,IAAI4tI,cAAeF,aACvBD,UAAUlpI,IAAIqpI,gBAGXF,aAGEc,6CAAgC,SAAhCA,8BAAiCC,gBAAiBtgI,MAC1DorF,sBAAOC,sBAAOF,sBAAM1+F,QAAQ,SAACo3C,MACtBy8F,gBAAgBz8F,OAASy8F,gBAAgBz8F,MAAMj1C,OAC/CoR,IAAIvT,QAAQ,SAAC04E,MACTA,KAAK8kB,SAAW9kB,KAAK8kB,cACpB9kB,KAAK8kB,SAASpmD,QAAUshC,KAAK8kB,SAASpmD,UACvCshC,KAAK8kB,SAASpmD,MAAMj1C,MAAQ0xI,gBAAgBz8F,MAAMj1C,WAkFrD2xI,SAAW,SAAXA,SAAY/kH,IAAK++B,KAI1B,IAHA,IAAI14D,EAAI,EACJ2+I,UAAY,GAEK,IAAdA,UAAmB3+I,EAAI25B,IAAIpzB,QAC1BozB,IAAI35B,GAAGiH,aAAeyxD,IAAIzxD,aAC1B03I,SAAW3+I,GAEfA,IAEJ,OAAO2+I,g1EC3OX,aAAMrxB,4BAAY7rE,sBASGm9F,iyBAAyBzC,qVAoB9BmB,aAAc/rB,UAAWrpG,SAAS,IAAA44D,MAAA57E,KACpC25I,gBAEFrtD,KACA8rD,aADA9rD,KAGAstD,YAEAvtB,UAFAutB,YACA19C,QACAmwB,UADAnwB,QAGA29C,UAEAD,YAFAC,UACAC,aACAF,YADAE,aAMErtD,aACF/lF,OAAQmzI,UACRn4I,MAHAw6F,QAFCo2B,WAOD5rH,OAAQozI,aACRp4I,MANAw6F,QADC88C,cASG5sH,SAAoCpJ,QAApCoJ,SAAUisH,YAA0Br1H,QAA1Bq1H,YAAa0B,SAAa/2H,QAAb+2H,SACzBC,MAAQ1tD,KAAKpxE,MACb++H,MAAQ3tD,KAAKxpF,MAiBnB,OAfC+2I,UAAWC,cAAcp0I,QAAQ,SAACgB,OAAQ5L,GACvC,IAAMkM,KAAa,IAANlM,EAAUwqH,I7DwBb,S6DvBJxoE,KAAa,IAANhiD,EAAUqI,EAAIuH,EAEvBhE,OAAOrF,OAAS,EAChB+2I,aAAapvH,S7D+KT,O6D7KJovH,aAAapvH,SAAW4yD,MAAK07D,WAAWtwI,MAE5C2yI,aAAa78F,MAAQq7F,mCAAoBr7F,KAAM2vC,WAAW3xF,GAAIs9I,cAC1DG,UAAWz7F,OAASpyC,EAAIsvI,MAAQC,MAChCnqD,YAAa1jE,SAAS0jE,eACvBoM,QAASm8C,eAEhB0B,SAASztD,KAAKqtD,cACPA,uEAGO32H,SAcd,IAbA,IAAMvV,MAAQuV,QAAQvV,QAChB2e,SAAWpJ,QAAQoJ,WACnB8tH,MAAQ9tH,SAAS8tH,QACjBpjF,SACFrlB,KACA0oG,MAEErkI,OAASkN,QAAQlN,SACjBnP,WACF8qC,KACA0oG,MAXmBlkF,MAAA,SAAAA,MAcdmkF,KAAU12H,KAEf,IADA,IAAM22H,SAAWH,MAAME,MAfJ19C,OAAA,SAAAA,OAgBV49C,KAAU39C,MACf,IAAM1sF,KAAOoqI,SAASC,MAChB7tD,WAAax8E,KAAKvJ,SAClB6zI,gBAAkBtqI,KAAKg0H,iBAC5B,IAAK,KAAKv+H,QAAQ,SAAC4gI,SAAUkU,eACT/tD,WAAW65C,UACnB5gI,QAAQ,SAACmC,MAAO+4F,WACrB,IAAMvkG,IAAOm+I,cAAD,GAAAl1I,OAA6C80I,KAA7C,KAAA90I,OAAqDs7F,WAArD,IAAAt7F,OAAqBg1I,MAArBh1I,OAA4Bs7F,WAClC5pC,IAAMujF,gBAAgBjU,UACtBmU,YAAc5yI,MAAM0G,UAC1B5H,UAAU6zI,eAAen+I,KAAOwL,MAE5BmvD,KAAmC,IAA5Bx7D,OAAO4I,KAAK4yD,KAAK31D,SACxBy1D,QAAQ0jF,eAAen+I,KAAOw6D,aAAcC,QAAQ0jF,gBAChD1jF,QAAQ0jF,eAAen+I,SAAa26D,IAAG,GAAA1xD,OAAIuC,SAAW4yI,mBAdjEH,KAAO,EAAG39C,KAAO09C,SAASh5I,OAAQi5I,KAAO39C,KAAM29C,OAAQ59C,OAAvD49C,OAFJF,KAAO,EAAG12H,IAAMw2H,MAAM74I,OAAQ+4I,KAAO12H,IAAK02H,OAAQnkF,MAAlDmkF,MAdc,IAAAM,eAqCQtuH,SAASkgE,OAA7B0tD,MArCYU,eAqCfx/H,EAAa++H,MArCES,eAqCL53I,EAClB2K,MAAM8tE,aACLy+D,MAAOC,OAAOv0I,QAAQ,SAACi1I,QAASrU,UAC7BqU,QAAQj1I,QAAQ,SAAC4mF,KAAMjwB,KACnB,IAAIhgE,IACAmZ,UACAolI,kBACE1tI,OACAC,OACA0tI,WAAavuD,KAAK,GAAG1mF,YAAYoB,OAEvC,GAAIslF,KAAKjrF,OAAS,GAAKw5I,aAAe/yC,2BAAU7B,QAAU3Z,KAAK,GAAGx2E,SAASglI,cACvExuD,KAAK5mF,QAAQ,SAACo3C,KAAMhiD,GAChBuB,IAAOiqI,SAAD,GAAAhhI,OAA+B+2D,IAA/B,KAAA/2D,OAAsCxK,GAAtC,IAAAwK,OAAgB+2D,KAAhB/2D,OAAsBxK,GAC5B0a,OAASshD,QAAQwvE,UAAUjqI,KAC3B6Q,IAAIpS,GAAK0a,OAAO,GAChBrI,IAAIrS,GAAK0a,OAAO,KAEpBolI,eDzEa,SAApBG,kBAAqB5tI,IAAKD,KACnC,IAAM8tI,QAAU7tI,IAAI,IAAMA,IAAI,GAAKD,IAAI,IACjC+tI,QAAU9tI,IAAI,IAAMA,IAAI,GAAKD,IAAI,IAGnCguI,aAAc,EA0BlB,OAvBIhuI,IAAI,GAAK,GAAKA,IAAI,GAAK,GAAKA,IAAI,GAAK,GAAKC,IAAI,GAAK,IACnD+tI,aAAc,EACdhuI,IAAI,GAAK,EACTA,IAAI,GAAK,GAITA,IAAI,GAAK,GAAKA,IAAI,GAAK,GAAKA,IAAI,GAAK,GAAKC,IAAI,GAAK,IACnD+tI,aAAc,EACd/tI,IAAI,GAAK,EACTA,IAAI,GAAK,GAIR+tI,aAAeF,UAAYC,UACxBD,QAAUC,QAEV/tI,IAAI,GAAKA,IAAI,GAAKC,IAAI,GAAKA,IAAI,GAG/BD,IAAI,GAAKA,IAAI,GAAKC,IAAI,GAAKA,IAAI,MAIlCD,IAAI,GAAIC,IAAI,KACZD,IAAI,GAAIC,IAAI,KCwCgB4tI,CAAkB5tI,IAAKD,UACrC,GAAI2tI,aAAe/yC,2BAAU5B,KAAM,CAGtC7pG,IAAOiqI,SAAD,GAAAhhI,OAA4B+2D,IAA5B,UAAA/2D,OAAgB+2D,IAAhB,KACN,IAAM8+E,iBAAmBx0I,UAAU2/H,UAAUjqI,KAAKy4I,SAC5CsG,aAAetlI,OAAO7J,MAAQ6J,OAAO7J,KAAKkvI,kBAE5CC,cACAtkF,QAAQwvE,UAAUjqI,KAAK4P,KAAK,SAAC1O,EAAGoF,GAAJ,OtP6nCvB,SAAvB04I,qBAAwBC,UAAWp5E,SAAUC,WAC/C,IAAMo5E,cAAgBnmF,oBAAOkmF,WAE7B,OAAIC,gBAAkBvmF,SACXsmF,UAAUp5E,SAAUC,WACpBo5E,gBAAkBxmF,QACpBiN,aAAas5E,WACXt5E,aAAas5E,WAAWp5E,SAAUC,WAEtC,KsPtoCmDk5E,CAAqBD,aAAc79I,EAAGoF,KAIpF2pF,KAAK5mF,QAAQ,SAACo3C,KAAMp7C,OAChBrF,IAAOiqI,SAAD,GAAAhhI,OAAmC+2D,IAAnC,KAAA/2D,OAA0C5D,OAA1C,IAAA4D,OAAgB+2D,KAAhB/2D,OAAsB5D,QAC5B8T,OAASolI,eAAel5I,QAAUo1D,QAAQwvE,UAAUjqI,OAE1CygD,KAAKtnC,OAAOA,QACtB,IAAMxO,KAAQs/H,SAAiB,IAAN,IACzB74H,MAAM6uE,OAAN,GAAAh3E,OAAgBmpH,0BAAiB5yE,uBAAjC,YAAAv2C,OAAkE0B,MAAQwO,OAA1E,GAAAlQ,OAAqF+2D,KAArF/2D,OAA2F5D,cAIvG+L,MAAMguE,sFAUe/0E,OAAQM,MAY7B,IAXA,IAAIw0I,UACA5B,eACA6B,QAAU,EACRC,iBACAC,mBACAC,cAAgBl1I,OAAO,GACvBm1I,gBAAkBn1I,OAAO,GACzBo1I,WAAaF,cAAcv6I,OAC3B06I,aAAeF,gBAAgBx6I,OAC/Bi2I,SAAWt3I,KAAKs3I,WAEbx8I,EAAI,EAAGA,EAAIghJ,WAAYhhJ,IAAK,CACjC,IAAIkhJ,SAAWJ,cAAc9gJ,IACvBmhJ,aAAeL,cAAc9gJ,GAEnC,GAAImhJ,aAAaj1I,SAAW/H,QAAS,CACjC,IAAMi9I,eAAiBL,gBAAgBJ,SACnCS,gBAAkBA,eAAel1I,SAAW/H,UAC5Cw8I,UACAO,SAAWC,aAAcC,iBAE7BtC,YAAYt1I,KAAK03I,cAEjBR,OAAOl3I,KAAK23I,cACZP,cAAcp3I,KAAK23I,cAG3B,GAAIF,aAAeN,QACf,IAAK,IAAI3gJ,GAAI2gJ,QAAS3gJ,GAAIihJ,aAAcjhJ,KAAK,CACzC,IAAMohJ,gBAAiBL,gBAAgB/gJ,IACjCkhJ,UAAWE,iBACbA,gBAAel1I,SAAW/H,QAC1B26I,YAAYt1I,KAAK03I,WAEjBR,OAAOl3I,KAAK43I,iBACZP,gBAAgBr3I,KAAK43I,kBAIjC,IAAKR,cAAcr6I,QAAUs6I,gBAAgBt6I,UAAYu4I,YAAYv4I,OAEjE,GAAKi2I,SADLtwI,KAAOA,OAASq+G,I7D1HN,S6D0HqBr+G,QACP2+F,gB7DvEjB,Q6DuEyB2xC,SAAStwI,QAAkB00I,cAAcr6I,OAUlE,CACH,IACM86I,OAAQR,gBADQ,GAEtB/B,cAAgBuC,SAChB,IAAMC,YAAa5C,SAASkC,cAAeS,QACvCC,aAAc,IACdxC,cAAgBuC,OAAOA,SACvBT,cAAc72I,OAAOu3I,YAAY,IAErCT,gBAAgB92I,OARM,EAQgB,OAnBuC,CAC7E,IAAMw3I,cAAgBX,cAAcr6I,OAAS,EACvC86I,MAAQT,cAAcW,eAC5BzC,cAAgBuC,QAChB,IAAMC,WAAa5C,SAASmC,gBAAiBQ,OACzCC,YAAc,IACdxC,cAAgBuC,MAAOA,QACvBR,gBAAgB92I,OAAOu3I,WAAY,IAEvCV,cAAc72I,OAAOw3I,cAAe,GAgB5C,OACIb,OAFJA,QADAA,UAAMl2I,OAAOo2I,cAAkBC,kBACf/vI,OAAO,SAACyqF,GAAI30F,MAAOywE,MAAZ,OAAqBzwE,QAAUywE,KAAKtmE,UAAU,SAAA7P,GAAC,OAAKA,EAAE+F,aAAes0F,GAAGt0F,eAG3F63I,+EAYQvE,UAAWv/H,QACvB,OAAAwmI,sBAAAC,iCAAA7C,iBAAA98I,WAAA,iBAAAoD,MAAA/E,KAAA+E,KAA4Bq1I,UAAWv/H,8EAUnBsoF,WAAY8E,UAChC,IAAMs5C,aAAep+C,WAAWo+C,aAC1B1lF,WACN,IAAK,IAAMz6D,OAAO6mG,SACd,MAAOrmG,eAAe5B,KAAKioG,SAAU7mG,KAAM,CACvC,IAAMogJ,YAAcv5C,SAAS7mG,KACvBwL,MAAQ40I,YAAY50I,MAC1B,IAAK40I,YAAYjnI,QAAU3N,MAAO,CAC9B,IAAM2N,OAASknI,sBAAsBF,aAAc30I,OACnDivD,QAAQjvD,OAAS2N,QAI7B,OAAOshD,0EASW6lF,YAClB,IAAMC,oBAON,OALAD,WAAWt7I,QAAUs7I,WAAWj3I,QAAQ,SAAC6qF,MAAOz1F,GAC5C,IAAMme,IAAM2oH,kBAAaqB,oBAAoB1yC,OAC7Ct3E,IAAIM,MAAQze,EACZ8hJ,iBAAiBt4I,KAAK2U,OAEnB2jI,iFAGUrD,gBAAiBsD,iBAClC,IAAMC,eAMN,OALAD,gBAAgBn3I,QAAQ,SAACoQ,QACrB,IAAMmD,IAAM0U,QAAQ7X,OAAOmD,KAC3BqgI,6CAA8BC,gBAAiBtgI,KAC/C6jI,YAAYx4I,KAAKwR,UAEdgnI,kEAWKp2I,OAAQm2I,gBAAiBE,eACrC,IAAMD,eAEFhD,aAEApzI,OAFAozI,aACAD,UACAnzI,OADAmzI,UAiDJ,OA7CAC,aAAap0I,QAAQ,SAACs3I,UAClB,IAAMC,aAAeD,SAASj7I,WAC9B83I,UAAUn0I,QAAQ,SAACw3I,UACf,IAAIC,WACEC,aAAeF,SAASn7I,WACxBmhG,UACFhoF,GACIrT,MAAOo1I,cAEXn6I,GACI+E,MAAOu1I,eAGTC,aAAeH,SAAS3uI,UAExBu0F,KD/IQ,SAAjBw6C,eAAkBC,aAAcF,cAWzC,M5DYuB,gB4DpBnBE,c5DoBmB,gB4DpBaF,a5D4BrB,MAJK,a4DtBTE,c5DsBS,a4DtBoBF,a5D8BxB,OAIC,Q6DwGQC,CADQN,SAASzuI,UACY8uI,cAEpCG,aACF16C,UACA7pF,KACI6pF,UACAI,qBAIFu6C,aD5FgB,SAAzBC,uBAA0BC,UAAW9D,UAAWgD,iBAAvB,OAA2CA,gBAAgBjxI,OAAO,SAACwyE,MAAS,IAAAroB,KAAAgB,MAAA80D,MACxGmH,SAAW50C,gBAAgB74E,MAAQ64E,MAAQA,MAC3Cw/D,aAAc7nF,SAAGzwD,OAAHjI,MAAA04D,KAAA8nF,iCAAa7qB,SAAShuH,IAAI,SAAA5J,GAAC,OAAIA,EAAE8nG,WAAUt3F,OAAO,SAAAxQ,GAAC,YAAU8B,IAAN9B,MAE3E,IAAKwiJ,YAAYv8I,OACb,OAAO,EAGX,IAAMy8I,SAAU/mF,UAAGzxD,OAAHjI,MAAA05D,MAAA8mF,iCAAaD,YAAY54I,IAAI,SAAA5J,GAAC,OAAKA,EAAE8f,GAAK9f,EAAE8f,EAAErT,MAAOzM,EAAE2xC,IAAM3xC,EAAE2xC,GAAGllC,WACrE+D,OAAO,SAAAxQ,GAAC,YAAU8B,IAAN9B,GAAyB,OAANA,IACtC2iJ,SAAUlyB,UAAGvmH,OAAHjI,MAAAwuH,MAAAgyB,iCAAaD,YAAY54I,IAAI,SAAA5J,GAAC,OAAKA,EAAE0H,GAAK1H,EAAE0H,EAAE+E,MAAOzM,EAAEqkD,IAAMrkD,EAAEqkD,GAAG53C,WACrE+D,OAAO,SAAAxQ,GAAC,YAAU8B,IAAN9B,GAAyB,OAANA,IAE5C,IAAK0iJ,QAAQz8I,SAAW08I,QAAQ18I,OAC5B,OAAO,EAGX,IAAM28I,gBAAgBF,QAAQz8I,QAASy8I,QAAQroI,MAAM,SAAAra,GAAC,OAA8B,IAA1BuiJ,UAAUt5I,QAAQjJ,KACtE6iJ,gBAAgBF,QAAQ18I,QAAS08I,QAAQtoI,MAAM,SAAAra,GAAC,OAA8B,IAA1By+I,UAAUx1I,QAAQjJ,KAC5E,OAAI0iJ,QAAQz8I,QAAU08I,QAAQ18I,OACnB28I,eAAiBC,cAErBD,eAAiBC,gBCsESP,CAAuBV,SAASrwD,aACjDuwD,SAASvwD,aAAckwD,qBAEvBM,QADAM,aAAap8I,OACHo8I,aAAaz4I,IAAI,SAACk5I,WACxB,IAAMC,gBAAkB3jF,eAAeA,kBAAmBgjF,WAAW,GAAGvkI,KAAMilI,WACxEE,sBAAwBxc,kBAAaM,kBAAkBic,gBAAgBr7C,KACzEq7C,iBACJ,OACIr7C,KAAMq7C,gBAAgBr7C,KACtBvpF,MAAO4kI,gBAAgB5kI,MACvBN,IAAKmlI,yBAIHZ,WAGdV,YAAYx4I,KAAZjH,MAAAy/I,YAAWuB,oCAASlB,cAGrBn9I,KAAKijI,oBAAoB8Z,cAAeD,mDArV/C,OAAO10B,m+ECzBf,IAAMD,oBAAQ5rE,kBACNooD,qBAA0BH,SAA1BG,OAAQE,oBAAkBL,SAAlBK,MAAOC,qBAAWN,SAAXM,OAEjBw5C,SAAOC,6BAAAC,YACR75C,qBAASqhB,wBADDu4B,6BAAAC,SAER35C,oBAAQggB,sBAFA05B,6BAAAC,SAGR15C,qBAAS+f,sBAHD25B,UAgCQC,qvBAAqBxH,qUAU1BmB,aAAc/rB,UAAWrpG,SAAS,IAIpC22H,aADFvB,aADA9rD,KAIA4P,QACAmwB,UADAnwB,QAGAo2B,SAEAp2B,QAFAo2B,SACA0mB,YACA98C,QADA88C,YAGE0F,QAAU/E,aAAah7E,QAE7B+/E,QAAQpsB,UAAYosB,QAAQpsB,cAC5BosB,QAAQpsB,UAAU0mB,gBAElB,IAAMnQ,WACEkR,SAAuB/2H,QAAvB+2H,SAAU3tH,SAAapJ,QAAboJ,SACZkkE,OAASlkE,SAASuyH,eAClBC,aAAexyH,SAASkgE,OAExB5lF,QACF+rD,UACAg3C,SACA8gB,WAJej6B,OAAOgiC,UAAU0mB,aAOzBtzI,QAAQ,SAACw4I,WAChB,IAAMjlI,IAAMilI,UAAUjlI,KACrB4rF,oBAAOC,qBAAQH,sBAAQj/F,QAAQ,SAAC8kH,KAC7B,IAAM3iH,MAAQqxD,WAAWjgD,IAAIiqF,SAAUsnB,IAAK,SAC5C3iH,QAAUnB,OAAO8jH,KAAK3iH,OAAS,OAGvC,IAAM8xF,YACAklD,gBArCoC5oF,MAAA,SAAAA,MAuC/B6oF,SACPnlD,SAASmlD,SAAWtjJ,OAAO4I,KAAKsC,OAAOo4I,UACvCjW,QAAQiW,YACRD,aAAaC,YACbnlD,SAASmlD,SAASp5I,QAAQ,SAACmC,MAAO/M,GAC9B+jJ,aAAaC,SAAShkJ,GAAK,IAAI45I,0BAAe7sI,OAC9CghI,QAAQiW,SAAShkJ,GAAK,IAAIwjJ,QAAQQ,WAEtCjW,QAAQiW,SAASjW,QAAQiW,SAASz9I,QAAU,IAAIi9I,QAAQQ,UAR5D,IAAK,IAAMA,WAAWp4I,OAAQuvD,MAAnB6oF,SAkBX,OFiLyB,SAApB7+B,kBAAqBj9F,QAAS22E,SAAUm/C,UAAa,IACtDxmB,SAAmCwmB,SAAnCxmB,SAAU0mB,YAAyBF,SAAzBE,YAAanQ,QAAYiQ,SAAZjQ,QACvB/yH,OAAkCkN,QAAlClN,OAAQuiI,YAA0Br1H,QAA1Bq1H,YACVuG,aADoC57H,QAAboJ,SACCkgE,QACJkY,SAAlBG,OAAkBH,SAAVK,MACAC,QAAQp/F,QAAQ,SAAC8kH,KAC7B,IAAMmwB,QAAUiE,aAAap0B,KACxBmwB,QAAQroB,YACTqoB,QAAQroB,cAEZqoB,QAAQroB,UAAU0mB,aAAenQ,QAAQre,KACzC,IAAMouB,WAAa1/E,WAAWpjD,OAAOw2E,KAAMk+B,SAE3Cqe,QAAQre,KAAK9kH,QAAQ,SAACo3C,KAAMhiD,GACxB,IAAIikJ,WAAanG,WACbA,sBAAsBvzI,WACtB05I,WAAanG,WAAWtmB,SAAU0mB,aAC9BvsD,YAAakN,SAAS6wB,KAAK1vH,IAC3Bu9I,2BAGRv7F,KAAKhnC,OAAOipI,gBE9MhB9+B,CAAkBj9F,QAAS22E,UACvBkvC,gBACAvW,kBACA0mB,0BAEJe,SAASztD,KAAKu8C,SACTniI,OAAOlL,OAAO0M,UAAW22I,aAAc9E,SAASrzI,WACrDk4I,aAAajgF,IAAM+/E,QACZ/E,qFAUcjzI,QASrB,IARA,IAAI+0I,QAAU,EACRD,UACA5B,eACAgC,cAAgBl1I,OAAO,GACvBm1I,gBAAkBn1I,OAAO,GACzBo1I,WAAaF,cAAcv6I,OAC3B06I,aAAeF,gBAAgBx6I,OAE5BvG,EAAI,EAAGA,EAAIghJ,WAAYhhJ,IAAK,CACjC,IAAMmhJ,aAAeL,cAAc9gJ,GACnC,GAAImhJ,aAAaj1I,SAAW/H,QAAS,CACjC,IAAMi9I,eAAiBL,gBAAgBJ,WACjCO,QAAUE,gBAAkBD,aAAcC,iBAAmBD,cACnErC,YAAYt1I,KAAK03I,cAEjBR,OAAOl3I,KAAK23I,cAGpB,GAAIF,aAAeN,QACf,IAAK,IAAI3gJ,GAAI2gJ,QAAS3gJ,GAAIihJ,aAAcjhJ,KAAK,CACzC,IAAMohJ,gBAAiBL,gBAAgB/gJ,IACjCkhJ,UAAWE,iBACbA,gBAAel1I,SAAW/H,QAC1B26I,YAAYt1I,KAAK03I,UAEjBR,OAAOl3I,KAAK43I,iBAIxB,OACIV,cACA5B,mFAIU52H,SACd,IAAMvV,MAAQuV,QAAQvV,QACtBA,MAAM8tE,YACN,IAAMyjE,aACFvsF,UACAg3C,SACA8gB,WAEEj+B,KAAOtpE,QAAQoJ,WAAWkgE,OAChCtpE,QAAQi8H,iBAAiBljJ,MAAMi2B,KAAK,SAAC27B,KAAMysF,KAAME,MAC7C,IAAMrqI,KAAO09C,KAAKloB,UACZy5G,YAAcjvI,KAAKg0H,gBACnBv9H,OAASuJ,KAAKvJ,UAjJR,SAAlBy4I,gBAAmBn8H,SACrB,IAAMxc,KAAOwc,QAAQxc,OACfskI,UAAY9nH,QAAQy2E,gBAAgB34E,KAAKjZ,MAFdu/H,cAGRpkH,QAAQspE,OAAzB75B,OAHyB20E,cAGzB30E,OAAQ3xC,KAHiBsmH,cAGjBtmH,KAEhB,GAAIgqH,WAAar4E,QAAUA,OAAOpxD,OAAQ,CACtC,IAAM+9I,eAAiB54I,KAAK8O,kBAAkBw1H,WAAWppI,MAEnD29I,eAdY,SAApBC,kBAAqB1tB,QAAS73B,UAChC,IAAMwlD,eAAiBxlD,SAASvkF,SAEhC,OADuBukF,SAASQ,QAAQq3B,UAAY2tB,eAAiBxlD,SAAShpE,QAAQ,GAAKgpE,SAASjkF,SAAS/Z,OAYlFujJ,CADP94I,KAAK+O,UAAU/O,KAAKyE,OAAO,SAACwxE,IAAKjpB,KAAN,OAAcipB,IAAMjpB,IAAI4rF,iBAAiB,GAClCt+H,KAAK,IACvD2xC,OAAO/sD,QAAQ,SAAAo3C,MAAI,OAAIA,KAAKqiG,gBAAgBE,mBAyIxCF,CAAgBlvI,OACf00F,qBAAQE,oBAAOC,sBAAQp/F,QAAQ,SAACo5I,SAC7B,IAAMU,eAAiB94I,OAAOo4I,SACxBhoF,QAAUooF,YAAYJ,aAC5BU,eAAe95I,QAAQ,SAACmC,MAAO/M,IAC1BkkJ,YAAYF,SAAS1E,QAAU4E,YAAYF,SAAS1E,WACpD4E,YAAYF,SAAS1E,MAAME,QAAU0E,YAAYF,SAAS1E,MAAME,UACjE0E,YAAYF,SAAS1E,MAAME,MAAMx/I,GAAKg8D,QAAO,GAAAxxD,OAAIuC,kBApBtC,IAAA60F,OAAA,SAAAA,OAyBZrgG,KACciwF,KAAKjwF,KACbqJ,QAAQ,SAACi1I,QAASP,MAC3BO,QAAQj1I,QAAQ,SAAC4oH,QAASgsB,MACtBhsB,QAAQ5oH,QAAQ,SAACo3C,KAAMhiD,GACnBgiD,KAAKtnC,OAAOy+C,aAAaiF,WAAW8lF,YAAY3iJ,KAAM+9I,KAAME,KAAMx/I,QAElE2S,MAAM6uE,OAAN,GAAAh3E,OAAgBmpH,0BAAiB5yE,uBAAjC,YAAAv2C,OAAkEjJ,KAAO2iJ,YAAY3iJ,KAArF,GAAAiJ,OACO80I,KADP,KAAA90I,OACeg1I,cAR/B,IAAK,IAAMj+I,OAAO2iJ,YAAatiD,OAApBrgG,KAaXoR,MAAMguE,wEAWN,OAAOz7E,6CAcP,OAAIkE,UAAO7C,QACPrB,KAAKy/I,QAALv7I,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKy/I,8DAUApK,UAAWv/H,QACvB,IAAI4pI,sBACAC,yBACEj5I,OAASk5I,kBAAAC,6BAAApB,aAAA7hJ,WAAA,iBAAAoD,MAAA/E,KAAA+E,KAAqBq1I,UAAWv/H,QAE3Cw6E,OACAx6E,OADAw6E,OAGA6F,KAEAzvF,OAFAyvF,KACApjF,QACArM,OADAqM,QAGEmwF,SADQ5S,OAAO,GACE4S,SACjBzwC,OAASywC,UAAYA,SAASzwC,OAASywC,SAASzwC,OAAO5qD,MAAQ,KAC/D4hG,MAAQvG,UAAYA,SAASuG,MAAQvG,SAASuG,MAAM5hG,MAAQ,KAC5Di4I,iBAAmBJ,cAAeC,kBAYxC,OAVCxpD,KAAMpjF,SAASrN,QAAQ,SAACowD,UAAWiqF,WAChCjqF,UAAUpwD,QAAQ,SAACs6I,SAAUllJ,GAAX,OAAiBklJ,SAASt6I,QAAQ,SAACmC,OAC7CA,MAAM9F,aAAe0wD,QAAU5qD,MAAM9F,aAAe0nG,OAAS5hG,MAAMb,SAAW/H,SAC9E6gJ,gBAAgBC,WAAWjlJ,GAAGwJ,KAAKuD,aAI/C83I,iBAAmBM,gCAAI,IAAI7wI,IAAIuwI,mBAC/BD,cAAgBO,gCAAI,IAAI7wI,IAAIswI,gBAC5B1/I,KAAKqsH,WAAYl2B,KAAMupD,cAAe3sI,QAAS4sI,mBACxC3/I,KAAKqsH,kFAGQjuB,WAAY8E,SAAUm1C,YAAa97H,SACvD,IAAIuuH,UACA7W,WACEvtH,UACA4pF,OAAStwF,KAAKswF,SACd50B,UAAY0iC,WAAWo+C,aACvBxgF,aAAeN,UAAUpmD,kBACzBwhD,WACN,GAAIw5B,QAAUA,OAAO,GAAI,CACrB,IACM4vD,cADQ5vD,OAAO,GACOr3E,IAAIiqF,cAE/ByB,qBAAQE,oBAAOT,qBAAMC,uBAAO3+F,QAAQ,SAACo5I,SAClC,IAAMj3I,MAAQq4I,cAAcpB,SAAWoB,cAAcpB,SAASj3I,MAAQ,GAChE+5D,aAAe5F,aAAan0D,QAAUm0D,aAAan0D,OAAOoR,IAAIjS,OAAS/H,QACzE6/I,UAAY16C,sBAAQxiC,eACpBkpE,UAAYjjI,OAEZi3I,UAAYz6C,wBACZ4vB,WAAapsH,OAEjBm0D,aAAan0D,SAAW+5D,cAAgBl7D,OAAOpC,KAAKuD,SAU5D,GANIijI,YACAh0E,QAAQg0E,WAAapvE,UAAUn/C,QAAQ87H,YAAlBkG,gCAChBzT,UAAYhyC,kCAAmBx5F,MACjCoK,gBAAgB/C,YAAYmkI,WAAWt1H,UAG1Cy+G,WAAY,CACZ,IAAMnyD,GAAKpG,UAAUn/C,WAAVjX,OAAA26I,gCAAsB5H,aAAgB3xI,QAAS6V,QAAQmlD,UAClE5K,QAAQm9D,YAAcnyD,GAAGp4D,gBAAgB/C,YAAYstH,YAAYz+G,SAErE,OAAOshD,8DAWKpwD,OAAQm2I,gBAAiBE,eACrC,IAAID,eAEIhD,aAEApzI,OAFAozI,aACAD,UACAnzI,OADAmzI,aAEOv0I,OAAA26I,gCAAOnG,cAAPmG,gCAAwBpG,YAE7Bn0I,QAAQ,WACd,IACIoQ,QACAgtF,K9DpGG,M8DqGH7pF,KACIiqF,cAGJ25C,iBAAmBA,gBAAgBx7I,OAAS,IAC5CyU,OAAS0kD,eAAe1kD,OAAQ+mI,gBAAgB,KAEpDC,YAAYx4I,KAAKwR,UAEM,IAAvBgnI,YAAYz7I,SACZy7I,YAAcD,iBAElB,IAAMsD,gBAAkBngJ,KAAKijI,oBAAoB8Z,cAAeD,aAEhE,OADA98I,KAAKswF,OAAO6vD,iBACLA,kFAUWxD,YAClB,IAAMC,oBASN,OAPAD,WAAWt7I,QAAUs7I,WAAWj3I,QAAQ,SAAC6qF,OACrC,IAAMt3E,IAAM2oH,kBAAaM,kBAAkB3xC,MAAMuS,KAAMvS,OACvDqsD,iBAAiBt4I,MACbw+F,KAAMvS,MAAMuS,KACZ7pF,YAGD2jI,iFAGUrD,gBAAiBsD,iBAClC,IAAMC,eAyBN,OAvBAD,gBAAgBn3I,QAAQ,SAACoQ,QACrB,IAAMmD,IAAM0U,QAAQ7X,OAAOmD,KAC3BqgI,6CAA8BC,gBAAiBtgI,KAC/CA,IAAIvT,QAAQ,SAAC04E,MACT,IAAM8kB,SAAW9kB,KAAK8kB,WAAa9kB,KAAK8kB,cACvCA,SAASuG,QAAUvG,SAASuG,UAC7B,IAAM22C,WAAalnF,WAAWgqC,SAASuG,MAAO,SACxC42C,YAAcnnF,WAAWgqC,SAASqnB,OAAQ,SAC3C61B,YACD5kJ,OAAO0M,OAAOg7F,SAASuG,OACnB5hG,MAAO0xI,gBAAgB/5G,OAAS+5G,gBAAgB/5G,MAAM33B,QAGzDw4I,eACAn9C,SAASqnB,SAAWrnB,SAASqnB,WAC9B/uH,OAAO0M,OAAOg7F,SAASqnB,QACnB1iH,MAAOq7F,SAASuG,MAAM5hG,WAKlCi1I,YAAYx4I,KAAKwR,UAEdgnI,kDAzKP,OAAO30B,izCCpNMm4B,2wBAAuBrJ,6UAS5BmB,cAAc,IACdp8E,aAAyBo8E,aAAzBp8E,aAAclmD,OAAWsiI,aAAXtiI,OAChByqI,WAKN,OAHCl8C,sBAAOC,sBAAOF,sBAAM1+F,QAAQ,SAAC4gI,UAC1Bia,QAAO,GAAAj7I,OAAIghI,WH6MU,SAApBka,kBAAqBpI,cAAkC,IAApBqI,WAAoBv8I,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MACxDoiI,SAA2B8R,aAA3B9R,SAAUtqE,aAAiBo8E,aAAjBp8E,aACZn0D,MAAQ44I,WAAW54I,MACnBi1C,QACAu8F,IAAMpB,UAAU3R,UAItB,OAFAma,WAAWz5I,KAAOy5I,WAAWz5I,KAAOy5I,WAAWz5I,KAAO05I,wBAAY1kF,aAAcn0D,OAAS,MACzFi1C,KAAKx4C,KAAK,IAAI+0I,IAAIoH,aACX3jG,KGrN0B0jG,EAAoBla,kBAAUtqE,2BAAgBlmD,OAAOwwH,aAE3Eia,gEAqBMv9H,SAAS,IACd8zC,QAA4B9zC,QAA5B8zC,QAASw1B,KAAmBtpE,QAAnBspE,KAAM4W,SAAalgF,QAAbkgF,SAevB,OAbA1nG,OAAOkS,QAAQw1F,UAAUx9F,QAAQ,SAAC8kH,KAC9B,GAAIA,IAAI,IAAMA,IAAI,GAAG3iH,MAAO,CACxB,IAAMi3I,QAAUt0B,IAAI,GACd3iH,MAAQ2iH,IAAI,GAAG3iH,MAEjBA,OACAykF,KAAKwyD,SAASp5I,QAAQ,SAACo3C,MACnB,IAAMtnC,OAASshD,QAAQjvD,QACtB2iH,IAAI,GAAGh1G,QAAUsnC,KAAKylE,aAAa/sG,aAK7C82E,2CA1BP,MAAO,g3CCJf,IAAM67B,kBAAQ5rE,kBAiBDokG,gCAAsB,SAAtBA,oBAAsBlsH,KAAG,SAAInvB,OAAAs7I,8BAAInsH,IAAI,IAARmsH,8BAAensH,IAAI,KAAIxpB,OAAO,SAAC+uD,QAAS45B,KAC9E,IAAMitD,QAAUjtD,IAAI5sF,OAKpB,OAHI65I,UAAY5hJ,ShEsLI,agEtLO4hJ,UACvB7mF,SAAU,GAEPA,UACR,IAMU8mF,oBAAsB,SAAtBA,sBAAsB,OAC/BC,QAAS,IAAIn2I,IACbo2I,SAAU,IAAIp2I,IACdq2I,SAAU,IAAIr2I,IACds2I,aAAc,IAAIt2I,IAClBu2I,YAAa,IAAIv2I,MASR+tI,WAAa,SAAbA,WAAczwC,UAAD,QAAA9uC,KAAAl1D,UAAA7C,OAAcuV,OAAd,IAAArR,MAAA6zD,KAAA,EAAAA,KAAA,KAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAcziD,OAAdyiD,KAAA,GAAAn1D,UAAAm1D,MAAA,SAAA/zD,OAA4B4iG,SAA5B,UAAA5iG,OAA6CsR,OAAOrU,KAAK,OA6DtE6+I,0BAAgB,SAAhBA,cAAiB16I,OAAQ26I,aAAcC,SAAvBvqF,OAAmE,IAAhCi6B,YAAgCj6B,MAAhCi6B,YAAagY,aAAmBjyC,MAAnBiyC,aAQzE,OAPgBtiG,OAAOrF,OAAS,EAAIqF,OAAO,GAAG1B,IAAI,SAAC2oD,KAAM7yD,GAAP,OAAa,IAAIwmJ,UAC/Dt6I,KhEuIc,SgEtIdygB,UAAS,GAAAniB,OAAK0rF,YAAL,mBAETgY,4BACD1kE,OA9BsB,SAAhBi9G,cAAiBC,QAAS9/I,MAAO+/I,WAC1C,IAAIC,OAAS,GAEb,GAAIhgJ,QAAU+/I,UAAY,GAAKD,QAAQngJ,OAASogJ,UAAW,CACvD,IAAK,IAAI3mJ,EAAI4G,MAAO5G,EAAI0mJ,QAAQngJ,OAAS,EAAGvG,IACxC4mJ,QAAM,GAAAp8I,OAAOk8I,QAAQ1mJ,GAAGiH,WAAlB,OAGV,OADA2/I,QAAUF,QAAQA,QAAQngJ,OAAS,GAAGU,WAEnC,OAAIy/I,QAAQ9/I,OACR8/I,QAAQ9/I,OAAOK,WAEnB,GAkBGw/I,CAAcF,aAAcvmJ,EAAG4L,OAAO,GAAGrF,SAClCyU,QAASu9E,KAAM1lC,KAAK73C,SAASu9E,aAyDrCqtD,wBAAc,SAAdA,YAAe1kF,aAAcn0D,OACtC,IAAIiuD,UhEhEe,UgEqEnB,OAHIjuD,OhEvJiB,cgEuJRm0D,aAAan0D,OAAOoR,IAAIjS,OACjC8uD,UAAYmwC,wBAETnwC,WAUE4mF,sBAAwB,SAAxBA,sBAAyBrH,UAAWtzE,WAE7C,OADcszE,UAAU3rI,gBAAgBhD,OAAO2T,KAAK,SAAAjf,GAAC,OAAIA,EAAEC,SAAW0mE,UAAUhgE,aACnEyT,UA8CJmsI,uBAAa,SAAbA,WAAcrxD,QACvB,IAAIsxD,QAAU,IAAIlI,mCAMlB,OAJIppD,OAAOjvF,SAEPugJ,QAAUtxD,OAAO16E,KAAK,SAAAsoI,WAAS,OAdb,SAApB2D,kBAAoB3D,WAAS,MhE9BhB,QgE8BoBA,UAAUp7C,OAAiB6B,uBAAQE,uBAAOjvF,KAAK,SAAA/N,OAAK,OACnFqxD,WAAWglF,UAAUh7C,SAAUr7F,SAaIg6I,CAAkB3D,aAAc,IAAIO,2BAAiBmD,SAErFA,SAWEnK,8BAAoB,SAApBA,kBAAqBzwI,KAAMN,OAAQo7I,oBAC5C,IAAIxK,SAAWwK,mBAAmB96I,MAC9BgxI,WAAa,GACX94H,QAAUlY,OAASs+G,KAAO3f,eAAMC,kBhE/HpB,SAJH,OgEgIoD1vC,QAAA6rF,0BAIjCr7I,OAJiC,GAI5Ds7I,WAJ4D9rF,QAAA,GAIhD+rF,YAJgD/rF,QAAA,GAK7DgsF,eAAiB,SAAjBA,eAAiBpnJ,GAAC,OAAKknJ,WAAW3gJ,OAAS2gJ,WAAWlnJ,GAAGkM,OAAS,MAClEm7I,gBAAkB,SAAlBA,gBAAkBrnJ,GAAC,OAAKmnJ,YAAY5gJ,OAAS4gJ,YAAYnnJ,GAAGkM,OAAS,MAwB3E,MhEpQqB,cgE8OjBk7I,eAAeF,WAAW3gJ,OAAS,IhE9OlB,cgE8OsC8gJ,gBAAgB,IACvEnK,WAAaV,SAAWp4H,QAAQ,EAAIA,QAAQ7a,QAAQizI,WAAap4H,QAAQ,GAGrEo4H,ShEhMU,WgE+LVtwI,MAAoBg7I,WAAWA,WAAW3gJ,OAAS,GAAGU,aAAekgJ,YAAY,GAAGlgJ,WhE3I7E,MgE8IIu1I,UAAYp4H,QAAQ,IhEpPlB,cgEsPVijI,gBAAgBF,YAAY5gJ,OAAS,IAC5C22I,WAAahxI,OAASs+G,IAAM1f,gBhE7Id,SgE8Id0xC,SAAWtwI,OAASs+G,IAAM1f,gBhE9IZ,WgEgJdoyC,WAAahxI,OAASs+G,IAAM3f,ehEpJjB,MgEqJX2xC,SAAWtwI,OAASs+G,IAAM3f,ehErJf,OgEuJXu8C,eAAeF,WAAW3gJ,OAAS,KAAOpC,SAAWkjJ,gBAAgB,KAAOljJ,QAC5Eq4I,SAAWtwI,OAASs+G,IAAM3f,ehExJf,MgEyJJw8C,gBAAgB,KAAOljJ,QAC9Bq4I,SAAWtwI,OAASs+G,IAAM1f,gBhEtJZ,SgEuJPs8C,eAAeF,WAAW3gJ,OAAS,KAAOpC,UACjDq4I,SAAWtwI,OAASs+G,IAAM3f,ehE5Jf,QgE8JPqyC,WAAYV,WAYX8K,wBAA0B,SAA1BA,wBAA2Bp/H,QAASqpG,UAAWu1B,SAAY,IAEhEl7I,OAEA2lH,UAFA3lH,OACAM,KACAqlH,UADArlH,KAHgEq7I,sBAKpCT,QAAQU,cAAcC,wBAAwB77I,OAAQM,MAA9Ew0I,OAL4D6G,sBAK5D7G,OAAQ5B,YALoDyI,sBAKpDzI,YAKhB,OAHA52H,QAAQw4H,OAARgH,8BAAA,GAAAl9I,OAAqB0B,KAArB,UAAoCw0I,SACpCx4H,QAAQ42H,YAAR4I,8BAAA,GAAAl9I,OAA0B0B,KAA1B,eAA8C4yI,eAErC4B,cAAQ5B,wBAAalzI,gBAiDrB+7I,WAAa,SAAbA,WAAcC,SAAUd,SACjC,IAAIe,gBAAmB15H,KAAK,EAAOyzB,QAAQ,GACvCkmG,gBAAmBzyH,MAAM,EAAOI,OAAO,GACvCsyH,kBAAqB55H,KAAK,EAAOyzB,QAAQ,EAAOvsB,MAAM,EAAOI,OAAO,GAEpE4lE,KAGAusD,SAHAvsD,KACApjF,QAEA2vI,SAFA3vI,QACQ+vI,YACRJ,SADAlrI,OAPyCurI,MAAAhB,0BASf5rD,KATe,GAStC6sD,SATsCD,MAAA,GAS5BE,UAT4BF,MAAA,GAAAG,SAAAnB,0BAUThvI,QAVS,GAUtCowI,WAVsCD,SAAA,GAU1BE,cAV0BF,SAAA,GAAAG,mBAkBzCzB,QAAQv1B,YANRoqB,cAZyC4M,mBAYzC5M,cACAI,iBAbyCwM,mBAazCxM,iBACAF,kBAdyC0M,mBAczC1M,kBACAI,qBAfyCsM,mBAezCtM,qBACAD,eAhByCuM,mBAgBzCvM,eACAJ,YAjByC2M,mBAiBzC3M,YAEE4M,mBAAqB7M,cAAcp1I,OAASw1I,iBAAiBx1I,OAC7DkiJ,kBAAoB7M,YAAYr1I,OAASy1I,eAAez1I,OACxDmiJ,wBAA0B7M,kBAAkBt1I,OAAS01I,qBAAqB11I,OAEhF,GAAIugJ,QAAQh8I,YAAYoB,SAAWmhH,mBAC/B,IAAKm7B,mBACD,OAASX,8BAAgBC,8BAAgBC,wCAE1C,IAAKU,oBAAsBC,yBAA2BF,oBAAsB,EAC/E,OAASX,8BAAgBC,8BAAgBC,mCAe7C,OAZAF,eA7EkB,SAAhBc,cAAiBtzH,KAAMI,OACzB,IAAMmzH,SACNA,KAAc,EACdA,QAAiB,GAKjB,OAJIvzH,KAAK9uB,OAAS,GAAKkvB,MAAMlvB,OAAS,KAClCqiJ,QAAQz6H,KAAM,EACdy6H,QAAQhnG,QAAS,GAEdgnG,QAqEUD,CAAcT,SAAUC,WACzCL,eAnEsB,SAApBe,kBAAqB16H,IAAKyzB,QAC5B,IAAMgnG,SACNA,MAAe,EACfA,OAAgB,GAOhB,OANIz6H,IAAI5nB,QAAUq7C,OAAOr7C,UAChB4nB,IAAI,IAAMA,IAAI,GAAG5nB,OAAS,GAAOq7C,OAAO,IAAMA,OAAO,GAAGr7C,OAAS,KAClEqiJ,QAAQvzH,MAAO,EACfuzH,QAAQnzH,OAAQ,GAGjBmzH,QAyDUC,CAAkBR,WAAYC,eAC/CP,iBAvDoB,SAAlBe,gBAAmBztD,KAAMpjF,SAC3B,IAAM2wI,SAAYz6H,KAAK,EAAMkH,MAAM,EAAMusB,QAAQ,EAAMnsB,OAAO,GACxDszH,eAAiBl+C,eAAMC,iBACvBk+C,ehElNS,MAIG,UgE8NlB,OAfA3tD,KAAKzwF,QAAQ,SAAC1I,EAAGlC,GACTkC,EAAE,IAAMA,EAAE,GAAGqE,OACbqiJ,QAAQG,cAAc/oJ,KAAM,EAE5B4oJ,QAAQG,cAAc/oJ,KAAM,IAGpCiY,QAAQrN,QAAQ,SAAC1I,EAAGlC,GACZkC,EAAEqE,OACFqiJ,QAAQI,cAAchpJ,KAAM,EAE5B4oJ,QAAQI,cAAchpJ,KAAM,IAI7B4oJ,QAoCYE,EAAiBZ,SAAUC,YAAaE,WAAYC,gBAEnEN,YAAYzhJ,OAAS,IACrBwhJ,iBAAiB55H,KAAM,EACvB45H,iBAAiBnmG,QAAS,GAE1BomG,YAAYzhJ,QAAUyhJ,YAAY,GAAGzhJ,OAAS,IAC9CwhJ,iBAAiB1yH,MAAO,EACxB0yH,iBAAiBtyH,OAAQ,IAEpBoyH,8BAAgBC,8BAAgBC,oCA+BhCkB,4BAAkB,SAAlBA,gBAAmBvI,OAAQp3I,KAAM0R,QAK1C,IAAM/O,UAEAi9I,YACAC,WAAanuI,OAAO7J,KAc1B,OAZAuvI,OAAO91I,QAAQ,SAACy2I,OACZ,IAAM9gJ,KAAI,GAAAiK,OAAM62I,OACV+H,gBAAkBD,WAAW5oJ,MAE/B6oJ,gBACAF,SAAS1/I,MAAMjJ,KAAM6oJ,kBAErBF,SAAS1/I,MAAMjJ,KAAM,OAEzB0L,OAAOzC,KAAK63I,MAAMgI,kBAGf,IAAIlvF,yBAAJ3vD,OAAAs7I,8BAA8Bx8I,OAAO2C,QAAQwO,SAAUtJ,KAAM+3I,WAAYx9I,q9CCxdpF,IAAM49I,cAAgB,SAAhBA,cAAgBC,UAAQ,OAAIA,SAASp5I,OAAO,SAACwxE,IAAKrhF,GAEpD,OADAqhF,OAAGn3E,OAAAg/I,+BAAO7nE,KAAP6nE,+BAAelpJ,EAAEuxF,qBAiElB43D,gBAAkB,SAAlBA,gBAAmBvhI,QAASwhI,WAAYC,QAASrgJ,KAAM1C,OACzD,IAAMgjJ,UACNF,WAAW9+I,QAAQ,SAACrK,MAChB,IAAMgB,IAAM2mB,QAAQhP,YAAYgP,QAAQhP,YAAY3S,OAAS,GAAG6S,KAAK9P,KAAK/I,MAE1EqpJ,OAAOpgJ,KAAKjI,OAGhB,IAAMsoJ,aAAeD,OAAOniJ,KAAK,KAMjC,YAJ8BrF,IAA1BunJ,QAAQE,gBACRF,QAAQE,cAAgBjjJ,QACxB0C,KAAKE,KAAKogJ,SAEPA,QAGLE,iBAAmB,SAAnBA,iBAAmBxgJ,MAAI,OAAIA,KAAKY,IAAI,SAAAhI,GAAC,OACvC6nJ,OAAQ7nJ,EACR8nJ,UAAW9nJ,EAAEuF,KAAK,SA+ChBwiJ,WAAa,SAAbA,WAAc3gJ,KAAM4gJ,eACtB,IAAMC,iBAON,OANA7gJ,KAAKsB,QAAQ,SAACw/I,MAAO9K,MACjB6K,cAAc7K,SACd8K,MAAMx/I,QAAQ,SAACrJ,IAAKggE,KAChB4oF,cAAc7K,MAAM/9E,KAAO2oF,cAAc3oF,KAAKhgE,SAG/C4oJ,eAqDLE,oCAAyB,SAAzBA,uBAA0BC,WAAY/4B,UAAWg5B,UACnD,IAAIriI,WAEAsiI,UAEAj5B,UAFAi5B,UACAC,UACAl5B,UADAk5B,UAGAC,UAMAJ,WANAI,UACAd,OAKAU,WALAV,OACAe,UAIAL,WAJAK,UACAC,YAGAN,WAHAM,YACAC,mBAEAP,WAFAO,mBACAC,mBACAR,WADAQ,mBAGYC,UAAiCJ,UAAzCZ,OAA8BiB,OAAWL,UAAtBX,UACrBiB,WAAaJ,mBAAkB,GAAArgJ,OAAIo/I,OAAJ,KAAAp/I,OAAcwgJ,SAE/CC,WACA/iI,SAAY04C,UAAWqqF,YAGvB/iI,SAAY04C,UADI,IAAIzG,uBAAcowF,SAAS9vI,UAAUxO,SAczD,IAAMq3F,WA9EY,SAAhB4nD,cAAiBhjI,QAASijI,qBAAwB,IAEhDz+G,OAOAxkB,QAPAwkB,OACAk0B,UAMA14C,QANA04C,UACA42D,SAKAtvG,QALAsvG,SACAE,SAIAxvG,QAJAwvG,SACA0zB,UAGAljI,QAHAkjI,UACAC,eAEAnjI,QAFAmjI,eACAC,gBACApjI,QADAojI,gBAGAlqD,QAGAiqD,eAHAjqD,QACAmqD,aAEAF,eAFAE,aACAzM,YACAuM,eADAvM,YAGE0M,aAAeL,oBAErBvqF,UAAUsqF,cAAcK,aAAcC,cAAc5gJ,QAAQ,SAACmS,MAAO/c,GAAM,IAAAyrJ,WAC/BrqD,QAAQphG,GAA/B84F,IADsD2yD,WAChEj0B,SAAyB92D,IADuC+qF,WACjD/zB,SAErBh3D,KAAOg3D,SAEPhrF,OAHAosD,KAAO0+B,UAGO9qF,OAAOosD,SAErB,IAAM4yD,uBACFtqD,SACIo2B,SAAU1+B,IACVolD,YAAax9E,KAEjBo+E,YAAaA,YAAY9+I,IAG7B0sC,OAAOosD,KAAKp4B,KAAO4qF,gBAAgBvuI,MAAO2uI,sBAAuBN,aAErE,IAAMthH,UAAYs3D,QAAQA,QAAQ76F,OAAS,GAE3C,OACIixH,SAAU1tF,UAAU0tF,SAAWA,SAC/BE,SAAU5tF,UAAU4tF,SAAWA,UAuChBwzB,CAVnBhjI,QAAUyjI,6BACHzjI,WACAoiI,YACHc,WACIZ,WAAYA,UAAWE,WACvBD,WAAYA,UAAWM,YAE3BvzB,SAAUozB,YACVlzB,SAAUozB,qBAE4Bv5B,UAAU45B,qBAEpD,OACIjN,YAAa56C,WAAWo0B,SAAW,EACnCF,SAAUl0B,WAAWk0B,WAoDhBo0B,eAAiB,SAAjBA,eAAkBhrF,UAAW2wD,UAAW+5B,gBAAiBO,cAClE,IAAIC,gBAAkB,EAChBp/G,UAEF89G,UAEAj5B,UAFAi5B,UACAC,UACAl5B,UADAk5B,UAGEY,eAzRoB,SAAxBU,sBAAyBx6B,WAAc,IAErCy6B,eAEAz6B,UAFAy6B,eAGET,gBACFnqD,WACA09C,eAgBJ,OAnBIvtB,UADA06B,eAMWrhJ,QAAQ,SAACshJ,QAASC,QAC7B,IAAMC,UAAYD,OAClBH,eAAephJ,QAAQ,SAACyhJ,QAASC,QAC7B,IAAMC,UAAYD,OACZE,WAAalD,cAAc4C,SAC3BO,WAAanD,cAAc+C,SAEjCd,aAAa/hJ,QAAbgB,OAAAg/I,+BAAsBgD,YAAtBhD,+BAAqCiD,cACrCrrD,QAAQ53F,MAAOguH,SAAU40B,UAAW10B,SAAU60B,YAC9CzN,YAAYt1I,MAAOu1I,UAAWmN,QAASlN,aAAcqN,cAG7DjrD,QAAUA,QAAQ76F,OAAS66F,UAAao2B,SAAU,EAAGE,SAAU,IAC/DonB,YAAcA,YAAYv4I,OAASu4I,cAAiBC,aAAeC,mBAC1DuM,0BAAcnqD,gBAAS09C,yBAkQTiN,CAAsBx6B,WACvC65B,UA1Pe,SAAnBsB,iBAAoBn7B,WAAc,IAEhCi5B,UAEAj5B,UAFAi5B,UACAC,UACAl5B,UADAk5B,UAGEkC,cAAgBrD,cAAckB,WAC9BoC,cAAgBtD,cAAcmB,WAGpC,OAASkC,4BAAeC,4BAAeC,aAFxBriJ,OAAAg/I,+BAAOmD,eAAPnD,+BAAyBoD,gBAEUpC,oBAAWC,qBAgP3CiC,CAAiBn7B,WATgDu7B,sBA7L1D,SAAvBC,qBAAwBC,YAAa5B,UAAWpwI,QAAW,IAEzD2xI,cAIAvB,UAJAuB,cACAC,cAGAxB,UAHAwB,cACApC,UAEAY,UAFAZ,UACAC,UACAW,UADAX,UAGEwC,iBACAC,iBAEAC,WACAC,WAGAvC,sBASN,OAPAmC,YAAYpiJ,QAAQ,SAACyiJ,cACjB,IAAMzD,OAASH,gBAAgB4D,aAAcV,cAAeM,cAAeE,QAL9D,GAMPnC,OAASvB,gBAAgB4D,aAAcT,cAAeM,cAAeE,QAAS,GAEpFvC,mBAAkB,GAAArgJ,OAAIo/I,OAAJ,KAAAp/I,OAAcwgJ,SAAYqC,gBAI5CxC,sCACAsC,QAASrD,iBAAiBb,4BAAgBuB,UAAW2C,QAASnyI,SAC9DoyI,QAAStD,iBAAiBb,4BAAgBwB,UAAW2C,QAASpyI,UAkL9D+xI,CANmBnsF,UAAU0sF,WAAWlC,UAAUyB,WAMbzB,UAAWS,cAHhDhB,mBAb+EiC,sBAa/EjC,mBACAsC,QAd+EL,sBAc/EK,QACAC,QAf+EN,sBAe/EM,QAGEG,gBACF7gH,cACA4+G,gCACAD,8BACAR,sCACAuC,iBAEJ,GAAID,QAAQ5mJ,OACR4mJ,QAAQviJ,QAAQ,SAAC4iJ,WACb,IAKQh2B,SAhFQ,SAAtBi2B,oBAAuBC,WAAYn8B,UAAWg5B,UAChD,IAAIO,mBAAqB,EACrB6C,sBAAwB,EAExBP,QAGAM,WAHAN,QACAI,UAEAE,WAFAF,UACA1B,gBACA4B,WADA5B,gBAEElB,YAAckB,gBAEdxB,WAAaqB,6BACZ+B,YACHhD,UAH6C8C,UAAzCzD,OAIJH,OAJ6C4D,UAAtBxD,UAKvBY,0BAGJ,GADA+C,sBAAwB7B,gBACpBsB,QAAQ7mJ,OACR6mJ,QAAQxiJ,QAAQ,SAAC+/I,WACbL,WAAWK,UAAYA,UACvBL,WAAWQ,mBAAqBA,mBAFL,IAAA8C,sBAGOvD,oCAAuBC,WAAY/4B,UAAWg5B,UAAxErM,YAHmB0P,sBAGnB1P,YAAa1mB,SAHMo2B,sBAGNp2B,SAErBszB,mBAAqB5M,YACrByP,sBAAwBn2B,eAEzB,CACH8yB,WAAWK,WAAcZ,UAAYC,UAAW,IAChDM,WAAWQ,mBAAqBA,mBAF7B,IAAA+C,uBAI+BxD,oCAAuBC,WAAY/4B,UAAWg5B,UAAxErM,YAJL2P,uBAIK3P,YAAa1mB,SAJlBq2B,uBAIkBr2B,SAErBszB,mBAAqB5M,YACrByP,sBAAwBn2B,SAE5B,OACIA,WAAYm2B,uBA4CaF,CALF9B,6BACZ4B,gBACHC,oBACA1B,kCAEiDv6B,UAAW3wD,WAAxD42D,SAERs0B,gBAAkBt0B,gBAEnB,GAAI41B,QAAQ7mJ,OAAQ,CACvB,IAAIukJ,mBAAqB,EACnBF,YAAckB,gBAEpBsB,QAAQxiJ,QAAQ,SAAC+/I,WACb,IAAML,WAAaqB,6BACZ4B,gBACH7C,aACAd,OAAQ,GACRe,oBACAC,wBACAE,wCAPuBgD,uBASOzD,oCAAuBC,WAAY/4B,UAAW3wD,WAAxEs9E,YATmB4P,uBASnB5P,YAAa1mB,SATMs2B,uBASNt2B,SACrBs0B,gBAAkBt0B,SAClBszB,mBAAqB5M,kBAEtB,CACH,IAAI4M,oBAAqB,EAEnBR,WAAaqB,6BACZ4B,gBACH7C,aACAd,OAAQ,GACRe,WAAaZ,UAAYC,UAAW,IACpCY,YANgBkB,gBAOhBhB,yCATDiD,uBAW+B1D,oCAAuBC,WAAY/4B,UAAW3wD,WAAxEs9E,YAXL6P,uBAWK7P,YAAa1mB,SAXlBu2B,uBAWkBv2B,SACrBs0B,gBAAkBt0B,SAClBszB,oBAAqB5M,YAGzB,IAAM8P,iBAAmB/D,WAAWmD,QAAQljJ,IAAI,SAAAhI,GAAC,OAAIA,EAAE6nJ,SACnDU,UAAUvgJ,IAAI,SAAA+jJ,YAAU,OAAIA,WAAWC,eAQ3C,OAASxhH,cAAQygH,QAPQlD,WAAWkD,QAAQjjJ,IAAI,SAAAhI,GAAC,OAAIA,EAAE6nJ,SACnDS,UAAUtgJ,IAAI,SAAA+jJ,YAAU,OAAIA,WAAWC,eAMCC,WAHlBH,iBAAiBznJ,OAAS,EAAIynJ,iBAAiB,GAAG9jJ,IAAI,SAACw2D,IAAK1gE,GAAN,OAC/EguJ,iBAAiB9jJ,IAAI,SAAA4uF,KAAG,OAAIA,IAAI94F,OAAOguJ,oqCCtV5C,IAoBaI,8BAAmB,SAAnBA,iBAAoBlmI,QAASqyH,UAAWhpB,UAAWmvB,QAAW,IAEnE5B,YAEAvtB,UAFAutB,YACA19C,QACAmwB,UADAnwB,QAGA29C,UAEAD,YAFAC,UACAC,aACAF,YADAE,aAGCxnB,SAEDp2B,QAFCo2B,SACA0mB,YACD98C,QADC88C,YAGDmQ,eAMAnmI,QANAmmI,eACMC,SAKNpmI,QALA2qC,KACAvhC,SAIApJ,QAJAoJ,SACAtW,OAGAkN,QAHAlN,OACA8rI,QAEA5+H,QAFA4+H,QACArmD,aACAv4E,QADAu4E,aAEEjP,KAAOlgE,SAASkgE,OAChBmsD,UAAYrsH,SAASqsH,YACrBkG,aAAevyH,SAASuyH,eACxB31C,aAAe58E,SAASV,eAAejL,WACvC4oI,eAAiBj9H,SAASi9H,iBAC1BC,aAAel9H,SAASk9H,eACxBC,mBAAqBn9H,SAASm9H,qBAC9BC,aAAe1zI,OAAO7J,KAExBi1I,aAEAzI,UAFAyI,aACAC,YACA1I,UADA0I,YAEEsI,eAAiB7H,QAAQ8H,gBAAiB5P,0BAAcD,qBAAasP,mBACvEnmI,QAAQ+5H,eACN3E,cAAiBtiI,cAAQkzF,0BAAc1c,UAAMmsD,qBAEnDpsB,UAAUs9B,kBAAoBL,aAAa5iJ,OAC3C2lH,UAAUu9B,eAAiBP,eAAe3iJ,OAE1C,IAAMihJ,cAAYriJ,OAAAukJ,+BACVrO,OAAO8J,UAAU,IADPuE,+BACcrO,OAAO+J,UAAU,QAD/BjgJ,OAAAukJ,+BAEVrO,OAAO8J,UAAU,IAFPuE,+BAEcrO,OAAO+J,UAAU,MAE3ClN,YAAcsP,UAAUv8I,QAC9BitI,YAAY,GAAKA,YAAY,GAAGrzI,IAAI,SAAA+jJ,YAAU,OAAIA,WAAWjU,WAE7D6J,aAAarsB,UAAYqsB,aAAarsB,UAAYqsB,aAAarsB,aAC/DqsB,aAAarsB,UAAU0mB,aAAeyQ,eAGtC,IAAMK,YFbgB,SAAbC,WAAct/B,MAAOu/B,UAAR,cAAA1kJ,OAA6BmlH,MAA7B,KAAAnlH,OAAsC0kJ,UEaxCD,CAAWz3B,SAAU0mB,aACnCtyI,QACF5D,EAAG+2I,UACH3+H,EAAG4+H,cAGDC,SAAYoH,YAAYt2I,IAAIi/I,aAAgC3I,YAAYxlJ,IAAImuJ,aAAjC,IAAIV,SAG/CnF,WAAazoJ,OAAO4I,KAAKolJ,cAAcxkJ,IAAI,SAAA6C,OAAK,OAAKA,MAAO2hJ,aAAa3hJ,UAiB/E,OAhBIo8I,WAAW5iJ,SACXg0I,UAAYA,UAAUppI,KAAKg4I,YAActuI,WAAW,KAGxDokI,SAASvzI,KAAK6uI,WACG3uI,OAAOA,QACPugC,UAAUsiH,oBACVhuD,aAAaA,cACbmxC,cAAcib,WAE/B/F,QAAQ3wC,WAAWmnC,aAAc/rB,UAAW7wH,OAAO0M,UAAW8a,SAAW+2H,kBAAU1B,2BACnF6I,aAAap2I,IAAIg/I,YAAa/P,UAC9BoH,YAAW,OAAQ2I,aA7FH,SAAdG,YAAe79H,SAAUovH,OAAQzB,WAClCz0B,IAAKD,KAAK3/G,QAAQ,SAACmC,OAChB,IAAM6kD,MAAQtgC,SAAQ,GAAA9mB,OAAIuC,MAAJ,YAChBqiJ,SAAW1O,OAAM,GAAAl2I,OAAIuC,MAAJ,WAAmB,GAAGtF,QAE5CmqD,MAAMw9F,YAAcx9F,MAAMw9F,cAC3Bx9F,MAAMw9F,UAAU5lJ,KAAKy1I,UACrB3tH,SAAQ,GAAA9mB,OAAIuC,MAAJ,UAAkB6kD,SAwF9Bu9F,CAAY79H,SAAUovH,OAAQzB,UAEvBmH,aAAavlJ,IAAImuJ,cAGtBK,8BAAmB,SAAnBA,iBAAmBprI,IAAE,OAAIm6C,WAAWn6C,GAAG9Z,MAAM,kBAAmB,IAWhEmlJ,6BAAkB,SAAlBA,gBAAmB1sG,UAAW4uC,KAAMsU,UAAWl0C,OAA7B,OACpBgO,6BAAgBhd,UAAW,SAAAZ,MAAI,OAAIA,MAAMwvC,KAAM,SAACuJ,KAAM/6F,GAAP,OAAaA,EAAI+6F,KAAK5qF,OAAO,SAACjO,EAAGT,GAC5E,IAAMwiB,GAAKxiB,EAAEwiB,GAAK6hF,UAClB,SAAAt7F,OAAUtI,EAAV,KAAAsI,OAAeyZ,KAChB,MAAK/Z,IAAI,SAACqlJ,QAASvtG,MAClB,GAAIA,MAAQA,KAAK8jD,WAAY,CACzB,IAAM0pD,SAAWxtG,KAAK8jD,WADG2pD,iBAEKD,SAASx0I,SAA/BiiF,YAFiBwyD,iBAEjBxyD,YAAa1E,KAFIk3D,iBAEJl3D,KAErB,OAAO,IAAI3mC,MAAM89F,UAAWlmH,OAAOgmH,UAAUx0I,QACzCs3F,SAAUrV,cAAgBiO,iCAAgBL,MAAQ5N,cAAgBiO,iCAAgBN,IAClFrS,YAGR,OAAO,IAAI3mC,MAAM+9F,WAAY30I,QAASu9E,MAAM,MAC7CpnF,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUwnJ,8BAAiB5sJ,EAAE,IAAM4sJ,8BAAiBxnJ,EAAE,OAgE5D+nJ,kBAAoB,SAApBA,kBAAoB3rI,IAAE,OAAIA,GAAGhX,MAAM,KAAK+D,OAWxC6+I,iCAAsB,SAAtBA,oBAAuB3nI,QAAS4nI,aAAcl+F,MAAOs8C,cAAiB,IAEpElsD,KAIA95B,QAJA85B,KACA14C,KAGA4e,QAHA5e,KACA4C,KAEAgc,QAFAhc,KACAm1I,MACAn5H,QADAm5H,MAEEV,QAAU3+F,KAAKz7C,OAAS+C,KAAK/C,OAC7BwpJ,cAAgBzmJ,KAAK/C,OAASy7C,KAAK93C,IAAI,SAAC5J,EAAGN,GAAJ,OAAUsJ,KAAKpB,KAAKsH,MAAMxP,EAAI2gJ,eAM3E,OAJsB/gF,6BAAgBkwF,aAAY,GAAAtlJ,OAAI0B,KAAJ,YAAoB,SAAA8jJ,QAAM,OAAIA,QAAQD,cACxF,SAACC,OAAQhwJ,GAAT,SAAAwK,OAAkBwlJ,OAAOvoJ,KAAK,KAA9B,KAAA+C,OAAsCxK,KACjCmR,KAAK,SAAC1O,EAAGoF,GAAJ,OAAU+nJ,kBAAkBntJ,EAAE,IAAMmtJ,kBAAkB/nJ,EAAE,MAE7CqC,IAAI,SAAC8lJ,OAAQtkJ,MAC9B,IAAIukJ,UAjCY,SAAlBC,gBAAmBttG,UAAW8jG,QAAS90F,MAAOs8C,cAA5B,OAA6CtuC,6BAAgBhd,UAC7E,SAAC1yC,OACG,IAAMigJ,SAAW,IAAIv+F,MAAM40F,aAAet4C,4BAE1C,OADAiiD,SAAS3mH,OAAOt5B,OACTigJ,UACRzJ,QAAS,SAACnlJ,IAAKvB,GAAN,OAAYuB,IAAMvB,IA4BdkwJ,CAAgB,KAAMxkJ,KAAMkmD,MAAOs8C,cAEnD,OADA+hD,UAAYA,UAAU/lJ,IAAI,SAAC2oD,KAAMrmD,GAAP,OAAaqmD,KAAKrpB,OAAOh9B,GAAGwO,OAAOqmI,YAe/D+O,kCAAuB,SAAvBA,qBAAwBloI,QAAS0pC,MAAOs8C,cAC1C,IAAI4hD,aAEAlI,SAOA1/H,QAPA0/H,SACAh8I,OAMAsc,QANAtc,OACAykJ,qBAKAnoI,QALAmoI,qBACAztG,UAIA16B,QAJA06B,UACAy+F,MAGAn5H,QAHAm5H,MACAiP,SAEApoI,QAFAooI,SACAh/H,SACApJ,QADAoJ,SAGA+pE,KAEAzvF,OAFAyvF,KACApjF,QACArM,OADAqM,QAGAs4I,aACA3I,SADA2I,aAGAtE,eAEAoE,qBAFApE,eACAD,eACAqE,qBADArE,eAGAmB,QAEAoD,aAFApD,QACAgB,WACAoC,aADApC,WAEEqC,aAAeF,SAAS9I,cAAcnL,UACtCoU,eAAiBH,SAAS9I,cAAclL,YAE9CwT,aAAeltG,eAEd,MAAOhzC,EAAGvH,GAAGuC,QAAQ,SAACo3C,MACnB,IAAMw6F,SAAWx6F,OAASpyC,EAAI4gJ,aAAavT,OAASuT,aAAa13D,IACjEg3D,aAjIkB,SAApBY,kBAAqBxoI,QAASyoI,OAAQ/+F,OAAU,IAK9Cg/F,WAFA1oI,QADA0/H,SAGAgJ,WAGJ,OAAO,SAAC1kJ,KAAMswI,UACV,IAAMhrD,KAAOo/D,WAAU,GAAApmJ,OAAI0B,OAE3B,GAAIslF,MAAQA,KAAKjrF,OACb,GAAI2F,OAAS0D,GAAK1D,OAAS7D,EAAG,CAC1B,IAAMokH,WAAavgH,OAAS7D,EAAIgiH,KAAOC,SAEtCQ,QAASC,WAAWngH,QAAQ,SAACowD,UAAWp0D,OACrC,IAAMiqJ,WAAU,GAAArmJ,OAAMiiH,YAANjiH,OAAmBwwD,WAC/B8qC,UAAYl/F,MACZkqJ,YAAct/D,KACdgrD,WAAa1xC,iBlEtBf,WkEsBwB0xC,WACtB12C,UAAY,EAAIA,WAEf1nC,WAAWozB,KAAM,EAAGsU,aACrBgrD,gBAEJH,OAAOE,YAAcvB,6BAAgBqB,OAAOE,YAAaC,YAAahrD,UAAWl0C,cAGrF++F,OAAOI,YAAczB,6BAAgBqB,OAAOK,SAAUx/D,KAAKtnF,IAAI,sBAAW,EAAG0nD,OAC7E++F,OAAOM,cAAgB3B,6BAAgBqB,OAAOO,OAAQ1/D,KAAKtnF,IAAI,sBAAW,EAAG0nD,OAC7E++F,OAAOQ,eAAiB7B,6BAAgBqB,OAAOS,SAAU5/D,KAAK,GAAI,EAAG5/B,OACrE++F,OAAOU,iBAAmB/B,6BAAgBqB,OAAOW,OAAQ9/D,KAAK,GAAI,EAAG5/B,OAG7E,OAAO++F,QA+FQD,CAAkBxoI,QAAS4nI,aAAcl+F,MAAzC8+F,CAAgD1uG,KAAMw6F,YAjCd,IAAA+U,cAyCvDzB,aAJAiB,YArCuDQ,cAqCvDR,YACAE,cAtCuDM,cAsCvDN,cACAE,eAvCuDI,cAuCvDJ,eACAE,iBAxCuDE,cAwCvDF,iBAGExU,QAAUkU,aAAeA,YAAY5wF,aAAa55D,OAASwqJ,YAAY5wF,aACxE8wF,eAAiBA,cAAc9wF,aAAa55D,OAAS0qJ,cAAc9wF,gBAClE68E,QAAUmU,gBAAkBA,eAAehxF,aAAa55D,OAAS4qJ,eAAehxF,aACjFkxF,kBAAoBA,iBAAiBlxF,aAAa55D,OAAS8qJ,iBAAiBlxF,gBA6CjF,QA1CMj0D,KAAM2+F,eAAM2mD,QAASn2D,KAAK,GAAIr5C,KAAM66F,QAASK,WAAYuT,eAAe33D,MACxE5sF,KAAM4+F,gBAAO0mD,QAASn2D,KAAK,GAAIr5C,KAAM66F,QAASK,WAAYuT,eAAe33D,MACzE5sF,KlE1JS,MkE0JEslJ,QAASv5I,QAAQ,GAAI+pC,KAAMg7F,QAASE,WAAYuT,eAAexT,SAC1E/wI,KlEvJY,SkEuJEslJ,QAASv5I,QAAQ,GAAI+pC,KAAMg7F,QAASE,WAAYuT,eAAexT,SAGtEryI,QAAQ,SAACoQ,OAAQpU,OAC1B,IAAI0C,KACA/C,OAEA2F,KAIA8O,OAJA9O,KACAslJ,QAGAx2I,OAHAw2I,QACAxvG,KAEAhnC,OAFAgnC,KACAk7F,WACAliI,OADAkiI,WAWJ,GARIt2I,MAAQ,GACR0C,KAAO6jJ,QACP5mJ,OAAS0lJ,eAAe1lJ,OAAS,EAAI0lJ,eAAe1lJ,OAAS,IAE7D+C,KAAO6kJ,WACP5nJ,OAASylJ,eAAezlJ,OAAS,EAAIylJ,eAAezlJ,OAAS,GAEjE+C,KAAOA,KAAKY,IAAI,SAAAyvB,KAAG,OAAIA,IAAIzvB,IAAI,SAAAwuD,KAAG,OAAIpnC,SAAS0jE,aAAT1jE,CAAuBonC,SACzD84F,QAAQjrJ,QAAU22I,aAAehxI,MAAQ81C,MAAQ14C,KAAK/C,OAAQ,CAC9D,IAAMkrJ,UAAazvG,UAAMz7C,cAAQ2F,WAC7Bw6I,WACA9/I,MAAQ,GACR6qJ,SAASnoJ,KAAOA,KAChBmoJ,SAASpQ,MAAQA,MAAMhmD,KACvBqrD,QAAUmJ,iCAAoB4B,SAAU3B,aAAcl+F,MAAOs8C,gBAE7DujD,SAASpQ,MAAQA,MAAMppI,QACvBw5I,SAASnoJ,KAAOA,KAAK,GAAGY,IAAI,SAAC3I,IAAKvB,GAAN,OAAYsJ,KAAKY,IAAI,SAAAhI,GAAC,OAAIA,EAAElC,OAExD0mJ,QAAUmJ,iCAAoB4B,SAAU3B,aAAcl+F,MAAOs8C,eAEjE4hD,aAAY,GAAAtlJ,OAAI0B,KAAJ,YAAqBw6I,aAEjCoJ,aAAY,GAAAtlJ,OAAI0B,KAAJ,YAAqB,OAGlC4jJ,cA4HL4B,2BAAgB,SAAhBA,cAAiB5S,aAAD,IAAc6S,YAAdvoJ,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,aACM01I,YAAY3uI,OAAO,SAACwxE,IAAKoZ,MAAN,SAAAvwF,OAAAukJ,+BACXptE,KADWotE,+BACHh0D,KAAK5qF,OAAO,SAACyhJ,GAAI7kJ,OAAL,OACpBA,iBAAiB6sI,6BAAjBpvI,OAAAukJ,+BAAsC6C,KAAI7kJ,MAAMitI,WAAY4X,WAAWD,cAarGE,gCAAqB,SAArBA,mBAAsBjxF,UAAW5lD,OAAQsW,UAC3C,IAAIowH,aAEExgF,aAAeN,UAAUpmD,kBACzBs3I,aAAexgI,SAAS5lB,OACtB+V,QAAkDzG,OAAlDyG,QAAS4sI,eAAyCrzI,OAAzCqzI,eAAgBgC,qBAAyBr1I,OAAzBq1I,qBAOjC,GALIyB,wBAAwB33F,qBACxB23F,aAAaxwI,UAEjBogI,aAAe9gF,UAAUp/C,QAAQo/C,UAAUngD,YAAYvW,IAAI,SAAA5J,GAAC,OAAIA,EAAEC,QAClE+wB,SAAS5lB,KAAKg2I,eACTjgI,QAAQwgE,SAAU,CACnB,IACM8vE,UFjEe,SAAhBC,cAAiB3B,qBAAsB4B,aAAgB,IAAA9jB,MAC1DviI,OAASlL,OAAOgc,OAAO2zI,sBAAsBnmJ,IAAI,SAACyvB,KAAQ,IAAAu4H,MAAAhkB,MACtDikB,cAAeD,UAAG1nJ,OAAHjI,MAAA2vJ,MAAApM,8BAAansH,MAClC,OAAOu0G,UAAG1jI,OAAHjI,MAAA2rI,MAAA4X,8BAAaqM,aAAajoJ,IAAI,SAAC6C,OAClC,OAAIA,iBAAiBmsI,kBACVnsI,MAAM8kF,aAEV9kF,YAGf,OAAOohI,UAAG3jI,OAAHjI,MAAA4rI,MAAA2X,8BAAal6I,QAAbpB,OAAAs7I,8BAAwBmM,eEuDTD,CAAc3B,qBFzEG,SAA9B+B,4BAA+BC,oBAAqBnxF,cAAiB,IAAA6vD,MAC1EnlH,UACEk3I,YAAcuP,oBAAoBnoJ,IAAI,SAAAo5E,MAAI,OAAKA,KAAK8kB,eAG1D,OADAx8F,QADAA,UAAMpB,OAAAs7I,8BAAOl6I,UAAQmlH,UAAGvmH,OAAHjI,MAAAwuH,MAAA+0B,8BAAahD,YAAY54I,IAAI,SAAAwlH,KAAG,OAAIhvH,OAAOgc,OAAOgzG,KAAKxlH,IAAI,SAAA5J,GAAC,OAAIA,EAAEyM,eACvE+D,OAAO,SAAA/D,OAAK,OAAIm0D,aAAan0D,QAAUm0D,aAAan0D,OAAOoR,IAAIjS,OAASw0F,yBAAUt8F,YEoE/EguJ,CAA4B/D,eAAgB3M,aAAalnI,oBAElEy3E,WAAa8/D,UAAUjhJ,OAAO,SAAA/D,OAAK,OACrCqxD,WAAW8C,aAAcn0D,MAAO,MAAO,UAAY2zF,yBAAUt8F,YAC3DkuJ,eAAiB7wI,QAAQmlD,SACzBs7B,aAAexhG,OAAO4I,KAAKo4I,aAAa9yI,gBAAgB7C,cACxDwmJ,cAAgBpsF,4CAA8B5jE,WAA9B,GAA+Bm/I,cAA/Bl3I,OAAAukJ,+BAAgD7sD,gBAChEswD,eAAiB9yF,eAAe6yF,cAAeD,gBAErD5Q,aAAeA,aAAajgI,QAAQwwE,WAAW1rF,OAAS0rF,YAAc,IAAKugE,gBACtChxI,QAAQuwI,WAIjD,OADArQ,aArCyB,SAAvB+Q,qBAAwBnhI,SAAUipH,WACpC,IAAI5oD,cACEmtD,YAAcxtH,SAASwtH,cAC7BntD,WAAa+/D,2BAAc5S,YAAYmN,eAAgByF,2BAAc5S,YAAYkN,iBAEjF,IAAM0G,YAAcnY,UAAU//H,kBACxBwzH,eAAiBr8C,WAAWxhF,OAAO,SAACwxE,IAAK50E,OAAN,MlE1PrB,akE2Pd2lJ,YAAY3lJ,OAAOoR,IAAI1K,WAAxBjJ,OAAAukJ,+BAAoDptE,OAAM50E,SAAU40E,SACzE,OAAOqsD,eAAeznI,OAASg0I,UAAUppI,KAAK68H,gBAAkBnzH,WAAW,IAAU0/H,UA6BtEkY,CAAqBnhI,SAAUowH,eAarCiR,6BAAkB,SAAlBA,gBAAmBzqI,QAASlN,QAAW,IAE5CsW,SAIApJ,QAJAoJ,SACAipH,UAGAryH,QAHAqyH,UACAqY,kBAEA1qI,QAFA0qI,kBACAtC,SACApoI,QADAooI,SAGIzE,aAGA7wI,OAHA6wI,aACAjpG,UAEA5nC,OAFA4nC,UACAzW,UACAnxB,OADAmxB,UAEF1qB,QAAUoqI,aAAagH,YACT3kD,aAAiB58E,SAASV,eAAtCjL,WACFmrH,SAAWyJ,UAAU//H,kBACrBwnI,YAAc1wH,SAAS0wH,cACvBr5C,SAAWr3E,SAASq3E,WACVmmD,eAAmBx9H,SAASi9H,iBAApC3iJ,OACQijJ,kBAAsBv9H,SAASk9H,eAAvC5iJ,OACFknJ,eAAiBxhI,SAAS65H,oBAAoBnwI,OAAQgnI,aACtDqO,qBAAuB/+H,SAAS3S,eAChCo0I,iBAGFlE,oCACAC,8BACAuB,0CACA76D,OAAQwsD,YACRlR,kBACAgiB,8BACAxC,kBACAjP,MAAOwK,aAAaxK,UACpB7E,SAAUqP,aAAarP,aACvB55F,oBACAtxB,mBAEEsgC,OACF08F,SAAUh9H,SAAS0hI,WAAWrqD,SAAS2lD,UACvCoB,SAAUp+H,SAAS0hI,WAAWrqD,SAAS+mD,UACvCC,UAAWr+H,SAAS0hI,WAAWrqD,SAASgnD,WACxCnJ,SAAUl1H,SAAS0hI,WAAWrqD,SAAS69C,WAErCyM,eAAiBpN,gCAAoBiJ,gBACrCoE,kBAAoBrN,gCAAoBgJ,mBAE9Cv9H,SAAS6hI,aACT7hI,SAAS8hI,aACT9hI,SAASm9H,mBAAmBtiH,eAG5B7a,SAAS+hI,kBAlDuC,IAuD1CC,aACFjN,YAFA/0H,SAASqsH,YADTyI,aAIAA,aAAc,IAAIt2I,KAGtBwhB,SAASqsH,UAAU2V,aAEnB,IAAMC,kBACFv4I,OAAQ6wI,aACRwC,eAAgBiC,SAAS9I,cAAcgM,qBAAqBliI,SAAS0wH,eACrE1wH,kBACAuhC,KAAMjB,MAAM08F,SACZxH,QAASwJ,SAAS9I,cAClB8L,wBACA7yD,aAAczlF,OAAOiyD,OACrBg1E,eACIv9G,MAAO1pB,OAAO0pB,MACd1e,KAAMhL,OAAOgL,KACbw1E,MAAOxgF,OAAOwgF,QAIhBkmD,aAAemQ,gCAAmBtX,WACpC8V,0CACAhC,eAAgBkF,iBAAiBlF,eACjC5sI,iBACD6P,UAGGmiI,YAAcniI,SAASoiI,kBAAkBH,kBAEzCI,gBAAkB/H,eAAelK,aAAc2O,qBAAsBoD,YAAa5H,eFnI7D,SAAlB+H,gBAAmBtiI,UAAa,IAAA+8G,MACnCwlB,UAAYviI,SAASqsH,YAAY0I,YACjC1zI,MAAQ2e,SAAS3e,QACjBmhJ,qBAAsBzlB,UAAG7jI,OAAHjI,MAAA8rI,MAAAyX,8BAAazQ,uBAAW0e,0BAAxBvpJ,OAAAs7I,8BACrBtxB,qBAAUu/B,4BACjBphJ,MAAMkuE,YAAYizE,qBAClBD,UAAUjpJ,QAAQ,SAACopJ,aACfA,YAAY78H,WAEhBxkB,MAAMsuE,cAAc6yE,qBE4HpBF,CAAgBtiI,UAChBA,SAASqsH,YAAY0I,YAAYjvH,QACjC9F,SAAS02H,YAAY2L,gBAAgBjnH,QA1FW,IAAAunH,mBF7SnB,SAApBC,kBAAqBvW,UAAWnsD,MACzC,IAAI0tD,MAAQ,KACRC,MAAQ,KAER+G,SAEAvI,UAFAuI,SACAC,SACAxI,UADAwI,SAGGgO,SAEH3iE,KAFApxE,EACGg0I,SACH5iE,KADAxpF,EAeJ,OAZAmsJ,UAAYA,SAASvpJ,QAAQ,SAACypJ,QAC1B,IAAM5iE,MAAQy0D,SAASrlJ,IAAIwzJ,SAC3BnV,MAAQA,WACF11I,KAAKioF,SAGf2iE,UAAYA,SAASxpJ,QAAQ,SAACypJ,QAC1B,IAAM3iE,MAAQy0D,SAAStlJ,IAAIwzJ,SAC3BlV,MAAQA,WACF31I,KAAKkoF,UAIXwtD,YAAOC,aEgXc+U,CAAkB5iI,SAASqsH,YAAarsH,SAASkgE,QAAlE0tD,MA5FwC+U,mBA4FxC/U,MAAOC,MA5FiC8U,mBA4FjC9U,MAEf7tH,SAASkgE,MACLpxE,EAAG8+H,MACHl3I,EAAGm3I,QAGP7tH,SAASgjI,YAAY1B,kBAAmB53I,QAExC,IArGgDu5I,kBAvKpB,SAAnBC,iBAAoBtsI,QAAS0/H,SAAUh2F,MAAOs8C,cAAiB,IAEpEzX,WAUCvuE,QAVDuuE,WACAD,UASCtuE,QATDsuE,UACA65D,qBAQCnoI,QARDmoI,qBACAvB,eAOC5mI,QAPD4mI,eACAD,kBAMC3mI,QAND2mI,kBACAjsG,UAKC16B,QALD06B,UACA45F,SAICt0H,QAJDs0H,SACA6E,MAGCn5H,QAHDm5H,MACAiP,SAECpoI,QAFDooI,SACAh/H,SACCpJ,QADDoJ,SAgBEw+H,aAAeM,mCAbjBxkJ,QACIyvF,KAAMyzD,eACN72I,QAAS42I,mBAEbjH,kBACAyI,0CACAztG,oBACA45F,kBACA6E,YACAiP,kBACAh/H,mBAG0DsgC,MAAOs8C,cAEjEijD,eAQArB,aARAqB,eACAE,iBAOAvB,aAPAuB,iBACAN,YAMAjB,aANAiB,YACAE,cAKAnB,aALAmB,cACAwD,YAIA3E,aAJA2E,YACAC,WAGA5E,aAHA4E,WACAC,cAEA7E,aAFA6E,cACAC,aACA9E,aADA8E,aApCoExmC,MAAAymC,4BAsC1B9D,YAAaE,cAAeE,eAAgBE,kBACrFnnJ,IAAI,SAAA5J,GAAC,OAAKA,EAAIA,EAAE6/D,kBAvCmD,GAsCjE6wF,SAtCiE5iC,MAAA,GAsCvD8iC,OAtCuD9iC,MAAA,GAsC/CgjC,SAtC+ChjC,MAAA,GAsCrCkjC,OAtCqCljC,MAAA,GAAAC,MAAAwmC,4BAwCrCJ,YAAaG,cAC3C1qJ,IAAI,SAAAhI,GAAC,OAAKA,EAAIA,EAAEi+D,aACAj2D,IAAI,SAAArH,GAAC,OAAIA,EAAEs9D,oBA1CwC,GAwCjE20F,WAxCiEzmC,MAAA,GAwCrD0mC,YAxCqD1mC,MAAA,GA2CpE2mC,YAAc9D,OAAO3qJ,OAAS,GAAK,EACvCyqJ,SAASzqJ,QAAUyuJ,cACnB,IAAIC,YAAc3D,OAAO/qJ,OAAS,GAAK,EACvC6qJ,SAAS7qJ,QAAU0uJ,cAGnB,IAAIC,WAAaJ,WAAWvuJ,OAASuuJ,WAAW5qJ,IAAI,SAAC5J,EAAGN,GAEpD,OADAgxJ,SAAShxJ,GAAKgxJ,SAAShxJ,IAAMgxJ,SAAShxJ,UACtCwK,OAAAukJ,+BAAWzuJ,GAAXyuJ,+BAAiBiC,SAAShxJ,OACxBgxJ,SAAWA,SAAS9mJ,IAAI,SAAA5J,GAAC,OAAKA,QAG9B60J,YAAcjE,OAAO3qJ,OAAS2qJ,OAAOhnJ,IAAI,SAAC5J,EAAGN,GAAJ,OAAWM,GAAXkK,OAAAukJ,+BAAkBgG,YAAY/0J,WAAe+0J,YAAYxuJ,OACpGwuJ,YAAY7qJ,IAAI,SAAA5J,GAAC,OAAAyuJ,+BAAQzuJ,QAEvB80J,aACFV,YACgBA,WAAWv0F,aACnBv1D,QAAQ,SAAC1I,GACQA,EAAEi+D,aACVv1D,QAAQ,SAACwV,EAAGpgB,GACrBo1J,UAAUp1J,GAAKo1J,UAAUp1J,OACzBo1J,UAAUp1J,GAAGwJ,KAAK4W,OAK1BgxI,SAAS7qJ,QACT6uJ,UAAU5rJ,KAAK4nJ,UAInB,IAAIiE,gBACA/D,OAAO/qJ,QACP8uJ,aAAa7rJ,KAAK8nJ,QAEtB,IAAMgE,oBAAsBD,aAAa9uJ,OACrCouJ,eACgBA,cAAcx0F,aACtBv1D,QAAQ,SAAC1I,GACQA,EAAEi+D,aACVv1D,QAAQ,SAACwV,EAAGpgB,GACrBq1J,aAAar1J,EAAIs1J,qBAAuBD,aAAar1J,EAAIs1J,yBACzDD,aAAar1J,EAAIs1J,qBAAqB9rJ,KAAK4W,OAKvD,IAAK80I,WAAW3uJ,SAAW4uJ,YAAY5uJ,OAAQ,CAC3C,IAAMssD,KAAO,IAAIjB,MAAM+9F,UACvB98F,KAAK0iG,kBAAkB/+D,UAAWC,YAClCy+D,aAAeriG,OAGnB,KAAKuiG,UAAU7uJ,QAAY8uJ,aAAa9uJ,QAAW8uJ,aAAa,GAAG9uJ,QAAS,CACxE,IAAMssD,MAAO,IAAIjB,MAAM+9F,UACvB98F,MAAK0iG,kBAAkB/+D,UAAWC,YAClC4+D,eAAiBxiG,QAGrB,OACIwoC,MAAO65D,WAAYC,aACnBl9I,SAAUm9I,UAAWC,cACrBvF,0BACAmF,wBACAD,yBA2KAR,CAAiBzB,iBAVjBxC,aAAcoD,gBACd/C,WAAYt/H,SAASkgE,QASuB5/B,MAAOs8C,cALnD7S,KA3G4Ck5D,kBA2G5Cl5D,KACApjF,QA5G4Cs8I,kBA4G5Ct8I,QACA63I,aA7G4CyE,kBA6G5CzE,aACAkF,YA9G4CT,kBA8G5CS,YACAC,YA/G4CV,kBA+G5CU,YAMJ,OAHA3jI,SAASkkI,UAAUn6D,MACnB/pE,SAASmkI,aAAax9I,UAGlBojF,KAAM/pE,SAASkkI,YACfv9I,QAASqZ,SAASmkI,eAClB/4I,OAAQ4U,SAAS02H,cACjBkL,oCACAD,8BACA9jF,UACI2pB,IAAKk8D,YACLt0F,IAAKu0F,aAETryG,UAAWktG,aACXxsD,YACIo+C,0BACAzJ,YAAasC,aCppBZmb,gBACT9kI,gBACAwuH,SACAqP,sBACAzM,eACA6B,gBACAsP,YACAC,YACAoC,aACAC,gBACAzN,eACAlB,WACA9xD,eACAtpF,y9CCQiBiqJ,0CAOjB,SAAAA,eAAa/kI,4KAAcglI,CAAA1wJ,KAAAywJ,gBACvBzwJ,KAAK2wJ,aACL3wJ,KAAK4wJ,gBACL5wJ,KAAK6wJ,iBACL7wJ,KAAKqrG,cAAgB3/E,aACrB1rB,KAAK8wJ,cACL9wJ,KAAK+wJ,iBACL/wJ,KAAKgxJ,gBACLhxJ,KAAKixJ,SAAY3L,aAAeC,cAChCvlJ,KAAKkxJ,cAAiBnK,kBAAoBD,mBAC1C9mJ,KAAKmxJ,uBACLnxJ,KAAKoxJ,UACLpxJ,KAAKqxJ,cACLrxJ,KAAKsxJ,iBACLtxJ,KAAK0mI,OACDxrH,KACApY,KACA08B,SACA1e,QACAw1E,SACA7jC,UACAg3C,SACA8gB,WAEJhxD,sBAAsBv5D,KAAMwwJ,gBAC5BxwJ,KAAKy4I,UAAUqI,2UAUQ,IAAAllE,MAAA57E,KACvB,OAAIkE,UAAa7C,QACb7F,OAAOkS,QAAPxJ,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IAAgCwB,QAAQ,SAAC8tD,KACrCooB,MAAK+0E,UAAUn9F,IAAI,IAAMA,IAAI,KAE1BxzD,MAEJA,KAAK2wJ,wDAUI,QAAA30E,OAAAh8E,KAAAo5D,KAAAl1D,UAAA7C,OAANkwJ,KAAM,IAAAhsJ,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAANk4F,KAAMl4F,MAAAn1D,UAAAm1D,MAChB,OAAIk4F,KAAKlwJ,SACJkkH,KAAMC,OAAQC,OAAQC,YAAaC,YAAYjgH,QAAQ,SAAC1I,GACrDg/E,OAAKq1E,WAAL,GAAA/rJ,OAAmBtI,EAAnB,QAA6Bu0J,KAAK,GAAL,GAAAjsJ,OAAWtI,EAAX,SAAsBg/E,OAAKq1E,WAAL,GAAA/rJ,OAAmBtI,EAAnB,UAEhDgD,MAEJA,KAAKqxJ,+CAWZ,OAAIntJ,UAAK7C,QACLrB,KAAK0mI,MAAQlrI,OAAO0M,UAAWlI,KAAK0mI,MAAvBxiI,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IACNlE,MAEJA,KAAK0mI,8CAUG,IAAA3lD,OAAA/gF,KACf,OAAIkE,UAAO7C,QACP7F,OAAOkS,QAAPxJ,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IAA0BwB,QAAQ,SAAC1I,GAC/B+jF,OAAKkwE,QAAQj0J,EAAE,IAAMA,EAAE,KAEpBgD,MAEJA,KAAKixJ,0DAUa,IAAAhwE,OAAAjhF,KACzB,OAAIkE,UAAY7C,QACZ7F,OAAOkS,QAAPxJ,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IAA+BwB,QAAQ,SAAC1I,GACpCikF,OAAKiwE,aAAal0J,EAAE,IAAMA,EAAE,KAEzBgD,MAEJA,KAAKkxJ,6EAWKp7I,OAAQgnI,aACzB,IAAM8Q,kBACA3H,uBA2BN,OA1B4B7hD,qBAAMC,sBAAOC,uBAEtB5+F,QAAQ,SAACsB,MACxB,GAAI8O,OAAO9O,OAAS8O,OAAO9O,MAAMa,MAAO,CACpC,IAAM2iH,IAAM10G,OAAO9O,MACnB4mJ,eAAe5mJ,MAAQwjH,IAAI3iH,MAC3Bo+I,oBAAoB3hJ,KAAKkmH,IAAI3iH,UAIjCiO,OAAM,QACNmwI,oBAAoB3hJ,KAApBjH,MAAA4oJ,oBAAmBuL,kCAAS17I,OAAOiyD,SAGnC+0E,YAAYz7I,QACZy7I,YAAYp3I,QAAQ,SAAC6qF,OACbA,MAAM2S,UACN1nG,OAAOgc,OAAO+4E,MAAM2S,UAAUx9F,QAAQ,SAAC8kH,KAC/BA,MAAmD,IAA5Cy7B,oBAAoB5hJ,QAAQmmH,IAAI3iH,QACvCo+I,oBAAoB3hJ,KAAKkmH,IAAI3iH,MAAQ2iH,IAAI3iH,MAAQ2iH,SAMrExqH,KAAK45I,aAAcqM,0CACZ2H,qEAUKz3D,KAAMyrD,SAClB,OAAIzrD,MACAn2F,KAAKyxJ,gBAAkBrP,wBAAwBpiJ,MAAQgH,KAAMs+G,IAAK5+G,OAAQyvF,MAAQyrD,SAC3E5hJ,MAEJA,KAAKyxJ,kEAUF1+I,QAAS6uI,SACnB,OAAI7uI,SACA/S,KAAK0xJ,cAAgBtP,wBAAwBpiJ,MAAQgH,KAAMq+G,IAAK3+G,OAAQqM,SAAW6uI,SAC5E5hJ,MAEJA,KAAK0xJ,4DAWJ/jG,MACR,IAAM81C,SAAWzjG,KAAKyjG,WAOtB,OALAjoG,OAAOgc,OAAOisF,UAAU/9F,QAAQ,SAAC1I,GACzBA,EAAEJ,qBAAqB+wD,OACvBA,KAAO3wD,KAGR2wD,iEAWQ3qC,SAIf,OAFAhjB,KAAK2+I,iBAEE,SAACtJ,UAAWhpB,UAAWmvB,QAAvB,OAAkC0N,8BAAiBlmI,QAASqyH,UAAWhpB,UAAWmvB,iDAUpFmW,WAAY59F,UACjB/zD,KAAK2xJ,cAAcjsJ,QAAQ,SAACkuF,IAAKqzD,QAC7BrzD,IAAIluF,QAAQ,SAAC81D,IAAK4rF,QACdrzF,SAASkzF,OAAQG,OAAQ5rF,6DAYjC,IAAMrC,OAASn5D,KAAK45I,cAKpB,OAHAp+I,OAAOkS,QAAQ1N,KAAKw7I,UAAU91I,QAAQ,SAAC1I,GACnCm8D,OAAOn8D,EAAE,IAAMA,EAAE,KAEdm8D,iEASP,OAAOn5D,KAAKssF,MACRpxE,EAAG,IAAI9L,IACPtM,EAAG,IAAIsM,IACPqjD,UACAg3C,SACA8gB,UACA5rD,iFAIiBv/C,KAAM64D,MAI3B,OAHAz8E,OAAO0M,OAAOlI,KAAKsxJ,iMAAnBM,IACKxyI,KAAO64D,OAELj4E,qDAUE0tJ,kBAAmB53I,QAAQ,IAAA+7I,OAAA7xJ,KAEhC2mJ,aAGA7wI,OAHA6wI,aACAh3B,MAEA75G,OAFA65G,MACAtqB,MACAvvF,OADAuvF,MAGA1C,cAEA+qD,kBAFA/qD,cACAmvD,mBACApE,kBADAoE,mBARgCC,mBAchC/xJ,KAAK0rB,eAHOtF,WAXoB2rI,mBAWhCtxI,WACA4vH,iBAZgC0hB,mBAYhC1hB,iBACA1d,UAbgCo/B,mBAahCp/B,UAEE8d,aAAezwI,KAAKsxJ,cAGpBpX,WAEA8X,WJrOmB,SAApBC,kBAAqBn8I,QAC9B,IAAMk8I,cAQN,OhEiKuB,cAID,YAIA,agE9KZtsJ,QAAQ,SAACu4C,WACM/gD,IAAjB4Y,OAAOmoC,QACP+zG,WAAW/zG,MAAQnoC,OAAOmoC,SAG3B+zG,WI4NgBC,CAAkBtL,kBAC/Bl5I,MAAQzN,KAAKyN,QAmCnB,OAlCAA,MAAM8tE,YAENv7E,KAAK0F,QpErHe,coEqHO,SAAC5K,EAAGuL,EAAGgwF,IAC9B,IAAIpmF,KAAOomF,GAAG/xD,SACd,IAAKr0B,KAAM,CACP,IAAMkzD,UAAS,OAAA79D,OAAUxK,EAAV,KAAAwK,OAAee,EAAf,KAAAf,OAAoB+vD,gBAEnCplD,KAAOkgI,uBAAW/zI,QACdumG,4BACAmvD,wCAEA1rI,sBACAiqH,kCACA1d,oBACA8d,6BAECrrC,SACDktB,SAAUx3H,EACV03H,SAAUnsH,EACV88D,sBAEJlzD,KAAKxC,MAAMA,OACXwC,KAAKo1F,MAAMA,OACXhP,GAAG/xD,OAAOr0B,OAEbiqI,MAAMp/I,KAAOo/I,MAAMp/I,OACpBo/I,MAAMp/I,GAAGuL,GAAK4J,KACdA,KAAKs8H,YAAY5c,OACZ7/B,YAAY+hE,OAAK/hE,eACjBuV,MAAMA,OACXhP,GAAGvgF,OAAOk8I,cAEdvkJ,MAAMguE,cACN40D,iBAAiB3L,QAASpkD,OAAQ45D,MAAOtiI,OpE5KtB,coE4K2CyoE,WpEhKlD,SoEiKLrgF,KAAKk6I,MAAMA,qDASVpkI,OAAQu/H,UAAW+V,UAAU,IAEjC5rH,MAIA1pB,OAJA0pB,MACA82D,MAGAxgF,OAHAwgF,MACAx1E,KAEAhL,OAFAgL,KAGEvE,QADFzG,OADA6wI,aAEyBgH,YAPQuE,mBAWjClyJ,KAAKyZ,eAFL6rI,UATiC4M,mBASjC5M,UACAC,UAViC2M,mBAUjC3M,UAEEriD,UACF1jE,YACA82D,YACAx1E,WAEEu3H,eAAW/yI,OAAAksJ,kCAAOlM,UAAUtgJ,IAAI,SAAAhI,GAAC,OAAIA,EAAE+E,cAA5ByvJ,kCAA4CjM,UAAUvgJ,IAAI,SAAAhI,GAAC,OAAIA,EAAE+E,eAC5EowJ,YACFr7F,QAASs0F,SAAS9I,cAAc8P,uBAAuB/c,UAAWnyC,SAAUm1C,YAAa97H,SACzF+vE,KAAMtsF,KAAKssF,OACX4W,mBAGJ,OADAkoD,SAASiH,eAAeC,gBAAgBH,YACjCnyJ,mFAMP,OAFAA,KAAKixJ,WACLjxJ,KAAKkxJ,gBACElxJ,6DASO,IAAA22H,WAKV32H,KAAKssF,OAHL9sD,MAFUm3F,WAEVn3F,MACA82D,MAHUqgC,WAGVrgC,MACAx1E,KAJU61G,WAIV71G,KAGJ,OACI0e,MAAOgyH,kCAAIhyH,OACX82D,MAAOk7D,kCAAIl7D,OACXx1E,KAAM0wI,kCAAI1wI,2DAWH9Z,MACX,OAAOhH,KAAKssF,OAAL,GAAAhnF,OAAe0B,mEAUPg1D,aAAclmD,OAAQs1I,UAAU,IAAAmH,OAAAvyJ,KACzC88I,YAAc98I,KAAK88I,cACzB98I,KAAKimJ,oBAAoBnwI,OAAQgnI,aACjC,IAAM0V,YAAcpH,SAASiH,eAAephD,YACxCj1C,0BACAlmD,cACAw2E,KAAMtsF,KAAKssF,SAGX+jD,iBACArwI,KAAK0rB,eADL2kH,kBAGHhsC,sBAAOC,sBAAOF,sBAAM1+F,QAAQ,SAAC1I,GAC1Bu1J,OAAKjmE,OAAOtvF,GAAKw1J,YAAYx1J,KAGjCqzI,iBAAiB3L,QAASpkD,OAAQtgF,KAAKssF,OAAQ10E,OpE7Q5B,coE6QiDyoE,WpErQxD,SoEsQZgwD,iBAAiB3L,QAASpkD,OAAQtgF,KAAKk6I,QAAStiI,OpE1P3B,eoE0PkDyoE,WpElQ3D,SoEoQZ,IAAM65D,SACAyE,aAAe3+I,KAAK2+I,eACpBnlF,OAAQ,GAAAl0D,OAAImpH,0BAAiB7yE,uBAArB,cAAAt2C,OACPmpH,0BAAiBhzE,sBADV,YAERhuC,MAAQzN,KAAKyN,QAenB,OAdAA,MAAMkuE,YAAYniB,OAClB/rD,MAAM8tE,YACNv7E,KAAK0F,QpE/Pe,coE+PO,SAAC5K,EAAGuL,EAAGgwF,IAC9BA,GAAG/J,KAAK9wF,OAAO0M,OAAOmuF,GAAG/J,OAAQkmE,cACjCn8D,GAAG/xD,UAAY+xD,GAAG/xD,SAASm1D,cAAc3jF,QACzCugF,GAAGwM,SAAS87C,aAAa7jJ,GAAGuL,IAC5BgwF,GAAGo8D,cAEHvY,MAAM51I,KAAK+xF,GAAG/xD,YAElB72B,MAAMguE,cACDM,eAAeviB,MAAM,KACrBuiB,eAAeviB,MAAM,KAC1B62E,iBAAiB3L,QAASpkD,OAAQ45D,MAAOtiI,OpElR1B,UoEkR2CyoE,WpEtR9C,SoEuRLrgF,yDAWI0yJ,aAAcnrC,WAAYzxG,QACrC,IAAI68I,cACAC,eAEAz8D,KAEAu8D,aAFAv8D,KACApjF,QACA2/I,aADA3/I,QALyC8/I,oBAUzC7yJ,KAAK0rB,eAFOs9E,aAR6B6pD,oBAQzCpyI,WACA4vH,iBATyCwiB,oBASzCxiB,iBAGAyiB,YAEAh9I,OAFAg9I,YACA9hE,YACAl7E,OADAk7E,YAEEswD,SAAWthJ,KAAK8tJ,WAAW9tJ,KAAKyjG,WAAW69C,UAC3CmJ,UAAYzqJ,KAAK8tJ,WAAW9tJ,KAAKyjG,WAAWgnD,WAhBL1H,MAAAgQ,8BAiBf58D,KAjBe,GAiBtC6sD,SAjBsCD,MAAA,GAiB5BE,UAjB4BF,MAAA,GAAAG,SAAA6P,8BAkBfhgJ,QAlBe,GAkBtCigJ,QAlBsC9P,SAAA,GAkB7B+P,WAlB6B/P,SAAA,GAmBvCgQ,WAAa3rC,WAAWpxB,KACxBg9D,iBAAmB,SAAnBA,iBAAmBxlG,MAAI,OAAI,IAAI88F,WAAY30I,QAASu9E,KAAM1lC,KAAK73C,SAASu9E,QAIxEmuD,SACFrxH,KAAMixH,0BAAc4B,SAAUkQ,WAAW,GAAIJ,YAAcxR,SAAWmJ,WAChEz5D,wBAAagY,4BACnBz4E,MAAO6wH,0BAAc6B,UAAWiQ,WAAW,GAAIJ,YAAcxR,SAAWmJ,WAClEz5D,wBAAagY,6BAEjBoqD,SACFjjI,KAAM6yH,SAAS3hJ,OAAS,EAAI2hJ,SAAS,GAAGh+I,IAAImuJ,qBAC5C5iI,MAAO0yH,UAAU5hJ,OAAS,EAAI4hJ,UAAU,GAAGj+I,IAAImuJ,sBAhCNjqC,MAAA6pC,+BAkChBptD,eAAMC,iBAAO5gG,IAAI,SAAAgC,MAAI,OAAIgsJ,QAAQhuJ,IAAI,SAACw2D,IAAK1gE,GACpE,OAAIA,IAAMk4J,QAAQ3xJ,OAAS,EAChBmgJ,QAAQx6I,MAEZosJ,QAAQpsJ,UAtC0B,GAkCtCqsJ,QAlCsCnqC,MAAA,GAkC7BoqC,SAlC6BpqC,MAAA,GA0C7C,GAAuB,IAAnB8pC,QAAQ3xJ,OAAc,KAAA8nH,MAAA4pC,+BACOptD,eAAMC,iBAAO5gG,IAAI,SAAAgC,MAAI,OAAIisJ,WAAWjuJ,IAAI,SAACw2D,IAAK1gE,GACvE,OAAU,IAANA,EACO0mJ,QAAQx6I,MAEZosJ,QAAQpsJ,UALG,GACrB2rJ,WADqBxpC,MAAA,GACTypC,YADSzpC,MAAA,QAQtBwpC,WAAaM,WAAWjuJ,IAAI,kBAAOg+I,SAAS3hJ,OAAS,EAAI2hJ,SAAS,GAAGh+I,IAAImuJ,uBACzEP,YAAcK,WAAWjuJ,IAAI,kBAAOi+I,UAAU5hJ,OAAS,EAAI4hJ,UAAU,GAAGj+I,IAAImuJ,uBAShF,OANA9iB,iBAAiB3L,QACbpkD,QAAS+yE,QAASC,SAAUX,WAAYC,aACxCh7I,OpEtWe,coEuWfyoE,WpE3UiB,mBoE8UZgzE,gBAASC,kBAAUX,sBAAYC,yEAa/Bvd,UAAWv/H,OAAQ43I,kBAAmBtC,UAQ/C,OAAOqC,8BANHpY,oBACAqY,oCACAtC,kBACAh/H,SAAUpsB,MAGkB8V,8CAIhC,OAAI5R,UAAO7C,QACPrB,KAAK+vH,OAAL7rH,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK+vH,6CAIZ,IAAM0oB,UAAYz4I,KAAKqxJ,WACvB,IAAK,IAAMh1J,OAAOo8I,UACdA,UAAUp8I,KAAK61B,kUC3bZqhI,wBA9HX,SAAAA,YAAaC,sKAAWC,CAAAzzJ,KAAAuzJ,aACpB,IAAMG,iBAEN1zJ,KAAKwnC,OAAOgsH,eACZxzJ,KAAK4L,OAAO,kBAAM,IAElB5L,KAAKgyB,KAAK,SAACqkE,GAAI+jD,KAAME,MACjB,IAAMqZ,UAAYt9D,GAAG5wD,UACrB,GAAIkuH,WAAaA,UAAU50I,GAAI,CAC3B,IAAMA,GAAK40I,UAAU50I,KACrB20I,cAAc30I,KACV+pF,SAAU6qD,UACVrhC,SAAU8nB,KACV5nB,SAAU8nB,SAKtBt6I,KAAK0zJ,cAAcA,iUAInB,OAAIxvJ,UAAG7C,QACHrB,KAAK4zJ,eAAL1vJ,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK4zJ,uDAUZ,OAAI1vJ,UAAO7C,QACPrB,KAAK6zJ,QAAL3vJ,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK6zJ,gDAYZ,OAAI3vJ,UAAG7C,QACHrB,KAAK8zJ,UAAL5vJ,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK8zJ,gDASZ,IAAIC,SAAW,EASf,OAPA/zJ,KAAKwnC,SAAS9hC,QAAQ,SAACkuF,KACnB,IAAIogE,gBAAkB,EACtBpgE,IAAIluF,QAAQ,SAACioD,MACTqmG,iBAAmBrmG,KAAKsmG,kBAAkBhyI,QAE9C8xI,SAAW/wJ,KAAKmK,IAAI4mJ,SAAUC,mBAE3BD,iDASP,IAAIG,UAAY,EAShB,OAPAl0J,KAAKwnC,SAAS9hC,QAAQ,SAACkuF,KACnB,IAAIugE,iBAAmB,EACvBvgE,IAAIluF,QAAQ,SAACioD,MACTwmG,iBAAmBnxJ,KAAKmK,IAAIgnJ,iBAAkBxmG,KAAKsmG,kBAAkB/xI,UAEzEgyI,WAAaC,mBAEVD,4CAULh2J,IACF,IAAMspC,OAASxnC,KAAKwnC,SACd9vB,SAAW1X,KAAK4L,SAStB,OAPA47B,OAAO9hC,QAAQ,SAACkuF,IAAKqzD,QACjBrzD,IAAIluF,QAAQ,SAAC81D,IAAK4rF,QACV1vI,SAAS8jD,MACTt9D,GAAGs9D,IAAKyrF,OAAQG,OAAQ5/G,YAI7BxnC,qEAGU+e,IACjB,OAAO/e,KAAK0zJ,gBAAgB30I,0CAI5B/e,KAAKgyB,KAAK,SAAA27B,MAAI,OAAIA,KAAK17B,WACvBjyB,KAAKwnC,ytBChIN,6BAkCM4sH,0BAAqB,SAArBA,mBAAsBpxI,QAAS8rI,aAAgB,IAEpDt3I,OAGAs3I,YAHAt3I,OACA2+E,KAEA24D,YAFA34D,KACApjF,QACA+7I,YADA/7I,QAcJ,OAZAyE,OAASA,WACT2+E,KAAOA,SACPpjF,QAAUA,YACViQ,QAAQqxI,aAAa3R,UACjB3mJ,MAAO,IAAIw3J,aAAY/7I,QACvB2Y,KAAM,IAAIojI,aAAYp9D,KAAK,IAC3B5lE,MAAO,IAAIgjI,aAAYp9D,KAAK,IAC5BltE,IAAK,IAAIsqI,aAAYxgJ,QAAQ,IAC7B2pC,OAAQ,IAAI62G,aAAYxgJ,QAAQ,KAGpCiQ,QAAQqoF,cAAcsnB,UAAUr2C,OAAOngC,aAAYG,gBAAgB,GAC5Dt5B,SAGEsxI,sBAAiB,SAAjBA,eAAkBtxI,SAC3B,IAAMmzE,KAAOnzE,QAAQmzE,OACfpjF,QAAUiQ,QAAQjQ,UAClBysB,MAAQxc,QAAQwc,QAChB61G,UAAYryH,QAAQxc,OACpBsa,KAAOkC,QAAQlC,OACfinD,OAAS/kD,QAAQ+kD,SACjBuoB,OAASttE,QAAQstE,SACjBrpD,UAAYjkB,QAAQikB,YACpBnxB,OAASkN,QAAQlN,SACjBwgF,MAAQtzE,QAAQszE,QAGhBlqE,SAAWpJ,QAAQoJ,WACzBA,SAAS3e,MAAMuV,QAAQvV,SACvB2e,SAAS0jE,YAAY9sE,QAAQ8sE,eAE7B,IAAIykE,cACA72G,UAAW16B,QAAQ06B,YACnBiyE,MAAO3sG,QAAQ2sG,QACfg3B,aAAc7wI,WACdqgF,UACApjF,gBACAg1D,cACAuoB,cACArpD,sBC3CkC,SAA7ButH,2BAA8BxxI,SACvCA,QAAQvV,QAAQ+vE,aACZnhF,IAAK,gBD4CTm4J,CAA2BxxI,SAE3B,IAAM+5H,cAlEoB,SAAxB0X,sBAAyBC,aAC3B,IAAMt2E,QACN,IAAK,IAAM/hF,OAAOq4J,YAAa,CAC3B,IAAMC,UAAYD,YAAYr4J,KAM1B+hF,KAAK/hF,KALgB,iBAAds4J,WAA2BA,UAKtBA,WAHR9sJ,MAAO6sJ,YAAYr4J,MAM/B,OAAO+hF,KAsDeq2E,EAClBj1H,YACA82D,YACAx1E,YAGJyzI,aAAe/4J,OAAO0M,OAAOqsJ,aAAcxX,eAE3C,IAAMqO,YACNA,SAASiH,eAAiB,IAAI/R,+BAC9B8K,SAAS9I,cAAgBX,uBAAWrxD,QACpCikE,aAAalvD,MAAQ+lD,SAAS9I,cAAc18I,YAAYoB,OACxDolB,SAASw1H,QAAQwJ,SAAS9I,eAG1Bt/H,QAAQ4xI,UAAUxJ,SAAS9I,cAAc18I,YAAYoB,QAGrD,IAAMN,OAAS0kJ,SAAS9I,cAAcuS,eAAexf,UAAWkf,cAChEnJ,SAAS9I,cAAcwS,kBAAkBh/I,OAASA,OAAOwhI,YAAe5wI,QAExE4pF,QAAUlkE,SAAS0wH,YAAYxsD,QAE/BlkE,SAASi9H,eAAe3iJ,OAAOyvF,KAAMi1D,UAAU9B,aAAa5iJ,OAAOqM,QAASq4I,UAE5E,IAAM2J,gBAAkB3oI,SAAS4oI,YAAY3f,UAAWkf,aAAcvxI,QAAQygF,WAAY2nD,UA6B1F,OA5BApoI,QAAQiyI,kBAAoBF,gBAAgB32D,WAAWo+C,aAEvDx5H,QAAQ06B,UAAUq3G,gBAAgBr3G,WAGlCtxB,SAAS8oI,kBAAkBH,gBAAgB32D,WAAW20C,YAAYz9H,kBAAmBynI,cAC7EqO,UAGRh/H,SAAS+oI,WAAWZ,aAAcQ,gBAAgB32D,WAAYgtD,UAG9DgJ,0BAAmBpxI,QAAS+xI,iBAG5B/xI,QAAQoyI,eAAehpI,SAASipI,cAAcN,gBAAiBruJ,OAAQoP,SAGvEkN,QAAQ+xI,gBAAgBA,iBAExB/xI,QAAQqxI,aAAa/nE,KAAOlgE,SAASkgE,OACrCtpE,QAAQsyI,UACJC,OAAQ9S,WAAWsS,gBAAiB3J,SAAS9I,iBAGjDl2H,SAASw1H,UAAU4T,iBAAiBxyI,SC5GI,SAA/ByyI,6BAAgCzyI,SAC3BA,QAAQvV,QAChBuvE,wBAAuB,GAAA13E,OAAImpH,0BAAiBhzE,sBAArB,YAAsD,WAC/Ez4B,QAAQoJ,WAAWw1H,UAAU4T,iBAAiBxyI,WAC/C,GACC3mB,IAAK,gBDyGTo5J,CAA6BzyI,SACtBA,+LEjJJ,IAAM6sE,8BAAK6lE,kCAAAC,0BACdhmC,SACAnpH,QACA4uJ,gBACInhG,cACIo/F,WACAC,YACAX,cACAC,iBAGRgC,aAEAU,UACIrhG,cACIshG,YAGRR,iBACI9gG,iBAEJ7nC,YACA0jE,aACI77B,aAAc,SAAAA,aAAAT,KAAG,OAAIA,MAEzBiwC,UACI9pC,aAAc,SAAAA,aAAC32C,QAASjnB,OAIpB,OAHIinB,QAAQoJ,UACRpJ,QAAQoJ,WAAWq3E,SAAS1nG,MAAM65J,cAE/B75J,QAGf2hD,cxELkB,awE5BJg4G,kCAAAC,yBAmCbxwC,SAnCauwC,kCAAAC,yBAoCbvwC,YApCaswC,kCAAAC,yBAqCbtxD,0BArCaqxD,kCAAAC,yBAsCbrxD,0BAtCaoxD,kCAAAC,yBAuCbvxD,yBAvCasxD,kCAAAC,yBxE2HI,awE3HJD,kCAAAC,yBxEgII,awEhIJD,kCAAAC,yBxEqIO,gBwErIPA,myCCqQHE,oCA/NX,SAAAA,YAAapyD,SAAU/3E,cAAc,IAAAkwD,iKAAAk6E,CAAA91J,KAAA61J,aACjCj6E,0LAAAm6E,CAAA/1J,KAAAg2J,4BAAAH,aAAA56J,KAAA+E,OADiC,IAI7Bi2J,qBACAxyD,SADAwyD,qBAJ6B,OAOjCr6E,MAAKyvB,cAAgB3/E,aAKrB6tC,sBAAsB28F,mCAAAt6E,OAAMiU,8BAC5Bt2B,sBAAsB28F,mCAAAt6E,OAAM2yC,eAG5B3yC,MAAKy4E,gBAELz4E,MAAK24D,SAEL34D,MAAKma,OAAS,KAEdna,MAAKu6E,cAELv6E,MAAKxvD,SAAS,IAAIqkI,+BAAe70E,MAAKyvB,gBAEtC+oD,0BAAmB8B,mCAAAt6E,WAEnBA,MAAK6nB,UACDd,cAAeszD,qBAAqBtzD,cAAchnG,MAClDi6J,aAAcK,qBAAqBL,aAAaj6J,QA9BnBigF,uYAVf6nD,ySAyDlB,OAAIv/H,UAAO7C,QACPrB,KAAK+vH,OAAL7rH,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GHzEyB,SAAxBkyJ,sBAAyBpzI,SAClC,IAAMqzI,YAAcrzI,QAAQpd,YAAYktH,WAAW,GACrC9vG,QAAQvV,QAChBggB,OAAOghG,0BAAiB5yE,uBAAwBw6G,aGuE9CD,CAAsBp2J,MHjFH,SAAlBs2J,gBAAmBtzI,SAAY,IAAAuzI,sBAAAC,kCACNrmB,uBAAWrd,WADL,GACjCujC,YADiCE,sBAAA,GACpBE,WADoBF,sBAAA,GAE1BvzI,QAAQvV,QAChBggB,OAAOghG,0BAAiBhzE,sBAAuB46G,aAChD5oI,OAAOghG,0BAAiB/yE,qBAAsB+6G,YG8E3CH,CAAgBt2J,MHrEI,SAAnB02J,iBAAoB1zI,SAAY,IAAA2zI,qBAAAH,kCACPlnC,qBAAUwD,WADH,GAClCujC,YADkCM,qBAAA,GACrBF,WADqBE,qBAAA,GAEzC3zI,QAAQvV,QAAQggB,OAAOghG,0BAAiB7yE,uBAAwBy6G,aAC3D5oI,OAAOghG,0BAAiB9yE,sBAAuB86G,YGmE5CC,CAAiB12J,MFtFO,SAAvB42J,qBAAwB5zI,SACjC,IAAMvV,MAAQuV,QAAQvV,QAChBopJ,QACFlkC,UAAW3vG,QAAQqoF,cAAcsnB,UACjCllH,cAGH,IAAK,KAAK/H,QAAQ,SAAC4gI,UAChB74H,MAAMuvE,wBAAuB,GAAA13E,OAAImpH,0BAAiB5yE,uBAArB,YAAAv2C,OAAsDghI,WAAa,WAC1EtjH,QAAQoJ,WAAWkgE,OAC3Bg6C,UAAU5gI,QAAQ,SAAA4mF,MAAI,OAAIA,KAAK5mF,QAAQ,SAACo3C,MAC9CA,KAAKy6C,kBAKhB44C,uBAAY7gB,sBAAW5pH,QAAQ,SAACoxJ,MAC7B,IAAMz2E,WAAay2E,KAAKz2E,cACvB,QAAS,aAAa36E,QAAQ,SAACsB,MAC5B,IAAMulB,UAAYuqI,KAAKC,eAAe/vJ,MAChCgwJ,UAAYH,OAAO7vJ,MACzBulB,UAAU7mB,QAAQ,SAACuxJ,aACfD,UAAUC,YAAYjwJ,MAAMiwJ,YAAYz9F,MAAOy9F,YAAY1wF,UAAU,GACjEpD,UAAWkd,WACX/F,aAAc28E,YAAY38E,qBEgElCs8E,CAAqB52J,MACdA,MAEJA,KAAK+vH,+DASZ,OAAI7rH,UAAS7C,OACFrB,KAEJA,KAAKk/E,cAAcwjE,2DA8B1B,OAAIx+I,UAAO7C,OACArB,KAEJA,KAAKq0J,2DAWZ,OADAr0J,KAAKyN,QAAQoK,MAAM2jE,OACZx7E,uDAUP,OADAA,KAAKyN,QAAQoK,MAAM6jE,SACZ17E,yCAWJk3J,UACH,OTjBmB,SAAdC,YAAeD,SAAUrK,WAClC,IAAIuK,QAAU,KAQd,OANC/yD,sBAAOD,qBAAME,uBAAO5+F,QAAQ,SAAC1I,GACtBq6J,iBAAK5pJ,MAAM9R,IAAIqB,IAAMk6J,WAAaG,iBAAK5pJ,MAAM9R,IAAIqB,GAAG,KACpDo6J,QAAUp6J,KAIdo6J,SACSA,mBAEZ9xC,IAAKD,KAAK3/G,QAAQ,SAAC4xJ,WAChBzK,UAAS,GAAAvnJ,OAAIgyJ,UAAJ,WAAuB5xJ,QAAQ,SAAC1I,GACjCA,EAAE+E,aAAem1J,WACjBE,SAAYA,QhE4GP,QgE5GuBpwJ,KAAMswJ,YAAcjyC,IhEnE1C,SgEmEyDC,UAKvE8xC,WAIH9xC,IAAKD,KAAK3/G,QAAQ,SAAC6xJ,UAChB1K,UAAS,GAAAvnJ,OAAIiyJ,SAAJ,gBAA2B7xJ,QAAQ,SAAC1I,GACzCA,EAAE0I,QAAQ,SAACxK,GACHA,EAAE6G,aAAem1J,WACjBE,QAAUG,WAAalyC,IAAM36G,EAAIvH,SAM7Ci0J,SACSA,iBAEN,OSpBID,CAAYD,SAAUl3J,KAAKosB,WAAW3S,wDAWxCzS,MACL,MzEpBe,YyEoBXA,KACOhH,KAAKosB,WAAWorI,iBAEpBx3J,KAAKosB,WAAWqrI,cAAczwJ,gDAS/BA,MACN,OAAOhH,KAAKosB,WAAL,GAAA9mB,OAAmB0B,KAAnB,8EAGWowJ,SAAS,IAAAM,sBAIvB13J,KAAKosB,WAAW3S,eAFhBstI,eAFuB2Q,sBAEvB3Q,eACAD,eAHuB4Q,sBAGvB5Q,eAEJ,OAAOsQ,UAAYj0J,EAAI4jJ,eAAiBD,6EAGxBoD,UAChB,IAAM99H,SAAWpsB,KAAKosB,WAEtB,OADcA,SAAS8hI,WAAWhE,WAAa99H,SAAS6hI,WAAW/D,0EAIpD5jB,SAAU4jB,UACzB,IAAM99H,SAAWpsB,KAAKosB,WAItB,OAHcA,SAAS8hI,WAAWhE,WAAa99H,SAAS6hI,WAAW/D,WAChD,GAAGzkH,UAAU6mD,OAAOg6C,4DAW9B,IAAAvwE,KACHtoD,MAAQzN,KAAKyN,QAEnB,OAAAkqJ,4BAAA5hG,QzE3Mc,SyE4MAtoD,MAAM9R,IzE5MN,WyE2Mdg8J,4BAAA5hG,KzE9Ja,QyEgKAtoD,MAAM9R,IzEhKN,UyE8Jbo6D,6DAaA,OAAO/1D,KAAKi1J,0EAIZX,sBAAet0J,8CAIfA,KAAKi/I,iBAAiBljJ,MAAMm2B,QAC5BlyB,KAAKosB,WAAW8F,QAChB,IAAM0lI,KAAO53J,KAAK+0J,kBAClB6C,KAAKzhE,KAAO,KACZyhE,KAAK7kJ,QAAU,KACf6kJ,KAAKpgJ,OAAS,mDAxLd,QACIhC,QACI0F,EAAG,KACHpY,EAAG,KACH2vD,OAAQ,KACRg3C,MAAO,KACP8gB,OAAQ,o3DC/EHp+B,wyBAAwBJ,mWAKxBtJ,OAAQiB,cACrB,GAAe,OAAXjB,OACAiB,aAAayH,aACV,GAAI1I,OAAOphF,OAAQ,CAEtB,IAAMw2J,kBAAoBp1E,OAAO72E,OAAO,SAAAxQ,GAAC,OAAIsoF,aAAa54D,KAAK1vB,KAAOkoF,gCAAUzB,oBACzE6B,aAAa54D,KAAK1vB,KAAOkoF,gCAAU5B,qBAEtCm2E,kBAAkBx2J,QAClBqiF,aAAasI,cACbtI,aAAar0E,IAAIwoJ,qBAEjBn0E,aAAa2H,aACb3H,aAAazxD,OAAOwwD,SAVF,IAYdF,QAAYmB,aAAaoH,UAAzBvI,QACF0J,iBAAa3mF,OAAAwyJ,yBAAO,IAAI1oJ,IAAImzE,QAAQ,KAAvBu1E,yBAA+B,IAAI1oJ,IAAImzE,QAAQ,MAC5D2J,iBAAmBxI,aAAa4H,iBAAiBjqF,OACnDkhF,QAAQ,GAAGlhF,SAAW6qF,kBAAoBD,cAAc5qF,SAAW6qF,kBACnExI,aAAayH,aAGjBzH,aAAazxD,OAAOyxD,aAAa4H,kBAErC,OAAOtrF,uDA3BP,MAAO,iOCFf,2EAEasoF,kDAAkByvE,6CAAAC,2CAC1Br0B,wBAAQziD,MACLv4C,OAAM,IAAArjC,OAJM,OAIN,kBACN8gF,YAAa+d,2BAAW5Y,SAHDwsE,6CAAAC,wCAK1Br0B,wBAAQxiD,OACLx4C,QAAQ,IAAArjC,OARI,OAQJ,oBACR8gF,YAAa+d,2BAAW3Y,aAPDusE,6CAAAC,wCAS1Br0B,wBAAQtiD,OACL14C,QAAQ,IAAArjC,OAZI,OAYJ,oBACR8gF,YAAa+d,2BAAWv7F,UAXDovJ,yCAelBC,8CAAuBF,6CAAAG,yBAC/B/zD,2BAAWv7F,OAASu7F,2BAAWzY,QADAqsE,6CAAAG,sBAE/B/zD,2BAAW5Y,MAAQ4Y,2BAAW3Y,WAFC0sE,wNChB7B,IAAMh0E,sDAAkBi0E,6CAAAC,oDCHV,SCAO,gBFKpB/8J,KEJmB,cFKnB6jB,SACI4/E,SAAU,WAJSq5D,6CAAAC,iDCFN,aCAE,gBFEID,6CAAAC,iDAAA,WASvB/8J,KEXmB,cFYnB6jB,SACI4/E,SAAU,WAXSs5D,kDAgBlBC,wBAAsBF,6CAAAG,yBCnBd,UDqBbj9J,KEpBmB,cFqBnB6jB,SACI4/E,SAAU,WAJaq5D,6CAAAG,sBClBV,cD0BjBj9J,KE1BmB,cF2BnB6jB,SACI4/E,SAAU,WAVaq5D,6CAAAG,sBCfb,UD4BI,WAbSA,uBGCtBC,iBACTz3I,KAAM,UACNw1E,MAAO,WACP92D,MAAO,YASEg5H,MAAQ,shBC3Bd,IAAM9wE,iBAAY,SAAZA,UAAayC,SAAUvyE,OAAQ8rE,cAA8B,IAClEC,gBADkD7tE,OAAgB5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAEhE8e,QAAUmnE,SAASnnE,QACnBhc,KAAOgc,QAAQpd,YAAYoB,OAC3BkT,QAAUpE,OAAOoE,QACjB1T,KAAOwc,QAAQxc,OACf8uJ,SAAWtyI,QAAQsyI,WACnBx/F,UAAYw/F,SAAS//I,UAAUxO,OAAO,GAAGC,KAEzCykI,eACAp0H,SAAW2L,QAAQ0vD,IACzB+4D,YAAY7zH,OAASqgJ,6CAAwBrgJ,SAAWA,OACxD6zH,YAAY3oD,YAAcu1E,uBAAuBzgJ,QACjD6zH,YAAYa,aAAetpH,QAAQy1I,cACnC,IAAMx+I,gBAAkBkwE,SAAS5F,SAASC,YAAYinD,YAAY7zH,QAAQhS,YAAY2hF,UACtF,GAAyB,OAArBrtE,QAAQ/F,SACRwvE,gBAAkB,SACf,CACH,IAAMrB,SAAWoB,aAAaL,YAC1B7rE,OAAShR,KAAKoF,OAAO,SAAAxQ,GAAC,OAAqC,IAAjCknF,SAAS92E,KAAKnH,QAAQjJ,EAAE2jB,MAAY/Z,IAAI,SAAA5J,GAAC,OAAIA,EAAEs9J,SAC7E,GDRY,SCQR1xJ,MDiBY,aCjBMA,MDkBP,YClB4B8uD,UAAwB,CAC/D,IAAMjuD,MAAQrM,OAAO4I,KAAK8V,QAAQ/F,cAAgB,GAElDwvE,iBADAnsE,OAAShR,KAAKoF,OAAO,SAAAxQ,GAAC,OAAqC,IAAjCknF,SAAS92E,KAAKnH,QAAQjJ,EAAE2jB,MAAY/Z,IAAI,SAAA5J,GAAC,OAAIA,EAAE21B,SAChD1vB,OAASi0J,SAAS5/I,OAAO,SAAChP,QAE/C,IADA,IAAIiyJ,OAAQ,EACH79J,EAAI,EAAGA,EAAI0c,OAAOnW,SAET,KADds3J,MAAQjyJ,OAAOmB,OAAOkG,eAAiByJ,OAAO1c,GAAG,IAAM4L,OAAOmB,OAAOkG,eAAiByJ,OAAO1c,GAAG,IADjEA,KAMnC,OAAO69J,QAEPhjJ,WAAW,IACV,SDrBO,aCsBL3O,KACP28E,gBAAkBloB,sBAAsB65F,SAAUp7I,QAAQ/F,UACnDqD,OAAOnW,OACdsiF,gBzQg2ByB,SAA/Bi1E,6BAAgC/gJ,MAAOikD,aACzC,IACIt1D,KADAO,UAEE6kI,SAAW/zH,MAAMvC,kBA2BvB,OA1BIwmD,YAAYz6D,OAAQ,WAGpB,IAFA,IAAMqF,OAASo1D,YAAY,GACrBp4C,IAAMhd,OAAOrF,OACVvG,EAAI,EAAGA,EAAI4oB,IAAK5oB,IAAK,CAC1B,IAAM+M,MAAQnB,OAAO5L,GACfmhG,SAAW2vC,SAAS/jI,QAAUrM,OAAO0M,UAAW0jI,SAAS/jI,OAAOoR,KAClEgjF,UACAl1F,OAAOzC,KAAK9I,OAAO0M,OAAO+zF,WAIlCz1F,QAEA,IADA,IAAMk7I,OAAS5lF,YAAY,GAZP4gC,OAAA,SAAAA,OAaX5hG,KACL,IACM+9J,QADO/8F,YAAYhhE,KAEpB4K,QAAQ,SAACozJ,SAAUxe,MACpBue,KAAKnX,OAAOpH,OAASwe,WAEzBtyJ,KAAKlC,KAAKu0J,OANL/9J,IAAI,EAAGA,IAAIghE,YAAYz6D,OAAQvG,KAAK,EAAG4hG,OAAvC5hG,KAbW,IAsBpB0L,QACAO,WAGG,IAAI8Q,MAAMjS,YAAYY,KAAMO,QyQ93BT6xJ,CAA6BtD,UAAWp7I,QAAQ/F,SAAS,IAA7B7O,OAAAyzJ,sCAAoCvhJ,OAAOxS,IAAI,SAAA5J,GAAC,OAAKA,SAEnGqwI,YAAYt3H,SAAW,KACvBwvE,gBAAkB2xE,SAAS5/I,OAAO,kBAAM,IACpCC,WAAW,KAKvB,IAAI2B,6BAA8B,EAE9BqsE,kBAEArsE,4BADeqsE,gBAAgBpoE,YACM9F,MAAM,SAAAra,GAAC,MDb7B,YCaiCA,EAAE4L,QAGtD,IAAMwT,YACFnD,SAAQ,UAAA/R,OAAY+R,UACpB6C,QAASuxH,YACTt3H,SAAmC,OAAzBs3H,YAAYt3H,SAAoB,KAAOwvE,gBACjD1pE,gCACA3C,wDACAM,OAAQ6zH,YAAY7zH,QAGxB09I,SAAS5tE,UAAU/D,gBAAiBnpE,YAAY,ywCC1D7C,IAAMw+I,+BAAb,SAAAC,WACI,SAAAD,iBAAwB,IAAA17D,iBAAA1hB,oKAAAs9E,CAAAl5J,KAAAg5J,gBAAA,QAAA5/F,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MAAA,OACpBuiB,MAAAu9E,0CAAAn5J,MAAAs9F,iBAAA87D,+BAAAJ,iBAAA/9J,KAAAoC,MAAAigG,kBAAAt9F,MAAAsF,OAASsR,WACJ6vE,wBAFe7K,MAD5B,0XAAAy9E,CAAAL,eAAoCh1E,qQAApCs1E,CAAAN,iBAAA38J,IAAA,6BAAAN,MAAA,SAAA8rF,2BAMgCnE,cACxB,OAAOA,aAAa,MAP5BrnF,IAAA,YAAAN,MAAA,SAAA2rF,UAUe6xE,cAAer/I,QAASwpE,cAC/BgE,iBAAU1nF,KAAMu5J,cAAe71E,cAC3BxpE,qBAZZ7d,IAAA,wBAAAN,MAAA,SAAA0uF,sBAgB2Bt2E,UACnB,IAAIqD,OACAoxE,UACE5hF,KAAOhH,KAAKgjB,QAAQpd,YAAYoB,OAkBtC,OAhBiB,OAAbmN,SACAy0E,UAAY,KFfJ,SEgBD5hF,MACPwQ,OAAShc,OAAOgc,OAAOrD,UACvBy0E,UAAY5oF,KAAKgjB,QAAQxc,OAAOoF,OAAO,SAAAxQ,GAAC,OAAiC,IAA7Boc,OAAOnT,QAAQjJ,EAAE21B,SAAe/rB,IAAI,SAAA5J,GAAC,OAAIA,EAAE2jB,MFjB3E,aEkBL/X,KACP4hF,cAEApxE,OAASrD,SAAS,IAEdy0E,UAAY5oF,KAAKgjB,QAAQxc,OAAOoF,OAAO,SAAAxQ,GAAC,OAAkC,IAA9Boc,OAAOnT,QAAQjJ,EAAEs9J,UAAgB1zJ,IAAI,SAAA5J,GAAC,OAAIA,EAAE2jB,MAExFvH,OAAShc,OAAOgc,OAAOrD,UACvBy0E,UAAY5oF,KAAKgjB,QAAQxc,OAAOoF,OAAO,SAAAxQ,GAAC,OAAiC,IAA7Boc,OAAOnT,QAAQjJ,EAAE21B,SAAe/rB,IAAI,SAAA5J,GAAC,OAAIA,EAAE2jB,OAI3FvT,KAAMo9E,UACN/wE,MAAO,SAvCnBxb,IAAA,cAAAN,MAAA,SAAAivF,cA4CQ,OAAO,SA5CfguE,eAAA,2KCC2B,6BCkBZxqE,wBArB0B,SAARA,MAAQrE,UAAQ,OAAI,SAAC6D,SAAU5H,YAC5D,IAAMuC,kBAAoB,SAApBA,kBAA8BphB,MAChC,IAAMpB,MAAQ8Q,0BACR/8D,SACF/F,SAAUg2E,SAASnnE,QAAQw2I,oBAAoBjyF,OAEnD6e,WAAW1gF,QAAQ,SAAAqhF,WAAS,OAAIoD,SAASxB,kBAAkB5B,UAAW7sE,WACtEisD,MAAM73C,mBAGV0/D,SAAS7jF,GAAG,YAAaw+E,mBACRx+E,GAAG,YAAaw+E,mBAChBx+E,GAAG,WAAY,WACZ,IAAMg8D,MAAQ8Q,0BACdmP,WAAW1gF,QAAQ,SAAAqhF,WAAS,OAAIoD,SAASxB,kBAAkB5B,WACvD5yE,SAAU,SAEdgyD,MAAM73C,sBCRf2gE,wBAXD,SAARA,MAAQ9E,UAAQ,OAAI,SAAC6D,SAAU5H,YAQjC4H,SAAS7jF,GAAG,QAPc,SAApBw+E,kBAA8BphB,MAChC,IAAMrtD,SACF/F,SAAUg2E,SAASnnE,QAAQw2I,oBAAoBjyF,OAEnD6e,WAAW1gF,QAAQ,SAAAqhF,WAAS,OAAIoD,SAASxB,kBAAkB5B,UAAW7sE,oMCNvE,IAAMkvE,mCAAeqwE,iCAAAC,4BCLR,OJWoB,SAAP/qF,KAAOwb,UAAQ,OAAI,SAAC6D,SAAU5H,YAC3D,IAEIlsE,QAFA+yE,YACAC,UAEEiB,OAAShX,2BACTn0D,QAAUmnE,SAASnnE,QACnB22I,YAAc32I,QAAQyxE,cAAcmlE,mBACpCtzB,SAAsC,eAA3BtjH,QAAQlN,SAASie,MAAyB,IAAM,IAC3D8lI,UAAY72I,QAAQ85B,OAAOxY,SAAS9Q,QACpCsmI,aAAeD,UAAU9oI,QAAqB,MAAbu1G,SAAmB,EAAI,GAE9Dt4C,SAAS/yF,KAAKkzF,SAAShkF,GAAG,QAAS,WAC/B,IAAMg8D,MAAQ8Q,0BACdgW,UACI/xE,EAAGirD,MAAMjrD,EACTpY,EAAGqjE,MAAMrjE,KAEdqH,GAAG,OAAQ,WACV,IAAMg8D,MAAQ8Q,2BAEdiW,QACIhyE,EAAGirD,MAAMjrD,EACTpY,EAAGqjE,MAAMrjE,IAENoY,EAAIlY,KAAKmK,IAAI,EAAGnK,KAAKkK,IAAIggF,OAAOhyE,EAAGy+I,YAAY13I,QACtDirE,OAAOpqF,EAAIE,KAAKmK,IAAI,EAAGnK,KAAKkK,IAAIggF,OAAOpqF,EAAG62J,YAAYz3I,SAEtDhI,SACI/F,SAAU4lJ,uBACL/2I,QAAQ++C,aAAe83F,UAAUrlI,OAAOy4D,SAASq5C,UAA2B,EAAfwzB,cAC1DD,UAAUrlI,OAAO04D,OAAOo5C,UAA2B,EAAfwzB,eAAmB7tJ,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAIoF,MAGtFyjF,WAAW1gF,QAAQ,SAAAqhF,WAAS,OAAIoD,SAASxB,kBAAkB5B,UAAW7sE,aACvE/P,GAAG,MAAO,WACT,IAAMg8D,MAAQ8Q,2BAEdiW,QACIhyE,EAAGirD,MAAMjrD,EACTpY,EAAGqjE,MAAMrjE,IAENoY,EAAIlY,KAAKmK,IAAI,EAAGnK,KAAKkK,IAAIggF,OAAOhyE,EAAGy+I,YAAY13I,QACtDirE,OAAOpqF,EAAIE,KAAKmK,IAAI,EAAGnK,KAAKkK,IAAIggF,OAAOpqF,EAAG62J,YAAYz3I,SAElDhI,QADA+yE,SAASq5C,YAAcp5C,OAAOo5C,WAE1BnyH,cAIAA,SAAU4lJ,uBACL/2I,QAAQ++C,aAAe83F,UAAUrlI,OAAOy4D,SAASq5C,UAA2B,EAAfwzB,cAC1DD,UAAUrlI,OAAO04D,OAAOo5C,UAA2B,EAAfwzB,eAAmB7tJ,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAIoF,MAI1FyjF,WAAW1gF,QAAQ,SAAAqhF,WAAS,OAAIoD,SAASxB,kBAAkB5B,UAAW7sE,iBG7DlDu/I,iCAAAC,yBCJP,QDMIlrE,yBAFGirE,iCAAAC,yBCFP,QDKIzqE,yBAHGyqE,gNEE5B,IAAMM,qBAAuB,SAAvBA,qBAAwBtsF,QAAS5wB,KAAM4kB,UACzC,IAAIvtD,YAEA0lJ,UAEA/8G,KAFA+8G,UACAvzB,SACAxpF,KADAwpF,SAGAr5C,SAKAvrB,SALAurB,SACAC,OAIAxrB,SAJAwrB,OACA+sE,oBAGAv4F,SAHAu4F,oBACAC,kBAEAx4F,SAFAw4F,kBACA9rH,OACAszB,SADAtzB,OAEE+rH,kBAAoBzsF,QAAQ44D,UAalC,OAVInyH,SADA84E,SAASq5C,YAAcp5C,OAAOo5C,aAEvB6zB,kBAAoBF,qBAAuBC,kBAAoB9rH,QAC1DyrH,UAAUrlI,OAAO0lI,kBAAoB9rH,OAAS6rH,qBACtDJ,UAAUrlI,OAAO0lI,kBAAoB9rH,SAClC+rH,kBAAoB/rH,OAASA,QACxByrH,UAAUrlI,OAAgB,EAAT4Z,QAAayrH,UAAUrlI,OAAOylI,oBAA+B,EAAT7rH,UAErEyrH,UAAUrlI,OAAO2lI,mBAAoBN,UAAUrlI,OAAO2lI,kBAAoBF,sBAE7E,MAAb3zB,UAA8BnyH,SAASkE,UAChClE,y5CC6CI88E,4zBAlEuCP,mWAmBhBhN,aAAcxpE,SAC5C,IAAIgB,EACApY,EACAmf,MACAC,OACEioE,SAAWnqF,KAAKmqF,SAChBnnE,QAAUmnE,SAASnnE,QACnBlN,OAAS9V,KAAK8V,SACdgnC,KAAO95B,QAAQ85B,OAAOxY,SACtB7c,UAAS,GAAAniB,OAAMwQ,OAAOk7E,YAAb,KAAA1rF,OAA4BwQ,OAAO2R,WAE5CjS,OAAS0E,QAAQ/F,SAASg2E,SAASnnE,QAAQ++C,aAC3C83F,UAAY/8G,KAAKtpB,QACjBzC,MAAQvb,QAAUsnC,KAAK61C,cAAcn9E,OAAO,IAAKsnC,KAAK61C,cAAcn9E,OAAO,QAE3E8wH,STjBY,eSiBDtjH,QAAQlN,SAASie,MAAuB,IAAM,IAEzDqmI,kBAAoBjwE,SAASnnE,QAAQyxE,cAAcmlE,mBAAgC,MAAbtzB,STxC9D,SAFD,SS6CPwzB,aAAeD,UAAU9oI,QAAqB,MAAbu1G,SAAmB,EAAI,GACxD+zB,oBAAsBr3I,QAAQorE,oBAAoBO,aAClD2rE,eAAiB5kF,YAAY2kF,oBAAqB,KAAM,GAA5B,GAAA/0J,OAAmCwQ,OAAOk7E,YAA1C,yBTxBhB,eS0Bd7G,SAASnnE,QAAQlN,SAASie,OAC1B7Y,EAAI6V,MAAM,GAAK+oI,cAAgB,EAC/Bh3J,EAAI,EACJmf,MAAQ8O,MAAM,GAAKA,MAAM,IAAM,EAC/B7O,OAASk4I,oBAETl/I,EAAI,EACJpY,EAAIiuB,MAAM,GAAK+oI,cAAgB,EAC/B53I,OAAS6O,MAAM,GAAKA,MAAM,IAAM,EAChC9O,MAAQm4I,mBAKG1kF,YAAY4kF,eTjCf,SSiCwC9kJ,cAAQ0F,IAAGpY,IAAGmf,YAAOC,gBAAWuF,WAC9Eu2B,MAJU,SAAVu8G,QAAoBlkE,KD9BF,SAAnB9C,iBAAmBpJ,UAAQ,OAAI,SAAC6D,SAAU5H,YACnD,IACIlsE,QADA+yE,YAEEC,UACAiB,OAAShX,2BACTn0D,QAAUmnE,SAASnnE,QACnB62I,UAAY72I,QAAQ85B,OAAOxY,SAAS9Q,QACpC8yG,SRdgB,eQcLtjH,QAAQlN,SAASie,MAAuB,IAAM,IAIzD2tC,UACFw4F,kBAJsBl3I,QAAQyxE,cAAcmlE,mBAAgC,MAAbtzB,SRtClD,QAEC,UQyCdl4F,OAHWyrH,UAAU9oI,QAAqB,MAAbu1G,SAAmB,EAAI,IAKpD54D,WAEJsgB,SAAS/yF,KAAKkzF,SAAShkF,GAAG,QAAS,WAC/B,IAAMg8D,MAAQ8Q,0BACdgW,StL6LY,SAAdutE,YAAe/kF,QAAStP,OAC1B,IAAMs0F,mBAAqBhlF,QAAQpJ,wBACnC,OACInxD,EAAGirD,MAAMjrD,EAAIu/I,mBAAmBv/I,EAChCpY,EAAGqjE,MAAMrjE,EAAI23J,mBAAmB33J,GsLjMrB03J,CAAYx6J,KAAMmmE,MAAMqB,aACnCkG,QAAUvH,MAAMuH,UACjBvjE,GAAG,OAAQ,WACV,IAAMg8D,MAAQ8Q,0BACRgjF,oBAAsBvsF,QAAqB,MAAb44D,SRrDvB,QAEC,UQqDd54D,QAAQxyD,GAAKirD,MAAMvlB,GACnB8sB,QAAQ5qE,GAAKqjE,MAAMtlB,GAEnB6gB,SAASu4F,oBAAsBA,oBAC/Bv4F,SAASurB,SAAWA,SACpBvrB,SAASwrB,OAASA,OAClB,IAAM/4E,SAAW6lJ,qBAAqBtsF,SAAWmsF,oBAAWvzB,mBAAY5kE,UAExExnD,SACI/F,SAAUumJ,qCACL13I,QAAQ++C,YAAc5tD,UAE3BwmJ,SAAS,GAEbxwE,SAASxB,kBAAkBvC,WAAW,GAAIlsE,WAC3C/P,GAAG,MAAO,WACT,IAAMg8D,MAAQ8Q,0BACRgjF,oBAAsBvsF,QAAqB,MAAb44D,SRxEvB,QAEC,UQuEd5kE,SAASu4F,oBAAsBA,oBAC/Bv4F,SAASurB,SAAWA,SACpBvrB,SAASwrB,OAASA,OAClB,IAAM/4E,SAAW6lJ,qBAAqB7zF,OAAS0zF,oBAAWvzB,mBAAY5kE,UACtExnD,SACI/F,SAAUumJ,qCACL13I,QAAQ++C,YAAc5tD,UAE3BwmJ,SAAS,EACT7kJ,QACIuoC,YACIi0B,SAAU,OAItB6X,SAASxB,kBAAkBvC,WAAW,GAAIlsE,aC3BtCq5E,CAAiBpJ,SAAjBoJ,CAA2B8C,IAAK,aAI7Bp4C,KAAK,IAAKn7C,GACAm7C,KAAK,IAAK/iC,GACV+iC,KTnEJ,QSmEgBh8B,OACZg8B,KTlEH,SSkEgB/7B,0DA5D9B,MVdoB,qEUsBpB,OACIuF,UAAW,uBACXupE,YTxBe,4BUEd6L,yCAAa,SAAbA,WAAc1S,UACvB,IAAMnnE,QAAUmnE,SAASnnE,QACnB0nD,QAAU,SAAVA,QAAW5/D,IAAK2c,UAAWs7D,QAC7B,IAAMiO,YAAchuE,QAAQlN,SAASk7E,YACrCxb,6BAAcxyD,QAAQ4mE,SACLjsC,UADjB,IAAAr4C,OAC+B0rF,YAD/B,oBAEiBplF,OAAO,SAAAxQ,GAAC,OAAgC,IAA5B0P,IAAIU,KAAKnH,QAAQjJ,EAAE2jB,MAC/B4+B,UAAU,OACV+sB,QAAQjjD,UAAWs7D,SAGxC,OACIwe,KAAM,SAAAA,KAACz2F,KAAqB,IAAhBgL,OAAgB5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAClB8sF,YAAchuE,QAAQlN,SAASk7E,YAChClmF,IAAIu4E,YAAYhiF,QAAWyJ,IAAIy4E,WAAWliF,QAG3CqpE,QAAQ5/D,IAAIy4E,WAAYztE,OAAO2R,WAAP,GAAAniB,OAAuB0rF,YAAvB,qBAAsD,GAC9EtmB,QAAQ5/D,IAAIy4E,WAAYztE,OAAO2R,WAAP,GAAAniB,OAAuB0rF,YAAvB,oBAAqD,GAC7EtmB,QAAQ5/D,IAAIu4E,YAAavtE,OAAO2R,WAAP,GAAAniB,OAAuB0rF,YAAvB,oBAAqD,IAJ9EtmB,QAAQ5/D,IAAIi3E,YAAajsE,OAAO2R,WAAP,GAAAniB,OAAuB0rF,YAAvB,oBAAqD,IAOtF4pE,SAAU,SAAAA,SAAC9vJ,KAAqB,IAAhBgL,OAAgB5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MACtB8sF,YAAchuE,QAAQlN,SAASk7E,YAChClmF,IAAIu4E,YAAYhiF,QAAWyJ,IAAIy4E,WAAWliF,QAG3CqpE,QAAQ5/D,IAAIu4E,YAAavtE,OAAO2R,WAAP,GAAAniB,OAAuB0rF,YAAvB,qBAAsD,GAC/EtmB,QAAQ5/D,IAAIy4E,WAAYztE,OAAO2R,WAAP,GAAAniB,OAAuB0rF,YAAvB,qBAAsD,IAH9EtmB,QAAQ5/D,IAAIi3E,YAAajsE,OAAO2R,WAAP,GAAAniB,OAAuB0rF,YAAvB,qBAAsD,6yCCvB1E6pE,kEACjB,SAAAA,oBAAwB,IAAAv9D,iBAAA1hB,uKAAAk/E,CAAA96J,KAAA66J,mBAAA,QAAAzhG,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MAAA,OACpBuiB,MAAAm/E,6CAAA/6J,MAAAs9F,iBAAA09D,kCAAAH,oBAAA5/J,KAAAoC,MAAAigG,kBAAAt9F,MAAAsF,OAASsR,WACJs5E,YAAc2M,yCAAWjhB,MAAKuO,UACnCvO,MAAKqU,UAAY,WAHGrU,yZADmBmU,0TAWpCrM,aAAcxpE,SAAuB,IAAdgF,QAAchb,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,OAGxC46F,EAFiB9+F,KAAKkwF,YAAYhxE,QAAQ4/E,UAAY9+F,KAAKiwF,YAElDvM,aAAc1jF,wDANvB,MZXmB,uCaCd6vF,oBACT/5E,QACI6jD,aAAc,SAAAA,aAAC32C,QAASjnB,OAAV,OAAoBy+D,eAAex3C,QAAQiiE,YAAelpF,SAE5EyK,QACAu7D,aACAk5F,mBACAxmE,aACI96B,aAAc,SAAAA,aAAC32C,QAASjnB,OACpB,IAAM04F,YAAcj6B,eAAex3C,QAAQ6sG,aAAc9zH,OAKzD,OAJC,UAAW,SAAU,UAAU2J,QAAQ,SAACq9D,OACrC0xB,YAAY1xB,OAAS//D,KAAKkK,IAAIunF,YAAY1xB,OAAS,EAAI0xB,YAAY1xB,OAAS,EAChD,GAAvB0xB,YAAYlxE,SAAwC,GAAxBkxE,YAAYjxE,aAE1CixE,cAGfga,gBACA6mD,YACAvkI,OACI4oC,aAAc,SAAAA,aAAC32C,QAASjnB,OAIpB,OAHAinB,QAAQwQ,QAAQzC,MAAMh1B,OACtBinB,QAAQk4I,oBACRl4I,QAAQvV,QAAQ6uE,OAAO,QAASvgF,OACzBA,QAGfy3B,SACA+0E,cACA96F,SACA0tJ,OACIxhG,aAAc,SAAAA,aAAC32C,QAASjnB,OAAV,OAAoBy+D,eAAex3C,QAAQo4I,WAAcr/J,SAE3EitG,gBACAwC,mBACA1b,aACI77B,aAAc,SAAAA,aAAAT,KAAG,OAAIA,OC/BhB6nG,iBACG,aADHA,eAEC,WAGDC,qBACTp5I,OAAQ,GACRD,MAAO,GACPsB,SAAU6oB,IACV5oB,UAAW4oB,IACXjjB,QAAS,EACT0qE,OAAQ,EACR0hE,OAAQ,GAGCgG,cACT76I,KAAM,GACNq3E,YAAa,SAAAA,YAAChhB,KACV,MbCY,SaDRA,KbES,UaFOA,IbCR,OAKE,WaATmoC,gCACTluB,YAAa,OACbwqE,YAAa,QACbC,YAAa,gBACb55J,WACI65J,QACI/1F,MAAO,YACPg2F,MAAO,cAGf9lE,MACIn1E,MACIq3E,YAAa,QACb91E,MAAO,GACPpgB,UAAW,SAAAA,UAAC2xD,IAAK14D,EAAG0L,KAAMwc,SAAf,OAA2BA,QAAQ8sE,aAAR9sE,CAAsBwwC,OAEhE4mC,MACI3yE,UAAW,cACXvF,OAAQ,GACRD,MAAO,GACPud,MAAO,iBACPx4B,KAAM,YAWL40J,kBAAW,SAAXA,SAAYxhE,MACrB,OAAIA,MAA0B,iBAAVA,KACT79B,uBAAU69B,MACZA,uLC/CN,IAAMyhE,2BAAe,SAAfA,aAAgBroI,OACzB,IAAMsoI,UAAYtoI,MAAM5tB,YAAYoB,OAKpC,OAAS80J,oBAAWtmJ,OAJLge,MAAMqsF,eAIOk8C,MAHdvoI,MAAM1d,SAASqpG,OAAS,EAGH68C,QAFnBzD,gBAAgBuD,aAiDvBG,uCAA2B,SAA3BA,yBAA4BC,gBAAiBC,aAEtD,IAGIC,cAGAC,eAGAC,WAAaJ,gBAAgBA,gBAAgB76J,OAAS,GAGtDouG,YAAczsG,KAAKgY,KAAKkhJ,gBAAgB,GAAKA,gBAAgB,IAG3DK,YAAcv5J,KAAKgY,KAAKshJ,WAAaJ,gBAAgB,IAGnDM,UAAcL,YAAdK,UAGFC,eAAiBN,YAAY/1I,WAG7BgkF,eAAiB+xD,YAAYz6F,SAG7Bg7F,gBAAkBP,YAAY3wD,gBA7BkCmxD,sBAgCfF,eAAe91I,WAAY21I,YAAlE3uD,cAhCsDgvD,sBAgC9Dz6I,OAA8B0rF,aAhCgC+uD,sBAgCvC16I,MAwC/B,OApCK7c,OAAOw3J,UAAUN,cAClBA,WAAeA,WAAY7xH,QAAQ,IAIvCglE,YAAcA,YAAc,EAAI,EAAIA,YAGpC2sD,cAAiBp5J,KAAKiY,IAAIshJ,aAAev5J,KAAKiY,IAAIw0F,cAAiB7B,aAAgB8uD,gBAAgBz6I,OAEnGm6I,eAAiBp5J,KAAKiY,IAAIshJ,aAG1BF,eAAkBr5J,KAAKiY,IAAIshJ,aAAev5J,KAAKiY,IAAIw0F,aAAgB9B,cAEnE0uD,gBAAkBr5J,KAAKiY,IAAIshJ,aAU3BL,gBA/FqB,SAAnBW,iBAAoBC,kBAAmBC,gBAAiBC,iBAAkBd,iBAE5E,IAAIe,iBACAC,cACEZ,WAAaJ,gBAAgBA,gBAAgB76J,OAAS,GACtDu3D,MAAQkkG,kBAAkBK,aAC1BV,eAAiBK,kBAAkBL,eAGnCW,aAAgBJ,iBAAiBpkG,OAAS0jG,WAGhD,GAAIU,iBAAiBpkG,QAAUmkG,gBAAgBnkG,OAC3C,OAAOsjG,gBAGXe,iBAAoBR,eAAe91I,WAAYu1I,gBAAgB,IAAKtjG,OACpE,IAAK,IAAI99D,EAAI,EAAGA,EAAIohK,gBAAgB76J,OAAS,EAAGvG,IAC5CoiK,cAAgBl6J,KAAKsH,MAAO2yJ,iBAAmBG,aAAgBlB,gBAAgBphK,EAAI,IAC/EohK,gBAAgBphK,GAAKoiK,gBACrBhB,gBAAgBr3J,OAAO/J,EAAG,GAC1BA,GAAK,GAETmiK,iBAAoBR,eAAe91I,WAAYu1I,gBAAgBphK,IAAK89D,OAExE,OAAOsjG,gBAsEWW,EACdJ,8BACAU,ad9GW,QcqGXX,WdlGc,WckGOA,UdxHR,QAEC,WciIdt6I,OAAQm6I,eACRp6I,MAAOm6I,gBAEPl6I,OAAQkoF,eAAe5mF,UACvBvB,MAAOmoF,eAAe7mF,UACvB24I,kBAYMmB,kCAAsB,SAAtBA,oBAAuB7nJ,OAAQumJ,MAAOI,aAE/C,IAAImB,eAAiB,EAEfC,eAAiBpB,YAAY/1I,WAJ4Bo3I,sBAK/BrB,YAAYz6F,SAApCn+C,SALuDi6I,sBAKvDj6I,SAAUC,UAL6Cg6I,sBAK7Ch6I,UACVg5I,UAAcL,YAAdK,UACFN,mBACAuB,eAAiBtiG,kCAAqB3lD,OAAO,GAAIA,OAAO,IAGxDkoJ,UAAYH,eAAe52I,WAAWnR,OAAO,GAAGi1B,QAAQ,IAI9DsxH,OADAA,MAAQ/4J,KAAKmD,MAAM41J,QACH,EAAKA,MAAQ,EAAKA,MAI9BuB,edpJW,QcmJXd,WdhJc,WcgJOA,UACJx5J,KAAKsH,MAAMiZ,SAAYm6I,UAAUz7I,OAEjCjf,KAAKsH,MAAMkZ,UAAak6I,UAAUx7I,QAEvD65I,MAAQ/4J,KAAKkK,IAAI6uJ,MAAOuB,gBAGxB,IAAK,IAAIxiK,EAAI,EAAGA,GAAKihK,MAAOjhK,IACxBohK,gBAAgBphK,GAAK2iK,eAAe3iK,EAAIihK,OAE5C,OAAOG,iBAmMEyB,gBAAkB,SAAlBA,gBAAmB32J,KAAM87G,UAAWiB,YAAe,IAAAhuD,KAExDimG,QAGAl5C,UAHAk5C,QACAF,UAEAh5C,UAFAg5C,UACAtoI,MACAsvF,UADAtvF,MAGAhe,OAIAuuG,WAJAvuG,OACAooJ,aAGA75C,WAHA65C,aACAC,UAEA95C,WAFA85C,UACA9B,MACAh4C,WADAg4C,MAEE+B,IAAMtoJ,OAAgB,UAATxO,KAAmB,EAAIwO,OAAOnU,OAAS,GACpDyvB,KAAOirI,MAAe,UAAT/0J,KAAmB,EAAI+0J,MAAM16J,OAAS,GAEzD,OAAA08J,6BAAAhoG,QACK+lG,UAA0B,SAAdA,UAAuBtoI,MAAMwoI,SAAS8B,KAAOtqI,MAAMwqI,iBAAmBxqI,MAAMwoI,SAAS8B,MADtGC,6BAAAhoG,KAAA,QAEW6nG,aAAa52J,OAFxB+2J,6BAAAhoG,KAAA,KAGiB,UAAT/uD,KAAmB,EAAI62J,UAAUx8J,OAAS,GAHlD08J,6BAAAhoG,KAAA,SAIY+nG,IAAKhtI,OAJjBilC,uWC9WiBkoG,sCAOjB,SAAAA,aAAavyI,0KAAcwyI,CAAAl+J,KAAAi+J,cACvBj+J,KAAKu0I,SACLv0I,KAAKm+J,aACLn+J,KAAK+1F,OAAS,KACd/1F,KAAKo+J,WAAa,KAClBp+J,KAAKo7J,OAAS5/J,OAAO0M,UAAWqzJ,cAChCv7J,KAAKm+J,UAAY,KACjBn+J,KAAKq+J,cAAgB3yI,aAAas9E,aAClChpG,KAAKs+J,OAAS5yI,aAAaghC,MAC3B1sD,KAAK0yE,IAAMrd,cACXr1D,KAAK6vH,aAAer0H,OAAO0M,UAAWlI,KAAK4F,YAAY24J,sBACvDv+J,KAAKilF,QAAUzqB,kBAAmBx6D,KAAK4F,YAAYuqF,iBAEnD,IAAM2hB,KAAOpmF,aAAas9E,aAAariF,WAAW,KAClD3mB,KAAKmrG,kBAAqBlpF,MAAoB,EAAb6vF,KAAK7vF,MAAY,EAAGC,OAAQ4vF,KAAK5vF,OAAS,GAE3Eq3C,sBAAsBv5D,KAAM6vF,oBAC5B7vF,KAAKw+J,eAAiBnnF,qCAAsB7B,6BAAc,QAAf,GAAAlwE,OACpCtF,KAAK8V,SAASk7E,YADsB,sBAG3ChxF,KAAK0wI,UAAY,IAAIsoB,+BAAeh5J,MAChCwkF,YAAahpF,OAAO0M,UAAW2gF,4BAAoB41E,sCACnDh6E,SAAU2E,kCACV1D,uBAAwB4C,kDACzBxF,sCAAaoB,sVAIhB,OAAOlkF,KAAK0yE,gDA2CZ,OAAIxuE,UAAO7C,OACArB,KAEJA,KAAK0wI,sDAUZ,MfrFY,yDeyFZ,OAAIxsI,UAAM7C,QACNrB,KAAK0+J,aAALx6J,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK0+J,mDAUZ,OAAIx6J,UAAO7C,QACPrB,KAAK+1F,OAAL7xF,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACAlE,KAAKu3F,SACEv3F,MAEJA,KAAK+1F,+DAWE,IAAAyK,aAIVxgG,KAAK8V,SAFL+/E,KAFU2K,aAEV3K,KACA7E,YAHUwP,aAGVxP,YAIJ,OAFAhxF,KAAKq+J,cAAc99I,SAAS82D,qCAAsB7B,6BAAc,QAAf,GAAAlwE,OAC1C0rF,YAD0C,uBDuF1B,SAAlB2tE,gBAAmB37I,QAAS5D,KAAMvd,WAC3C,IAAMkhE,SACAv8D,KAAOwc,QAAQxc,OACfwiG,aAAehmF,QAAQq7I,cAO7B,OALA73J,KAAKd,QAAQ,SAACmwF,KAAMn0F,OAChB,IAAM3F,MAAQqjB,KAAOy2E,KAAKz2E,MAAQy2E,KADR+oE,sBAEA51D,aAAariF,WAAW9kB,UAAU9F,MAAO2F,MAAO8E,KAAMwc,UAAxEd,OAFkB08I,sBAElB18I,OAAQD,MAFU28I,sBAEV38I,MAChB8gD,MAAMrhE,QAAWwgB,OAAQA,OAAS,EAAGD,MAAOA,MAAQ,KAEjD8gD,MC/FI47F,CAAgB3+J,KAAMw4J,MAAO3iE,KAAKn1E,KAAK7e,yEAU7B,IAAAg9J,kBASb7+J,KAAKy0F,cAPLxyE,MAFa48I,kBAEb58I,MACAC,OAHa28I,kBAGb38I,OACAqB,SAJas7I,kBAIbt7I,SACAC,UALaq7I,kBAKbr7I,UACA2F,QANa01I,kBAMb11I,QACA0qE,OAPagrE,kBAObhrE,OACA0hE,OARasJ,kBAQbtJ,OAGAxhI,MACA/zB,KAAK8V,SADLie,MAIE+qI,WAAuB,EAAV31I,QACb41I,UAAqB,EAATxJ,OACZyJ,UAAqB,EAATnrE,OAElB7zF,KAAKwG,KAAKxG,KAAKi/J,iBAEf,IAAMC,WAAal/J,KAAKm/J,gBAClBC,YAAcF,WAAWh9I,OAAS,EAAIg9I,WAAWh9I,OAAS48I,WAAa,EACvEO,WAAaH,WAAWj9I,MAAQ68I,WAGhCQ,YAAct/J,KAAKu/J,eAAeT,WAAY/qI,OA1BnCyrI,mBDiGQ,SAApBC,kBAAqB3pJ,OAAQ4rD,SAAUl7D,MAChD,IAAIu3F,YAAc,EACdC,WAAa,EACb0hE,eACAz9I,MAAO,EAAGC,OAAQ,GAGlB48I,WAKAp9F,SALAo9F,WACAO,WAIA39F,SAJA29F,WACAC,YAGA59F,SAHA49F,YACAF,YAEA19F,SAFA09F,YACA77I,SACAm+C,SADAn+C,SAGAsyE,KAEA//E,OAFA+/E,KACA9hE,MACAje,OADAie,MAGAqmE,KAEAvE,KAFAuE,KAGEulE,gBADF9pE,KADAn1E,KAEyBq3E,YACvB6nE,cACAC,cACFC,aAAe,EA6EnB,OA5EAR,YAAY55J,QAAQ,SAACq6J,WAAYjlK,GAC7B,IAAMklK,WAAc/9I,MAAO,EAAGC,OAAQ,GAChC+9I,WAAch+I,MAAO,EAAGC,OAAQ,GAChCgiD,MAAQ19D,KAAK1L,Od5QP,Sc8QR6kK,iBd7QS,Uc6QmBA,iBAE5BI,WAAW99I,OAAS68I,WACpBmB,UAAUh+I,OAASiiD,MAAMpjD,KAAO,EAAI9d,KAAKoK,KAAK82D,MAAMpjD,KAAO9d,KAAKg+B,IAAMo5D,KAAKn4E,OAAS68I,WACpFgB,aAAe98J,KAAKmK,IAAI8yJ,UAAUh+I,MAAO69I,cACzCE,UAAU/9I,MAAQ89I,WAAW99I,MAAQ69I,aAGrCC,WAAW79I,OAASlf,KAAKmK,IAAI4yJ,WAAW79I,OAAQk4E,KAAKl4E,QAAU48I,WAC/DmB,UAAU/9I,OAAS69I,WAAW79I,OAC9B89I,UAAU99I,OAAS69I,WAAW79I,SAG9B69I,WAAW99I,MAAQjf,KAAKmK,IAAI4yJ,WAAW99I,MAAOiiD,MAAMpjD,KAAO,EAAI9d,KAAKoK,KAAK82D,MAAMpjD,KAAO9d,KAAKg+B,IACzFo5D,KAAKn4E,OAAS68I,WAChBmB,UAAUh+I,MAAQ89I,WAAW99I,MAC7B+9I,UAAU/9I,MAAQ89I,WAAW99I,MAC7B69I,aAAe98J,KAAKmK,IAAI8yJ,UAAUh+I,MAAO69I,cAGzCC,WAAW79I,QAAU48I,WACrBmB,UAAU/9I,OAASk4E,KAAKl4E,OAAS48I,WACjCkB,UAAU99I,OAAS69I,WAAW79I,OAAS+9I,UAAU/9I,QAGvC,eAAV6R,MACAgqE,YAAc/6F,KAAKmK,IAAI4wF,YAAaiiE,UAAU99I,SAE9C67E,aAAeiiE,UAAU99I,OACzB87E,WAAah7F,KAAKmK,IAAI6wF,WAAYgiE,UAAU/9I,MAAOo9I,aAEvDK,eACIz9I,MAAOjf,KAAKmK,IAAI6yJ,UAAU/9I,MAAOy9I,cAAcz9I,OAC/CC,OAAQlf,KAAKmK,IAAI6yJ,UAAU99I,OAAQw9I,cAAcx9I,SAErD09I,WAAWt7J,KAAK07J,WAChBH,WAAWv7J,KAAK27J,aAEpBL,WAAWl6J,QAAQ,SAACs6J,UAAWllK,GAC3B,GAAc,eAAVi5B,MACAisI,UAAU99I,OAAS67E,YACnB8hE,WAAW/kK,GAAGmnB,MAAQ69I,advTd,ScwTJH,iBdvTK,UcuTuBA,iBAC5BL,YAAYxkK,GAAGonB,OAAS67E,YACxB8hE,WAAW/kK,GAAGonB,OAAS67E,YACvB6hE,WAAW9kK,GAAGmnB,MAAQq9I,YAAYxkK,GAAGmnB,MAAQ69I,eAE7CR,YAAYxkK,GAAGmnB,MAAQ69I,aACvBF,WAAW9kK,GAAGmnB,MAAQ69I,aACtBR,YAAYxkK,GAAGmnB,MAAQ69I,cAE3B9hE,WAAah7F,KAAKmK,IAAI6wF,WAAa4hE,WAAW9kK,GAAGmnB,YAGjD,GADA+9I,UAAU/9I,MAAQjf,KAAKmK,IAAI6wF,WAAYz6E,UdpUhC,QcqUHo8I,iBdlUM,WckUqBA,gBAC3BL,YAAYxkK,GAAGmnB,MAAQ+7E,WACvB6hE,WAAW/kK,GAAGmnB,MAAQ+7E,WACtB8hE,aAAe9hE,eACZ,CACH,IAAMgV,WAAassD,YAAYxkK,GAAGmnB,MAC5Bi+I,cAAiBR,cAAcz9I,MAAQ69I,aAC7CD,WAAW/kK,GAAGmnB,MAAQ69I,aACtBF,WAAW9kK,GAAGmnB,MAAQq9I,YAAYxkK,GAAGmnB,MAAQ69I,aAC7CR,YAAYxkK,GAAGmnB,MAAQjf,KAAKmK,IAAI6lG,WAAYktD,eAC5CliE,WAAah7F,KAAKmK,IAAI6wF,WAAYgiE,UAAU/9I,UAIxD+7E,WAAah7F,KAAKgY,KAAKhY,KAAKmK,IAAI6wF,WAAYqhE,aAAeP,WAC3D/gE,aAAeqhE,YAAcN,YAEpB/gE,YADTA,YAAc/6F,KAAKgY,KAAK+iF,aACFC,sBAAY4hE,sBAAYC,sBAAYH,4BAAeI,2BCzKjEL,CAAkBz/J,KAAK8V,UACzBgpJ,sBAAYO,sBAAYC,wBAAaF,wBAAa77I,kBAAUC,qBAAaxjB,KAAKwG,QAF5Eu3F,YA5BayhE,mBA4BbzhE,YAAaC,WA5BAwhE,mBA4BAxhE,WAAY4hE,WA5BZJ,mBA4BYI,WAAYC,WA5BxBL,mBA4BwBK,WAAYH,cA5BpCF,mBA4BoCE,cAAeI,aA5BnDN,mBA4BmDM,aAiBpE,OAbA9/J,KAAKy0F,aACDxyE,MAAOjf,KAAKmK,IAAI6wF,WAAY/7E,OAAS+8I,UAAYD,UACjD78I,OAAQlf,KAAKmK,IAAI4wF,YAAa77E,QAAU88I,UAAYD,UACpDO,wBACAO,sBACAD,sBACAF,4BACAI,0BACAK,aACIl+I,MAAOjf,KAAKkK,IAAIqW,SAAUvjB,KAAKy0F,cAAcxyE,OAAS+8I,UAAYD,UAClE78I,OAAQk9I,eAGTp/J,2DAYP,OAFAA,KAAKq+J,cAAc99I,SAAS82D,qCAAsB7B,6BAAc,QAAf,GAAAlwE,OACNtF,KAAK8V,SAASk7E,YADR,mBAE1ChxF,KAAKq+J,cAAc13I,WAAW3mB,KAAKm7J,QAAQz6I,KAAO1gB,KAAKm7J,QAAQz6I,KAAO,oDAUpE1B,WAAW,IAAAohJ,mBACsCpgK,KAAKy0F,cAAvD0rE,YADYC,mBACZD,YAAa5K,OADD6K,mBACC7K,OAAQpsI,QADTi3I,mBACSj3I,QAASlH,MADlBm+I,mBACkBn+I,MAAOsB,SADzB68I,mBACyB78I,SADzB88I,cAEiBrgK,KAAK8V,SAAlC0lJ,YAFY6E,cAEZ7E,YAAaC,YAFD4E,cAEC5E,YACrB,OD7CoB,SAAf6E,aAAgBthJ,UAAWm8I,MAAO1mE,YAAa3+E,QACxD,IAAMupJ,WAAar8J,KAAKkK,IAAIunF,YAAYlxE,SAAUkxE,YAAYxyE,OAExDs+I,eAAiB7qF,YAAY12D,UAAW,SAAU,GAAtB,GAAA1Z,OAA6BwQ,OAAOk7E,YAApC,kBACzB9wE,MdhMQ,Qc+LM,GAAA5a,OACE+5J,WADF,OAEdn/I,Md/LS,Sc6LK,GAAA5a,OAEGmvF,YAAYvyE,OAFf,OAGdhC,MAAM,gBAHQ,GAAA5a,OAGYmvF,YAAY8gE,OAHxB,OAAAjwJ,OAGoCwQ,OAAO0lJ,YAH3C,KAAAl2J,OAG0DwQ,OAAO2lJ,cAC/Ev7I,MAAM,aAAci7I,MAAMpjE,uBAAuB1yF,SAClD81J,MAAMpjE,YAAYjiF,OAAOkT,UAAYmyI,MAAMpjE,aACnD,OAAOriB,YAAY6qF,eAAgB,MAAO,GAAxB,GAAAj7J,OAA+BwQ,OAAOk7E,YAAtC,uBACD9wE,MdtMA,QcqMV,GAAA5a,OAC0B+5J,WAD1B,OAEUn/I,MdtMG,YcoMb,GAAA5a,OAE6B+5J,WAF7B,OAGUn/I,MdtMC,ScsMa,QACdA,MAAM,cAAe,GACrBA,MAAM,UALhB,GAAA5a,OAK8BmvF,YAAYtrE,QAL1C,OAMUzI,KAAKy6I,MAAMz6I,MACXR,MAAM,aAAc,UACpB4C,OC4BNw9I,CAAathJ,UAAWhf,KAAKm7J,SAChCj5I,OAAQi+I,YAAYj+I,OACpBD,YACAsB,kBACAgyI,cACApsI,gBACAqyI,wBACAC,yBACDz7J,KAAK8V,kDAWR,IAgBI0qJ,eAhBEr2E,SAAWnqF,KAAKmqF,WADhBs2E,cAOFzgK,KAAK8V,SAJLk7E,YAHEyvE,cAGFzvE,YACAwqE,YAJEiF,cAIFjF,YACAC,YALEgF,cAKFhF,YACAzyI,SANEy3I,cAMFz3I,SANE03I,mBAeF1gK,KAAKy0F,cANLlxE,SATEm9I,mBASFn9I,SACAC,UAVEk9I,mBAUFl9I,UACAvB,MAXEy+I,mBAWFz+I,MACAC,OAZEw+I,mBAYFx+I,OACA2xE,OAbE6sE,mBAaF7sE,OACA0hE,OAdEmL,mBAcFnL,OAEE0F,gBAAkBvlF,YAAYF,6BAAcx1E,KAAK4pF,SAAU,OAAQ,GAAtC,GAAAtkF,OAA6C0rF,YAA7C,gBAEnC,OAAQhoE,UACR,If3PW,Me4PPw3I,eAAc,UAAAl7J,OfzPJ,Ue0PV,MACJ,If7PY,Oe8PRk7J,eAAc,UAAAl7J,Of7PL,Se8PT,MACJ,If9Pc,Se+PVk7J,eAAc,UAAAl7J,OflQP,OemQP,MACJ,QACIk7J,eAAc,UAAAl7J,OfpQN,QekRZ,OAZA21J,gBAAgBvwF,QAAhB,GAAAplE,OAA2B0rF,YAA3B,gBAAA1rF,OAAqDtF,KAAK0yE,MAAO,GACjEuoF,gBAAgB/6I,MAAM,QAAS,QAE/B+6I,gBAAgB/6I,MAAM,QAAtB,GAAA5a,OAAkCtC,KAAKkK,IAAIqW,SAAUtB,OAAkB,EAAT4xE,OAA9D,OACiB3zE,MAAM,SADvB,GAAA5a,OACoCtC,KAAKkK,IAAIsW,UAAWtB,QAAmB,EAAT2xE,OADlE,OAEiB3zE,MAFjB,GAAA5a,OAE0Bk7J,gBAF1B,GAAAl7J,OAE+CuuF,OAF/C,OAGiB3zE,MAAM,SAHvB,GAAA5a,OAGoCiwJ,OAHpC,OAAAjwJ,OAGgDk2J,YAHhD,KAAAl2J,OAG+Dm2J,cAC/Dz7J,KAAKi7J,gBAAgBA,gBAAgBn4I,QAGrC9iB,KAAK2gK,YAAY1F,iBACjB9wE,SAASq/C,mBAAmBxpI,KAAKwG,OAAOxB,IAAI,SAAA5J,GAAC,OAAIA,EAAE2jB,MAC5Ck8I,gFASUz0J,MACjB,IAAMu7D,UAAY/hE,KAAK+hE,YAEvB,MAAa,YADA/hE,KAAKs1J,WAAW//I,UAAUxO,OAAO,GAAGC,sLAE7C45J,IACK7+F,UAAYv7D,KAAKuqB,SAGjBgxC,YAAav7D,KAAKkyJ,iDArPhBhtI,cACX,OAAO,IAAIuyI,aAAavyI,oEAWxB,OAAOwzF,+FAWP,OAAOo8C,2NCjFf,IAAMuF,mBAAiBC,+BAAAC,sBhBeG,cgBblBC,SAAU,SAAAA,SAAAx6J,MAAI,OACVotF,KAAM,GACNmkD,OAAQvxI,OAEZy6J,sBAAuB,SAAAA,sBAACxsE,aAAgB,IAEhCmrE,WAEAnrE,YAFAmrE,WACA39I,MACAwyE,YADAxyE,MAEJ,OACI2xE,KACI3xE,MAAK,GAAA3c,OAAK2c,MAAL,MACLkH,QAAO,GAAA7jB,OAAK,EAAL,OAEXyyI,QACI91H,MAAO,SAAAA,MAAC7mB,EAAGN,GAAJ,SAAAwK,OAAas6J,WAAW9kK,GAAGmnB,MAA3B,OACPkH,QAAO,GAAA7jB,OAAK,EAAL,SAInB47J,kBAAmB,SAAAA,kBAACzsE,aAAgB,IACxBirE,cAA0BjrE,YAA1BirE,cACR,OACIyB,WAF8B1sE,YAAXvyE,OAGnBk/I,UAAW1B,cAAcz9I,MACzBo/I,aACIC,YAAY,EACZC,UAAU,OA7BPT,+BAAAC,mBhBgBC,YgBmBhBC,SAAU,SAAAA,SAAAx6J,MAAI,OACVotF,IAAKptF,KACLuxI,OAAQ,SAAAA,OAAA38I,GAAC,OAAKA,MAElB6lK,sBAAuB,SAAAA,sBAACxsE,YAAa3+E,QAAW,IAExCmM,MACAwyE,YADAxyE,MAEIkH,QAAYrT,OAAZqT,QAER,OACIyqE,KACI3xE,MAAK,GAAA3c,OAAK2c,MAAL,MACLkH,QAAO,GAAA7jB,OAAK6jB,QAAL,OAEX4uH,QACI91H,MAAK,GAAA3c,OAAK2c,MAAL,MACLkH,QAAO,GAAA7jB,OAAK,EAAL,SAInB47J,kBAAmB,SAAAA,kBAACzsE,aAAgB,IACxBirE,cAAyBjrE,YAAzBirE,cAAez9I,MAAUwyE,YAAVxyE,MACvB,OACIk/I,WAAYzB,cAAcx9I,OAC1Bk/I,UAAWn/I,MACXo/I,aACIC,YAAY,EACZC,UAAU,OA/DPR,oBAsEVS,gBAAcV,+BAAAW,mBhB1DP,OgB2DRZ,kBAAiB,UADFC,+BAAAW,gBhBzDN,QgB2DRZ,kBAAiB,UAFHC,+BAAAW,gBhB3DR,MgB8DRZ,kBAAiB,YAHDC,+BAAAW,gBhBxDL,SgB4DRZ,kBAAiB,YAJJY,iBAOdC,cAAYZ,+BAAAa,iBhBjEL,OAcD,OgBmDMb,+BAAAa,chBhEJ,QAUA,SgBsDIb,+BAAAa,chBlEN,MAMG,UgB4DGb,+BAAAa,chB/DH,SAGA,UgB4DGA,eAgBZC,WAASd,+BAAAe,chBjFF,QgBkFPrJ,MhB1EQ,UgByECsI,+BAAAe,WhBhFD,SAOA,QgB2EArJ,QAFCsI,+BAAAe,WhBlFH,OgBqFPrJ,MhB5ES,UgByECsI,+BAAAe,WhB/EA,UAMD,QgB6ECrJ,QAJAqJ,YClDTC,8BAAuB,SAAvBA,qBAAwB9+I,QAAShE,UAAWgyE,YAAaxqF,MAClE,IAAIu7J,UACAC,WACAC,cACAC,aACEztE,YAAczxE,QAAQyxE,cAEpBZ,OAOAY,YAPAZ,OACA0hE,OAMA9gE,YANA8gE,OACA4K,YAKA1rE,YALA0rE,YACAl+I,MAIAwyE,YAJAxyE,MACAC,OAGAuyE,YAHAvyE,OACAqB,SAEAkxE,YAFAlxE,SACAC,UACAixE,YADAjxE,UAGRw+I,WAAa9/I,QAAUi+I,YAAYj+I,OAAS,EAAI2xE,OAAS,EAAI0hE,QAC7DwM,UAAY9/I,OAAkB,EAAT4xE,OAAsB,EAAT0hE,QAElC0M,cAAgBz+I,WAAa28I,YAAYj+I,OAAkB,EAAT2xE,OAAsB,EAAT0hE,QAC/D2M,aAAe3+I,UAAqB,EAATswE,OAAsB,EAAT0hE,QAExC,IAAI4M,WAAazsF,YAAY12D,UAAW,OAAQ,GAApB,GAAA1Z,OAA2B0rF,YAA3B,iBAiB5B,OAhBAmxE,WAAWzsJ,OAAX,IAAApQ,OAAsB0rF,YAAtB,qBAAqD/+D,SAEjDiwI,cAAgBA,aAAeH,YAC/BI,WAAaA,WAAWjiJ,MjB7EX,QiB6EA,GAAA5a,OAA2B48J,aAA3B,OAA6ChiJ,MAAM,aAAc,WAG9E+hJ,eAAiBA,cAAgBD,YACjCG,WAAWjiJ,MjB/EG,SiB+Ed,GAAA5a,OAA4B28J,cAA5B,OAA+C/hJ,MAAM,aAAc,WAGvEiiJ,WAAazsF,YAAYysF,WAAY,OAAQ,GAArB,GAAA78J,OAA4B0rF,YAA5B,sBAEb9wE,MjBtFM,QiBsFjB,GAAA5a,OAA2By8J,UAA3B,OACAI,WAAWjiJ,MjBrFO,SiBqFlB,GAAA5a,OAA4B08J,WAA5B,QAGSI,WA1EoB,SAApBC,kBAAqBrjJ,UAAWxY,KAAM87J,gBAC/C,IAAM7tE,YAAc6tE,eAAe7tE,cAC7B3+E,OAASwsJ,eAAexsJ,SAE1B8pJ,WACAnrE,YADAmrE,WAGA5uE,YAEAl7E,OAFAk7E,YACAhoE,SACAlT,OADAkT,SAEEu5I,YAAcf,eAAex4I,UAC7Bg4I,SAAWuB,YAAYvB,SAASx6J,MAChCk7D,SAAW6gG,YAAYtB,sBAAsBxsE,YAAa3+E,QAE1DqgF,KAAOzgB,YAAY12D,UAAW,MAAOgiJ,SAASptE,IAA5B,GAAAtuF,OAAoC0rF,YAApC,gBACxBmF,KAAKj2E,MjB7Ba,SiB6BC,SAAC9kB,EAAGN,GAAJ,SAAAwK,OAAas6J,WAAW9kK,GAAGonB,OAA3B,QACnBi0E,KAAKj2E,MjBhCY,QiBgCCwhD,SAASkyB,IAAI3xE,OAC/Bk0E,KAAKj2E,MAAM,UAAWwhD,SAASkyB,IAAIzqE,SAEnC,IAAMpW,QAAU2iE,YAAYygB,KAAM,MAAO6qE,SAASjpB,OAAvB,GAAAzyI,OAAkC0rF,YAAlC,oBAI3B,OAHAj+E,QAAQmN,MjBpCS,QiBoCIwhD,SAASq2E,OAAO91H,OACrClP,QAAQmN,MAAM,UAAWwhD,SAASq2E,OAAO5uH,SAElCpW,QAkDYsvJ,CAAkBF,WAAY37J,KAAMwc,WAW9Cw/I,4BAAqB,SAArBA,mBAAsBx/I,QAAShE,WAAc,IAAAyjJ,gBAIlDz/I,QAAQlN,SAFRk7E,YAFkDyxE,gBAElDzxE,YAGE2uE,gBALgD8C,gBAGlD5sE,KAEyBn1E,KAAKq3E,YAE5Bz6B,MAAQskG,UAAUjC,iBAClB+C,aAAehtF,YAAY12D,UAAW,MAAO,SAAC5jB,EAAGN,GAAJ,OAAUwiE,MAAMt4D,IAAI,SAAAhI,GAAC,OAAKA,EAAG5B,EAAE4B,GAAI5B,EAAEokC,MAAOpkC,EAAE0lB,KAC7F1lB,EAAEW,MAAOinB,QAAQ++C,YAAajnE,MADF,GAAAwK,OACU0rF,YADV,sBAG1B2xE,WAAajB,aAAa/B,iBAGhC,OADA+C,aAAah4F,QAAQi4F,YAAY,IACxBD,4BASAE,wBAAiB,SAAjBA,eAAkB/sE,KAAMgtE,YAAaC,eAAgB9/I,SAAY,IAAA+/I,qBAMtE//I,QAAQyxE,cAJRtrE,QAFsE45I,qBAEtE55I,QACAm2I,YAHsEyD,qBAGtEzD,YACAO,WAJsEkD,qBAItElD,WACAC,aALsEiD,qBAKtEjD,aAEEzwI,KAAOyzI,eAA4B,GAAV35I,QAAc,EAE7C,OAAI0sE,KAAK,KAAO2iE,MACZ,GAAAlzJ,OAAUg6J,YAAYzpE,KAAK,IAAIgtE,aAA/B,MAEJ,GAAAv9J,OAA0B,UAAhBu9J,aAA4BC,eAAgCjD,WAAWhqE,KAAK,IAAIgtE,aAAexzI,KAAlDywI,aAAvD,OA+ESkD,oBAAa,SAAbA,WAAc5oE,KAAMp7E,UAAWklD,MAAOlhD,SAAY,IAEvDguE,YAMAhuE,QANAguE,YACAmwE,WAKAn+I,QALAm+I,WACAC,UAIAp+I,QAJAo+I,UACAtB,aAGA98I,QAHA88I,aACA32I,QAEAnG,QAFAmG,QACAqW,MACAxc,QADAwc,MAEEzQ,IAAM2mD,YAAY12D,UAAW,MAAO,SAAArhB,GAAC,OAAKA,IAAzB,GAAA2H,OAAgC0rF,YAAhC,qBACtB/yC,KjBhOgB,QiBgOJ6hH,cACZ7hH,KjB/NiB,SiB+NJkjH,YACbjhJ,MjBlOgB,QiB+NL,GAAA5a,OAGKw6J,aAHL,OAIX5/I,MjBjOiB,SiB6NN,GAAA5a,OAIM67J,WAJN,OjBjMI,SiBuMZ/mE,KAxEY,SAAdsgC,YAAwBt/H,EAAGupB,KAAMs+I,YAAahhJ,MAAOC,QACvD,IAAMy4G,aAAeh2G,KAEf7D,KAAO1lB,EAAE,IAAM4H,KAAKkK,IAAI+U,MAAOC,QAAUlf,KAAKg+B,GAC9Cs1D,MAAQl7F,EAAE,IAAM6nK,YAEtB,GAAI3sE,iBAAiBphB,QACjBohB,MAAMnW,KAAK,SAACy6C,KAER,OADAx/H,EAAEk7F,MAAQskC,IACHF,YAAYt/H,EAAGupB,YAEvB,IAAI2xE,iBAAiBukC,QAAS,CACjC,IAAIC,SAAWxkC,MAAMtwB,WAAU,GAE/B,GAAwC,QAApC80D,SAASC,SAAS35H,cAAyB,CAC3C,IAAM45H,IAAMF,SAASE,KAAOF,SAASG,MACrCH,SAAWv8G,SAAS2Q,gBAAgB,6BAA8B,UACzD5E,aAAa,OAAQ0wG,KAIlC,OAFqBxlD,6BAAcslD,UACtB78E,KAAK,YAAlB,SAAA34C,OAAwCwb,KAAO,IAA/C,MACO00D,6BAAcmlD,aAAa73G,OAAOuH,YAAYywG,WAErD,IAAIK,QADD,GAAqB,iBAAV7kC,MAOd,OAFI6kC,QAxCM,SAAZC,UAAa74G,KACf,SAAI,0CAA0CzP,KAAKyP,MAAQ,UAAUzP,KAAKyP,MAAQA,IAAIlhB,OAAS,GAoCvF+5H,CAAU9kC,OACAA,MAEAslE,kBAAStlE,OAAOx1E,KAAKA,KAArB86I,GAEPlmF,YAAYilD,aAAc,OAAQ,SAAAn0H,MAAI,OAAKA,QAAOy3C,KAAK,IAAKk9E,SAGvE,OADA//H,EAAE,GAAK,SACAs/H,YAAYt/H,EAAGupB,KAAM,UA0CxB+1G,CAAYx2D,MADEwR,YAAY3mD,IAAK,KAAMm1C,MAAM,IAAlB,GAAA5+D,OAA0B0rF,YAA1B,iBACC9sB,MAAM,GAAK,SAAW,SAAUk9F,UAAWD,YACpDljH,KAAK,YADtB,aAAA34C,OACgDw6J,aAAe,EAAI32I,QADnE,KAAA7jB,OAC8E67J,WAAa,EAD3F,MAEiBljH,KAAK,OAAQimB,MAAM,IAAM1kC,OAE1Ck2C,YAAY3mD,IjB7MA,QiB6MYm1C,MAAM,IAAnB,GAAA5+D,OAA2B0rF,YAA3B,iBACM/yC,KAAK,IAAK,GACVA,KAAK,IAAK,GACVA,KjB9OJ,QiB8OgB6hH,cACZ7hH,KjB7OH,SiB6OgBkjH,YACbljH,KAAK,OAAQimB,MAAM,IAAM1kC,i+ECrO7B0jI,0wBAAuBjF,mVAiCpC,IAAMzqI,MAAQxzB,KAAKwzB,QADN2vI,cAE0BtH,2BAAaroI,OAA5CsoI,UAFKqH,cAELrH,UAAWtmJ,OAFN2tJ,cAEM3tJ,OAAQwmJ,QAFdmH,cAEcnH,QACvBE,gBAAkBkH,kCAAI,IAAIh0J,IAAIoG,SAC5B3N,MAAQ7H,KAAKs1J,WAAW5rJ,gBAAgBhD,OAAO,GAJxC28J,cAKax7J,MAAMd,SAAxBC,KALKq8J,cAKLr8J,KAAMuH,QALD80J,cAKC90J,QA6Bd,OA3BA2tJ,gBAAkBA,gBAAgBl3J,IAAI,SAAC84J,IAAKhjK,GAAM,IAAAi7D,KAC1Ch6D,MAAQ,EACRg1B,MAAQ,EACN2nI,OAASwD,gBAAgBphK,GAC/B,GAAIkM,OAASw0F,yBAAUv8F,QAAS,CAG5B8xB,OAFAh1B,QAAUmgK,gBAAgBphK,IAAI2vC,QAAQ,IACtByxH,gBAAgBphK,EAAI,IAAMohK,gBAAgBphK,EAAI,IAAMiB,OAC5C0uC,QAAQ,QAC7B,CACH,IAAImoE,UAAY8lD,OACZnqJ,UAAYumD,gCAAiBj2D,WAC7B+zG,UAAY/xC,4BAAeq7F,gBAAgBphK,GAAI+M,MAAMqhI,iCAEzDntI,MAAQ62G,UACR7hF,OAAS6hF,WAEb,OAAA0wD,+BAAAvtG,QACK+lG,UAAYtoI,MAAMwoI,SAAS8B,MADhCwF,+BAAAvtG,KAAA,QAEIh6D,OAFJunK,+BAAAvtG,KAAA,KAGQj7D,GAHRwoK,+BAAAvtG,KAAA,QAIIhlC,OAJJuyI,+BAAAvtG,KAAA,SAKI2iG,QALJ3iG,OAODnqD,OAAO,SAAAxQ,GAAC,OAAgB,OAAZA,EAAEW,QAEjBmgK,gBlBxCY,SkBwCMJ,UAAqBI,gBAAgBjwJ,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAEu+J,WAAan5J,EAAEm5J,aACjFI,wDAYN,IAAM/xE,SAAWnqF,KAAKmqF,WAChB3jF,KAAOxG,KAAKwG,OACVwqF,YAAgBhxF,KAAK8V,SAArBk7E,YACFiqE,gBAAkBsI,oBAAAC,+BAAAN,eAAAtmK,WAAA,SAAAoD,MAAA/E,KAAA+E,KAAaA,KAAK4pF,SAElCw4E,WAAeN,8BAAqB9hK,KAAMi7J,gBAAiBjqE,YAAaxqF,MAAxE47J,WAMR,ODuJ0B,SAArBqB,mBAAsBzgJ,QAAShE,WACxC,IAAMgqF,aAAehmF,QAAQq7I,cADyB9uD,iBAKlDvsF,QAAQlN,SAFL+/E,KAH+C0Z,iBAG/C1Z,KACA7E,YAJ+Cue,iBAI/Cve,YAJ+C0yE,sBASlD1gJ,QAAQyxE,cAFRqrE,aAPkD4D,sBAOlD5D,aACA32I,QARkDu6I,sBAQlDv6I,QARkDw6I,WAe9C9tE,KAAKuE,KAJEgnE,UAXuCuC,WAW9C1hJ,MACQk/I,WAZsCwC,WAY9CzhJ,OACAsd,MAb8CmkI,WAa9CnkI,MACA/X,UAd8Ck8I,WAc9Cl8I,UAGFk4I,gBAAkB9pE,KAAKn1E,KAAKq3E,YAC5Bl2F,UAAYg0F,KAAKn1E,KAAK7e,UAE5BmnG,aAAa3lF,uBAAsB,GACnCkzD,WAAWv3D,WACPiD,MAAO,SAAAA,MAAA7mB,GAAC,OAAIwnK,wBAAexnK,EjBhRd,SiBgRwB,EAAO4nB,UAC5Cd,OAAQ,SAAAA,OAAA9mB,GAAC,OAAIwnK,wBAAexnK,EjB/Qd,UiB+QyB,EAAO4nB,UAC9C4gJ,ajBzPc,SiB0Pdz6I,QAAO,GAAA7jB,OAAK6jB,QAAL,QAGX6/E,aAAazoF,SAASyC,QAAQw7I,gBAC9B,IAAMviG,QAAUj9C,UAAUxY,OAC1BwY,UAAUgT,KAAK,SAAU52B,EAAGN,GACpBM,EAAE,KAAOo9J,MACThjF,6BAAcx1E,MAAM0gB,KAAK7e,UAAUzG,EAAE,GAAIN,EAAGmhE,QAASj5C,UACpC9C,MADjB,WAAA5a,OjBrQS,UiBsQyBq6J,gBjBvQ1B,OACC,SiBsQqE,QAG9EnqF,6BAAcx1E,MAAM0qE,QAApB,GAAAplE,OAA+B0rF,YAA/B,KAAA1rF,OAA8CmiB,YAAa,GAC3D+tD,6BAAcx1E,MAAM0qE,QAApB,GAAAplE,OAA+B0rF,YAA/B,KAAA1rF,OAA8CmiB,UAA9C,KAAAniB,OAA2DxK,IAAK,GAChEkoK,oBAAW,SAAUxtF,6BAAcx1E,MAAO5E,GACtC41F,wBACAowE,oBAEAD,sBACArB,0BACA32I,gBACAqW,iBCxMRikI,CAAmBzjK,KADMwiK,4BAAmBxiK,KAAMoiK,YAA1CM,cAERzH,gBAAgBt9G,UAAU,OAAOz9B,MAAM,QlB5E3B,QkB6EZiqE,SAAS3B,yBACT2B,SAASq/C,mBAAmBxpI,KAAKwG,OAAOxB,IAAI,SAAA5J,GAAC,OAAIA,EAAE2jB,MAC5Ck8I,wDA9EIvvI,cACX,OAAO,IAAIw3I,eAAex3I,kDAW1B,MlBGgB,iCmB9BXm4I,kBAAoB,SAApBA,kBAAqBr9J,MAC9B,MAA6B,iBAAlBA,KAAK,GAAGzK,MACRyK,KAAKyE,OAAO,SAAC64J,YAAaC,cAAd,OACd/gK,KAAKkK,IAAI62J,aAAahoK,MAAO+nK,YAAY,IAAK9gK,KAAKmK,IAAI42J,aAAahoK,MAAO+nK,YAAY,OACnF1+J,OAAO4+J,UAAW5+J,OAAO6+J,YAE/Bz9J,KAAKxB,IAAI,SAAAhI,GAAC,OAAIA,EAAEjB,SAgErB+lK,qCAAuB,SAAvBA,qBAAwB9iJ,UAAWgyE,YAAaxqF,MAClD,IAAMgP,OAASquJ,kBAAkBr9J,MAC3By0J,gBAAkBvlF,YAAY12D,UAAW,OAAQ,GAApB,GAAA1Z,OAA2B0rF,YAA3B,iBAC7BkzE,cAAgBxuF,YAAYulF,gBAAiB,OAAQ,GAA1B,GAAA31J,OAAiC0rF,YAAjC,cAC3BmzE,eAAiBzuF,YAAYwuF,cAAe,KAAM,GAAtB,GAAA5+J,OAA6B0rF,YAA7B,oBAIlC,OACIiqE,gCACAkJ,8BACAD,4BACAE,eAjE0B,SAArBC,mBAAsBrlJ,UAAWxY,KAAMgP,QAChD,IAAM4sH,KAAO1sD,YAAY12D,UAAW,QAAS,IACvColJ,eAAiB1uF,YAAY0sD,KAAM,kBAAmB,IAC/CnkF,KAAK,KAAM,mBACXA,KAAK,KAAM,MACXA,KAAK,KAAM,MAKxB,OAHAy3B,YAAY0uF,eAAgB,OAAQ59J,KAAM,iBACzBy3C,KAAK,SAAU,SAAA7iD,GAAC,SAAAkK,OAA+B,KAAvBlK,EAAEW,MAAQyZ,OAAO,KAAaA,OAAO,GAAKA,OAAO,KAAO,EAAhE,OAChByoC,KAAK,aAAc,SAAA7iD,GAAC,OAAIA,EAAEokC,QACpC4kI,eAgDgBC,CAAmBH,cAAe19J,KAAMgP,QAQ3D8uJ,WAPe5uF,YAAYyuF,eAAgB,QAAS,GAA1B,GAAA7+J,OAAiC0rF,YAAjC,qBAmBrBsiB,2BAAa,SAAbA,WAActwF,QAAShE,UAAWkD,OAAQD,OACnD,IAAM66B,KAAO95B,QAAQ85B,OAErBA,KAAKuzG,kBAAkBpuI,MAAOC,QAC9B46B,KAAKy6C,OAAOv4E,UAAU8D,QACtBg6B,KAAKxY,SAASizD,m+ECpGGgtE,0wBAAuBtG,iUAiCpC,OAAI/5J,UAAK7C,QACLrB,KAAKgxG,MAAL9sG,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKgxG,4DAWZ,IAAIkrD,mBACE1oI,MAAQxzB,KAAKwzB,QAFN2vI,cAGiCtH,2BAAaroI,OAAnDsoI,UAHKqH,cAGLrH,UAAWtmJ,OAHN2tJ,cAGM3tJ,OAAQumJ,MAHdoH,cAGcpH,MAAOC,QAHrBmH,cAGqBnH,QAG5BG,aACF/1I,WAAYpmB,KAAKgpG,eACjBtnC,SAAU1hE,KAAKy0F,cACf+nE,UAAWx8J,KAAK8V,SAASkT,SACzBwiF,gBAAiBxrG,KAAKwrG,mBAoB1B,OAjBIuwD,iBAAiBx2J,OACbiQ,OAAO,GAAKumJ,MAAM,KAClBG,gBAAgB,GAAK1mJ,OAAO,IAEhC0mJ,mBAAe52J,OAAAk/J,kCAAOtI,iBAAPsI,kCAA2BzI,QACtCvmJ,OAAOA,OAAOnU,OAAS,GAAK06J,MAAMA,MAAM16J,OAAS,IACjD66J,gBAAgB53J,KAAKkR,OAAO,IAGhC0mJ,gBAAkBsI,kCAAI,IAAIp1J,IAAI8sJ,kBAAkBjwJ,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAIoF,IAEnEu5J,gBAAkBD,uCAAyBC,gBAAiBC,cAE5DD,gBAAkBmB,kCAAoB7nJ,OAAQumJ,MAAQ,EAAGI,cAE7DD,gBAAkBsI,kCAAI,IAAIp1J,IAAI8sJ,kBAAkBjwJ,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAIoF,KAE5CqC,IAAI,SAAC84J,IAAKhjK,GAAM,IAAAi7D,KAC7Bh6D,MAAQmgK,gBAAgBphK,GAC9B,OAAA2pK,+BAAA1uG,QACK+lG,UpBnDG,SoBmDSA,UAAqBtoI,MAAMwoI,SAAS8B,KAAOtqI,MAAMwqI,iBACxDxqI,MAAMwoI,SAASh5J,KAAKsH,MAAMwzJ,OAFpC2G,+BAAA1uG,KAAA,SAGYh6D,MAAM0uC,QAAQ,IAH1Bg6H,+BAAA1uG,KAAA,KAIQj7D,GAJRi7D,OAMDnqD,OAAO,SAAAxQ,GAAC,OAAgB,OAAZA,EAAEW,8DAWL+iK,YACZ9+J,KAAK8V,QACD+/E,MACIn1E,MACIq3E,YAAa/3F,KAAK8V,SAASkT,aAIvC,IAAM8zB,KDnEY,SAAbm0D,WAAcjuF,SACvB,IAAMxc,KAAOwc,QAAQxc,OACbutB,MAAU/Q,QAAQlN,SAAlBie,MACFy2H,SAAWxnI,QAAQs7I,OAAO9T,SAC1Bka,QAAU,IAAIxwD,8BAChBn1F,GAAE,UAAAzZ,OAAY0d,QAAQ0vD,KACtBqlB,YAAahkE,QAAUsnI,enB5BV,QACC,SmB4Bdn7I,MAAO8C,QAAQw7I,eACf3xH,MAAM,EACN47D,cAAc,EACdxrD,WAAYz2C,KAAKxB,IAAI,SAAA5J,GAAC,OAAIA,EAAEW,QAC5BqsG,eAAe,EACfC,QACIC,SAAU,QAEbU,aAAchmF,QAAQq7I,gBAI3B,OAFAqG,QAAQlvJ,OAAOquJ,kBAAkBr9J,OACjCk+J,QAAQ3zI,OAAO,EAAG,KACX,IAAIy5H,UAAWlmH,OAAOogI,SAAS5uJ,QAClC+9E,QAAU1jE,KAAM,EAAGusB,OAAQ,EAAGzzB,IAAK,EAAGsH,MAAO,KC+ChC0gF,CAAWjxG,MAClB2kK,UAAY7nH,KAAKm3G,kBACjBlxF,OAAU9gD,MAAO0iJ,UAAU1iJ,MAAQ68I,WAAY58I,OAAQyiJ,UAAUziJ,OAAS48I,YAC1E8F,iBAAmB9nH,KAAKxY,SAAS9uB,SAASnU,OAC1Ci+J,YAAc,IAAI/5J,MAAMq/J,kBAAkBlrJ,KAAKqpD,OAGrD,OADA/iE,KAAK88C,KAAKA,MACHwiH,0EAUP,OACI3wE,aAAc3uF,KAAK6kK,4DAYvB,IAAM16E,SAAWnqF,KAAKmqF,WAChB8wE,gBAAkB6J,oBAAAC,+BAAAR,eAAA3nK,WAAA,SAAAoD,MAAA/E,KAAA+E,KAAaA,KAAK4pF,SAM1C,ODhCsB,SAAjBo7E,eAAkBhiJ,QAAShE,WACpC,IAAIgjJ,WACAD,UAF8CxyD,iBAO9CvsF,QAAQlN,SAHRie,MAJ8Cw7E,iBAI9Cx7E,MACAi9D,YAL8Cue,iBAK9Cve,YACA6E,KAN8C0Z,iBAM9C1Z,KAEErvF,KAAOwc,QAAQxc,OAR6By+J,sBAgB9CnD,qCAAqB9iJ,UAAWgyE,YAAaxqF,MAL7Cy0J,gBAX8CgK,sBAW9ChK,gBACAiJ,cAZ8Ce,sBAY9Cf,cACAC,eAb8Cc,sBAa9Cd,eACAC,eAd8Ca,sBAc9Cb,eACAE,WAf8CW,sBAe9CX,WAEEtvD,SAAWhyF,QAAQ85B,OAAOxY,SAASipE,oBAAoBC,eAjBXu1D,qBA4B9C//I,QAAQyxE,cATRtrE,QAnB8C45I,qBAmB9C55I,QACA0qE,OApB8CkvE,qBAoB9ClvE,OACA0hE,OArB8CwN,qBAqB9CxN,OACA4K,YAtB8C4C,qBAsB9C5C,YACAT,cAvB8CqD,qBAuB9CrD,cACAl8I,UAxB8Cu/I,qBAwB9Cv/I,UACAD,SAzB8Cw/I,qBAyB9Cx/I,SACArB,OA1B8C6gJ,qBA0B9C7gJ,OACAD,MA3B8C8gJ,qBA2B9C9gJ,MAEE23I,sBAENoI,WAAah/J,KAAKsH,MAAMtH,KAAKkK,IAAIgV,OAAQsB,YAAc28I,YAAYj+I,OAAS,EAAI2xE,OAAS,EAAI0hE,SAC7FwM,UAAY/+J,KAAKsH,MAAMtH,KAAKkK,IAAI+U,MAAOsB,WAAsB,EAATswE,OAAsB,EAAT0hE,SAE7DxhI,QAAUsnI,kBACVzB,mBAAmB13I,OAAS2zE,KAAKuE,KAAKl4E,OACtC03I,mBAAmB33I,MAAQ8/I,UAAY,EAAI54I,QAAU6rF,SAAS/yF,MAAQ,EACtEmiJ,eAAenmH,KAAK,KAAM,QAAQA,KAAK,KAAM,MAC7CkmH,eAAelmH,KAAK,YAApB,cAAA34C,OAA+C0vG,SAAS/yF,MAAQ,EAAhE,QACAqxF,2BAAWtwF,QAASi4I,gBAAiB+G,WAAansE,KAAKuE,KAAKl4E,OAASiH,QAAS44I,UAAY,EAAI54I,QAAU,GAExGotD,WAAW0kF,iBACP/4I,OAAM,GAAA5c,OAAKo6J,cAAcx9I,OAASqzI,OAASpsI,QAArC,MACNlH,MAAK,GAAA3c,OAAKtC,KAAKkK,IAAI+U,MAAOsB,UAArB,MACL4F,QAAO,GAAA7jB,OAAK6jB,QAAL,QAGXm7I,WAAWrmH,KAAK,SAAU27G,mBAAmB13I,QAC7CoiJ,WAAWrmH,KAAK,QAAS27G,mBAAmB33I,MAAQ+yF,SAAS/yF,MAAQ,KAErE23I,mBAAmB13I,OAAS8/I,WAAa,EAAI74I,QAAU6rF,SAAS9yF,OAAS,EACzE03I,mBAAmB33I,MAAQ4zE,KAAKuE,KAAKn4E,MACrCmiJ,eAAenmH,KAAK,KAAM,MAAMA,KAAK,KAAM,QAC3CkmH,eAAelmH,KAAK,YAApB,eAAA34C,OAAgD0vG,SAAS9yF,OAAS,EAAlE,MACAoxF,2BAAWtwF,QAASi4I,gBAAiB+G,WAAa,EAAI74I,QAAU,EAAG44I,UAAYlsE,KAAKuE,KAAKn4E,MAAkB,EAAVkH,SAEjGotD,WAAW0kF,iBACP/4I,OAAM,GAAA5c,OAAKtC,KAAKkK,IAAIgV,OAAQsB,WAAtB,MACNvB,MAAK,GAAA3c,OAAKie,SAAL,MACL4F,QAAO,GAAA7jB,OAAK6jB,QAAL,QAEXm7I,WAAWrmH,KAAK,SAAU27G,mBAAmB13I,OAAS8yF,SAAS9yF,OAAS,GACxEoiJ,WAAWrmH,KAAK,QAAS27G,mBAAmB33I,QAIhDs0D,WAAW2tF,eACPhiJ,OAAM,GAAA5c,OAAKs0J,mBAAmB13I,OAAxB,MACND,MAAK,GAAA3c,OAAKs0J,mBAAmB33I,MAAxB,QAITs0D,WAAW+tF,YACP5qJ,KAAM,0BAEVwqJ,cAAcjmH,KAAK,SAAU27G,mBAAmB13I,QAChDgiJ,cAAcjmH,KAAK,QAAS27G,mBAAmB33I,OAE/Ce,QAAQyxE,aACJmlE,wCAEJ52I,QAAQ6hJ,mBAAqBX,cCrDzBc,CAAehlK,KAAMi7J,iBACrBA,gBAAgBt9G,UAAU,OAAOz9B,MAAM,QpB5H3B,QoB6HZiqE,SAAS3B,yBACT2B,SAASq/C,mBAAmBxpI,KAAKwG,OAAOxB,IAAI,SAAA5J,GAAC,OAAIA,EAAE2jB,MAC5Ck8I,gFASUz0J,MACjB,QAASxG,KAAK+hE,cAAev7D,KAAKzK,gDA7IvB2vB,cACX,OAAO,IAAI64I,eAAe74I,kDAW1B,MpBhBgB,+7EqBGHw5I,8tBAAmBjH,mUAiChC,IAAIJ,aACErqI,MAAQxzB,KAAKwzB,QAFN2vI,cAGiCtH,2BAAaroI,OAAnDsoI,UAHKqH,cAGLrH,UAAWtmJ,OAHN2tJ,cAGM3tJ,OAAQumJ,MAHdoH,cAGcpH,MAAOC,QAHrBmH,cAGqBnH,QAE1Bn6J,UAAc7B,KAAK8V,SAAnBjU,UACF+7J,cACFj4F,MAAO,KAAMg2F,MAAO,MAIlBQ,aACF/1I,WAAYpmB,KAAKgpG,eACjBtnC,SAAU1hE,KAAKy0F,cACf+nE,UAAWx8J,KAAK8V,SAASkT,SACzBwiF,gBAAiBxrG,KAAKwrG,mBA+B1B,GA5BIuwD,iBAAiBx2J,OACbiQ,OAAO,GAAKumJ,MAAM,KAClB6B,aAAaj4F,OAAQ,GAAArgE,OAAIzD,UAAU65J,OAAO/1F,MAArB,KAAArgE,OAA8By2J,MAAM,MAE7D8B,aAASv4J,OAAA6/J,8BAAOtH,WAAPsH,8BAAqBpJ,QAC1BvmJ,OAAOA,OAAOnU,OAAS,GAAK06J,MAAMA,MAAM16J,OAAS,KACjDu8J,aAAajC,OAAQ,GAAAr2J,OAAIzD,UAAU65J,OAAOC,MAArB,KAAAr2J,OAA8By2J,MAAMA,MAAM16J,OAAS,OAG5Ew8J,UAAYR,kCAAoB7nJ,OAAQumJ,MAAOI,aAInD0B,WADAA,UAAYsH,8BAAI,IAAI/1J,IAAIyuJ,YAAY5xJ,KAAK,SAAC1O,EAAGoF,GAAJ,OAAUpF,EAAIoF,KACjCqC,IAAI,SAAC84J,IAAKhjK,GAAM,IAAAi7D,KAC9Bh6D,MAAQ,KAMZ,OALIjB,EAAI+iK,UAAUx8J,OAAS,EACvBtF,MAAK,GAAAuJ,OAAOw4J,IAAIrzH,QAAQ,GAAnB,OAAAnlC,QAA8Bu4J,UAAU/iK,EAAI,GAAG2vC,QAAQ,IAChC,IAArBozH,UAAUx8J,SACjBtF,MAAQ+hK,IAAIrzH,QAAQ,IAExB26H,2BAAArvG,QACK+lG,UrBnDG,SqBmDSA,UAAqBtoI,MAAMwoI,SAAS8B,KAAOtqI,MAAMwqI,iBAAmBxqI,MAAMwoI,SAAS8B,MADpGsH,2BAAArvG,KAAA,QAEIh6D,OAFJqpK,2BAAArvG,KAAA,KAGQj7D,EAAI,GAHZsqK,2BAAArvG,KAAA,SAIY+nG,IAAKD,UAAU/iK,EAAI,KAJ/Bi7D,OAMDnqD,OAAO,SAAAxQ,GAAC,OAAgB,OAAZA,EAAEW,QAEb6hK,aAAaj4F,MAAO,CACpB,IAAM0/F,YAAc1H,gBrB7DX,SqB6DoCnqI,YAAOwoI,gBAASF,sBACvDtmJ,cAAQumJ,YAAO6B,4BACrBC,WAAawH,aAAJ//J,OAAA6/J,8BAAoBtH,YAEjC,GAAID,aAAajC,MAAO,CACpB,IAAM2J,YAAc3H,gBrBnEX,SqBmEoCnqI,YAAOwoI,gBAASF,sBAC3DtmJ,cAAQumJ,YAAO6B,0BAAcC,sBAC/BA,aAASv4J,OAAA6/J,8BAAOtH,YAAWyH,cAG/B,OAAOzH,gEAWKiB,WAAY/qI,OAQxB,OAPA/zB,KAAK8V,QACD+/E,MACIn1E,MACIq3E,YAAa/3F,KAAK8V,SAASkT,aAIvCu8I,gBAAAC,2BAAAN,WAAAtoK,WAAA,iBAAAoD,MAAA/E,KAAA+E,KAA4B8+J,WAAY/qI,mDAUxC,MrBvGY,+CqBkHZ,IAAMo2D,SAAWnqF,KAAKmqF,WADhBooB,cAE4BvyG,KAAK8V,SAA/Bk7E,YAFFuhB,cAEEvhB,YAAahoE,SAFfupF,cAEevpF,SACfxiB,KLrDU,SAAXi/J,SAAWj/J,MAAI,IAAAuvD,KAAA,OAAA+qG,+BAAA/qG,QhBzER,OgB0ERvvD,KAAK6R,WADWyoJ,+BAAA/qG,KhBxEP,QgB0ERvvD,KAAK6R,WAFUyoJ,+BAAA/qG,KhB1ET,MgB6ERvvD,MAHiBs6J,+BAAA/qG,KhBvEN,SgB2ERvvD,MAJcuvD,KKqDP0vG,CAASzlK,KAAKwG,QAAQwiB,UAE7BiyI,gBAAkBsK,gBAAAC,2BAAAN,WAAAtoK,WAAA,SAAAoD,MAAA/E,KAAA+E,KAAaA,KAAK4pF,SAGlCw4E,WAAeN,8BAAqB9hK,KAAMi7J,gBAAiBjqE,YAAaxqF,MAAxE47J,WAOR,OJqJsB,SAAjBsD,eAAkB1iJ,QAAShE,WACpC,IAAMgqF,aAAehmF,QAAQq7I,cADqBxuD,iBAM/C7sF,QAAQlN,SAHT+/E,KAHgDga,iBAGhDha,KACA7sE,SAJgD6mF,iBAIhD7mF,SACAgoE,YALgD6e,iBAKhD7e,YALgD20E,sBAW/C3iJ,QAAQyxE,cAHTirE,cARgDiG,sBAQhDjG,cACAI,aATgD6F,sBAShD7F,aACA32I,QAVgDw8I,sBAUhDx8I,QAVgDy8I,YAgB/C/vE,KAAKuE,KAHLn4E,MAb+C2jJ,YAa/C3jJ,MACAC,OAd+C0jJ,YAc/C1jJ,OACAsd,MAf+ComI,YAe/CpmI,MAGC39B,UACDg0F,KAAKn1E,KADJ7e,UAGJmnG,aAAa3lF,uBAAsB,GArBe,IAAAwiJ,sBAsBHrE,eAAex4I,UAAUk4I,mBACpExB,4BAAex9I,cAAQD,cADnBk/I,WAtB0C0E,sBAsB1C1E,WAAYC,UAtB8ByE,sBAsB9BzE,UAAWC,YAtBmBwE,sBAsBnBxE,YAI/B9qF,WAAWv3D,WACPiD,MAAO,SAAAA,MAAA7mB,GAAC,OAAIwnK,wBAAexnK,EjB9Ud,QiB8UwBimK,YAAYC,WAAYt+I,UAC7Dd,OAAQ,SAAAA,OAAA9mB,GAAC,OAAIwnK,wBAAexnK,EjB7Ud,SiB6UyBimK,YAAYE,SAAUv+I,UAC7D4gJ,aAAc,SACdz6I,QAAO,GAAA7jB,OAAK6jB,QAAL,QAGX6/E,aAAazoF,SAASyC,QAAQw7I,gBAC9B,IAAMviG,QAAUj9C,UAAUxY,OAC1BwY,UAAUgT,KAAK,SAAU52B,EAAGN,GACpBM,EAAE,KAAOo9J,MACThjF,6BAAcx1E,MAAM0gB,KAAK7e,UAAUzG,EAAE,GAAIN,EAAGmhE,QAASj5C,UAErDggJ,oBjB5TQ,OiB4TSxtF,6BAAcx1E,MAAO5E,GAClC41F,wBACAowE,oBACAD,sBACArB,0BACAtgI,gBIrMRkmI,CAAe1lK,KAFUwiK,4BAAmBxiK,KAAMoiK,YAA1CM,cAGRzH,gBAAgBt9G,UAAU,OAAOz9B,MAAM,QrBvI3B,QqBwIZiqE,SAAS3B,yBACT2B,SAASq/C,mBAAmBxpI,KAAKwG,OAAOxB,IAAI,SAAA5J,GAAC,OAAIA,EAAE2jB,MAC5Ck8I,gFAUUz0J,MAEjB,OAAA4+J,8BADkBplK,KAAK+hE,YAENv7D,KAAKuqB,+CAlJXrF,cACX,OAAO,IAAIw5I,WAAWx5I,kDAWtB,MrB1BY,sMsBZb,IAaMo6I,QAAU,UACVC,OAAS,SACTC,OAAS,SAiBTC,iCACT,SACA,SAGSC,iBAAeC,yBAAAC,oBAAA,GAAA9gK,OARL,UAQK,KACT,EADS,KAAAA,OAlCP,SAmCgB49J,gCADTiD,yBAAAC,iBAAA,GAAA9gK,OARL,UAQK,KAET,EAFS,KAAAA,OAhCR,QAkCgB49J,gCAFRiD,yBAAAC,iBAAA,GAAA9gK,OARL,UAQK,KAGT,EAHS,KAAAA,OAjCP,SAoCgB49J,gCAHTiD,yBAAAC,iBAAA,GAAA9gK,OARL,UAQK,KAIT,EAJS,KAAAA,OAlCP,SAsCiB49J,gCAJViD,yBAAAC,iBAAA,GAAA9gK,OARL,UAQK,KAKT,EALS,KAAAA,OAjCP,SAsCiB49J,gCALViD,yBAAAC,iBAAA,GAAA9gK,OARL,UAQK,KAMT,EANS,KAAAA,OAhCR,QAsCiB49J,gCANTiD,yBAAAC,iBAAA,GAAA9gK,OATN,SASM,KAOV,EAPU,KAAAA,OAhCR,QAuCgB49J,gCAPRiD,yBAAAC,iBAAA,GAAA9gK,OATN,SASM,KAQV,EARU,KAAAA,OAhCR,QAwCe49J,gCARPiD,yBAAAC,iBAAA,GAAA9gK,OATN,SASM,KASV,EATU,KAAAA,OAjCP,SA0CgB49J,gCATTiD,yBAAAC,iBAAA,GAAA9gK,OATN,SASM,KAUV,EAVU,KAAAA,OAlCP,SA4Ce4/J,wBAVRiB,yBAAAC,iBAAA,GAAA9gK,OATN,SASM,KAWV,EAXU,KAAAA,OAlCP,SA6CgBi/J,gCAXT6B,kBAcfzgE,mBAAO,OACPC,oBAAQ,QACRH,qBAAS,SACTC,kBAAM,MAQN2gE,kBAAoB,WACpBC,gBAAkB,+tCC/CxB,IAAMC,gBAAQ,SAARA,QAAQ,QAAAntG,KAAAl1D,UAAA7C,OAAIgzI,KAAJ,IAAA9uI,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAIg7E,KAAJh7E,MAAAn1D,UAAAm1D,MAAA,OAAAmtG,oBAAiBvyB,cAAjBwyB,4BAAiCpyB,KAAKrvI,IAAI,SAAAkyJ,UAAQ,OAAI,IAAIxiB,0BAAewiB,eAqCvF,SAASlsF,eAAM07F,SAKlB,IAJA,IAAIC,SAAW,GACTC,MAAK1iK,UAAA7C,QAAA,IAAA6C,UAAA7C,OAAA,EACPvG,EAAI,EAEDA,EAAI8rK,QAAS9rK,EAChB6rK,UAAYD,QAAQ5rK,IAAUA,EAAlB,KAAAoJ,UAAA7C,QAAkBvG,EAAlB,OAAAoC,EAAAgH,UAAkBpJ,EAAlB,IAEhB6rK,UAAYD,QAAQ5rK,GAEpB,IAAM+rK,KAAOtoJ,SAASuoJ,yBAChB3nJ,QAAUZ,SAASyJ,cAAc,OAEvC6+I,KAAKx8I,YAAYlL,SACjBA,QAAQQ,UAAYgnJ,SA3CxB,SAASI,cAAejkJ,MACpB,GAAIA,KAAKkkJ,WAAaC,KAAKC,aAE3B,IAA6E,IAAzEjB,gCAAgC5hK,QAAQye,KAAKqkJ,QAAQ/lK,eACrD0hB,KAAKgF,WAAW5O,YAAY4J,UACzB,KAAAw1D,2BAAA,EAAAC,mBAAA,EAAAC,oBAAAt7E,EAAA,IACH,QAAAu7E,MAAAC,UAAwB51D,KAAKskJ,WAA7BvrK,OAAA8J,cAAA2yE,2BAAAG,MAAAC,UAAAnuE,QAAAC,MAAA8tE,2BAAA,EACIyuF,cADqCtuF,MAAA18E,OADtC,MAAA68E,KAAAL,mBAAA,EAAAC,eAAAI,IAAA,YAAAN,2BAAA,MAAAI,UAAA,QAAAA,UAAA,oBAAAH,kBAAA,MAAAC,kBAwCPuuF,CAAc5nJ,SAhBsB,IAiB5BQ,UAAcR,QAAdQ,UAER,OAAO,kBAAMA,2SC3EjB,iCAiBM0nJ,4BAAiB,SAAjBA,eAAkBC,SAAUC,WAAYC,KAC1CF,SAAS5hK,QAAQ,SAAC+hK,QACCA,OAAOvoF,cAAcwoF,YAAYzoB,iBAAiBljJ,MAC1Di2B,KAAK,SAAA27B,MAAI,OAAI45G,WAAW55G,KAAKloB,UAAU0kD,cAC9Cq9E,KAAOA,IAAIC,QAEOA,OAAOE,WAEf1qF,2BAA2B9gC,aAAYG,gBAbtC,SAAbsrH,WAAcH,OAAQvpK,IAAT,OAAgB,WACXupK,OAAOvoF,cAAcwoF,YAAYzoB,iBAAiBljJ,MAC1Di2B,KAAK,SAAA27B,MAAI,OAAIzvD,GAAGyvD,KAAKloB,UAAU0kD,eAYnCy9E,CAAWH,OAAQF,gBAIzBM,gBAAkB,SAAlBA,gBAAmB7kJ,QAAShc,KAAM8gK,OAAQ7vF,MAC3Bj1D,QAAQ+kJ,uBAEhBriK,QAAQ,SAAC+hK,QACCA,OAAOvoF,cAAcwoF,YAE7Bt7I,WAAW47I,wBAAwBhhK,KAAMixE,MAChDwvF,OAAOt9E,WAAW29E,QAAQ7vF,SAwVrBgwF,YAAqB,eAvU9B,SAAAC,yKAAeC,CAAAnoK,KAAAkoK,aACXloK,KAAK+nK,yTAWW,QAAA3uG,KAAAl1D,UAAA7C,OAAZqwI,WAAY,IAAAnsI,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAZq4E,WAAYr4E,MAAAn1D,UAAAm1D,MAEhB,OADAr5D,KAAK+nK,uBAAyBr2B,WACvB1xI,6EAsCc4X,QAErB,OADAiwJ,gBAAgB7nK,KAAM,kBAAmB,0BAA2B4X,QAC7D5X,qFAuC6B,QAAAo2E,MAAAlyE,UAAA7C,OAAT4iF,QAAS,IAAA1+E,MAAA6wE,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAT4N,QAAS5N,OAAAnyE,UAAAmyE,OAEpC,OADAwxF,gBAAgB7nK,KAAM,qBAAsB,6BAA8BikF,SACnEjkF,2FAiCqBgF,KAM5B,OALAqiK,4BAAernK,KAAK+nK,uBAAwB,SAAC59E,UACzCA,SAAS1E,+BAA+BzgF,MACzC,SAACyiK,QACAA,OAAOt9E,WAAW1E,+BAA+BzgF,OAE9ChF,6FAqBsBgF,KAO7B,OANAqiK,4BAAernK,KAAK+nK,uBAAwB,SAAC59E,UACzCA,SAASi+E,gCAAgCpjK,MAC1C,SAACyiK,QACAA,OAAOt9E,WAAWi+E,gCAAgCpjK,OAG/ChF,2DA+BKgF,KAMZ,OALAqiK,4BAAernK,KAAK+nK,uBAAwB,SAAC59E,UACzCA,SAAS7E,eAAetgF,MACzB,SAACyiK,QACAA,OAAOt9E,WAAW7E,eAAetgF,OAE9BhF,uEAyB0B,QAAAkhE,MAAAh9D,UAAA7C,OAAbyhF,YAAa,IAAAv9E,MAAA27D,OAAAE,MAAA,EAAAA,MAAAF,MAAAE,QAAb0hB,YAAa1hB,OAAAl9D,UAAAk9D,OAEjC,OADAymG,gBAAgB7nK,KAAM,cAAe,sBAAuB8iF,aACrD9iF,uEAgBmB,QAAAk9E,MAAAh5E,UAAA7C,OAANkwJ,KAAM,IAAAhsJ,MAAA23E,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAANo0E,KAAMp0E,OAAAj5E,UAAAi5E,OAM1B,OALAkqF,4BAAernK,KAAK+nK,uBAAwB,SAAC59E,UACzConE,KAAK7rJ,QAAQ,SAAA8tD,KAAG,OAAI22B,SAASk+E,oBAAoB70G,IAAI,GAAIA,IAAI,OAC9D,SAACi0G,QACAlW,KAAK7rJ,QAAQ,SAAA8tD,KAAG,OAAIi0G,OAAOt9E,WAAWk+E,oBAAoB70G,IAAI,GAAIA,IAAI,QAEnExzD,yEAgBoB,QAAAw+E,MAAAt6E,UAAA7C,OAANkwJ,KAAM,IAAAhsJ,MAAAi5E,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAN8yE,KAAM9yE,OAAAv6E,UAAAu6E,OAM3B,OALA4oF,4BAAernK,KAAK+nK,uBAAwB,SAAC59E,UACzConE,KAAK7rJ,QAAQ,SAAA8tD,KAAG,OAAI22B,SAASm+E,qBAAqB90G,IAAI,GAAIA,IAAI,OAC/D,SAACi0G,QACAlW,KAAK7rJ,QAAQ,SAAA8tD,KAAG,OAAIi0G,OAAOt9E,WAAWm+E,qBAAqB90G,IAAI,GAAIA,IAAI,QAEpExzD,iFA6C4B,IAAbuoK,OAAarkK,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAC7BskK,sBAAwBxoK,KAAK+nK,uBAC7BU,aAAejuG,eAAeA,kBAnXtB,SAAhBgrC,cAAiBgjE,uBACnB,IAAME,QAAUF,sBAAsBxjK,IAAI,SAAA8xJ,MAAI,OAAIA,KAAKnnC,UACvD,OACIvpC,YACIuiF,IAAK,SAAA3iK,EAAC4iK,oBACF,IAAMC,kBAAoBD,mBAAmBt8B,aAC7C,OAAOu8B,oBAA4D,IAAxCH,QAAQrkK,QAAQwkK,sBA6WIrjE,CAAcgjE,wBAAyBD,QAM9F,OAJAC,sBAAsB9iK,QAAQ,SAAC+hK,QAC3BA,OAAOt9E,WAAW2+E,uBAAuBL,gBAGtCzoK,yBCzXF+oK,cACT//I,SAAU,MACV+K,MAAO,OACP5K,QAAS,EACT1B,UAAS,GAAAniB,OH6Bc,OG7Bd,qBAGA0jK,kBACThgJ,SAAU,MACV+K,MAAO,OACP5K,QAAS,GACT8/I,SAAU,EACVxhJ,UAAS,GAAAniB,OHqBc,OGrBd,wBAGA4jK,gBACTzhJ,UAAS,GAAAniB,OHiBc,OGjBd,+pCCgBN,IAAMipH,4BAAY46C,oCAAAC,iBJ7BL,QI+BZrtK,MAAO,KACPmY,MACI2qE,UAAW,cACXC,aAAc,WALDqqF,oCAAAC,cJ5BF,WIqCfrtK,MAAO,KACPmY,MACI2qE,UAAW,cACXC,aAAc,WAZDqqF,oCAAAC,cJ1BJ,SI0CbrtK,MAAO,KACPmY,MACI2qE,UAAW,cACXC,aAAc,SACdnlB,aAAc,SAAAA,aAAC7jD,QACX,MAAsB,iBAAXA,QAAwBA,OAK5BA,QAHCjO,MAAOiO,YAvBNqzJ,oCAAAC,cJzBJ,SIwDbrtK,MAAO,KACPmY,MACI2qE,UAAW,cACXC,aAAc,SACdnlB,aAAc,SAAAA,aAAC7jD,QACX,MAAsB,iBAAXA,QAAwBA,OAK5BA,QAHCjO,MAAOiO,YAtCNqzJ,oCAAAC,cJxBL,QIsEZrtK,MAAO,KACPmY,MACI2qE,UAAW,cACXC,aAAc,SACdnlB,aAAc,SAAAA,aAAC7jD,QACX,MAAsB,iBAAXA,QAAwBA,OAK5BA,QAHCjO,MAAOiO,YArDNqzJ,oCAAAC,cJvBH,UIoFdrtK,SACAmY,MACI2qE,UAAW,cACXC,aAAc,WAhEDqqF,oCAAAC,cJtBH,UI2FdrtK,SACAmY,MACI2qE,UAAW,cACXC,aAAc,WAxEDqqF,oCAAAC,cJrBA,aIiGjBrtK,MAAO,KACPmY,MACI2qE,UAAW,cACXC,aAAc,YA/EDsqF,eAoFZC,eAAaF,oCAAAG,kBJ3FL,SI6FbvtK,OAAQ,KAAM,MACdmY,MACIyqE,qBAAqB,EACrBE,UAAW,SAAAA,UAAA9oB,MAAA,IAAAgB,MAAAwyG,4BAAAxzG,KAAA,GAAEyzG,KAAFzyG,MAAA,GAAQ0yG,KAAR1yG,MAAA,SAAkC,mBAATyyG,MAAuC,WAAhBE,qBAAOD,OAClE9vG,aAAc,SAAAA,aAAAkyD,OAA0B,IAAAmhC,MAAAuc,4BAAA19C,MAAA,GAAxBsvC,MAAwBnO,MAAA,GAAjB2c,YAAiB3c,MAAA,GAChChxJ,EAAIm/J,MACa,iBAAVA,OAAuBA,QAC9Bn/J,EAAI,SAAAA,IAAA,OAAMm/J,QAEd,IAAMyO,UAAYpvG,kBAAmBuuG,cACrC,OAAQ/sK,EAAGw+D,eAAeovG,UAAWD,kBAZ3BR,oCAAAG,eJ1FD,YI2GjBvtK,OAAQ,KAAM,MACdmY,MACIyqE,qBAAqB,EACrBE,UAAW,SAAAA,UAAAmqD,OAAA,IAAAC,MAAAsgC,4BAAAvgC,MAAA,GAAEwgC,KAAFvgC,MAAA,GAAQwgC,KAARxgC,MAAA,SAAkC,mBAATugC,MAAuC,WAAhBE,qBAAOD,OAClE9vG,aAAc,SAAAA,aAAAwvE,OAAgC,IAAAC,MAAAmgC,4BAAApgC,MAAA,GAA9B0gC,SAA8BzgC,MAAA,GAApB0gC,eAAoB1gC,MAAA,GACtC2gC,IAAMF,SACc,iBAAbA,UAA0BA,WACjCE,IAAM,SAAAA,MAAA,OAAMF,WAEhB,IAAMD,UAAYpvG,kBAAmBwuG,kBACrC,OAAQe,IAAKvvG,eAAeovG,UAAWE,qBA3B7BR,uTCtHLU,2BACjB,SAAAA,gBAAa3uK,KAAM0xF,WAAYthE,oKAAMw+I,CAAAjqK,KAAAgqK,iBACjChqK,KAAKgsB,MAAQP,KACbzrB,KAAKkqK,WACDhoJ,OAAQ6qE,WAAW7qE,OACnBD,MAAO8qE,WAAW9qE,MAClBgH,IAAK,KACLkH,KAAM,MAEVnwB,KAAKmqK,UAAY,KACjBnqK,KAAKoqK,WAAa,KAClBpqK,KAAKqqK,WAAa,KAClBrqK,KAAKw3F,QAAU,KACfx3F,KAAK24F,UAAY,KACjB34F,KAAKsqK,eAAiBjvK,KACtB2E,KAAKuqK,WAAa,wUAIlB,MAAM,IAAI5gK,MAAM,8FAIhB,MAAM,IAAIA,MAAM,oEAGdivD,OAIF,OAHIA,QACA54D,KAAKsqK,eAAiB1xG,OAEnB54D,KAAKsqK,qDAGR1xG,OAIJ,OAHIA,QACA54D,KAAKw3F,QAAU5+B,OAEZ54D,KAAKw3F,kDAGN5+B,OAIN,OAHIA,QACA54D,KAAK24F,UAAY//B,OAEd54D,KAAK24F,sDAGL//B,OAIP,OAHIA,QACA54D,KAAKqqK,WAAazxG,OAEf54D,KAAKqqK,uDAGLzxG,OAIP,OAHIA,QACA54D,KAAKoqK,WAAaxxG,OAEf54D,KAAKoqK,qDAGNxxG,OAIN,OAHIA,QACA54D,KAAKmqK,UAAYvxG,OAEd54D,KAAKmqK,oDAGNvxG,OAIN,OAHIA,OACAp9D,OAAO0M,OAAOlI,KAAKkqK,UAAWtxG,OAE3B54D,KAAKkqK,sDAGLtxG,OAIP,OAHIA,QACA54D,KAAKuqK,WAAa3xG,OAEf54D,KAAKuqK,+CAIZ,MAAM,IAAI5gK,MAAM,+EAIhB,OAAO3J,qyCC1DAwqK,8vBA3BcR,4UAErB,OACI/nJ,MAAOjiB,KAAKm+F,WAAWl8E,MACvBC,OAAQliB,KAAKm+F,WAAWj8E,kEAIdk8D,MAOd,OANAp+E,KAAKm+F,UAAWl1E,IAAKm1D,KAAKt7E,EAAGqtB,KAAMiuD,KAAKljE,IACxClb,KAAKyqK,eACDxoJ,MAAOm8D,KAAKn8D,MACZC,OAAQk8D,KAAKl8D,QAEjBliB,KAAK0qK,SAAStsF,KAAKssF,UACZ1qK,yCAIP,IAAKA,KAAK2qK,UACN,MAAM,IAAIhhK,MAAJ,yBAAArE,OAAmCtF,KAAK4qK,gBAGlD,OADA5qK,KAAK2qK,UAAU/gF,MAAMrrE,SAASkB,eAAezf,KAAK0qK,WAC3C1qK,2BCzBFk/G,6BACTluB,YAAa,OACbvC,aACI5I,WAAY,cAEhBglF,WAAY,SACZC,WACIC,UAAW,GACXC,MAAO,EACPzJ,UACIxtI,MAAO,SAEXutI,YACIvtI,MAAO,WAGfk3I,QACIjiJ,SAAU,QACVwW,OACI6zD,MAAM,EACNlqE,QAAS,EACT0qE,OAAQ,EACR0hE,OAAQ,EACRrzI,OAAQ,GACRD,MAAO,IAEXq0E,OACIjD,MAAM,EACNlqE,QAAS,EACT0qE,OAAQ,EACR0hE,OAAQ,EACRrzI,OAAQ,GACRD,MAAO,IAEXnB,MACIuyE,MAAM,EACNlqE,QAAS,EACT0qE,OAAQ,EACR0hE,OAAQ,EACRrzI,OAAQ,GACRD,MAAO,KAGf6wI,aAAa,EACbpuI,SAAU,IACVwmJ,UAAW,IACX/uB,OACIhmD,MACIg1E,cAAe,GAEnBp4J,SACIk2J,SAAU,EACVmC,cAAe,SACfD,cAAe,IAGvB5V,QACIr1I,MAAO,QACPsf,MAAO,UACPvd,MAAO,EACPopJ,UAAU,EACV/tH,QAAS,GAEbqwG,aACI5wE,UAAU,GAEduuF,iBACAr/J,SCjEEs/J,cAAgB,IAChBC,eAAiB,IACjBC,mBAAkB,GAAAnmK,OAAM45G,4BAAeluB,YAArB,+BAClB06E,YAAW,GAAApmK,OAAM45G,4BAAeluB,YAArB,4TCLI26E,2BACjB,SAAAA,gBAAa71J,sKAAQ81J,CAAA5rK,KAAA2rK,iBACjB3rK,KAAK6rK,MAAQ/1J,OAAOg2J,MAAQ,KAC5B9rK,KAAK+rK,KAAOj2J,OAAOk2J,KAAO,KAC1BhsK,KAAKisK,aAAsC,IAAvBn2J,OAAOo2J,YAAoB,EAAIp2J,OAAOo2J,aAAe,EACzElsK,KAAKmsK,WAAar2J,OAAOs2J,YAAa,EACtCpsK,KAAKqsK,OAASv2J,OAAOw2J,UACrBtsK,KAAKusK,iBAAmB,EACxBvsK,KAAKwsK,gBAAkB,6SAGrBV,OAIF,OAHIA,QACA9rK,KAAK6rK,MAAQC,OAEV9rK,KAAK6rK,kDAGLO,YAIP,OAHIA,aACApsK,KAAKmsK,WAAaC,YAEfpsK,KAAKmsK,2CAGXH,MAID,OAHIA,OACAhsK,KAAK+rK,KAAOC,MAEThsK,KAAK+rK,qDAGHG,cAIT,OAHIA,eACAlsK,KAAKisK,aAAeC,cAEjBlsK,KAAKisK,iDAGTK,QAIH,OAHIA,SACAtsK,KAAKqsK,OAASC,QAEXtsK,KAAKqsK,+DAGCI,kBAIb,OAHIA,mBACAzsK,KAAKusK,iBAAmBE,kBAErBzsK,KAAKusK,uEAGAG,iBAIZ,OAHIA,kBACA1sK,KAAKwsK,gBAAkBE,iBAEpB1sK,KAAKwsK,uCCvCb,IAAMG,UAAa,WACtB,IAAIC,KAAO,EACX,OAAO,oBAAAtnK,OAASomK,YAAT,KAAApmK,SAA0BsnK,OAFX,GAKnB,SAASC,YAAa/pJ,MACzB,IAAIgqJ,eAAiB,EACrB,GAA0B,MAAtBhqJ,KAAKiqJ,aACLD,eAmBD,SAASE,gCAAiClqJ,MAC7C,IAAIgqJ,eAAiB1nK,OAAO6nK,iBAO5B,OANAnqJ,KAAKlF,WAAWlY,QAAQ,SAAC2+D,OACrB,IAAMtkE,EAAI8sK,YAAYxoG,OAClBtkE,EAAI+sK,iBACJA,eAAiB/sK,KAGlB+sK,eA3BcE,CAAgClqJ,WAC9C,GAA0B,MAAtBA,KAAKiqJ,aACZjqJ,KAAKlF,WAAWlY,QAAQ,SAAC2+D,OACrByoG,gBAAkBD,YAAYxoG,cAE/B,GAAIvhD,KAAKjL,QAAQi0J,QAAUhpJ,KAAKjL,QAAQi0J,OAAO7X,gBAAiB,CACnE,IAAMiZ,gBAAkBpqJ,KAAKq7E,WAAWj8E,OAClCirJ,WAAarqJ,KAAKjL,QAAQi0J,OAAO7X,kBAAkB/xI,QAEzD4qJ,eAAiBI,gBAAkBC,YACd,IACjBL,eAAiB,QAGrBA,eAAiB,EAErB,OAAOA,eAcJ,SAASM,YAAatqJ,MACzB,IAAIuqJ,cAAgB,EACpB,GAA0B,MAAtBvqJ,KAAKiqJ,aACLM,cAkBD,SAASC,6BAA8BxqJ,MAC1C,IAAIuqJ,cAAgBjoK,OAAO6nK,iBAO3B,OANAnqJ,KAAKlF,WAAWlY,QAAQ,SAAC2+D,OACrB,IAAMv+D,EAAIsnK,YAAY/oG,OAClBv+D,EAAIunK,gBACJA,cAAgBvnK,KAGjBunK,cA1BaC,CAA6BxqJ,WAC1C,GAA0B,MAAtBA,KAAKiqJ,aACZjqJ,KAAKlF,WAAWlY,QAAQ,SAAC2+D,OACrBgpG,eAAiBD,YAAY/oG,cAE9B,GAAIvhD,KAAKjL,QAAQi0J,QAAUhpJ,KAAKjL,QAAQi0J,OAAO7X,gBAAiB,CACnE,IAAMsZ,eAAiBzqJ,KAAKq7E,WAAWl8E,MACjCurJ,UAAY1qJ,KAAKjL,QAAQi0J,OAAO7X,kBAAkBhyI,OACxDorJ,cAAgBE,eAAiBC,WACb,IAChBH,cAAgB,QAGpBA,cAAgB,EAEpB,OAAOA,cA0DJ,SAASI,2BAA4BvrJ,OAAQD,MAAO+G,UACvD,IAAM8tI,KAAO,IAAI0T,gBAAe,GAAKtoJ,cAAQD,cAG7C,OAFA60I,KAAKz7J,KAAK,eACVy7J,KAAK9tI,SAASA,UACP8tI,KAGJ,SAAS4W,eAAgBC,gBAAiBhD,WAAyD,IAGlGiD,6BAHoDC,YAA8C3pK,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,IAAAA,UAAA,GAAzB4pK,gBAAyB5pK,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,IAAAA,UAAA,GAClG8nK,IAAM,GACN+B,oBAAsB,EAEtBC,WAAa,EACbC,UAAY,EAEhB,IAAKtD,UACD,OAAS7uJ,MAAO6xJ,gBAAiBl/H,OAAQk/H,iBARyD,IAAAO,sBAW3CvD,UAAU1W,kBAArDka,gBAXsFD,sBAW9FhsJ,OAAgCksJ,eAX8DF,sBAWrEjsJ,MAC3B+G,SAAW2hJ,UAAU3hJ,WACV,QAAbA,UAAmC,WAAbA,UACtBgjJ,IAAM,IACN+B,oBAAsBI,gBAAkBR,gBAAgBlB,kBACxDuB,WAAaL,gBAAgBlB,kBAAoB0B,gBACjDF,UAAYN,gBAAgBjB,mBAE5BV,IAAM,IACN+B,oBAAsBK,eAAiBT,gBAAgBjB,iBACvDuB,UAAYN,gBAAgBjB,iBAAmB0B,eAC/CJ,WAAaL,gBAAgBlB,mBAEjCmB,6BAA+B,EAAIG,oBAGnCJ,gBAAgB3B,IAAIA,KACpB,IAAMqC,iBACFvC,KAAMnB,UAAUtvK,OAChB2wK,IAAK,KACLE,YAAa6B,oBACb3B,WAAW0B,iBAA0BD,YACrCvB,UAEEgC,UAAY,IAAI3C,gBAAgB0C,iBACtCC,UAAU7B,gBAAgB0B,iBAC1BG,UAAU5B,eAAe0B,gBAEzB,IAOMG,WAAa,IAAI5C,iBANnBG,KAAM,KACNE,IAAK,KACLE,YAAa0B,6BACbxB,WAAW0B,kBAA2BD,YACtCvB,WAYJ,OATAiC,WAAW9B,gBAAgBuB,YAC3BO,WAAW7B,eAAeuB,WACtBJ,YACAF,gBAAgBrB,OAAOgC,YACH,QAAbtlJ,UAAmC,SAAbA,SAC7B2kJ,gBAAgBrB,OAAOgC,UAAWC,aAElCZ,gBAAgBrB,OAAOiC,WAAYD,aAE9BxyJ,MAAOwyJ,UAAW7/H,OAAQ8/H,0vBChDxBtH,kCA/IX,SAAAA,KAAazgK,yJAAMgoK,CAAAxuK,KAAAinK,MACfjnK,KAAK21F,OAASnvF,KACdxG,KAAKiY,QAAU,KACfjY,KAAKiX,aACLjX,KAAKyuK,WAAa,KAClBzuK,KAAKkqK,WACDjhJ,IAAK,KACLkH,KAAM,KACNjO,OAAQ,KACRD,MAAO,MAGXjiB,KAAK0yE,IAAM1yE,KAAK21F,OAAOm2E,iBAAkB9B,iBAAmBhqK,KAAK21F,OAAOm2E,OAAOpB,WACnE1qK,KAAK21F,OAAOm2E,OAAOpB,WACnBiC,yRAGHj/J,SAAS,IAAAghK,gBAAA9yF,MAAA57E,MAClB0uK,gBAAA1uK,KAAKiX,WAAU3S,KAAfjH,MAAAqxK,gBAAAC,uBAAuBjhK,UACvBA,QAAQhI,QAAQ,SAAC1I,GAAQA,EAAEg4B,OAAO4mD,iDAIlC,OAAwB,OAAjB57E,KAAKiY,gDAIZ,OAAQjY,KAAKiX,UAAU5V,uDAIvB,OAAOrB,KAAK21F,OAAOq2E,wDAInB,QAAShsK,KAAK21F,OAAOy2E,sDAGfxuJ,WAIN,OAHIA,YACA5d,KAAKiX,UAAY2G,WAEd5d,KAAKiX,gDAGR+d,SAIJ,OAHIA,UACAh1B,KAAKiY,QAAU+c,SAEZh1B,KAAKiY,oDAGL22J,YAIP,OAHIA,aACA5uK,KAAKyuK,WAAaG,YAEf5uK,KAAKyuK,yCAGZ1vJ,KAIA,OAHIA,MACA/e,KAAK0yE,IAAM3zD,KAER/e,KAAK0yE,wCAGT76D,QAIH,OAHIA,SACA7X,KAAK21F,OAAS99E,QAEX7X,KAAK21F,iDAGNk5E,OASN,OARIA,QACA7uK,KAAKkqK,WACDjhJ,IAAK4lJ,MAAM5lJ,IACXkH,KAAM0+I,MAAM1+I,KACZjO,OAAQ2sJ,MAAM3sJ,OACdD,MAAO4sJ,MAAM5sJ,QAGdjiB,KAAKkqK,wDAMJ4E,YAAY,IAAA9yF,OAAAh8E,KAChBA,KAAK0yE,MAAQo8F,WAAWp8F,KACxB1yE,KAAK21F,OAAOq2E,IAAI8C,WAAW9C,KAC3BhsK,KAAK21F,OAAOu2E,YAAY4C,WAAW5C,cAEnClsK,KAAKiX,UAAUvR,QAAQ,SAACod,MACpB,GAAIA,KAAK4vD,MAAQo8F,WAAWp8F,IAGxB,OAFA5vD,KAAKjL,MAAMm0J,IAAI8C,WAAW9C,UAC1BlpJ,KAAKjL,MAAMq0J,YAAY4C,WAAW5C,aAGtClwF,OAAK+yF,WAAWjsJ,KAAMgsJ,4DAMtBhsJ,KAAMgsJ,YAAY,IAAA/tF,OAAA/gF,KAC1B8iB,KAAKlF,WAAWlY,QAAQ,SAACspK,WACjBA,UAAUjwJ,OAAS+vJ,WAAWp8F,KAC9Bs8F,UAAUn3J,QAAQm0J,IAAI8C,WAAW9C,KACjCgD,UAAUn3J,QAAQq0J,YAAY4C,WAAW5C,cAEzCnrF,OAAKguF,WAAWC,UAAWF,qDAS/BG,QAAQ,IAAAhuF,OAAAjhF,KACZA,KAAKiX,UAAUvR,QAAQ,SAACod,MACpB,GAAIA,KAAK/D,OAASkwJ,OAAQ,CACtB,IAAMvtK,MAAQu/E,OAAKhqE,UAAU5S,QAAQye,MACrCm+D,OAAK0U,OAAO22E,QAAQznK,OAAOnD,MAAO,GAEtCu/E,OAAKiuF,iBAAiBpsJ,KAAMmsJ,oEAKlBnsJ,KAAMmsJ,QAAQ,IAAApd,OAAA7xJ,KAC5B8iB,KAAKlF,WAAWlY,QAAQ,SAACspK,WACrB,GAAIA,UAAUjwJ,OAASkwJ,OAAQ,CAC3B,IAAMvtK,MAAQohB,KAAKlF,WAAWvZ,QAAQ2qK,WACtClsJ,KAAKjL,QAAQy0J,QAAQznK,OAAOnD,MAAO,QAEnCmwJ,OAAKqd,iBAAiBF,UAAWC,0TCtI5BE,oCACjB,SAAAA,YAAaC,aAAct5J,mKAAQu5J,CAAArvK,KAAAmvK,aAC/BnvK,KAAKsvK,cAAgBF,aACrBpvK,KAAKilF,QAAUnvE,OACf9V,KAAKuvK,MAAQvvK,KAAKwvK,WAAWxvK,KAAKilF,QAAS,MAC3CjlF,KAAKyvK,wTAGG35J,OAAQkf,QAChB,IAAMlS,KAAO,IAAImkJ,uBAAKnxJ,QAClBkf,QACAlS,KAAK8rJ,UAAU55I,OAAO+3I,cACtB/3I,OAAO06I,aAAa5sJ,QAEpB9iB,KAAKuvK,MAAQzsJ,KANO,IAAAw1D,2BAAA,EAAAC,mBAAA,EAAAC,oBAAAt7E,EAAA,IAQxB,QAAAu7E,MAAAC,UAAmB5iE,OAAOw2J,QAA1BzwK,OAAA8J,cAAA2yE,2BAAAG,MAAAC,UAAAnuE,QAAAC,MAAA8tE,2BAAA,EAAmC,KAAxBq3F,KAAwBl3F,MAAA18E,MAC/BiE,KAAKwvK,WAAWG,KAAM7sJ,OATF,MAAA81D,KAAAL,mBAAA,EAAAC,eAAAI,IAAA,YAAAN,2BAAA,MAAAI,UAAA,QAAAA,UAAA,oBAAAH,kBAAA,MAAAC,gBAYxB,OAAOx4E,KAAKuvK,wDAIZvvK,KAAKuvK,MAAMpxE,UACPl1E,IAAK,EACLkH,KAAM,EACNlO,MAAOjiB,KAAKsvK,cAAcrtJ,MAC1BC,OAAQliB,KAAKsvK,cAAcptJ,SF8OhC,SAAS0tJ,oBAAqB9sJ,MACjC,IAAM+sJ,YAAc/sJ,KAAKlF,WACA5Y,IAAI,SAAAq/D,OAAK,OAAIA,MAAMxsD,QAAQq0J,gBAC3BjhK,OAAO,SAAC6kK,MAAOt8G,KAAR,OAAgBs8G,MAAQt8G,KAAK,GAE7D1wC,KAAKlF,WAAWlY,QAAQ,SAAC2+D,MAAOvpE,EAAG8iB,UAC/B,IAAMmyJ,YAAcnyJ,SAAS9iB,EAAI,GAC3Bk1K,MAAQ3rG,MAAMxsD,QAAQq0J,cAAgB2D,YAElB,MAAtBxrG,MAAMuqG,YACNvqG,MAAM85B,UACFl1E,IAAKnuB,EAAIi1K,YAAY5xE,WAAWl1E,IAAM8mJ,YAAY5xE,WAAWj8E,OAAS,EACtEiO,KAAMk0C,MAAMrvC,SAASmpE,WAAWhuE,KAChCjO,OAAQmiD,MAAMrvC,SAASmpE,WAAWj8E,OAAS8tJ,MAC3C/tJ,MAAOoiD,MAAMrvC,SAASmpE,WAAWl8E,QAGrCoiD,MAAM85B,UACFl1E,IAAKo7C,MAAMrvC,SAASmpE,WAAWl1E,IAC/BkH,KAAMr1B,EAAIi1K,YAAY5xE,WAAWhuE,KAAO4/I,YAAY5xE,WAAWl8E,MAAQ,EACvEC,OAAQmiD,MAAMrvC,SAASmpE,WAAWj8E,OAClCD,MAAOoiD,MAAMrvC,SAASmpE,WAAWl8E,MAAQ+tJ,QAGjDJ,oBAAoBvrG,SEpQpBurG,CAAoB5vK,KAAKuvK,+DAGZzsJ,MAAM,IAAA84D,MAAA57E,KACnB8iB,KAAKlF,WAAWlY,QAAQ,SAAC2+D,OACrB8qG,YAAYc,qBAAqB5rG,OACjCuX,MAAKs0F,gBAAgB7rG,uDAsBzB,OF0JD,SAAS8rG,mBAAoBrtJ,MAQhC,IAPA,IAAIspJ,UAEAgE,WACAC,cAFAC,uBAAyB,EAIvBC,eAAiBztJ,KAAKlF,WAAWvc,OAE9BK,MAAQ,EAAGA,MAAQ6uK,eAAgB7uK,QAAS,CACjD,IACI8uK,cADAtyK,QAAE,EAEAmmE,MAAQvhD,KAAKlF,WAAWlc,OAEJ,MAAtB2iE,MAAMuqG,aACN1wK,GAAK2uK,YACLuD,WAAa,SACbC,cAAgB,UAEhBnyK,GAAKkvK,YACLgD,WAAa,QACbC,cAAgB,UAIhBhsG,MAAMwpG,cAENzB,UAAY/nG,OAKhBisG,wBAA2BE,cAAgBtyK,GAAGmmE,OAC9CA,MAAM85B,WAAWiyE,aAAeI,cAEhCnsG,MAAM85B,WAAWkyE,eAAiBhsG,MAAMrvC,SAASmpE,WAAWkyE,eAE5DF,mBAAmB9rG,QAGnB+nG,YACAA,UAAUjuE,WAAWiyE,aAAeE,uBACpClE,UAAUjuE,WAAWkyE,eAAiBjE,UAAUp3I,SAASmpE,WAAWkyE,eACpEF,mBAAmB/D,YEtMnB+D,CAAmBnwK,KAAKuvK,OF0MzB,SAASkB,gBAAiB3tJ,MAC7BA,KAAKlF,WAAWlY,QAAQ,SAAC2+D,MAAOvpE,EAAG8iB,UAC/B,IAAMugF,SAnLP,SAASuyE,kBAAmBC,GAAI71K,EAAG25B,IAAKq0E,UAC3C,GAAIhuG,EAAG,CAEH,IAFG81K,sBAEiBn8I,IAAI35B,EAAI,GACmDqjG,WAAlE0yE,MAHVD,sBAGK3nJ,IAAiB6nJ,OAHtBF,sBAGgBzgJ,KAAqB4gJ,QAHrCH,sBAG6B1uJ,OAAwB8uJ,OAHrDJ,sBAG8C3uJ,MACjD,OACIA,MAAO0uJ,GAAG1uJ,MACVC,OAAQyuJ,GAAGzuJ,OAEX+G,IAA8B,MAAzB6/E,SAAS8lE,YAChBiC,MAAOE,QAAUF,MAEf1gJ,KAA+B,MAAzB24E,SAAS8lE,YACjBkC,OAAQA,OAAQE,QAb+B,IAAAC,sBAiBlBnoE,SAAS9zE,SAASmpE,WAAxC0yE,KAjBwCI,sBAiB7ChoJ,IAAiB6nJ,MAjB4BG,sBAiBlC9gJ,KACnB,OACIlO,MAAO0uJ,GAAG1uJ,MACVC,OAAQyuJ,GAAGzuJ,OACX+G,IAAK4nJ,KACL1gJ,KAAM2gJ,OA6JWJ,CAAkBrsG,MAAM85B,WAAYrjG,EAAG8iB,SAAUymD,OAClEA,MAAM85B,SAASA,UACfsyE,gBAAgBpsG,SE7MhBosG,CAAgBzwK,KAAKuvK,OACdvvK,mDAKP,OADAA,KAAKkwK,gBAAgBlwK,KAAKuvK,OACnBvvK,yCAIP,OAAOA,KAAKuvK,0EA3BazsJ,MACzB,IAAM6tJ,GAAK7tJ,KAAKq7E,WACV2tE,KAAOhpJ,KAAKjL,QAAQi0J,OAC1B,GAAIA,MAAQA,KAAKoF,iBAAkB,CAC/B,IAAM9yF,MACFljE,EAAGy1J,GAAGxgJ,KACNrtB,EAAG6tK,GAAG1nJ,IACNhH,MAAO0uJ,GAAG1uJ,MACVC,OAAQyuJ,GAAGzuJ,OACXwoJ,SAAU5nJ,KAAK/D,MAEnB+sJ,KAAKoF,iBAAiB9yF,0BCnDrB+yF,YACTloJ,IAAK,EACLw0B,OAAQ,EACRf,OAAQ,GAGC00H,kBACT3/H,EAAG,MACH0oG,EAAG,SACHk3B,EAAG,UAGMC,qBACT7/H,EAAG,OACH0oG,EAAG,SACHk3B,EAAG,SAiNME,uBAAS,SAgBTC,SAAW,UACXC,YAAc,aAGdC,yBAAW,WACXC,2BAAa,sSC1PnB,IAAMC,MAAb,oBAAAA,4JAAAC,CAAA7xK,KAAA4xK,OAAA,2NAAAE,CAAAF,MAAA,OAAAv1K,IAAA,eAAAN,MAAA,SAAAg2K,aACyBt8F,SACjB,OAAOA,mBAAmBolD,WAFlCx+H,IAAA,QAAAN,MAAA,SAAAi2K,MAKkBv8F,SACV,OAAOA,QAAQ12D,MANvB1iB,IAAA,aAAAN,MAAA,SAAAk2K,WASuBlzJ,IACf,OAAOR,SAASkB,eAAeV,OAVvC1iB,IAAA,gBAAAN,MAAA,SAAAm2K,cAa0B1rK,MAClB,OAAOA,KAAKoF,OAAO,SAAAumK,YAAU,OAAyB,MAArBA,WAAWn9I,SAAgB,MAdpE34B,IAAA,YAAAN,MAAA,SAAAq2K,UAoBsBC,OACyB,OAAnC9zJ,SAASkB,eAAe4yJ,QAAmB9zJ,SAASkB,eAAe4yJ,OAAOpgJ,aArBtF2/I,MAAA,qSCCqBU,gCACjB,SAAAA,UAAaxvJ,+JAAMyvJ,CAAAvyK,KAAAsyK,WACftyK,KAAKklE,MAAQpiD,KACb9iB,KAAKuqK,WAAaznJ,KAAKjL,QAAQi0J,iBAAkB9B,gBAC7BlnJ,KAAKjL,QAAQi0J,OAAOrkJ,YAAcgkJ,2SAItD,OAAOzrK,KAAKklE,gDAIZ,OAAOllE,KAAKklE,MAAMrtD,QAAQi0J,iBAAkB9B,8DAI5C,OAAOhqK,KAAKuqK,YAAckB,mUCjB3B,IAAM+G,uBAAb,WACI,SAAAA,WAAahsK,gKAAMisK,CAAAzyK,KAAAwyK,YACfxyK,KAAKu0I,MAAQ/tI,KAFrB,6OAAAksK,CAAAF,aAAAn2K,IAAA,wBAAAN,MAAA,SAAA42K,wBAMQ,IAAMC,cAEN,OCRqB,SAAhBC,cAAiB/vJ,KAAM8vJ,YAChC,IAAME,UAAY,IAAIR,qBAAUxvJ,MAChC8vJ,WAAWtuK,KAAKwuK,WAChBhwJ,KAAKlF,WAAWlY,QAAQ,SAAC2+D,OACrBwuG,cAAcxuG,MAAOuuG,cDGrBC,CAAc7yK,KAAKu0I,MAAOq+B,YACnBA,eARfJ,WAAA,mtDEAO,IAAMO,gBAAb,SAAAC,aAAA,SAAAD,kBAAA,8JAAAE,CAAAjzK,KAAA+yK,iBAAAG,oCAAAlzK,KAAAmzK,yBAAAJ,iBAAA11K,MAAA2C,KAAAkE,YAAA,8WAAAkvK,CAAAL,gBAAqCP,wPAArCa,CAAAN,kBAAA12K,IAAA,iBAAAN,MAAA,SAAAu3K,iBAEQ,OAAAC,cAAAJ,yBAAAJ,gBAAAn2K,WAAA,wBAAAoD,MAAA/E,KAAA+E,UAFR+yK,gBAAA,+RCFO,IAAMS,SAAb,oBAAAA,kKAAAC,CAAAzzK,KAAAwzK,UAAA,oOAAAE,CAAAF,WAAAn3K,IAAA,eAAAN,MAAA,SAAA43K,aAEkB7wJ,KAAMkpC,MAChBlpC,KAAK8wJ,cAAgB5nH,SAH7BwnH,SAAA,8uFCIO,IAAMK,2BAAb,SAAAC,WACI,SAAAD,aAAartK,MAAM,IAAAo1E,MAAA,kKAAAm4F,CAAA/zK,KAAA6zK,eACfj4F,MAAAo4F,wCAAAh0K,KAAAi0K,6BAAAJ,cAAA54K,KAAA+E,QACKu0I,MAAQ/tI,KACbo1E,MAAKs4F,aAAe,IAAInB,gBAAgBn3F,MAAK24D,OAAO++B,iBAHrC13F,MADvB,sXAAAu4F,CAAAN,aAAkCL,sPAAlCY,CAAAP,eAAAx3K,IAAA,aAAAN,MAAA,SAAAs4K,WAOgBzqF,MAAOniE,WAAW,IAAAu0D,OAAAh8E,KACpBs0K,QAAU1qF,MAChB2qF,kBAAAN,6BAAAJ,aAAAj3K,WAAA,eAAAoD,MAAA/E,KAAA+E,KAAmBs0K,QAASt0K,KAAKu0I,OACjCv0I,KAAKw0K,UAAYx0K,KAAKy0K,yBAAyBhtJ,WAC/CznB,KAAKk0K,aAAaxuK,QAAQ,SAACod,MACvB,GAAIA,KAAK4xJ,UAAW,CAChB,IAAM5I,KAAOhpJ,KAAKA,OAClBk5D,OAAKw4F,UAAUnqJ,YAAY2xD,OAAK24F,qBAALC,8BAA+B9I,KAAK3tE,YAC3Dp/E,GAAI+sJ,KAAK/sJ,KACT0I,UAAW3E,KAAK2E,mBAG5B6sJ,QAAQjqJ,YAAYrqB,KAAKw0K,cAnBjCn4K,IAAA,uBAAAN,MAAA,SAAA44K,qBAsB0B7+J,QAAQ,IAClBmT,IAA4CnT,OAA5CmT,IAAKkH,KAAuCra,OAAvCqa,KAAMjO,OAAiCpM,OAAjCoM,OAAQD,MAAyBnM,OAAzBmM,MAAOwF,UAAkB3R,OAAlB2R,UAAW1I,GAAOjJ,OAAPiJ,GAEvC81J,IADct2J,SAASkB,eAAeV,KACjBR,SAASyJ,cAAc,OAQlD,OAPA6sJ,IAAI30J,MAAM8I,SAAW,WACrB6rJ,IAAI30J,MAAMiQ,KAAV,GAAA7qB,OAAoB6qB,KAApB,MACA0kJ,IAAI30J,MAAM+I,IAAV,GAAA3jB,OAAmB2jB,IAAnB,MACA4rJ,IAAI30J,MAAMgC,OAAV,GAAA5c,OAAsB4c,OAAtB,MACA2yJ,IAAI30J,MAAM+B,MAAV,GAAA3c,OAAqB2c,MAArB,MACA4yJ,IAAI91J,GAAKA,GACT81J,IAAIptJ,UAAYA,UACTotJ,OAjCfx4K,IAAA,2BAAAN,MAAA,SAAA04K,yBAoC8BhtJ,WACtB,IAAMzI,UAAY4yJ,MAAMM,cAAclyK,KAAKk0K,cACrCpI,KAAO9sJ,UAAU8D,OACjB0xJ,UAAYx0K,KAAK20K,qBAALC,8BAA+B9I,KAAK3tE,YAClDp/E,GAAI+sJ,KAAK/sJ,KACT0I,UAAWzI,UAAUyI,eAGzB,OAFA+sJ,UAAU/sJ,UAAYA,UACtB+sJ,UAAUt0J,MAAM8I,SAAW,WACpBwrJ,aA5Cfn4K,IAAA,cAAAN,MAAA,SAAA+4K,cAgDQ,OAAO90K,KAAKk0K,iBAhDpBL,aAAA,GCGakB,SAAW,SAAXA,SAAY/xJ,QAASgyJ,QAAV,OACpBhyJ,QAAQiyJ,WAAWH,cAAcz6J,KAAK,SAAAqpC,OAAK,OAAIA,MAAM5gC,OAAO/D,OAASi2J,UAO5DE,WAAa,SAAbA,WAAalyJ,SAAO,OALP,SAAbmyJ,WAAcnyJ,SACvBA,QAAQiyJ,SAAS,IAAIpB,2BAAa7wJ,QAAQxc,SAC1Cwc,QAAQiyJ,WAAWZ,WAAWrxJ,QAAQ4mE,QAAS5mE,QAAQyE,aAGtB0tJ,CAAWnyJ,UAiFnCoyJ,uBAAkB,SAAlBA,gBAAmBpyJ,QAASqyJ,eACrCA,cAAcz3J,WAAWlY,QAAQ,SAACilK,WAC9B,IAAMmB,KAAOnB,UAAU9yJ,QAAQi0J,OAE/B,GAAIA,gBAAgB9B,iBAAmB8B,KAAKwJ,YAAa,CACrD,IAAMC,iBAAmBvyJ,QAAQwyJ,eAAe75K,IAAImwK,KAAKwJ,aAEzD,GAAIC,iBAAkB,CAClB,IAAM7xH,MAAQqxH,SAAS/xJ,QAAS2nJ,UAAU5rJ,MAAM+D,OAC1CA,KAAO4gC,MAAMy6C,WACbs3E,QAAUV,SAAS/xJ,QAASuyJ,iBAAiB7K,YAC9C5nJ,OACAq7E,WACCu3E,cA5EC,SAAjBC,eAAkBnZ,UAAW5lJ,QAC/B,IAAI8+J,iBACI5yJ,KAAkBlM,OAAlBkM,KAAM2yJ,QAAY7+J,OAAZ6+J,QACd,OAAQjZ,WACR,IAAK,OACDkZ,eACIzsJ,IAAKnG,KAAKmG,IACVkH,KAAMslJ,QAAQtlJ,KACdjO,OAAQY,KAAKZ,OACbD,MAAOjf,KAAKiY,IAAI6H,KAAKb,MAAQjf,KAAKiY,IAAIw6J,QAAQtlJ,KAAOrN,KAAKqN,QAE9D,MAEJ,IAAK,QACDulJ,eACIzsJ,IAAKnG,KAAKmG,IACVkH,KAAMrN,KAAKqN,KACXjO,OAAQY,KAAKZ,OACbD,MAAOjf,KAAKiY,IAAI6H,KAAKb,MAAQjf,KAAKiY,IAAI6H,KAAKqN,KAAOrN,KAAKb,OAASwzJ,QAAQtlJ,KAAOslJ,QAAQxzJ,UAE3F,MAEJ,IAAK,MACDyzJ,eACIzsJ,IAAKwsJ,QAAQxsJ,IACbkH,KAAMrN,KAAKqN,KACXjO,OAAQlf,KAAKiY,IAAI6H,KAAKZ,OAASlf,KAAKiY,IAAIw6J,QAAQxsJ,IAAMnG,KAAKmG,MAC3DhH,MAAOa,KAAKb,OAEhB,MAEJ,IAAK,SACDyzJ,eACIzsJ,IAAKnG,KAAKmG,IACVkH,KAAMrN,KAAKqN,KACXjO,OAAQlf,KAAKiY,IAAI6H,KAAKmG,IAAMwsJ,QAAQxsJ,IAAMwsJ,QAAQvzJ,QAClDD,MAAOa,KAAKb,OAEhB,MAEJ,IAAK,WACDyzJ,eACIzsJ,IAAKnG,KAAKmG,IACVkH,KAAMslJ,QAAQtlJ,KACdjO,OAAQY,KAAKZ,OACbD,MAAOwzJ,QAAQxzJ,OAEnB,MAEJ,IAAK,WACDyzJ,eACIzsJ,IAAKwsJ,QAAQxsJ,IACbkH,KAAMrN,KAAKqN,KACXjO,OAAQuzJ,QAAQxsJ,IAChBhH,MAAOa,KAAKb,OAMpB,OAAOyzJ,cAgB2BC,CAAe7J,KAAKtP,aAAe15I,UAAM2yJ,kBAG/Dj6K,OAAO0M,OAAOwtK,eAAiB32J,GAAI2kC,MAAM3kC,KAAM0I,UAAWqkJ,KAAKrkJ,cAC/DzE,QAAQiyJ,WAAWN,qBAAqBe,eACxC1yJ,QAAQwyJ,eAAe75K,IAAImwK,KAAKzwK,QAAQ61K,kBACpCh2J,EAAGw6J,cAAcvlJ,KACjBrtB,EAAG4yK,cAAczsJ,IACjB/G,OAAQwzJ,cAAcxzJ,OACtBD,MAAOyzJ,cAAczzJ,SAMjCmzJ,gBAAgBpyJ,QAAS2nJ,iTCzH1B,IAAMiL,+BAAb,WACI,SAAAA,eAAapvK,KAAMyuK,SAAUj2J,yKAAW62J,CAAA71K,KAAA41K,gBACpC51K,KAAKu0I,MAAQ/tI,KAAKwlD,KAClBhsD,KAAK81K,cAAgBtvK,KAAKgvK,aAC1Bx1K,KAAK+1K,iBAAmBvvK,KAAKwvK,gBAC7Bh2K,KAAKi2K,UAAYhB,SACjBj1K,KAAK+1F,OAAS67E,MAAMG,aAAa/yJ,WAAaA,UAAY4yJ,MAAMK,WAAWjzJ,WANnF,yPAAAk3J,CAAAN,iBAAAv5K,IAAA,OAAAN,MAAA,SAAAqpD,OAaQ,OAHA8vH,WAAWl1K,MACXo1K,uBAAgBp1K,KAAMA,KAAKu0I,ODGN,SAAhB4hC,cAAiBd,eAC1BA,cAAcz3J,WAAWlY,QAAQ,SAACod,MAC9B,IAAMgpJ,KAAOhpJ,KAAKjL,QAAQi0J,OACtBA,gBAAgB9B,iBAChB8B,KAAK1mH,OAET+wH,cAAcrzJ,QCRdqzJ,CAAcn2K,KAAKu0I,OACZv0I,QAbf3D,IAAA,OAAAN,MAAA,SAAAyK,KAgBUA,OAIF,OAHIA,QACAxG,KAAKu0I,MAAQ/tI,OAEVxG,KAAKu0I,SApBpBl4I,IAAA,eAAAN,MAAA,SAAAy5K,aAuBkB58G,OAIV,OAHIA,QACA54D,KAAK81K,cAAgBl9G,OAElB54D,KAAK81K,iBA3BpBz5K,IAAA,YAAAN,MAAA,SAAA0rB,UA8BemxC,OAIP,OAHIA,QACA54D,KAAK+1K,iBAAmBn9G,OAErB54D,KAAK+1K,oBAlCpB15K,IAAA,WAAAN,MAAA,SAAAk5K,SAqCcr8G,OAIN,OAHIA,QACA54D,KAAKi2K,UAAYr9G,OAEd54D,KAAKi2K,aAzCpB55K,IAAA,QAAAN,MAAA,SAAA6tF,MA4CWhxB,OAIH,OAHIA,QACA54D,KAAK+1F,OAASn9B,OAEX54D,KAAK+1F,WAhDpB6/E,eAAA,6SCAqBQ,gDACjB,SAAAA,kBAAaZ,aAAcvhJ,SAAU8pE,YAAaC,6KAAYq4E,CAAAr2K,KAAAo2K,mBAC1Dp2K,KAAK81K,cAAgBN,aACrBx1K,KAAKs2K,kBAAoBriJ,SACzBj0B,KAAKu2K,aAAex4E,YACpB/9F,KAAKw2K,YAAcx4E,WACnBh+F,KAAKy2K,oBAAsB,4Vb0G5B,SAASC,0BAA2B1zJ,SACvCA,QAAQ2zJ,mBAAmB,IAAI/rK,KAC/BoY,QAAQwyJ,eAAe9vK,QAAQ,SAAC3J,OAC5B,GAAIinB,QAAQ2zJ,qBAAqB9rK,IAAI9O,MAAM4sC,UACvC3lB,QAAQ2zJ,qBAAqBh7K,IAAII,MAAM4sC,UAAUrkC,KAAKvI,WACnD,CACH,IAAM88J,QACNA,KAAKv0J,KAAKvI,OACVinB,QAAQ2zJ,qBAAqB7rK,IAAI/O,MAAM4sC,SAAUkwH,Sa7GrD6d,CAA0B12K,MAC1B,IAAM42K,gBAAkB52K,KAAKy2K,oBAAoB96K,IAAI,UAC/CgyK,gBAAkB,IAAIhC,oBACxBkL,aAAelJ,gBACnBA,gBAAgBlB,gBAAgBzsK,KAAKu2K,cACrC5I,gBAAgBjB,eAAe1sK,KAAKw2K,aAEpC,IAAIM,aAAe,KAUnB,OARA92K,KAAKs2K,kBAAkB5wK,QAAQ,SAACrK,MAC5By7K,abwGL,SAASC,aAAcH,gBAAiBhM,eAC3C,IAAM9T,KAAO8f,gBAAgBv8J,KAAK,SAAAswJ,WAAS,OAAIA,UAAUtvK,SAAWuvK,gBACpE,OAAQ9T,OAAkB,IAAVA,KAAeA,KAAO,Ka1GfigB,CAAaH,gBAAiBv7K,MAEzCw7K,aADS,SAATx7K,KACeqyK,eAAemJ,aAAcC,cAAcroI,Ob4KnE,SAASuoI,mBAAoBrJ,gBAAiBsJ,gBAMjD,IALA,IAAIJ,aAAelJ,gBACbx3E,KAAO8gF,eAAe51K,OACtB02I,OAAS5hD,KAAO8gF,eAAe,GAAG51K,OAAS,EAC3C6gB,OAAS+0J,eAAehsK,OAAO,SAACwxE,IAAKjpB,KAAN,OAAeipB,IAAMjpB,IAAI,GAAGygG,kBAAkB/xI,QAAS,GAEnFpnB,EAAI,EAAGA,EAAIi9I,OAAQj9I,IAAK,CAC7B,IAAMo8K,kBAAoBp8K,IAAMi9I,OAAS,EADZo/B,gBAIHzJ,eAAemJ,aAFNpJ,2BAA2BvrJ,OAClB+0J,eAAe,GAAGn8K,GAAGm5J,kBAAkBhyI,MAAO,QACPi1J,mBAA3Ep7J,MAJqBq7J,gBAIrBr7J,MAAO2yB,OAJc0oI,gBAId1oI,OACfooI,aAAe/6J,MACf,IAAK,IAAIzV,EAAI,EAAGA,EAAI8vF,KAAM9vF,IAAK,CAC3B,IAAM+wK,YAAc/wK,IAAO8vF,KAAO,EAClC0gF,aAAenJ,eAAemJ,aAAcI,eAAe5wK,GAAGvL,GAAIs8K,aAAa,GAAM3oI,OAEzFooI,aAAepoI,OAEnB,OAAOooI,aa5LoBG,CAAmBH,aAAcC,aAAanM,aAG9DgD,kEAGG/0G,OAIV,OAHIA,QACA54D,KAAK81K,cAAgBl9G,OAElB54D,KAAK81K,4EAGIl9G,OAIhB,OAHIA,QACA54D,KAAKy2K,oBAAsB79G,OAExB54D,KAAKy2K,2UC3Cb,IAAMY,qBAAb,WACI,SAAAA,qKAAeC,CAAAt3K,KAAAq3K,WACXr3K,KAAK81K,cAAgB,IAAIlrK,IACzB5K,KAAKu3K,kBAAoB,KAHjC,0OAAAC,CAAAH,YAAAh7K,IAAA,eAAAN,MAAA,SAAA07K,aAMkB9M,WACV3qK,KAAK81K,cAAchrK,IAAI6/J,UAAUtvK,OAAQsvK,cAPjDtuK,IAAA,mBAAAN,MAAA,SAAA27K,iBAUsBz+J,KAId,OAHIA,MACAjZ,KAAKu3K,kBAAoBt+J,KAEtBjZ,KAAKu3K,qBAdpBl7K,IAAA,uBAAAN,MAAA,SAAA47K,qBAiB0BC,gBAAgB,IAAAh8F,MAAA57E,KAClC43K,eAAelyK,QAAQ,SAACoxJ,MACpBl7E,MAAK67F,aAAa3gB,WAnB9Bz6J,IAAA,sBAAAN,MAAA,SAAA87K,sBAyBQ,OCzBD,SAASl6E,sBAAgB36E,QAAS80J,SACrC,IAAMC,OAASD,QAAQhM,OACnBgM,QAAQxL,SAAWwL,QAAQxL,QAAQjrK,QACnCy2K,QAAQxL,QAAQ5mK,QAAQ,SAAAsyK,WAAS,OAAIr6E,sBAAe36E,QAASg1J,aAEnD,MAAVD,QAAsC,iBAAZA,aACiB76K,IAAvC8lB,QAAQwyJ,eAAe75K,IAAIo8K,SAC3BD,QAAQhM,KAAK9oJ,QAAQwyJ,eAAe75K,IAAIo8K,SDiB5Cp6E,CAAe39F,KAAMA,KAAKu3K,mBACnBv3K,KAAK03K,sBAzBpBr7K,IAAA,eAAAN,MAAA,SAAAy5K,eA6BQ,OAAOx1K,KAAK81K,iBA7BpBz5K,IAAA,oBAAAN,MAAA,SAAAk8K,oBAgCQj4K,KAAK81K,cAAc5jJ,YAhC3BmlJ,UAAA,ySEiBqBa,wCACjB,SAAAA,cAAa95F,mKAAM+5F,CAAAn4K,KAAAk4K,eACfl4K,KAAKmqK,UAAY/rF,KAAKssF,SACtB1qK,KAAK+1K,iBAAmB33F,KAAK32D,UAC7BznB,KAAKo4K,YACDn2J,MAAOm8D,KAAKn8D,OAASspJ,cACrBrpJ,OAAQk8D,KAAKl8D,QAAUspJ,gBAG3BxrK,KAAKq4K,cAAgBj6F,KAAKk6F,cAAgB,OAC1Ct4K,KAAKu3K,kBAAoB,KACzBv3K,KAAKu4K,WAAa,IAAIlB,qBACtBr3K,KAAKw4K,gBAAkB,KACvBx4K,KAAKs2K,qBACLt2K,KAAKgsD,KAAO,KACZhsD,KAAKy4K,YAAc,qTAGZ7/G,OAIP,OAHIA,QACA54D,KAAKu4K,WAAa3/G,OAEf54D,KAAKu4K,qEAGE3/G,OAId,OAHIA,QACA54D,KAAKs2K,kBAAoB19G,OAEtB54D,KAAKs2K,8DAGL19G,OAIP,OAHIA,OACAp9D,OAAO0M,OAAOlI,KAAKo4K,WAAYx/G,OAE5B54D,KAAKo4K,6DAGFzN,WACV3qK,KAAKu4K,WAAWd,aAAa9M,6EAGXiN,gBAClB53K,KAAKu4K,WAAWZ,qBAAqBC,4DAG9B90J,MACH9iB,KAAK04K,KACL14K,KAAK04K,IAAIC,UAAU71J,oDAQfhN,QACR9V,KAAKgsD,KAAK4sH,WAAW9iK,QACrB9V,KAAKu3K,kBAAoBv3K,KAAKgsD,KAAKn0C,MACnC7X,KAAK64K,oDAKDjH,MAAMG,aAAa/xK,KAAKmqK,WACxBnqK,KAAKmqK,UAAU2O,QAAU94K,KAEzBue,SAASkB,eAAezf,KAAKmqK,WAAW2O,QAAU94K,KAGtDA,KAAKu3K,kBD5EN,SAASwB,aAAc/1J,SAAS,IAAAg2J,mBACTh2J,QAAQowE,YAA1BlxE,OAD2B82J,mBAC3B92J,OAAQD,MADmB+2J,mBACnB/2J,MAMhB,OALmB,IAAIm0J,qCAAkBpzJ,QAAQi2J,YAAYzD,eACnBxyJ,QAAQk2J,mBACRh3J,OACAD,OACVk3J,sBCsEHJ,CAAa/4K,MACtCA,KAAKu4K,WAAWb,iBAAiB13K,KAAKu3K,mBACtCv3K,KAAKu3K,kBAAoBv3K,KAAKu4K,WAAWV,sBACzC73K,KAAK84K,QAAU,IAAI3J,0BACfltJ,MAAOjiB,KAAKo4K,WAAWn2J,MACvBC,OAAQliB,KAAKo4K,WAAWl2J,QAExBliB,KAAKu3K,mBACTv3K,KAAKgsD,KAAOhsD,KAAK84K,QAAQM,YAAYptH,OACrChsD,KAAK84K,QAAQO,YACbr5K,KAAKw4K,gBAAkB,IAAI5C,gCACvB5pH,KAAMhsD,KAAKgsD,KACXwpH,aAAcx1K,KAAKu4K,WAAW/C,eAC9BQ,gBAAiBh2K,KAAK+1K,kBACvB/1K,KAAKq4K,cAAer4K,KAAKmqK,WAExBnqK,KAAKy4K,YACLz4K,KAAKgsD,KAAKjtC,GAAG/e,KAAKy4K,aAElBz4K,KAAKy4K,YAAcz4K,KAAKgsD,KAAKjtC,KAGjC/e,KAAKw4K,gBAAgBpzH,6DAIrB,OAAOplD,KAAKy4K,0EAOIa,kBAAkB,IAAA19F,MAAA57E,KAgBlC,OAfAA,KAAKs2K,kBAAkBj1K,OAAS,EAChCrB,KAAKu4K,WAAWN,oBAChBqB,iBAAiB5zK,QAAQ,SAACsZ,WAClBA,YACA48D,MAAK06F,kBAAkBhyK,KAAK0a,UAAU3jB,QACtCugF,MAAK67F,aAAaz4J,WACO,SAArBA,UAAU3jB,QACV2jB,UAAU2rJ,UAAUjlK,QAAQ,SAAC6zK,cACzBA,aAAa7zK,QAAQ,SAAC8zK,OAClB59F,MAAK67F,aAAa+B,cAM/Bx5K,uDAGG4qK,eACV,OAAO5qK,KAAKu4K,WAAW/C,eAAe75K,IAAIivK,mEAG/BD,UAAW8O,aAGtB,OAFAz5K,KAAKu4K,WAAW/C,eAAhB,OAAsCiE,aLxHjB,SAAhBC,cAAiBC,QACtBA,QACAnkG,6BAAa,IAAAlwE,OAAKq0K,SAAU1nJ,SKwHrBynJ,CADiB/O,UAAUD,oEAIrBrvK,MAAM,IAAA2gF,OAAAh8E,KACb2qK,UAAY3qK,KAAK+2K,aAAa17K,MACpC,OAAIsvK,UbmGQ,SalGJtvK,KACOsvK,UAAUA,UAAU3lK,IAAI,SAAA8xJ,MAAI,OAAIA,KAAK9xJ,IACxC,SAAA40K,IAAE,OAAI59F,OAAK69F,cAAcD,GAAIA,GAAGv+K,YAGjC2E,KAAK65K,cAAclP,UAAWtvK,MAElC2E,+CAGD4pF,OAIN,OAHIA,QACA5pF,KAAKmqK,UAAYvgF,OAEd5pF,KAAKmqK,wrCC1Jb,IA2IM2P,2BAAsB,SAAtBA,oBAAuB92J,SAChC,IAAMvV,MAAQuV,QAAQ+sG,OAEhBgqD,WAAav+K,OAAO4I,KAAK4e,QAAQg3J,aACjCxgH,SAAKl0D,OAAA20K,gCAAOF,YAAPE,gCAAsBz+K,OAAO4I,KAAKilK,iBACvC6Q,kBAAiB50K,OAAA20K,gCAAIF,YAAJE,gCAAmBz+K,OAAO4I,KAAKilK,iBAAgBrkK,IAAI,SAAAoa,MAAI,SAAA9Z,OACvEmpH,0BAAiB1yE,uBADsD,KAAAz2C,OAC5B8Z,QAClD3R,MAAMuvE,uBAAuBk9F,eAAgB,WAAe,QAAA9gH,KAAAl1D,UAAA7C,OAAXuV,OAAW,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAXziD,OAAWyiD,MAAAn1D,UAAAm1D,MACxD,IAAM8gH,cA9FU,SAAlBC,gBAAmB5gH,MAAO5iD,QAC5B,IAAI83H,QAAU,SAAAA,UAAA,OAAM,GACpB,OAAQl1E,MAAM/jD,MAAM,SAAC4kK,OAAQv/K,GACzB,OAAQu/K,QACR,I3BnEY,O2BoEZ,I3BnEe,U2BoEf,I3B/Dc,S2BgEV3rC,QAAU10E,qBAAQ,SAClB,MAEJ,I3BrEa,Q2BsEb,I3BrEY,O2BsEZ,I3BxEa,Q2ByEb,I3B1EY,O2B2EZ,I3B7Dc,S2B8DV00E,QAAU10E,qBAAQ,UAClB,MACJ,QACI00E,QAAU,SAAAA,UAAA,OAAM,GAGpB,IAAMz0E,OAASrjD,OAAO9b,GAAG,GACnBo/D,OAAStjD,OAAO9b,GAAG,GAEzB,OAAO4zI,QAAQz0E,OAAQC,UAsEDkgH,CAAgB5gH,MAAO5iD,QACvC0jK,YAnEQ,SAAhBC,cAAiB/gH,MAAO5iD,QAAR,OAAmB4iD,MAAM/jD,MAAM,SAAC4kK,OAAQv/K,GAC1D,IAAM04D,IAAM58C,OAAO9b,GAAG,GACtB,OAAQu/K,QACR,I3B9FgB,O2B+FhB,I3B9FmB,U2B+Ff,OAAe,OAAR7mH,IAEX,I3BhGgB,O2BiGZ,OAAOA,MAAQA,IAAIyqC,UAEvB,QACI,OAAO,KAwDas8E,CAAc/gH,MAAO5iD,QAErCujK,eAAiBn3J,QAAQ4mE,UACrB0wF,YAvHa,SAAhBE,cAAiBx3J,SAC1B,IAAMqtH,iBAAmBrtH,QAAQ0I,eAAe2kH,iBAChDA,iBAAiB3L,QAASpkD,OAAQt9D,QAASpL,OAAQ,iBACnD,IAAM8vJ,YAAc1kJ,QAAQk8D,cAAcwoF,YAEpCqS,WAAa/2J,QAAQg3J,YAC3B,IAAK,IAAM39K,OAAO09K,WAAY,CAC1B,IAAMh+K,MAAQinB,QAAQ3mB,OACR,OAAVN,OACA2rK,YAAYrrK,MAAQqrK,YAAYrrK,KAAKN,OATP,IAY9BuvK,cAAkBtoJ,QAAQlN,SAA1Bw1J,cAER5D,YAAY53E,YAAY9uB,eAAesqG,gBACvC5D,YAAYpT,iBACZtxI,QAAQy3J,gBACRpqC,iBAAiB3L,QAASpkD,OAAQt9D,QAASpL,OAAQ,gBACnDy4H,iBAAiB3L,QAASpkD,OAAQt9D,QAASpL,OAAQ,YAsGvC4iK,CAAcx3J,SAEdA,QAAQk8D,cAAcwoF,YAAYz1I,SAEtCjP,QAAQu0E,UA3Dc,SAArBmjF,mBAAsB13J,SAC/B,IAAM23J,SAAW33J,QAAQ43J,SAASD,WAC5BE,aAAeF,UAAYA,SAASG,iBAAiBp4B,SAASjlG,OAAO,OACrEs9H,YACNF,aAAan1K,QAAQ,SAACs1K,SAClBA,QAAQt1K,QAAQ,SAACioD,MACbotH,SAASz2K,KAAKqpD,KAAKloB,UAAUj7B,YAGrC,IAAM6lI,iBAAmBrtH,QAAQi4J,YAC7BF,SAAS15K,OACT6zE,QAAQy+B,IAAIonE,UAAU56F,KAAK,WAEvBkwD,iBAAiB3L,QAASpkD,OAAQt9D,QAASpL,OAAQ,UACnD,IAAMsjK,oBAENL,aAAan1K,QAAQ,SAACs1K,SAClBA,QAAQt1K,QAAQ,SAACioD,MACbA,KAAKloB,UAAU6qD,SAAS5qF,QAAQ,SAAC6qF,OAC7B2qF,iBAAiB52K,KAAKisF,MAAM4qF,wBAKvCn4J,QAAQg3H,QAASh3H,QAAQi3H,SAASv0I,QAAQ,SAAC4oH,UACxCA,QAAUA,aACF5oH,QAAQ,SAAC4mF,MACbA,KAAK5mF,QAAQ,SAAC4kJ,UACV4wB,iBAAiB52K,KAAKgmJ,SAAS6wB,uBAK3CjmG,QAAQy+B,IAAIunE,kBAAkB/6F,KAAK,WAC/BkwD,iBAAiB3L,QAASpkD,OAAQt9D,QAASpL,OAAQ,qBAI3Dy4H,iBAAiB3L,QAASpkD,OAAQt9D,QAASpL,OAAQ,iBAuBnD8iK,CAAmB13J,WACpB,IAGMo4J,uBAAyB,SAAzBA,uBAA0BjxF,UACnC,IACMu9E,YADSv9E,SAASnnE,QACGk8D,cAAcwoF,YACzC,GAAIA,YAAa,CACb,IAAM5kB,YAAc4kB,YAAYzoB,iBAAiBljJ,OAEjDs/K,EAD0BlxF,SAASmxF,oBACjBx4B,YAAa34D,UAC/B,IAAM2+E,uBAAyB3+E,SAASoxF,wBAClCn1F,WAAa0iF,uBAAuB1iF,WACpCtD,YAAcgmF,uBAAuBhmF,YAC3CggE,YAAY9wH,KAAK,SAAC27B,MACd,IAAM6tH,aAAe7tH,KAAKloB,UAAU0kD,WACpC,IAAK,IAAM9tF,OAAO+pF,WACdo1F,aAAaC,kCAAkCp/K,IAAK+pF,WAAW/pF,MAEnE,IAAK,IAAMA,SAAOymF,YACd04F,aAAaxtC,mCAAmC3xI,MAAKymF,YAAYzmF,YAoDpEq/K,2BAAsB,SAAtBA,sBAIT,OAHsB,IAAIxD,8BACtBzwJ,UAAW,qqBCnOJ,IAAAk0J,aACXn1K,MACIzK,MAAO,KACPmY,MACI2qE,UAAW,SAAAA,UAAAzjF,GAAC,OAAIA,aAAa65D,uBAGrChzC,OACIlmB,MAAO,EACPmY,MACIylD,aAAcL,aACdulB,UAAWz5E,OAAOw3J,YAG1B16I,QACInmB,MAAO,EACPmY,MACIylD,aAAcL,aACdulB,UAAWz5E,OAAOw3J,YAG1Bgf,cACI7/K,MAAO,GACPmY,MACIylD,aAAcL,aACdulB,UAAWz5E,OAAOw3J,YAG1Bif,eACI9/K,MAAO,GACPmY,MACIylD,aAAcL,aACdulB,UAAWz5E,OAAOw3J,YAG1B9mJ,QACI/Z,OAAQ,KAAM,MACdmY,MACI2qE,UAAW,cACXC,aAAc,SACdH,qBAAqB,EACrBhlB,aAAc,SAAAA,aAAA5D,KAA2Bw6C,WAAc,IAAAx5C,MAAA+kH,sBAAA/lH,KAAA,GAAvCjgD,OAAuCihD,MAAA,GAAAglH,OAAAhlH,MAAA,GAAAilH,uBAAA,IAAAD,kBAE3C5wF,MACJ8wF,gBAH+C,IAAAD,qCAM/CC,QAAUzhH,kBAA8B,OAAX1kD,UAAuBy6F,YAGxD,IAAMq5D,UAAYpvG,eAAeyhH,QAAS/8D,6BAE1C,ODjDkB,SAArBg9D,mBAAsBpmK,QAE/B,OADAA,OAAOg1J,UAAUC,UAAY/nK,KAAKkK,IAAI,GAAIlK,KAAKmK,IAAI,GAAI2I,OAAOg1J,UAAUC,YACjEj1J,OC+CYomK,CADS1hH,eAAeovG,UAAW9zJ,kXCxDrCqmK,wCAYjB,SAAAA,cAAa9qF,WAAYoD,YAAa3+E,OAAQ4V,2KAAc0wJ,CAAAp8K,KAAAm8K,eACxDn8K,KAAKilF,WACLjlF,KAAK6vH,gBACL7vH,KAAKq8K,aAGLr8K,KAAKqrG,cAAgB3/E,aAErB1rB,KAAKy0F,YAAYA,aACjBz0F,KAAKqxF,WAAWA,YAChBrxF,KAAK8V,OAAOA,0TAQZ,OACI2+E,YAAaz0F,KAAKy0F,cAClB3+E,OAAQ9V,KAAK8V,SACb4sI,SAAU1iJ,KAAK0iJ,kDASf5sI,SACJ,OAAIA,SACA9V,KAAKilF,QAAUzqB,eAAex6D,KAAKilF,YAAenvE,SAClD9V,KAAKilF,QAAQswE,OAAOtzI,MAAQjf,KAAKmK,IAAI,EAAGnN,KAAKilF,QAAQswE,OAAOtzI,OACrDjiB,MAEJA,KAAKilF,wDAQHwP,cACT,OAAIA,cACAz0F,KAAK6vH,aAAer1D,eAAex6D,KAAK6vH,iBAAoBp7B,cAErDz0F,MAEJA,KAAK6vH,uDAQN6yB,WACN,OAAIA,WACA1iJ,KAAKq8K,UAAY/mH,oBhBmJV,MAIG,SADA,UgBtJiDotF,WAEpD1iJ,MAEJA,KAAKq8K,sDAQL70I,QACP,OAAIA,QACAxnC,KAAK8wJ,WAAatpH,OACXxnC,MAEJA,KAAK8wJ,6DAQFtpH,QACV,OAAIA,QACAxnC,KAAK+wJ,cAAgBvpH,OACdxnC,MAEJA,KAAK+wJ,gEAQFvpH,QACV,OAAIA,QACAxnC,KAAKs8K,cAAgB90I,OACdxnC,MAEJA,KAAKs8K,4DAQJjrF,aACR,OAAIA,aACArxF,KAAKu8K,YAAclrF,YAEZrxF,MAEJA,KAAKu8K,yNC1Ib,IAAMC,uBAAqBC,oCAAAC,yBjBgCZ,UiBhCYD,oCAAAE,sBjB6Kb,QiB3KO,SAFMF,oCAAAE,mBjBkLb,QiB/KO,WAHMF,oCAAAE,mBjBuLb,QiBnLO,GAJMF,oCAAAE,mBjB4LV,YiBvLO,GALGF,oCAAAE,mBjBiMX,UiB3LO,GANIA,qBAAAF,oCAAAC,sBjB2PR,aiBnPG,UARKD,oCAAAC,sBjB4PZ,SiBnPG,IATSD,oCAAAC,sBjB2MP,eiBjMKvmF,QAAUpjF,aAVR0pK,oCAAAC,sBjBsMN,gBiB3LKvmF,QAAUpjF,aAXT0pK,oCAAAC,sBjBgNR,aiBpMKvmF,QAAUpjF,aAZP0pK,oCAAAC,sBjB+CD,kBiBlCG,GAbFD,oCAAAC,sBjBoDE,qBiBtCG,GAdLD,oCAAAC,sBjB0CJ,gBiB3BG,GAfCD,oCAAAC,sBjBqCP,aiBrBG,GAhBIA,uBAuBrBE,sBAAoBH,oCAAAI,yBjBDP,QiBEG,KADIJ,oCAAAI,sBjBIN,SiBFG,KAFGJ,oCAAAI,sBjB4IP,YiBzIG,KAHIJ,oCAAAI,sBjBiJN,aiB7IG,KAJGA,spBCvBjC,IAAMtqJ,WAAO+rC,QAAQ/rC,KA2BfuqJ,WAAa,SAAbA,WAAchiL,EAAGiiL,MACnB,IAAI/gK,MAAQ,EACZ,IAAK,IAAMd,KAAK6hK,KACZ,GAAIjiL,EAAIiiL,KAAK7hK,GAAI,CACbc,MAAQd,EACR,MAGR,OAAOc,OAUEghK,gBAAkB,SAAlBA,gBAAmBx1I,OAAQ1xB,QAAW,IACvCmnK,aAAiBnnK,OAAjBmnK,aACJC,aAAe11I,OAAO,GAAGnmC,OAAS,EAAImmC,OAAO,GAAKA,OAAO,GAgB7D,OAfIy1I,cACAC,aAAe11I,OAAO,GAAGnmC,OAAS,EAAnB87K,wBAA2B31I,OAAO,OACjD01I,aAAe11I,OAAO,GAAGnmC,OAAS,KAAnBiE,OAAA63K,wBAA2BD,cAA3BC,wBAA4C31I,OAAO,KAAM01I,cAExEA,aAAeA,aAAal4K,IAAI,SAAC4uF,IAAK0+B,UAClC,IAAI8qD,WAOJ,OANI51I,OAAO,GAAGnmC,OAAS,IACnB+7K,QAAUD,wBAAI31I,OAAO,GAAG8qF,YAExB9qF,OAAO,GAAGnmC,OAAS,IACnB+7K,WAAO93K,OAAA63K,wBAAOC,SAAPD,wBAAmB31I,OAAO,GAAG8qF,aAEjC8qD,UAGRF,cA0KEG,0BAAsB,SAAtBA,sBAA0D,IAAnCxnF,KAAmC3xF,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAAxB4R,OAAwB5R,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAAhBogL,YAAgBp5K,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAAAqgL,qBACpBznK,OAAvCmnK,+BAD2D,IAAAM,2CACrCC,aAAiB1nK,OAAjB0nK,aADqCC,gBAlOhD,SAAjBC,eAAkBT,cACpB,OAAIA,cAEIU,aAAcpM,uBACdqM,clB4KS,UkBxKbD,alBwKa,QkBvKbC,cAAerM,wBA2NqBmM,CAAeT,cAA/CU,aAF2DF,gBAE3DE,aAAcC,cAF6CH,gBAE7CG,cACdpmK,OAAWq+E,KAAXr+E,OACFqmK,YAhEoB,SAAjBC,eAAkBb,aAAcO,cACzC,OAAKP,cAOD/6J,OAAQ,EACRD,MAAOu7J,aAAav7J,QANhBC,OAAQs7J,aAAat7J,OACrBD,MAAO,GA4DK67J,CAAeb,aAAcO,cAEjD,GAAIhmK,OAAO,GAAGnb,IAAK,KAAA0hL,cACTtvE,cAAYuvE,qBAAAD,iBAAMJ,aAAe,GAArBK,qBAAAD,cAAyBH,cAAgB,GAAzCG,eAalB,OAXAvmK,OAAO9R,QAAQ,SAACu4K,WAEZ,IAAMl7G,MAAQs6G,oBAAoBY,UAAWnoK,OAAQwnK,aAErD7uE,aAAakvE,cAAgB36K,KAAKmK,IAAIshG,aAAakvE,cAAe56G,MAAM46G,cACpEE,YAAYF,eAGhBlvE,aAAamvE,iBAAmB76G,MAAM66G,iBAE1C/nF,KAAK9yB,MAAQ0rC,aACNA,aAGX,OA7D2B,SAAlBwlD,gBAAmBp+D,KAAMn0B,SAAUm8G,aAAiC,IAAA9nH,KAApBmoH,WAAoBh6K,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MACrEy5K,aAAgCj8G,SAAhCi8G,aAAcC,cAAkBl8G,SAAlBk8G,cAClBO,kBAAoB,EACpBC,mBAAqB,EAoBzB,OAnBAvoF,KAAKr+E,OAAO9R,QAAQ,SAAC24K,YAAe,IAAAC,YAC5BC,SAAW,EACXC,SAAW,EACfH,WAAW34K,QAAQ,SAACopJ,YAAat8B,UAC7Bs8B,YAAYuB,oBACZ,IAAMttF,MAAQ+rF,YAAYmF,kBACpBwqB,iBAAmB3vB,YAAYgvB,eAAeD,YAAYD,gBAEhEY,SAAWx7K,KAAKmK,IAAIqxK,UAAWz7G,MAAM66G,eAAgBa,kBACrDP,WAAW1rD,UAAYxvH,KAAKmK,IAAI+wK,WAAW1rD,WAAa,EAAGzvD,MAAM46G,eACjEY,WAAaL,WAAW1rD,YAE5B4rD,oBAAsBI,SACtBL,kBAAoBn7K,KAAKmK,IAAIgxK,kBAAmBI,UAChD1oF,KAAK9yB,OAALi7G,qBAAAM,eACKV,cAAgB56K,KAAKgY,KAAKojK,qBAD/BJ,qBAAAM,YAEKX,aAAe36K,KAAKgY,KAAKmjK,oBAF9BG,eAKJN,qBAAAjoH,QACK6nH,cAAgBQ,oBADrBJ,qBAAAjoH,KAEK4nH,aAAeQ,mBAFpBpoH,KAsCOk+F,CAAgBp+D,MAAQ8nF,0BAAcC,6BAAiBC,YAAaP,cAoDlEoB,sBAAwB,SAAxBA,sBAAyB7oF,KAAMonF,cACxC,GAAIpnF,KAAKr+E,OAAO,GAAGnb,IAAK,CACpB,IAAMo4B,OAaN,OAZAohE,KAAKr+E,OAAO9R,QAAQ,SAAC2+D,OACZ44G,aAGiByB,sBAAsBr6G,MAAO44G,cACrCv3K,QAAQ,SAAC1I,EAAGlC,GAAM,IAAA6jL,OACxBlqJ,IAAI35B,GAAK25B,IAAI35B,QACb6jL,OAAAlqJ,IAAI35B,IAAGwJ,KAAPjH,MAAAshL,OAAAxB,wBAAengL,MALnBy3B,IAAInwB,KAAJjH,MAAAo3B,IAAG0oJ,wBAASuB,sBAAsBr6G,MAAO44G,kBASjDpnF,KAAKruD,OAAS/S,IACPA,IAOX,OAFIohE,KAAKruD,OAHJy1I,aAGapnF,KAAKr+E,OAAO,GAAGxS,IAAI,SAACw2D,IAAKg3D,UAAN,OAAmB38B,KAAKr+E,OAAOxS,IAAI,SAAA4uF,KAAG,OAAIA,IAAI4+B,cAFjE38B,KAAKr+E,OAIhBq+E,KAAKruD,QAwIHo3I,kBAAoB,SAApBA,kBAAqBnqJ,IAAKoqJ,IAAK/jK,KAAX,OAAmB2Z,IAAIrpB,MAAMyzK,KAAM/jK,MCtdvD+0E,2BACT/5E,QACI6jD,aAAc,SAAAA,aAAC32C,QAASjnB,OAAV,OAAoBy+D,eAAex3C,QAAQiiE,YAAelpF,SAE5EuhL,eACAlzE,kBACAqE,iBCHSte,4CACT2uF,gBACA9tF,YAAa,OACb2vD,qBAAqB,EACrB68B,cACIt7J,OAAQ,IACRD,MAAO,IACPszI,OAAQ,GAEZ0nB,cAAc,EACd9gC,MpB0OmB,UoBzOnB4iC,0TCDiBC,sCAQjB,SAAAA,aAAax3I,QAAqB,IAAb1xB,OAAa5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,kKAAA+6K,CAAAj/K,KAAAg/K,cAE9Bh/K,KAAKk/K,cAAgB,EACrBl/K,KAAKm/K,eAAiB33I,OAAO,OAC7BxnC,KAAKo/K,iBAAmB53I,OAAO,OAC/BxnC,KAAKq/K,gBACLr/K,KAAKs/K,mBAGL/lH,sBAAsBv5D,KAAM6vF,2BAC5B,IAAM8hB,OAASn2G,OAAO0M,UAAWlI,KAAK4F,YAAYuqF,iBAClDnwF,KAAK8V,OAAO0kD,eAAem3C,OAAQ77F,SAEnC9V,KAAKu/K,cAAgBvC,iBAAiBx1I,OAAO,OAAUA,OAAO,QAAWxnC,KAAK8V,4UAU9E,MAAM,IAAInM,MAAM2wD,UAAUC,sFAI1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,4EAU1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,0FAI1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,wEAY1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,gFAa1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,wFAU1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,8EAW1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,sEAW1B,OAAIr2D,UAAO7C,OACArB,KAEJA,KAAKm/K,yEAIZ,OAAIj7K,UAAO7C,OACArB,KAEJA,KAAKo/K,qDAIZ,OAAIl7K,UAAO7C,OACArB,KAEJA,KAAKw/K,sDAOF,IAAAC,aHnEQ,SAAbjQ,WAAcxsJ,SACvB,IAAI08J,cACAC,aAAe,EACfxjC,MlBwKe,UkBvKbn+E,OAASzrC,aACTnuB,QACAw7K,aAAe58J,QAAQu8J,cACvBM,cAAgB78J,QAAQ68J,gBACxBC,gBAAkB98J,QAAQ88J,kBARGrd,gBASCz/I,QAAQlN,SAApCmnK,aAT2Bxa,gBAS3Bwa,aAAc8C,UATatd,gBASbsd,UAEtB,GAAK9C,aAsCE,CAQH,GANI9gC,MADyB,IAAzB0jC,cAAcx+K,OlByHH,UkBvHuB,IAA3By+K,gBAAgBz+K,OlBwHV,YkBrHLw+K,cAAcx+K,QAAUy+K,gBAAgBz+K,OlBoHrC,UACE,YkBnHbw+K,cAAcx+K,OAAS,EAAG,CAC1B,IAAK,IAAIvG,IAAI,EAAGA,IAAI+kL,cAAcx+K,OAAS,EAAGvG,MAC1CsJ,KAAKE,KAAKxJ,KAGdsJ,KAAKE,KAAKu7K,cAAcx+K,OAAS,GlB8GpB,ckB5GT86I,QACAwjC,aAAeE,cAAcx+K,OAAS,GAG9C,GAAIy+K,gBAAgBz+K,OAAS,EAAG,CAE5B,IADA,IAAM2+K,oBAAsBH,cAAcx+K,OACjCvG,IAAIglL,gBAAgBz+K,OAAS,EAAGvG,IAAI,EAAGA,MAC5CsJ,KAAKE,KAAKxJ,IAAIklL,qBAGlB57K,KAAKE,KAAK07K,qBlBiGC,YkB/FP7jC,QACAwjC,aAAeK,qBAUvB,IAAIC,UAPJ77K,KAAKsB,QAAQ,SAACrJ,KACV,IAAIo/I,SAAW,EACf,OAAOz9E,OAAO3hE,IAAI,SAACjB,GAEf,OADAqgJ,UACA,GAAAn2I,OAAUlK,EAAEiB,KAAKopC,UAAjB,KAAAngC,OAA8Bw3K,WAAWrhC,QAASskC,gBAI1DE,UAAYL,aAAa,GAAG56K,IAAI,SAACw2D,IAAKg3D,UAAN,OAAmBotD,aAAa56K,IAAI,SAAA4uF,KAAG,OAAIA,IAAI4+B,cAC/EktD,WAAa1hH,OAAOtwD,QAAQuyK,eA9Eb,CAQf,GANI9jC,MADyB,IAAzB0jC,cAAcx+K,OlB+JH,UkB7JuB,IAA3By+K,gBAAgBz+K,OlB8JV,YkB3JLw+K,cAAcx+K,QAAUy+K,gBAAgBz+K,OlB0JrC,UACE,YkBzJbw+K,cAAcx+K,OAAS,EAAG,CAC1B,IAAK,IAAIvG,EAAI,EAAGA,EAAI+kL,cAAc,GAAGx+K,OAAS,EAAGvG,IAC7CsJ,KAAKE,KAAKxJ,GAEdsJ,KAAKE,KAAKu7K,cAAc,GAAGx+K,OAAS,GlBqJvB,ckBpJT86I,OAAkD,IAA3B2jC,gBAAgBz+K,SACvCs+K,aAAeE,cAAc,GAAGx+K,OAAS,GAGjD,GAAIy+K,gBAAgBz+K,OAAS,EAAG,CAE5B,IADA,IAAM6+K,UAAYL,cAAcx+K,OAAS,EAAIw+K,cAAc,GAAGx+K,OAAS,EAC9DvG,GAAIglL,gBAAgB,GAAGz+K,OAAS,EAAGvG,GAAI,EAAGA,KAC/CsJ,KAAKE,KAAKxJ,GAAIolL,WAElB97K,KAAKE,KAAK47K,WlB0IC,YkBxIP/jC,QACAwjC,aAAeO,gBAGnBP,aAAeE,cAAcx+K,OAAS,EAAIw+K,cAAc,GAAGx+K,OAAS,EAAI,EAE5E+C,KAAKsB,QAAQ,SAACrJ,KACV,IAAIo/I,SAAW,EACf,OAAOz9E,OAAO3hE,IAAI,SAACjB,GAEf,OADAqgJ,UACA,GAAAn2I,OAAUlK,EAAEiB,KAAKopC,UAAjB,KAAAngC,OAA8Bw3K,WAAWrhC,QAASskC,gBAG1DL,WAAa1hH,OAAOtwD,QAAQkyK,cA2ChC,OAAS5zH,KAAM0zH,WAAYC,2BGvBQnQ,CAAWxvK,MAAlCgsD,KADEyzH,aACFzzH,KAAM2zH,aADJF,aACIE,aAEd,OADA3/K,KAAKk/K,cAAgBS,aACd3zH,+DAUP,OAAOhsD,KAAKyuG,2EAUGxsF,MAAOC,QACtBliB,KAAKoqG,gBAAiBnoF,YAAOC,gBAC7B,IAAM8pC,KAAOhsD,KAAKgsD,OACZm0H,eAAiBngL,KAAKogL,oBAAoB7O,uBAAQvlH,MAClDq0H,cAAgBrgL,KAAKogL,oBrBiBd,QqBjByCp0H,MAChDv5B,MAAQzyB,KAAKsgL,eAAeD,cAAeF,gBAIjD,OAFAngL,KAAKugL,eAAiBvgL,KAAKwgL,qBAAqB/tJ,OAChDzyB,KAAKygL,iBAAmBzgL,KAAK0gL,mBAAmBz+J,MAAOC,QAChDliB,qEAYUgH,KAAM04K,YAAsC,IAAA9jG,MAAA57E,KAA1ByyB,MAA0BvuB,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,GAAlB,EAAGw9D,SAAex9D,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAE7D,GADAw9D,SAASjvC,OAASzvB,KAAKmK,IAAIu0D,SAASjvC,QAAU,EAAGitJ,WAAW38G,MAAM/7D,OAC9D04K,WAAWloK,OAAQ,CACnB,IAAMmpK,WAAaluJ,MAAQ,EAC3BitJ,WAAWloK,OAAO9R,QAAQ,SAAC2+D,OACnBA,MAAMtB,QACNrB,SAAWka,MAAKwkG,oBAAoBp5K,KAAMq9D,MAAOs8G,WAAYj/G,aAIzE,OAAOA,uEAUP,OAAO1hE,KAAKygL,mFAUZ,OAAOzgL,KAAKugL,iFAUM9tJ,OAClB,IAAMgC,OAEN,OH0P6B,SAAxBmsJ,wBAAiE,IAAxCnsJ,IAAwCvwB,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAA9BuuB,MAA8BvuB,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAAvB2jL,WAAuB38K,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAAX09K,OAAW12K,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EACpE4jL,aAAelG,OAAOmG,cAGxB9D,aAFWrC,OAAO9kK,SAElBmnK,aAGAjxH,KAEA60H,WAFA70H,KACA4zH,aACAiB,WADAjB,aAGJ,GAAc,IAAVntJ,MAAa,CACb,IAAMuuJ,aAnJa,SAAdC,YAAez5I,OAAQy1I,aAAc6D,cAC9C,IAAMjB,iBACAC,mBAsBN,OArBI7C,aACAz1I,OAAO9hC,QAAQ,SAACkuF,IAAK0+B,UACbA,UAAYwuD,aACZhB,gBAAgBx7K,KAAKsvF,KAErBisF,cAAcv7K,KAAKsvF,OAI3BpsD,OAAO9hC,QAAQ,SAACkuF,IAAK0+B,UACjB1+B,IAAIluF,QAAQ,SAACqyI,OAAQiB,aACbA,aAAe8nC,cACfhB,gBAAgBxtD,UAAYwtD,gBAAgBxtD,cAC5CwtD,gBAAgBxtD,UAAUhuH,KAAKyzI,UAE/B8nC,cAAcvtD,UAAYutD,cAAcvtD,cACxCutD,cAAcvtD,UAAUhuH,KAAKyzI,cAKrC8nC,cAAeC,iBA2HEmB,CAAYj1H,KAAKxkB,OAAQy1I,aAAc6D,cAO5D,OANArsJ,IAAInwB,MACAkjC,OAAQwkB,KAAKxkB,OACbq4I,cAAemB,aAAa,GAC5BlB,gBAAiBkB,aAAa,GAC9Bj+G,MAAO/W,KAAK+W,QAETtuC,IAEX,IAAMysJ,UAAYzuJ,MAAQ,EAO1B,OANAu5B,KAAKx0C,OAAO9R,QAAQ,SAAC1I,GACjB4jL,sBAAsBnsJ,IAAKysJ,WACvBl1H,KAAMhvD,EACN4iL,2BACDhF,UAEAnmJ,IGvRHmsJ,CAAsBnsJ,IAAKhC,MAAOzyB,KAAKmhL,mBAAoBnhL,MACpDy0B,4DA1FP,OAAO07D,sxCC7HMixF,mDAQjB,SAAAA,gBAAa55I,QAAqB,IAAAo0C,MAAb9lE,OAAa5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,qKAAAm9K,CAAArhL,KAAAohL,kBAC9BxlG,MAAA0lG,qCAAAthL,KAAAuhL,0BAAAH,iBAAAnmL,KAAA+E,KAAMwnC,OAAQ1xB,UAETirK,cAAiBv5I,OAAO,GAAGnmC,OAAS,EAAImmC,OAAO,GAAG,GAAGnmC,OAAS,EACnEu6E,MAAK2jG,cAAgBvC,iBAAiBx1I,OAAO,OAAUA,OAAO,QAAWo0C,MAAK9lE,UAG9E8lE,MAAK4jG,OACDnjL,IAAKm1K,SACLh6J,OAAQokE,MAAK4zF,cAEjB5zF,MAAKmiG,cAAgBniG,MAAKyhG,sBAXIzhG,uYAROojG,iVA6BrC,IAAMU,WAAa1/K,KAAKgsD,OAExB,OADA0yH,sBAAsBgB,YAAY,GAC3BrC,0BAAoBqC,WAAY1/K,KAAK8V,SAAU9V,KAAKs9K,mFAGxC57G,UAAU,IAAAsa,OAAAh8E,KAEzBwhL,WAGA9/G,SAHA8/G,WACAC,UAEA//G,SAFA+/G,UACAv/J,OACAw/C,SADAx/C,OAEJ,OAAOliB,KAAKugL,eAAev7K,IAAI,SAAC08K,WAAY5mL,GACxC,IAAM6mL,gBAAmBD,sBAAYD,oBAAWD,sBAAYI,YAAa9mL,GAD3B+mL,sBAED7lG,OAAK8lG,kBAAkBH,gBAA5DI,OAFsCF,sBAEtCE,OAAQC,WAF8BH,sBAE9BG,WAAYC,aAFkBJ,sBAElBI,aACtB9B,gBAAkBj+J,OAAQA,QAC1B40H,eAAiBirC,OAEvB,OACIC,YACIE,QAASF,WAAW,GACpBG,UAAWH,WAAW,IAE1BC,cACIC,QAASD,aAAa,GACtBE,UAAWF,aAAa,IAE5B//J,QACIggK,QAAS/B,eAAe,GACxBgC,UAAWhC,eAAe,IAE9Bl+J,OACIigK,QAASprC,eAAe,GACxBqrC,UAAWrrC,eAAe,mEAYtB,IAAAt2C,aAIZxgG,KAAK8V,SAFLmnK,aAFYz8E,aAEZy8E,aACA8B,iBAHYv+E,aAGZu+E,iBAEEv3I,OAASxnC,KAAKu/K,cACdvzH,KAAOwO,kBAAmBx6D,KAAKgsD,QAC/Bo2H,WAAarD,iBAAiB,GAC9BsD,WAAatD,iBAAiB,IAAM35K,OAAOkL,kBAC3CsvK,aAAgB3C,aACtBz1I,OAAOp8B,MAAM,GAAGpG,IAAI,SAAAhI,GAAC,OAAI4hL,kBAAkB5hL,EAAGolL,WAAYC,cADrBzD,kBAAkBp3I,OAAQ46I,WAAYC,YAM3E,OAHAr2H,KAAKx0C,OAASonK,kBAAkB5yH,KAAKx0C,OAAQ4qK,WAAYC,YACzDr2H,KAAKxkB,OAASo3I,kBAAkB5yH,KAAKxkB,OAAQ46I,WAAYC,aAGrDr2H,UACA4zH,mGAIiBl+G,UACrB,IAAI4gH,oBACA5V,eACA6V,WACAz+F,cACA0+F,iBAAmB,EAEnBh7I,OAKAk6B,SALAl6B,OACOi7I,eAIP/gH,SAJAz/C,MACaw/J,UAGb//G,SAHA47G,YACUoF,aAEVhhH,SAFAn+C,SACArB,OACAw/C,SADAx/C,OAEE+nD,SAAWjqE,KAAK8V,SAASm0D,SACzB+1G,oBAAsBhgL,KAAK6/K,gBAAgBx+K,OAASrB,KAAK6/K,gBAAgB,GAAGx+K,OAAS,EAErFywG,QAENwwE,oBAAsBG,eACtB/V,eAAiBgW,cAGb5+F,WADa,IAAb7Z,UACc+1G,oBAAsB,EAAGA,qBAGb,IAAb/1G,UAAkB+1G,oBAAsB,IAAMA,sBAGpDt6K,QAAQ,SAAC5K,GAChBg3G,KAAKh3G,GAAK2mL,UAAU3mL,GACpB0nL,kBAAoBf,UAAU3mL,GAC9BwnL,qBAAuBxwE,KAAKh3G,GAC5B4xK,gBAAkB56D,KAAKh3G,KAE3B0sC,OAAO,GAAG9hC,QAAQ,SAAC1I,EAAGlC,IACa,IAA3BgpF,WAAWz/E,QAAQvJ,KACnBg3G,KAAKh3G,GAAKwnL,qBAAuBb,UAAU3mL,GAAK4xK,mBAGxDllI,OAAO9hC,QAAQ,SAAAkuF,KAAG,OAAIA,IAAIluF,QAAQ,SAAC81D,IAAK8+E,OACF,IAA9Bx2D,WAAWz/E,QAAQi2I,OACnB9+E,IAAI60F,kBAAkBv+C,KAAKwoC,MAAOp4H,QAElCqgK,QAAQjoC,MAAQt3I,KAAKmK,IAAIo1K,QAAQjoC,OAAS,EAAGt3I,KAAKsH,MAAMkxD,IAAIy4F,kBAAkBhyI,SAE9EsgK,QAAQjoC,MAAQ,MAIxB,IAAMqoC,cAAgBF,eAAiBF,QAAQt3K,OAAO,SAACjP,EAAGO,GAAJ,OAAUP,EAAIO,IAQpE,OAPIomL,cAAgB,EAChBJ,QAAUA,QAAQv9K,IAAI,kBAAM,IAE5B8+E,WAAWp+E,QAAQ,SAAC5K,GAChBynL,QAAQznL,GAAKkI,KAAKsH,MAAMq4K,eAAiB7wE,KAAKh3G,GAAK0nL,kBAAoB,MAGxED,8DAWKlC,cAAeF,gBAC3B,IAAIrlL,EACIonB,OAAWliB,KAAKoqG,iBAAhBloF,OAER,IAAKpnB,EAAI,EAAGA,EAAIqlL,eAAe9+K,UACvB8+K,eAAerlL,IAAMonB,QADUpnB,KAIvC,OAAOkI,KAAKkK,IAAImzK,cAAch/K,OAAS,EAAGvG,iEAY1BmnB,MAAOC,QAAQ,IAAA6+D,OAAA/gF,KAC3BwhL,cACAC,aACEnE,YAAct9K,KAAKs9K,cAEnB/5J,SAAW+5J,YAAYryK,OAAO,SAACjP,EAAGO,GAEpC,OADAP,GAAKO,IAGHqmL,cAAgB5iL,KAAK6iL,yBACvBr7I,OAAQxnC,KAAKu/K,cACbh8J,kBACA+5J,wBACAr7J,YACAC,gBAYJ,OATAliB,KAAKugL,eAAe76K,QAAQ,SAACg8K,YACzB,IAGMxiK,SAAY4jK,OAFH,EAEWC,QADV,EACmBv7I,OAHpBk6I,WAAWl6I,OAGiBvlB,YAAOC,cAAQs/J,sBAAYC,oBAAWmB,6BAC3ElhH,SAAWqf,OAAKiiG,uBAAuB9jK,SAC7CuiK,UAAY//G,SAAS+/G,UACrBD,WAAa9/G,SAAS8/G,aAEnBxhL,KAAKijL,uBAAwB/gK,cAAQD,YAAOu/J,sBAAYC,4FAS3C//G,UACpB,IACIwhH,SACAH,QAFAR,WAGEjF,YAAct9K,KAAKs9K,cAJK/qE,cAW1BvyG,KAAK8V,SAJL6qI,oBAP0BpuC,cAO1BouC,oBACAm+B,aAR0BvsE,cAQ1BusE,aACA7B,aAT0B1qE,cAS1B0qE,aACAkG,OAV0B5wE,cAU1B4wE,OAEI37I,OAAyDk6B,SAAzDl6B,OAAQtlB,OAAiDw/C,SAAjDx/C,OAAQs/J,WAAyC9/G,SAAzC8/G,WAAYC,UAA6B//G,SAA7B+/G,UAAWmB,cAAkBlhH,SAAlBkhH,cAC/CG,QJ6C0B,SAArBK,mBAAsB57I,OAAQgrF,UACvC,IAAItwG,OAAS,EACTD,MAAQ,EAOZ,OANAulB,OAAO9hC,QAAQ,SAACkuF,KACZ,IACMyvF,OADMzvF,IAAI4+B,UACGyhC,kBACnBhyI,MAAQjf,KAAKmK,IAAI8U,MAAOohK,OAAOphK,OAC/BC,QAAUmhK,OAAOnhK,UAGjBD,YACAC,eIxDUkhK,CAAmB57I,OAAQxnC,KAAKk/K,eAAeh9J,OAEzD,IAAMqB,SAAW+5J,YAAYryK,OAAO,SAACjP,EAAGO,GAEpC,OADAP,GAAKO,IAGTmlE,SAAS47G,YAAcA,YACvB57G,SAASn+C,SAAWA,SAEhBg/J,QADAh/J,SAAW,EACDq/J,cAEAtF,YAAYt4K,IAAI,kBAAM,IAEpCk+K,SJ+J4B,SAAvBI,qBAAwBtgK,SACjC,IAEIugK,oBAFAC,QAAU,EACVC,UAAY,EAGZxG,aAQAj6J,QARAi6J,aACA6B,aAOA97J,QAPA87J,aACA4E,gBAMA1gK,QANA0gK,gBACAxhK,OAKAc,QALAd,OACAy+H,oBAIA39H,QAJA29H,oBACAwiC,OAGAngK,QAHAmgK,OACA37I,OAEAxkB,QAFAwkB,OACA8yG,KACAt3H,QADAs3H,KAGAwkC,mBAAoC5hL,IAApB4hL,aAAa,KAC7B0E,QAAU1E,aAAa7zK,OAAO,SAACjP,EAAGO,GAE9B,OADAP,GAAKO,KAIT4mL,aAAwBjmL,IAAdimL,OAAO,KACjBM,UAAYN,OAAOl4K,OAAO,SAACjP,EAAGO,GAE1B,OADAP,GAAKO,KAIbgnL,oBAAsBG,gBAAkB1gL,KAAKsH,MAAMo5K,gBAAkBD,WAErE,IAAME,OAASn8I,OAAOnmC,OACtB,OAAOmmC,OAAOxiC,IAAI,SAAC4uF,IAAKwmD,MACpB,IACMr3E,MADM6wB,IAAI0mD,MACE2Z,kBAAkB/xI,OAChC0hK,WAAc7gH,MAA0CA,MAAQ7gD,QAAzCqhK,oBAAsBrhK,QASjD,OAPK+6J,eACG6B,aAAaz9K,OAAS,GAAKsiL,SAAW7E,aAAaz9K,OACnDuiL,WAAcL,oBAAsBzE,aAAa1kC,MAAQopC,SAClD7iC,qBAA0C,IAAnB39H,QAAQd,UACtC0hK,WAAcL,oBAAsBI,SAGrC3gL,KAAKsH,MAAMs5K,cIzMPN,EACP97I,cACA8yG,KAAMt6I,KAAKk/K,cACXh9J,OAAQ6gK,QACRW,gBAAiBxhK,OACjBy+H,wCACAm+B,0BACA7B,0BACAkG,gBAEA1B,UAAUpgL,OAAS,IACnBkhL,QAAUA,QAAQv9K,IAAI,SAAChI,EAAGlC,GAAJ,OAAUkI,KAAKmK,IAAInQ,EAAGykL,UAAU,GAAG3mL,IAAM,MAEnE2mL,UAAUn9K,KAAKi+K,SACf,IAAK,IAAIrnK,EAAI,EAAGA,EAAIumK,UAAUpgL,OAAQ6Z,IAClCumK,UAAUvmK,GAAKqnK,QAGnB,OADAf,WAAWl9K,KAAK4+K,WACPzB,oBAAWD,mFAUL9/G,UAAU,IAAAuf,OAAAjhF,KAInB6jL,YADF7jL,KAAK8V,SADL0nK,aAE6BjoB,OACzBmsB,WAAmDhgH,SAAnDggH,WAAYD,UAAuC//G,SAAvC+/G,UAAWD,WAA4B9/G,SAA5B8/G,WAAYI,YAAgBlgH,SAAhBkgH,YACrCp6I,OAASk6I,WAAWl6I,OACpBw6I,aAAe,IAAK,IACpBC,eAAiB,IAAK,IAEtBF,QAAU,EAAG,GACbjB,aAAe9gL,KAAK+gL,cAsB1B,OApBAv5I,OAAO9hC,QAAQ,SAACkuF,IAAKwmD,MACjBxmD,IAAIluF,QAAQ,SAACioD,KAAM2sF,MACf,IAAMwpC,UAAYtC,WAAWI,aAAaxnC,OAAS,EAC7C2pC,SAAWtC,UAAUG,aAAatnC,MAExC3sF,KAAK0iG,kBAAkB0zB,SAAUD,UAAYD,aAEhC,IAATzpC,MAAcE,KAAOwmC,cACrBmB,aAAa,GAAG3nC,MAAQypC,SACxBhC,OAAO,IAAMA,OAAO,IAAM,GAAKgC,UACf,IAAT3pC,MAAcE,MAAQwmC,eAC7BmB,aAAa,GAAG3nC,KAAOwmC,cAAgBiD,SACvChC,OAAO,IAAMA,OAAO,IAAM,GAAKgC,UAE/BzpC,OAASr5D,OAAKi+F,gBACd8C,WAAW,GAAG5nC,MAAQ0pC,UACtB9B,WAAW,GAAG5nC,MAAQ0pC,gBAK9BE,SAzBa,EAAG,GA0BhBjC,cACAC,sBACAC,uyCCrTSgC,yDAQjB,SAAAA,mBAAaz8I,QAAqB,IAAAo0C,MAAb9lE,OAAa5R,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,wKAAAggL,CAAAlkL,KAAAikL,qBAC9BroG,MAAAuoG,wCAAAnkL,KAAAokL,6BAAAH,oBAAAhpL,KAAA+E,KAAMwnC,OAAQ1xB,UAETirK,cAAgBv5I,OAAO,GAAGnmC,OAG/Bu6E,MAAK4jG,OACDnjL,IAAKo1K,YACLj6J,OAAQokE,MAAK4zF,cAEjB5zF,MAAKmiG,cAAgBniG,MAAKyhG,sBAVIzhG,gZARUojG,6VA4BxC,IAAMU,WAAa1/K,KAAKgsD,OAExB,OADA0yH,sBAAsBgB,YAAY,GAC3BrC,0BAAoBqC,WAAY1/K,KAAK8V,SAAU9V,KAAKs9K,mFAGxC57G,UAAU,IAAAsa,OAAAh8E,KAEzBwhL,WAIA9/G,SAJA8/G,WACAC,UAGA//G,SAHA+/G,UACAv/J,OAEAw/C,SAFAx/C,OACAD,MACAy/C,SADAz/C,MAGJ,OAAOjiB,KAAKugL,eAAev7K,IAAI,SAAC08K,WAAY5mL,GACxC,IAAM6mL,gBAAmBD,sBAAYD,oBAAWD,sBAAYI,YAAa9mL,EAAGonB,eAD9B2/J,sBAM1C7lG,OAAK8lG,kBAAkBH,gBAHvBqC,QAH0CnC,sBAG1CmC,QACAhC,WAJ0CH,sBAI1CG,WACAC,aAL0CJ,sBAK1CI,aAEE9B,eAAiB6D,QACjBltC,gBAAkB70H,MAAOA,OAE/B,OACI+/J,YACIE,QAASF,WAAW,GACpBG,UAAWH,WAAW,IAE1BC,cACIC,QAASD,aAAa,GACtBE,UAAWF,aAAa,IAE5B//J,QACIggK,QAAS/B,eAAe,GACxBgC,UAAWhC,eAAe,IAE9Bl+J,OACIigK,QAASprC,eAAe,GACxBqrC,UAAWrrC,eAAe,mEAYtB,IAAAt2C,aAIZxgG,KAAK8V,SAFLmnK,aAFYz8E,aAEZy8E,aACA8B,iBAHYv+E,aAGZu+E,iBAEEv3I,OAASxnC,KAAKu/K,cACdvzH,KAAOwO,kBAAmBx6D,KAAKgsD,QAC/Bo2H,WAAarD,iBAAiB,GAC9BsD,WAAatD,iBAAiB,IAAM35K,OAAOkL,kBAC3CsvK,aAAgB3C,aACtBz1I,OAAOp8B,MAAM,GAAGpG,IAAI,SAAAhI,GAAC,OAAI4hL,kBAAkB5hL,EAAGolL,WAAYC,cADrBzD,kBAAkBp3I,OAAQ46I,WAAYC,YAO3E,OAJAr2H,KAAKx0C,OAASonK,kBAAkB5yH,KAAKx0C,OAAQ4qK,WAAYC,YAEzDr2H,KAAKxkB,OAASwkB,KAAKxkB,OAAOxiC,IAAI,SAAAhI,GAAC,OAAI4hL,kBAAkB5hL,EAAGolL,WAAYC,eAGhEr2H,UACA4zH,mGAIiBl+G,UAAU,IAE3Bx/C,OAEAw/C,SAFAx/C,OACAs/J,WACA9/G,SADA8/G,WAEA/U,gBAAkBvqJ,OAClBmiK,cACAvgG,cACAwgG,QAAU,EACRr6G,SAAWjqE,KAAK8V,SAASm0D,SACzB+1G,oBAAsBhgL,KAAK6/K,gBAAgBx+K,OAsBjD,OApBiB,IAAb4oE,UACA6Z,YAAck8F,oBAAsB,EAAGA,qBACvCsE,QAAU,IAEVxgG,WAA0B,IAAb7Z,UAAkB+1G,oBAAsB,IAAMA,qBAC3DsE,QAAU,GAEd9C,WAAW97K,QAAQ,SAACs+K,QAAStiL,QACU,IAA/BoiF,WAAWz/E,QAAQ3C,SACnB2iL,WAAW3iL,OAASsiL,QACpBvX,iBAAmBuX,WAGvBvX,gBAAkB,EAClB4X,WAAaA,WAAWr/K,IAAI,kBAAM,IAElC8+E,WAAWp+E,QAAQ,SAACq+E,WAChBsgG,WAAWtgG,WAAa/gF,KAAKkK,IAAIs0K,WAAWz9F,WAAa0oF,gBAAmB6X,WAG7ED,iEAWKhE,eACZ,IAAIh6K,EACI4b,MAAUjiB,KAAKoqG,iBAAfnoF,MAER,IAAK5b,EAAI,EAAGA,EAAIg6K,cAAch/K,UACtBg/K,cAAch6K,IAAM4b,OADU5b,KAGtC,OAAOrD,KAAKkK,IAAImzK,cAAch/K,OAAS,EAAGgF,iEAY1B4b,MAAOC,QAAQ,IAAA6+D,OAAA/gF,KAC3BwhL,cACAC,aAYJ,OAVAzhL,KAAKugL,eAAe76K,QAAQ,SAACg8K,YACzB,IAGMxiK,SAAY4jK,OAFH,EAEWC,QADV,EACmBv7I,OAHpBk6I,WAAWl6I,OAGiBvlB,YAAOC,cAAQs/J,sBAAYC,qBAChEnE,YAAcv8F,OAAKiiG,uBAAuB9jK,SAChDuiK,UAAYnE,YAAYmE,UACxBD,WAAalE,YAAYkE,aAGtBxhL,KAAKijL,uBAAwB/gK,cAAQD,YAAOu/J,sBAAYC,4FAS3C//G,UACpB,IAAIwhH,YAEA17I,OAIAk6B,SAJAl6B,OACAvlB,MAGAy/C,SAHAz/C,MACAu/J,WAEA9/G,SAFA8/G,WACAC,UACA//G,SADA+/G,UAEEoC,YAAc7jL,KAAK8V,SAAS0nK,aAAajoB,OAEzCutB,OL4DiB,SAAlByB,gBAAmB3wF,KAC5B,IAAI1xE,OAAS,EACTD,MAAQ,EAMZ,OALA2xE,IAAIluF,QAAQ,SAAC81D,KACT,IAAM6nH,OAAS7nH,IAAIy4F,kBACnB/xI,OAASlf,KAAKmK,IAAI+U,OAAQmhK,OAAOnhK,QACjCD,OAASohK,OAAOphK,SAGhBA,YACAC,eKtEeqiK,CAAgB/8I,OAAOxnC,KAAKk/K,gBAAgBj9J,MACrDsgK,QLwKqB,SAAtBiC,oBAAuBxhK,QAASyhK,cAAiB,IAEtDhC,eAGAz/J,QAHAy/J,eACAxgK,MAEAe,QAFAf,MACA2xE,IACA5wE,QADA4wE,IAGA+sD,oBAGA8jC,aAHA9jC,oBACAs8B,aAEAwH,aAFAxH,aACA6B,aACA2F,aADA3F,aAEA0E,QAAU,EAOd,OANI1E,cAAgBA,aAAa,KAC7B0E,QAAU1E,aAAa7zK,OAAO,SAACjP,EAAGO,GAE9B,OADAP,GAAKO,KAINq3F,IAAI5uF,IAAI,SAACw2D,IAAKg3D,UACjB,IAAMzvD,MAAQvH,IAAIy4F,kBAAkBhyI,MAChCyiK,UAAa3hH,MAAoCA,MAAQ9gD,OAAnCwgK,eAAiBxgK,OAC3C,GAAIg7J,aACA,GAAI6B,aAAaz9K,OAAS,EACtBqjL,UAAajC,eAAiB3D,aAAatsD,UAAYgxD,aACpD,GAAI7iC,qBAAiC,IAAV1+H,MAAa,CAC3C,IAAM0iK,OAAS/wF,IAAIvyF,OACnBqjL,UAAajC,eAAiBkC,OAGtC,OAAO3hL,KAAKsH,MAAMo6K,aKrMFF,EACZ5wF,IAAKpsD,OAAOxnC,KAAKk/K,eACjBj9J,MAAO6gK,OACPL,eAAgBxgK,OACjBjiB,KAAK8V,UAER0xB,OAAO9hC,QAAQ,SAACkuF,IAAKwmD,MAAN,OAAexmD,IAAIluF,QAAQ,SAAC81D,IAAK8+E,MAC5C,IAAMsqC,gBAAkBppH,IAAIy4F,kBAE5Bz4F,IAAI60F,kBAAkBkyB,QAAQjoC,MAAQupC,YAAae,gBAAgB1iK,QAEnEghK,SAAS9oC,MAAQp3I,KAAKmK,IAAI+1K,SAAS9oC,OAAS,EAAGp3I,KAAKsH,MAAMkxD,IAAIy4F,kBAAkB/xI,aAEhFs/J,WAAWngL,OAAS,IACpB6hL,SAAWA,SAASl+K,IAAI,SAAChI,EAAGlC,GAAJ,OAAUkI,KAAKmK,IAAInQ,EAAGwkL,WAAW,GAAG1mL,OAEhE0mL,WAAWl9K,KAAK4+K,UAChB,IAAK,IAAIhoK,EAAI,EAAGA,EAAIsmK,WAAWngL,OAAQ6Z,IACnCsmK,WAAWtmK,GAAKgoK,SAGpB,OADAzB,UAAUn9K,KAAKi+K,UACNf,sBAAYC,iFAUN//G,UAAU,IAAAuf,OAAAjhF,KAInB6jL,YADF7jL,KAAK8V,SADL0nK,aAE6BjoB,OACzBmsB,WAA2DhgH,SAA3DggH,WAAYx/J,OAA+Cw/C,SAA/Cx/C,OAAQu/J,UAAuC//G,SAAvC+/G,UAAWD,WAA4B9/G,SAA5B8/G,WAAYI,YAAgBlgH,SAAhBkgH,YAC7Cp6I,OAASk6I,WAAWl6I,OACpBw6I,aAAe,IAAK,IACpBC,eAAiB,IAAK,IACtB+B,SAAW,EAAG,GAEdlD,aAAe9gL,KAAK+gL,cAEpB8D,mBAAqB7kL,KAAK6iL,yBAA0B3gK,cAAQs/J,WAAYA,WAAW,SAsBzF,OApBAh6I,OAAO9hC,QAAQ,SAACkuF,IAAKwmD,MACjBxmD,IAAIluF,QAAQ,SAACioD,KAAM2sF,MACf,IAAMwpC,UAAYe,mBAAmBzqC,OAAS,EACxC2pC,SAAWtC,UAAUG,aAAatnC,MAExC3sF,KAAK0iG,kBAAkB0zB,SAAWF,YAAaC,WAElC,IAATxpC,MAAcF,KAAO0mC,cACrBkB,WAAW,GAAG5nC,MAAQ0pC,UACtBE,QAAQ,IAAMA,QAAQ,IAAM,GAAKF,WACjB,IAATxpC,MAAcF,MAAQ0mC,eAC7BkB,WAAW,GAAG5nC,KAAO0mC,cAAgBgD,UACrCE,QAAQ,IAAMA,QAAQ,IAAM,GAAKF,WAEjC1pC,OAASn5D,OAAKi+F,gBACd+C,aAAa,GAAG3nC,MAAQypC,SACxB9B,aAAa,GAAG3nC,MAAQypC,eAKhCC,gBACAjC,QA3BY,EAAG,GA4BfC,sBACAC,+gFC9QL,SAAS6C,qBAAsBt9I,OAAQxgC,MAC1C,OAAIwgC,OACOA,OAAOysH,kBAAkBjtJ,MAE7B,EAoBX,IAAMqpJ,+BAAoB,SAApBA,kBAAqB7oH,OAAQu6I,OAAQiC,SACvCx8I,OAAO9hC,QAAQ,SAACkuF,IAAKwmD,MACjBxmD,IAAIluF,QAAQ,SAACopJ,YAAaxU,MACtBwU,YAAYuB,kBAAkB0xB,OAAOznC,MAAO0pC,QAAQ5pC,YAK1D2qC,cAAgB,SAAhBA,cAAiBnK,OAAQoK,YAAaC,YACxC,IAAIC,QAAUtK,OAAO9kK,SAAP,GAAAxQ,OAAmB0/K,YAAnB,YAKd,OAJIC,WAAW5jL,OAAS,EAAI6jL,UACxBA,QAAU,EACVtK,OAAO9kK,OAAPqvK,+BAAA,GAAA7/K,OAAoB0/K,YAApB,WAA2CE,WAExCA,SAGLE,sBACFrtC,QACImmC,WxBiNsC,mCwBhNtC12I,OxBiNqB,ewBhNrBq7H,YxBoIa,QwBnIbwiB,WAAY1T,4BAEhB/9E,KACIsqF,WxB6MuC,iCwB5MvC12I,OxB6MkB,YwB5MlBq7H,YAAa0O,uBACb8T,WAAY3T,2BAkDd4T,wBAA0B,SAA1BA,wBAA2B1K,OAAQjpB,WAAY4zB,kBAAmBrhI,QAAxC,OAlCM,SAAhCshI,8BAAiC5K,OAAQ6K,eAAgBvH,WAAYh6H,QAAW,IAE9E2mH,WACA+P,OAAO9kK,SADP+0J,WAGArjI,OAGAi+I,eAHAj+I,OACAq7H,YAEA4iB,eAFA5iB,YACAwiB,WACAI,eADAJ,WAGJ,OAAQxa,YACR,IxBwKoB,WwBvKhB,OAAOqT,WACX,QACI,IAAMwH,cAAgBZ,qBAAqBlK,OAAOpzI,UAAWq7H,aAAe3+G,OAK5E,OAHIwhI,cAAgBxH,YAChBtD,OAAO+K,WAAPR,+BAAqBE,YAAa,IAE/BriL,KAAKmK,IAAI+wK,WAAYwH,gBAgBhCF,CAA8B5K,OAAQwK,qBAAqBzzB,YAAa4zB,kBAAmBrhI,SA+DzF0hI,oCAAyB,SAAzBA,uBAA0BhL,OAAQiL,mBAAsB,IAEtD3jK,OACA04J,OAAOnmF,cADPvyE,OAGAgiC,OACA02H,OAAO9kK,SADPouC,OALsD4hI,sBA5BzB,SAA/BC,6BAAgCnL,OAAQiL,mBAAsB,IAE5D3jK,OACA04J,OAAOnmF,cADPvyE,OAEEquI,aAAeqqB,OAAOrqB,eAGtBy1B,sBAAwBhjL,KAAKkK,IAAIqjJ,aAAa0D,kBAAkB/xI,OAAQA,OAAS,GAIvFquI,aAAaF,kBAAkBw1B,kBAAmBG,uBAGlD,IAGMC,gBAHkB11B,aAAa21B,oBAGGtL,OAAO9kK,SAASqwK,eAKxD,OACIC,mBAHuBH,gBAAgB/jK,OAAOggK,QAAU+D,gBAAgB/jK,OAAOigK,UAI/E6D,6CAakDD,CAA6BnL,OAAQiL,mBAAnFO,mBATkDN,sBASlDM,mBAAoBJ,sBAT8BF,sBAS9BE,sBAGtBK,+BAAiCnkK,OAASlf,KAAKkK,IAAI84K,sBAAuBI,oBAKhF,OACIA,sCACAJ,4CACAM,gBALoBhB,wBAAwB1K,OxBwCjC,MwBxC8CyL,+BAAgCniI,QAMzFmiI,gEAoDFE,iBACFC,UAAU,EACV3b,WxBOkB,UwBUhB4b,uCAA4B,SAA5BA,0BAA6B7L,QAAW,IAEtC12H,OACA02H,OAAO9kK,SADPouC,OAFsCglE,MAAAw9D,4BAIE/U,2BAAYD,0BAAU1sK,IAAI,SAACgC,MACnE,OAnBuB,SAAzB2/K,uBAA0B/L,OAAQ5zK,MACpC,IAAM2+K,WAAa/K,OAAO+K,aAKpBiB,mBACF/b,WAHA+P,OAAO9kK,SADP+0J,WAKA2b,SAAUb,WAAW3+K,OAGzB,OAAOxL,OAAO4I,KAAKmiL,iBAAiB9wK,MAAM,SAAAzY,GAAC,OAAIupL,gBAAgBvpL,KAAO4pL,kBAAkB5pL,KAQhF2pL,CAAuB/L,OAAQ5zK,MACxBk9C,OAEJ,IAR+B,GAW1C,OACI2iI,iBAZsC39D,MAAA,GAatC49D,eAbsC59D,MAAA,KAuBjC69D,uCAA4B,SAA5BA,0BAA6BnM,QACtC,IAAMtqB,UAAYsqB,OAAOtqB,YACnBC,aAAeqqB,OAAOrqB,eAFqBy2B,sBAhLvB,SAAxBC,sBAAyBrM,QAC3B,IAAMtqB,UAAYsqB,OAAOtqB,YAErBruI,MACA24J,OAAOnmF,cADPxyE,MAHkCilK,gBAQlCtM,OAAO9kK,SAFPy/I,OANkC2xB,gBAMlC3xB,OACArxG,OAPkCgjI,gBAOlChjI,OAIE2/H,YAActuB,OAAOtzI,MAGrBklK,eAAiBrC,qBAAqBx0B,UxB0D3B,SwBvDX82B,kBAAoBpkL,KAAKkK,IAAIi6K,eAAiBjjI,OAAQjiC,MAAQ,GAG9DolK,iCAAmCplK,MAAQmlK,kBAAoBvD,YAKrE,OACIsD,8BACAC,oCACAvB,kBALsBP,wBAAwB1K,OxB4FhC,SwB5FgDyM,iCAAkC,GAMhGA,mEA6JAJ,CAAsBrM,QAJtBuM,eAN6CH,sBAM7CG,eACAC,kBAP6CJ,sBAO7CI,kBACAC,iCAR6CL,sBAQ7CK,iCACAxB,kBAT6CmB,sBAS7CnB,kBAT6CyB,sBAiB7C1B,oCAAuBhL,OAAQiL,mBAH/BO,mBAd6CkB,sBAc7ClB,mBACAE,gBAf6CgB,sBAe7ChB,gBACAD,+BAhB6CiB,sBAgB7CjB,+BAhB6CkB,sBAsB7Cd,uCAA0B7L,QAF1BiM,iBApB6CU,sBAoB7CV,iBACAC,eArB6CS,sBAqB7CT,eAEJx2B,UAAUD,kBAAkB+2B,kBAAoBN,eAAgBR,gBAAkBO,kBAGlF,IAAMW,kBAAoBl3B,UAAU41B,oBAC9BuB,qBAAuBl3B,aAAa21B,oBAS1C,OANAnB,cAAcnK,OxB1FC,MwB0FY4M,mBAC3BzC,cAAcnK,OxB5FI,SwB4FY6M,sBAzHC,SAA7BC,2BAA8B9M,OAAQ4M,kBAAmBC,sBAAyB,IAAA1xH,KAAAgB,MAAA80D,MAAAmhC,MAAAhkB,MAC9E6xC,aAAeD,OAAOC,eAGxBtlB,OACAqlB,OAAO9kK,SADPy/I,OAEE7S,SAAWk4B,OAAOl4B,WAEpBz5H,IAEAy5H,SAFAz5H,IACAyzB,OACAgmG,SADAhmG,OAIEmnI,YAActuB,OAAOtzI,MAGrB+/J,YAAajsH,SAAGzwD,OAAHjI,MAAA04D,KAAA4xH,+BAAaH,kBAAkBxiL,IAAI,SAAAhI,GAAC,OAAIA,EAAEglL,WAAWE,YAGlE0F,kBAAmB7wH,UAAGzxD,OAAHjI,MAAA05D,MAAA4wH,+BAAaH,kBAAkBxiL,IAAI,SAAAhI,GAAC,OAAIA,EAAEilL,aAAaC,YAC1E2F,oBAAqBh8D,UAAGvmH,OAAHjI,MAAAwuH,MAAA87D,+BAAaH,kBAAkBxiL,IAAI,SAAAhI,GAAC,OAAIA,EAAEilL,aAAaE,cAG5EF,cAAej1B,UAAG1nJ,OAAHjI,MAAA2vJ,MAAA26B,+BAAaF,qBAAqBziL,IAAI,SAAAhI,GAAC,OAAIA,EAAEilL,aAAaC,YAGzE4F,qBAAuBL,qBAAqB,GAAGzF,WAAWE,QAC1D6F,wBAAyB/+C,UAAG1jI,OAAHjI,MAAA2rI,MAAA2+C,+BAAaF,qBAAqBziL,IAAI,SAAAhI,GAAC,OAAIA,EAAEglL,WAAWG,cAIvFtH,aAAan1K,QAAQ,SAAC8hC,OAAQ4yG,MAC1B5yG,OAAO9hC,QAAQ,SAACopJ,YAAaxU,MACzBwU,YAAYuB,kBAAkB4xB,aAAa3nC,MAAQupC,YAAa7B,WAAW5nC,MAAQypC,iBAM3FxzB,+BAAkBpnI,IAAI,GAAI2+J,iBAAkBE,sBAE5Cz3B,+BAAkBpnI,IAAI,GAAI4+J,mBAAoBC,sBAE9Cz3B,+BAAkB3zG,OAAO,GAAIkrI,iBAAkBG,wBAE/C13B,+BAAkB3zG,OAAO,GAAImrI,mBAAoBE,wBA+EjDL,CAA2B9M,OAAQ4M,kBAAmBC,uBAGlDnB,gBAAiBA,gBAAkBO,iBACnCM,eAAgBA,eAAiBL,eACjCT,+BAAgCA,+BAAiCQ,iBAEjET,sCACAP,oCACAwB,oEC1RFW,WAAa,SAAbA,WAAalyC,YAAU,OAAIA,WAAW7qI,OAAO,SAACg9K,MAAOttF,SAAR,OAAoBstF,MAAQttF,SAAS,yrDCrCnEutF,2CAUjB,SAAAA,WAAaxlC,SAAUrxD,WAAYoD,YAAa3+E,QAAQ,IAAA8lE,MAAA,2JAAAusG,CAAAnoL,KAAAkoL,aACpDtsG,MAAAwsG,iCAAApoL,KAAAqoL,sBAAAH,YAAAjtL,KAAA+E,KAAMqxF,WAAYoD,YAAa3+E,UAC1B4sI,SAASA,UACd9mE,MAAK9lE,OAAO8lE,MAAKh2E,YAAYuqF,iBAC7BvU,MAAK0sG,UAAYjzH,cACjBumB,MAAK2sG,aAAgBjnB,YAAY,EAAOC,UAAU,GALE3lF,0XAVpBugG,0SAyE1Bz5B,WACN,OAAIA,WACA1iJ,KAAKq8K,UCzFqB,SAAzBmM,uBAA0BxlK,QAAS0/H,UAE5C,IAII+lC,YACAC,YALA14B,cACAC,eACAC,aACAC,gBALqDsS,gBAgBrDz/I,QAAQlN,SAPRi4I,eATqD0U,gBASrD1U,eACAC,kBAVqDyU,gBAUrDzU,kBACA26B,YAXqDlmB,gBAWrDkmB,YACA7J,aAZqDrc,gBAYrDqc,aACAvpB,OAbqDkN,gBAarDlN,OACAwqB,UAdqDtd,gBAcrDsd,UACA91G,SAfqDw4F,gBAerDx4F,SAfqD84F,qBAoBrD//I,QAAQyxE,cAFRonF,cAlBqD9Y,qBAkBrD8Y,cACAD,aAnBqD7Y,qBAmBrD6Y,aAEI3yJ,IAAwBy5H,SAAxBz5H,IAAKw0B,OAAmBilG,SAAnBjlG,OAAQf,OAAWgmG,SAAXhmG,OArBoCm0H,KAAA+X,4BAsBjB3/J,IAtBiB,GAsBlDoqI,QAtBkDwd,KAAA,GAsBzC1tB,WAtByC0tB,KAAA,GAsB7Bvd,SAtB6Bud,KAAA,GAAAgY,QAAAD,4BAuBdnrI,OAvBc,GAuBlDulG,SAvBkD6lC,QAAA,GAuBxC/lC,YAvBwC+lC,QAAA,GAuB3B5lC,UAvB2B4lC,QAAA,GAAAC,QAAAF,4BAwBRlsI,OAxBQ,GAwBlDi2G,WAxBkDm2B,QAAA,GAwBtC1lC,cAxBsC0lC,QAAA,GAwBvBl2B,YAxBuBk2B,QAAA,GAqFzD,OA3DI9lC,SAAS3hJ,OAAS,IAElB2uJ,cAAU1qJ,OAAAyjL,gCAAO11B,SAAP01B,gCAAmB/lC,UAAnB+lC,gCAAgCp2B,cAE1C1P,UAAU5hJ,OAAS,IAEnB4uJ,eAAW3qJ,OAAAyjL,gCAAOz1B,UAAPy1B,gCAAoB9lC,WAApB8lC,gCAAkCn2B,eAE7CzP,WAAW9hJ,OAAS,GAAK8hJ,WAAW,GAAG9hJ,OAAS,IAEhD6uJ,UAAY/M,WAAWn+I,IAAI,SAAC5J,EAAGN,GAAJ,SAAAwK,OAAAyjL,gCAAc11B,QAAQv4J,IAAtBiuL,gCAA6B3tL,GAA7B2tL,gCAAmCz1B,SAASx4J,QAEvEsoJ,cAAc/hJ,OAAS,GAAK+hJ,cAAc,GAAG/hJ,OAAS,IAEtD8uJ,aAAe/M,cAAcp+I,IAAI,SAAC5J,EAAGN,GAAJ,SAAAwK,OAAAyjL,gCAAcp2B,WAAW73J,IAAzBiuL,gCAAgC3tL,GAAhC2tL,gCAAsCn2B,YAAY93J,QAGvFkoB,QAAQstI,UAAU,IAAI04B,4BAAWh5B,WAAYC,cACzCtP,oBAAqBoN,eACrB+wB,aAAcA,aAAa3oF,KAC3BgtF,OAAQwF,YAAYxyF,KACpBqnF,cACIv7J,MAAO25J,aACP15J,OAAQ25J,cACRtmB,OAAQA,OAAOtzI,OAEnBgoD,SAAUA,SAAS2pB,IACnBmsF,UAAWA,UAAU5pF,KAAKnxF,IAAI,SAAAhI,GAAC,OAAIA,EAAIgG,KAAKmK,IAAIkmJ,QAAQhyJ,OAAQiyJ,SAASjyJ,UACzE09K,kBAAmB1rB,QAAQhyJ,OAAQsxJ,WAAWtxJ,WAI9ConL,YADAp1B,QAAQhyJ,OAAS,EACHgyJ,QAAQ,GAAGhyJ,OAEXsxJ,WAAWtxJ,OAAS,EAAIsxJ,WAAW,GAAGtxJ,OAAS,EAI7DqnL,YADAp1B,SAASjyJ,OAAS,EACJiyJ,SAAS,GAAGjyJ,OAEZuxJ,YAAYvxJ,OAAS,EAAIuxJ,YAAY,GAAGvxJ,OAAS,EAGnE2hB,QAAQutI,aAAa,IAAI04B,kCAAc/4B,UAAWC,eAC9CxP,oBAAqBqN,kBACrB8wB,aAAcA,aAAa/rK,QAC3BowK,OAAQwF,YAAY51K,QACpBkqK,cAAc,EACdO,cACIv7J,MAAO25J,aACP15J,OAAQ25J,cACRtmB,OAAQA,OAAOtzI,OAEnBgoD,SAAUA,SAASzO,IACnBukH,UAAWA,UAAUhtK,QACrBgsK,kBAAmB0J,YAAaC,gBAEpC1lK,QAAQ63J,aAAa/3B,aAEdJ,SDIkB8lC,CAAuBxoL,KAAM0iJ,WACvC1iJ,MAEXkpL,WAAAb,sBAAAH,WAAAtrL,WAAA,WAAAoD,MAAA/E,KAAA+E,KAAsB0iJ,iEAWtB1iJ,KAAK2lL,YAAarkB,YAAY,EAAOC,UAAU,IADlC,IAAA4nB,sBAKTpC,uCAA0B/mL,MAF1BqmL,+BAHS8C,sBAGT9C,+BACAgB,iCAJS8B,sBAIT9B,iCAIJ,OADArnL,KAAKopL,mBAAmB/C,+BAAgCgB,kCACjDrnL,+CAGDgH,KAAMqiL,YACZ,IAAMC,SAAWtiL,KAAK5F,cAEhBmoL,WADuBvpL,KAAK26K,WAA1BG,iBAC2B,GAAAx1K,OAAIgkL,SAAJ,UAC7BpE,QAAUliL,KAAKkK,IAAIlK,KAAKmK,IAAI,EAAGk8K,YAAaE,YAMlD,OALAvpL,KAAK8V,iLAAL0zK,IAAA,GAAAlkL,OACQgkL,SADR,WAC4BpE,QAAU,IAEtCllL,KAAKopL,qBACLppL,KAAKypL,aACEzpL,yCAGJgH,MAAM,IACD8zK,iBAAqB96K,KAAK26K,WAA1BG,iBACFwO,SAAWtiL,KAAK5F,cACtB,OACImoL,WAAYzO,iBAAgB,GAAAx1K,OAAIgkL,SAAJ,UAC5BI,YAAa1pL,KAAK8V,SAAL,GAAAxQ,OAAiBgkL,SAAjB,YAAsC,+CAKvD,OAAIplL,UAAS7C,QACTrB,KAAK2pL,UAALzlL,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK2pL,0DAIZ,OAAIzlL,UAAW7C,QACXrB,KAAKuoL,YAAc/tH,eAAex6D,KAAKuoL,YAANrkL,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IAC1BlE,MAEJA,KAAKuoL,0EASIqB,aAAcC,aAAa,IAAAt3E,cAKvCvyG,KAAK8V,SAHLg0K,WAFuCv3E,cAEvCu3E,WACA3D,cAHuC5zE,cAGvC4zE,cACA5wB,OAJuChjD,cAIvCgjD,OAEEulB,iBD9JiB,SAAlBiP,gBAAmBnP,OAAQkP,WAAY3D,eAYhD,IAXA,IAAM71B,UAAYsqB,OAAOtqB,YACnBC,aAAeqqB,OAAOrqB,eACtBsqB,aAAeD,OAAOC,eACtBn4B,SAAWk4B,OAAOl4B,WAClBsnC,YAAc15B,UAAU25B,sBACxBC,eAAiB35B,aAAa05B,sBAC9BE,sBACFv2F,IAAK,EACLmkD,OAAQ,GAGHj9I,EAAIgvL,WAAa,EAAGhvL,GAAK,EAAGA,IAAK,CACtC,IAAMuG,OAAS2B,KAAKmK,IAAI68K,YAAYlvL,GAAG+kL,cAAcx+K,OACjD2oL,YAAYlvL,GAAGglL,gBAAgBz+K,QACnC8oL,qBAAqBv2F,KAAOvyF,OAGhC,IAAK,IAAIvG,GAAIqrL,cAAgB,EAAGrrL,IAAK,EAAGA,KAAK,CACzC,IAAM0sC,OAAS0iJ,eAAepvL,IACtB+kL,cAAmCr4I,OAAnCq4I,cAAeC,gBAAoBt4I,OAApBs4I,gBACjBz+K,QAAS2B,KAAKmK,IAAI0yK,cAAc,GAAKA,cAAc,GAAGx+K,OAAS,EACjEy+K,gBAAgB,GAAKA,gBAAgB,GAAGz+K,OAAS,GACrD8oL,qBAAqBpyC,QAAU12I,QAGnCqhJ,SAASz5H,IAAI,GAAKihK,eAAe/D,eAAetG,cAChDn9B,SAAShmG,OAAO,GAAKwtI,eAAe/D,eAAerG,gBAEnDp9B,SAASjlG,OAAO,GAAKusI,YAAYF,YAAYjK,cAC7Cn9B,SAASjlG,OAAO,GAAKusI,YAAYF,YAAYhK,gBAE7C,IAAMsK,aAAepnL,KAAKmK,IAAIu1I,SAASjlG,OAAO,GAAGp8C,OAAQqhJ,SAASjlG,OAAO,GAAGp8C,QAEtEgpL,gBAAkBrnL,KAAKmK,IAAIu1I,SAASz5H,IAAI,GAAG,GAAKy5H,SAASz5H,IAAI,GAAG,GAAG5nB,OAAS,EAAGqhJ,SAAShmG,OAAO,GAAG,GAChGgmG,SAAShmG,OAAO,GAAG,GAAGr7C,OAAS,GAIvC,OAHAqhJ,SAASjlG,OAAO,GAAKo9H,aAAazvK,MAAM++K,qBAAqBv2F,IAAKu2F,qBAAqBv2F,IAAMw2F,cACxFplL,IAAI,SAAAwiC,QAAM,OAAIA,OAAOp8B,MAAM++K,qBAAqBpyC,OAAQoyC,qBAAqBpyC,OAASsyC,oBAGvF3nC,kBACA4nC,SAAUN,YAAY3oL,OACtBkpL,YAAaL,eAAe7oL,QCoHH0oL,CAAgB/pL,KAAM8pL,WAAY3D,eACrDqE,iBD1GqB,SAAtBC,oBAAuB7P,OAAQgP,aAAcC,aACtD,IAAMv5B,UAAYsqB,OAAOtqB,YACnBC,aAAeqqB,OAAOrqB,eAF0Cm6B,eAMlE9P,OAAO9kK,SAFPqwK,cAJkEuE,eAIlEvE,cACA2D,WALkEY,eAKlEZ,WAGEa,UAAYr6B,UAAU41B,oBAAoB4D,YAC1Cc,UAAYr6B,aAAa21B,oBAAoBC,eAG/CnE,WAEA2I,UAFA3I,WACOmF,eACPwD,UADA1oK,MAGAggK,aAEA2I,UAFA3I,aACQmE,mBACRwE,UADA1oK,OAGa+rJ,UAAqCkZ,eAA9CjF,QAA+B2I,WAAe1D,eAA1BhF,UACX2I,UAAuC1E,mBAAhDlE,QAA+B6I,aAAiB3E,mBAA5BjE,UAEtB6I,aAAehD,WAAWhG,WAAWE,SACrC+I,YAAcjD,WAAW/F,aAAaC,SACtCgJ,WAAajd,UAAWjrK,KAAKkK,IAAI+9K,YAAapB,aAAcgB,YAC5DM,YAAcL,UAAW9nL,KAAKkK,IAAI89K,aAAcpB,cAAemB,cAErE,OACIG,oBACAC,sBACAC,sBACIlpK,OAAQ8oK,aACR/oK,MAAOgpK,aAEXI,eACIppK,MAAO+lK,WAAWkD,WAClBhpK,OAAQ8lK,WAAWmD,aAEvBG,YAAatJ,WACbuJ,WAAYtJ,cCkEawI,CAAoBzqL,KAAM4pL,aAAcC,aAMjE,OALAW,iBAAiBj1B,OAASA,OAC1Bv1J,KAAK26K,UACDG,kCACA0P,oCAEGxqL,iEAzIP,OAAOxE,OAAO0M,WACVsiL,kBACIj1B,OAAQv1J,KAAKmwF,gBAAgBolE,OAC7B41B,YAAa,EAAG,EAAG,GACnBD,WAAY,EAAG,EAAG,IAEtBpQ,kBACIyP,YAAa,EACbD,SAAU,EACV5nC,UAAYz5H,OAASw0B,UAAYf,8EAazC,OAAOkgI,2EAWP,OAAOJ,8DAWP,OAAO,IAAI0L,WAAW,KAAM,KAAMloL,KAAKu+J,qBAAsBv+J,KAAKmwF,oNE3E1E,0CAAMq7F,WAASC,6BAAAC,cAAA,GAAApmL,O5BqOI,M4BrOJ,KAAAA,O5BsOK,QA2BM,M4BjQXmmL,6BAAAC,WAAA,GAAApmL,O5BqOI,M4BrOJ,KAAAA,O5BgQO,UA7BA,U4BnOPmmL,6BAAAC,WAAA,GAAApmL,O5BqOI,M4BrOJ,KAAAA,O5BuOM,SA0BK,M4BjQXmmL,6BAAAC,WAAA,GAAApmL,O5ByOO,S4BzOP,KAAAA,O5BsOK,QAFD,O4BpOJmmL,6BAAAC,WAAA,GAAApmL,O5ByOO,S4BzOP,KAAAA,O5BgQO,UAvBA,U4BzOPmmL,6BAAAC,WAAA,GAAApmL,O5ByOO,S4BzOP,KAAAA,O5BuOM,SAHF,O4BpOJmmL,6BAAAC,WAAA,GAAApmL,O5BwOO,S4BxOP,KAAAA,O5BsOK,QA2BM,M4BjQXmmL,6BAAAC,WAAA,GAAApmL,O5BwOO,S4BxOP,KAAAA,O5BgQO,UA7BA,U4BnOPmmL,6BAAAC,WAAA,GAAApmL,O5BwOO,S4BxOP,KAAAA,O5BuOM,SA0BK,M4BjQXomL,YAgBTC,oCAAwB,SAAxBA,sBAAyBC,YAAaC,YAAan/H,MAAOo/H,YAAe,IAEvEtsJ,MAGAssJ,WAHAtsJ,MACAvd,MAEA6pK,WAFA7pK,MACA/B,MACA4rK,WADA5rK,MAEEs7I,YAAW,GAAAl2J,OAAM2c,MAAN,OAAA3c,OAAiB4a,OAElC0rK,YAAYlmL,QAAQ,SAACqmL,aAZG,SAAtBC,oBAAuBt/H,MAAOltB,MAAOx4B,KAAMkZ,OAC7CwsC,MAAMxsC,MAAN,UAAA5a,OAAsB0B,MAAtB,GAAA1B,OAAiC4a,MAAjC,KAAA5a,OAA0Ck6B,QAYtCwsJ,CAAoBt/H,MAAOm/H,YAAYE,YAAcvsJ,M5BiOhC,gB4BjOuDusJ,WAAYvwB,gBAiBnFywB,2BAAe,SAAfA,aAAgBv/H,MAAO6oG,OAAQ3hE,IAAKmkD,QAC7C,IAAMm0C,gBAdY,SAAhBC,cAAiBz/H,MAAOo/H,YAAe,IAEtCnpC,eAGDmpC,WAHCnpC,eACDC,eAEAkpC,WAFAlpC,eACAC,iBACAipC,WADAjpC,iBAEF,OACIjvD,IAAK,SAAAA,MAAA,OAAM+3F,qC5BiMA,MAGG,U4BpMkChpC,eAAgBj2F,MAAOo/H,aACvE/zC,OAAQ,SAAAA,SAAA,OAAM4zC,qC5BiMF,OACC,S4BlMsC/oC,eAAgBl2F,MAAOo/H,aAC1EruI,OAAQ,SAAAA,SAAA,OAAMkuI,qC5BgMF,OACC,QAFF,MAGG,U4BlMkD9oC,iBAAkBn2F,MAAOo/H,cAKrEK,CAAcz/H,MAAO6oG,QACvC62B,aAAeZ,UAAS,GAAAlmL,OAAI8rK,iBAAiBD,WAAWv9E,MAAhC,KAAAtuF,OAAyCgsK,oBAAoBv5B,UACvFq0C,cACAF,gBAAgBE,+LC9CxB,IAAMC,WAAa,SAAbA,WAAa53J,KAAG,OAAIlvB,MAAME,KAAKF,MAAMkvB,IAAIpzB,QAAQ+C,SAEjDkoL,YAAc,SAAdA,YAAehvH,MAAOivH,WAAmC,IAAxBC,eAAwBtoL,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,MAEvDqV,MAEAizK,eAFAjzK,MACAs8D,MACA22G,eADA32G,MAEEphD,IAAM83J,UAAUnhL,QAChBqhL,UAAYnvH,MAAMlyD,QAClBshL,UAAYD,UAAUrhL,QAS5B,GANAmO,MAAQA,OAAShU,MAAME,KAAKF,MAAMkvB,IAAIpzB,QAAQ+C,QAG9CyxE,MAAQA,OAAU,SAAAjxE,GAAC,OAAIA,GAGE,IAArB6nL,UAAUprL,OAAc,CACxB,IAAMumH,WAIN,OAHAruG,MAAM7T,QAAQ,SAAC1I,GACX4qH,QAAOtjH,KAAKmwB,IAAIz3B,OAEX0vL,oBAAWD,UAAWh4J,IAAKA,IAAKmzF,SAQ7C,IALA,IAAI+kE,OAAS,GACTC,SAAW,GACThlE,UAGG9sH,EAAIye,MAAMlY,OAAS,EAAGvG,GAAK,EAAGA,IAAK,CAExC,IAAM+xL,cAAgBtzK,MAAMze,GAO5B,IAJA6xL,QAAU92G,MAAMphD,IAAIo4J,oBACpBD,UAAY/2G,MAAM42G,UAAUI,iBAIxBjlE,OAAOilE,eAAiB,SACrB,CACHD,SAAW,GAGX,IAAK,IAAIvmL,EAAIvL,EAAGuL,EAAIkT,MAAMlY,OAAQgF,IAAK,CACnC,IAAMymL,QAAUvzK,MAAMlT,GAChB0mL,QAAUt4J,IAAIq4J,SAEpBllE,OAAOklE,SAAWC,QAGlBN,UAAUK,SAAWC,QACrBH,SAAWD,SAIvB,IAAMK,aAIN,OAHAzzK,MAAM7T,QAAQ,SAAC1I,GACXgwL,UAAU1oL,KAAKsjH,OAAO5qH,OAEjB0vL,oBAAWD,oBAAWh4J,IAAKu4J,YAGlCC,eAAiB,SAAjBA,eAAkBC,QAASC,OAAQ3lJ,OAAQ4yG,MAG7C,IAAK8yC,QACD,OAAO,kBAAM,MAGjB,IAAMppG,YACF8P,IAAK,SAAAA,IAAA53E,OAAK,OAAIwrB,OAAO4yG,KAAOp+H,QAAUwrB,OAAO4yG,KAAOp+H,OAAOmxK,SAC3Dp1C,OAAQ,SAAAA,OAAA/7H,OAAK,OAAIwrB,OAAO4yG,MAAM+yC,OAASnxK,SAG3C,OAAO,SAAChV,MAIJ,IAHA,IAAIgV,MAAQ,EACRoxK,QAAS,GAELA,QAC4B,OAA5BtpG,WAAW98E,MAAMgV,OACjBA,OAAS,EAEToxK,QAAS,EAGjB,OAAOpxK,QAITqxK,YAAc,SAAdA,YAAe7lJ,OAAQjuB,OAAT,OAChBq6E,IAAK,SAAAA,MACD,IAAIt2B,SACJ,OAAO91B,OAAOxiC,IAAI,SAAChI,GAAM,IAAAswL,aAIbhB,YAAYhvH,MAAOtgE,GAAK64E,MAAO,SAAAA,MAAAriB,KAAG,OAAIA,IAAI/tB,WAAWlsB,cAFrDkzK,UAFaa,aAEbb,UACAh4J,IAHa64J,aAGb74J,IAIR,OADA6oC,MAAQmvH,UACDh4J,OAGfsjH,OAAQ,SAAAA,SACJ,IAAIz6E,SACEiwH,cAiBN,OAhBA/lJ,OAAOnmC,QAAUmmC,OAAO,GAAG9hC,QAAQ,SAACioD,KAAM6kE,UACtC,IAAMg7D,aACNhmJ,OAAO9hC,QAAQ,SAACkuF,KACZ45F,UAAUlpL,KAAKsvF,IAAI4+B,aAH4B,IAAAi7D,cAQ3CnB,YAAYhvH,MAAOkwH,WAAa33G,MAAO,SAAAA,MAAAriB,KAAG,OAAIA,IAAI/tB,WAAWlsB,cAF7DkzK,UAN2CgB,cAM3ChB,UACAh4J,IAP2Cg5J,cAO3Ch5J,IAER6oC,MAAQmvH,UAERjlJ,OAAO9hC,QAAQ,SAACkuF,IAAK0+B,UACjBi7D,WAAWj7D,UAAYi7D,WAAWj7D,cAClCi7D,WAAWj7D,UAAUE,UAAY/9F,IAAI69F,cAGtCi7D,cAITG,cAAgB,SAAhBA,cAAgBH,YAAU,OAC5B35F,IAAK,SAAAA,MACD,IAAM+5F,SAUN,OATAJ,WAAW7nL,QAAQ,SAACkuF,IAAKg6F,MACrBD,MAAMC,MAAQD,MAAMC,UACpBh6F,IAAIluF,QAAQ,SAAC81D,IAAK1gE,GACd,GAAIyyL,WAAWK,MAAM9yL,GAAI,CACrB,IAAM+yL,SAAWZ,eAAezxH,IAAK1gE,EAAGyyL,WAAYK,KAAnCX,CAAyC,OAC1DY,UAAYF,MAAMC,MAAMtpL,KAAKupL,eAIlCF,OAEX51C,OAAQ,SAAAA,SAAA,OAAMw1C,WAAWvoL,IAAI,SAAC4uF,IAAKg6F,MAAN,OAAeh6F,IAAI5uF,IAAI,SAACw2D,IAAK1gE,GAAN,OAAYmyL,eAAezxH,IAAK1gE,EAAGyyL,WAAYK,KAAnCX,CAAyC,YACxFrhL,OAAO,SAAA4vD,KAAG,OAAY,OAARA,WAG7BsyH,SAAW,SAAXA,WAAW,OACbl6F,IAAK,SAAAA,IAAApsD,QAAM,OAAI6kJ,WAAW7kJ,OAAO,KACjCuwG,OAAQ,SAAAA,OAAAvwG,QAAM,OAAI6kJ,WAAW7kJ,WAG3BumJ,wBAAsBC,0BAAAC,yBAAA,GAAA3oL,O7B8ET,M6B9ES,OAEpB4oL,YAAaJ,WAAQ,OACrBK,gBAAiB,SAAAA,kBAAA,OAAed,YAAWhwL,WAAX,EAAA6G,WAAA,QAChCkqL,UAAW,SAAAA,YAAA,OAAeV,cAAarwL,WAAb,EAAA6G,WAAA,UAJN8pL,0BAAAC,sBAAA,GAAA3oL,O7BiFN,S6BjFM,OAOpB4oL,YAAaJ,WAAQ,OACrBK,gBAAiB,SAAAA,kBAAA,OAAed,YAAWhwL,WAAX,EAAA6G,WAAA,QAChCkqL,UAAW,SAAAA,YAAA,OAAeV,cAAarwL,WAAb,EAAA6G,WAAA,UATN8pL,0BAAAC,sBAAA,GAAA3oL,O7BkFN,S6BlFM,OAYpB4oL,YAAaJ,WAAQ,IACrBK,gBAAiB,SAAAA,kBAAA,OAAed,YAAWhwL,WAAX,EAAA6G,WAAA,KAChCkqL,UAAW,SAAAA,YAAA,OAAeV,cAAarwL,WAAb,EAAA6G,WAAA,OAdN8pL,0BAAAC,sBAAA,GAAA3oL,O7BkFN,S6BlFM,OAiBpB4oL,YAAaJ,WAAQ,IACrBK,gBAAiB,SAAAA,kBAAA,OAAed,YAAWhwL,WAAX,EAAA6G,WAAA,KAChCkqL,UAAW,SAAAA,YAAA,OAAeV,cAAarwL,WAAb,EAAA6G,WAAA,OAnBN+pL,uBAuBtBI,oBAAsB,SAAtBA,oBAAuBrnL,MACzB,IAAMi9G,UAAY8pE,uBAAuB/mL,MACzC,OAAIi9G,YAIAiqE,YAAa,SAAAA,cAAA,OAAM,MACnBC,gBAAiB,SAAAA,gBAAA3mJ,QAAM,OAAI,kBAAMA,SACjC4mJ,UAAW,SAAAA,YAAA,OAAM,kBAAM,SA+B/B,IA8BME,YAAc,SAAdA,YAAe5hI,MAAOihI,MAAO73K,OAAQ9O,MACvC,IAAIunL,YAAc,EAClB7hI,MAAMzO,KAAKj3C,KAAM,SAAU2mD,KAAM6kE,UACZ,IAAbA,WACA+7D,YAAc,GAElB,IAAMhiE,KAAOohE,MAAMhgI,KAAK2kE,UAAUE,UAC5Bs8B,YAAcnhG,KAAKmhG,YACnBptJ,OACFkyF,IAAKjmC,KAAK2kE,SACV92D,IAAK+yH,aAKT,OA7CyB,SAA3BC,2BAAqE,IAAAz4H,KAAzCw2D,KAAyCroH,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,GAAlC,EAAG4qJ,YAA+B5qJ,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAAlB4Y,OAAkB5R,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EAAVwE,MAAUwC,UAAA7C,OAAA,EAAA6C,UAAA,QAAAhH,EACjEglB,OAAS4sI,YAAY3hD,cACrBlrF,MAAQ6sI,YAAY5hD,aACpB22E,YAAc/tK,OAAOy/I,OAAOtzI,MAC1BspK,WAAez1K,OAAOi3E,WAAtBw+F,WACA/vH,IAAQ95D,MAAR85D,IAER,OAAAwyH,0BAAAj4H,Q7BoBoB,U6BpBpB,WAEQ+4F,YAAYuB,kBAAkBpuI,MAAOC,OAASqqG,MACjC,IAATA,MACA/2C,6BAAcx1E,MAAMkgB,MAAM,SAA1B,GAAA5a,OAAuC4c,OAASqqG,KAAOs3D,YAAvD,SAJZmK,0BAAAj4H,K7BqBoB,U6BrBpB,WAQQ,IAAM04H,iBAAmBlD,WAAWrJ,QAAQ1mH,KAC5C,GAAI+wD,KAAO,EAAG,CAEV,IADA,IAAImiE,gBAAkB,EACb5zL,EAAI0gE,IAAK1gE,EAAI0gE,IAAM+wD,KAAMzxH,IAC9B4zL,iBAAmBnD,WAAWrJ,QAAQpnL,GAAK+oL,YAE/C/0B,YAAYuB,kBAAkBq+B,gBAAkB7K,YAAa3hK,aACtDusK,kBACP3/B,YAAYuB,kBAAkBo+B,iBAAmB5K,YAAa3hK,QAElEszD,6BAAcx1E,MAAMkgB,MAAM,SAA1B,GAAA5a,OAAuC4c,OAAvC,SAlBR6zC,KAoCIy4H,CAAyBjiE,KAAMuiC,YAAah5I,OAAQpU,OAAOsF,MAAM1K,KAAK0D,KAAtEwuL,GACAD,aAAehiE,KACRA,QAIToiE,gBAAcX,0BAAAY,mBAAA,GAAAtpL,O7BjCD,M6BiCC,MACF,MADE0oL,0BAAAY,gBAAA,GAAAtpL,O7BjCD,M6BiCC,MAEF,SAAAU,IAAA,QAAAozD,KAAAl1D,UAAA7C,OAAIuV,OAAJ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAAIziD,OAAJyiD,MAAAn1D,UAAAm1D,MAAA,OAAei1H,YAAWjxL,WAAX,EAAeuZ,OAAftR,Q7BvBT,e6BqBJ0oL,0BAAAY,gBAAA,GAAAtpL,O7BjCD,M6BiCC,MAGF,MAHE0oL,0BAAAY,gBAAA,GAAAtpL,O7B7BE,S6B6BF,MAIC,SAAAU,IAAA,QAAAowE,MAAAlyE,UAAA7C,OAAIuV,OAAJ,IAAArR,MAAA6wE,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAIz/D,OAAJy/D,OAAAnyE,UAAAmyE,OAAA,OAAei4G,YAAWjxL,WAAX,EAAeuZ,OAAftR,Q7B1BZ,e6BsBJ0oL,0BAAAY,gBAAA,GAAAtpL,O7B7BE,S6B6BF,MAKC,MALD0oL,0BAAAY,gBAAA,GAAAtpL,O7B7BE,S6B6BF,MAMC,SAAAU,IAAA,QAAAk7D,MAAAh9D,UAAA7C,OAAIuV,OAAJ,IAAArR,MAAA27D,OAAAE,MAAA,EAAAA,MAAAF,MAAAE,QAAIxqD,OAAJwqD,OAAAl9D,UAAAk9D,OAAA,OAAektH,YAAWjxL,WAAX,EAAeuZ,OAAftR,Q7B5BZ,e6BsBJ0oL,0BAAAY,gBAAA,GAAAtpL,O7B9BE,S6B8BF,MAOC,MAPD0oL,0BAAAY,gBAAA,GAAAtpL,O7B9BE,S6B8BF,MAQC,SAAAU,IAAA,QAAAk3E,MAAAh5E,UAAA7C,OAAIuV,OAAJ,IAAArR,MAAA23E,OAAAC,MAAA,EAAAA,MAAAD,MAAAC,QAAIvmE,OAAJumE,OAAAj5E,UAAAi5E,OAAA,OAAemxG,YAAWjxL,WAAX,EAAeuZ,OAAftR,Q7B7BZ,e6BqBJ0oL,0BAAAY,gBAAA,GAAAtpL,O7B9BE,S6B8BF,MASC,MATDspL,4TCtQCC,wkBAKb,MAAM,IAAIllL,MAAM2wD,UAAUw0H,sDAO1B,MAAM,IAAInlL,MAAM2wD,UAAUw0H,wDAO1B,MAAM,IAAInlL,MAAM2wD,UAAUw0H,wDAO1B,MAAM,IAAInlL,MAAM2wD,UAAUw0H,gOCvB3B,ICJMnpF,qCAAO,OACPC,sCAAQ,QACRH,uCAAS,SACTC,oCAAM,MAENqpF,4CAAc,OASdC,iBAAS,SAGTC,qBAAO,OACPC,qBAAO,OACPC,0BAAkB,gBAClBC,iBAAS,SACTC,0BAAY,YACZC,UAAY,WACZC,2BAAS,SACTC,cAAgB,eCzBhBjrF,eAAO,OAEPkrF,eAAO,OAEPC,KAAO,OAEPC,MAAQ,6UC0HNC,uBAzGX,SAAAA,WAAa95K,kKAAQ+5K,CAAA7vL,KAAA4vL,YACjB5vL,KAAK0yE,IAAMrd,cAEX,IAAMu0G,UAAYpvG,kBAAmBx6D,KAAK4F,YAAYuqF,iBACtDnwF,KAAKilF,QAAUzqB,eAAeovG,UAAW9zJ,YAEzC9V,KAAK+1F,OAAS,uSA8Bd,MAAM,IAAIpsF,MAAM2wD,UAAUC,gDAU1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,8DAS1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,0EAU1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,8EAW1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,wDAU1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,wDAU1B,MAAM,IAAI5wD,MAAM2wD,UAAUC,wEAI1B,OADoCr2D,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,GAAH,mCAnFjC,MDzCc,iECoDd,6MC3CD,gCAAMg7G,+BAAc4wE,8BAAAC,mBHPL,UGOKD,8BAAAE,qBAElBC,qCAAiB,GAFCH,8BAAAE,kBAGlBC,sCAAkB,GAHAH,8BAAAE,kBAIlBC,oCAAgB,GAJEH,8BAAAE,kBAKlBC,uCAAmB,GALDD,oBAAAF,8BAAAC,gBHFA,aGSE,GAPFD,8BAAAC,gBHEF,YGME,GARAD,8BAAAC,gBHAG,gBGSE,MATLD,8BAAAC,gBHCD,YAKJ,UGNKD,8BAAAC,gBHKP,QGME,GAXKD,8BAAAC,gBHmBF,WGPE,GAZAD,8BAAAC,gBHoBF,gBGPE,GAbAD,8BAAAC,gBHqBH,WGPE,MAdCA,0MCP3B,IAAMG,eACFtmG,SACAujB,eACAD,cACAp3F,QACI6jD,aAAc,SAAAA,aAAC32C,QAASjnB,OAAV,OAAoBy+D,eAAex3C,QAAQiiE,QAASlpF,SAEtE0yG,gBACA0hF,cACA7rJ,WAkBSurD,sCAAKugG,qCAAAC,+BACbX,KAAOl1H,gBAfRh0D,QACA8pL,WACAx6K,UACAw2E,QACAogD,iBACAhmI,UACAugC,aACA47D,YACAtH,iBAOkC20F,gBADpBE,qCAAAC,4BAEb9rF,eAAO/pC,gBAJR+1H,cAIkCL,gBAFpBE,qCAAAC,4BAGbZ,eAAOS,eAHME,qCAAAC,4BAIbV,MAAQO,eAJKG,0lCCZlB,IAuNe7lC,gCA/KX,SAAAA,SAAa10I,QAAQ,IAAA8lE,MAAA,8JAAA40G,CAAAxwL,KAAAwqJ,WACjB5uE,iLAAA60G,CAAAzwL,KAAA0wL,yBAAAlmC,UAAAvvJ,KAAA+E,KAAM8V,UAEDk7F,MAAQ,KACbp1B,MAAK+0G,aAAe,KACpB/0G,MAAKg1G,YAAc,KACnBh1G,MAAKmiG,cAAgB,KAErBxkH,sBAAsBs3H,gCAAAj1G,OAAMiU,qCAAM4/F,iBARjB7zG,8XARFg0G,gSAoCf,OAAO5vL,KAAKskC,SAASvlB,iDAoBrB,OACI/X,KAAMyoL,eACN3yI,KAAM98C,KAAKskC,SAAShpB,uEAyBxB,OAHKtb,KAAKyuG,gBACNzuG,KAAKyuG,aAjHQ,SAAnBqiF,iBAAoB9tK,SACtB,IAAI+tK,aACAC,cACEl0I,KAAO95B,QAAQshB,SAHam+H,gBAO9Bz/I,QAAQlN,SAFRm7K,WAL8BxuB,gBAK9BwuB,WACAp9F,OAN8B4uE,gBAM9B5uE,OAN8Bq9F,sBAW9Bp0I,KAAKm3G,kBAFLhyI,MAT8BivK,sBAS9BjvK,MACAC,OAV8BgvK,sBAU9BhvK,OAWJ,OANa,IADL46B,KAAKhnC,SADLu9E,MAGJ29F,cAAgBhuL,KAAKsH,MAAM4X,OAAS2xE,OAAO5qE,IAAM4qE,OAAOn3C,OAASu0I,YACjEF,aAAe/tL,KAAKsH,MAAM2X,MAAQ4xE,OAAO1jE,KAAO0jE,OAAOtjE,MAAQ0gK,cAE9DF,aAAgC9uK,MAAlB+uK,cAAyB9uK,SAGxCD,MAAO8uK,aACP7uK,OAAQ8uK,eA0FcF,CAAiB9wL,OAEhCA,KAAKyuG,2EAYGxsF,MAAOC,QACtBliB,KAAKktG,WAAWjrF,OAChBjiB,KAAKmtG,YAAYjrF,QAFa,IAAAs+E,aAM1BxgG,KAAK8V,SAFL+9E,OAJ0B2M,aAI1B3M,OACAuZ,SAL0B5M,aAK1B4M,SAUJ,OAPInrF,OAASC,QACTliB,KAAKskC,SAAS+rH,kBAAkBpuI,MAAOC,OAAQ2xE,OAAQuZ,UACvDptG,KAAKskC,SAASmqE,aAAa,OAE3BzuG,KAAKskC,SAAS42H,oBAElBl7J,KAAKyuG,aAAa,MACXzuG,2CAUuB4pF,OAC9B,IAAKA,MACD,OAAO5pF,KAEX,IAAImxL,YAAc,EACdC,aAAe,EACbt0I,KAAO98C,KAAKskC,SACZ6oE,YAAcntG,KAAKmtG,cACnBD,WAAaltG,KAAKktG,aAEpBrZ,OACA7zF,KAAK8V,SADL+9E,OAGA5qE,IAIA4qE,OAJA5qE,IACAyzB,OAGAm3C,OAHAn3C,OACAvsB,KAEA0jE,OAFA1jE,KACAI,MACAsjE,OADAtjE,MAhBiC8gK,cAqBjCv0I,KAAKhnC,SAFLu9E,KAnBiCg+F,cAmBjCh+F,KACA0E,YApBiCs5F,cAoBjCt5F,YAEEu5F,WAAa57G,YAAYF,6BAAcoU,OAAQ,OAAQ5pF,MAA/B,GAAAsF,OAAyCypL,4CAAzC,KAAAzpL,OL9Jb,cK+JXo4C,UAAYg4B,YAAY47G,WAAY,OAAQ,GAArB,GAAAhsL,OAA4BypL,4CAA5B,oBAwB7B,OAvBArxI,UAAUgtB,QAAV,GAAAplE,OAAqBypL,4CAArB,oBAAAzpL,OAAmDyyF,cAAe,GAElE/3F,KAAK4pF,MAAMA,OACNsjB,YACDxvD,UAAUO,KLlLD,QKkLT,GAAA34C,OAAyB,EAAzB,OAEC6nG,aACDzvD,UAAUO,KLtLA,SKsLV,GAAA34C,OAA0B,EAA1B,OAEJ6rL,YAAcjkF,WACdkkF,aAAejkF,YACV9Z,OACD89F,YAAep5F,cAAgB2N,qCAAO3N,cAAgB0N,uCAAUyH,WAAa,EAC7EkkF,aAAgBr5F,cAAgB2N,qCAAO3N,cAAgB0N,uCAAU,EAAI0H,aAEzEmkF,WAAWpxK,ML7LE,QK6Lb,GAAA5a,OAA2B6rL,YAA3B,OACiBjxK,ML/LH,SK8Ld,GAAA5a,OACkC8rL,aADlC,OAEiBlxK,MAAM,aAAc+I,KACpB/I,MAAM,gBAAiBw8B,QACvBx8B,MAAM,cAAeiQ,MACrBjQ,MAAM,eAAgBqQ,OAEvCusB,KAAK8sC,MAAMlsC,UAAU56B,QACd46B,kDAYP,OAFA19C,KAAKskC,UAAYtkC,KAAKskC,SAASrS,SAC/BjyB,KAAK4pF,SAAW5pF,KAAK4pF,QAAQ33D,SACtBjyB,sCAzJP,OAAOyvL,8CAoBP,OAAOzvL,KAAK0yE,4DAwBZ,OAAOwsC,unCCyCAurC,iCArIX,SAAAA,UAAa30I,QAAQ,IAAA8lE,MAAA,+JAAA21G,CAAAvxL,KAAAyqJ,WACjB7uE,oLAAA41G,CAAAxxL,KAAAyxL,0BAAAhnC,WAAAxvJ,KAAA+E,KAAM8V,SAENyjD,sBAAsBm4H,iCAAA91G,OAAMiU,qCAAM8/F,QAHjB/zG,iYAPDg0G,oSA8BhB,OAAO5vL,KAAK+e,iDAgCZ,OACI/X,KAAM2oL,iEAYV,OAAK3vL,KAAKyuG,eAMHzuG,KAAKyuG,gBAJJxsF,MAAOjiB,KAAKiiB,OAAS,EACrBC,OAAQliB,KAAKkiB,QAAU,+DAchBD,MAAOC,QAItB,OAHAliB,KAAKktG,WAAWjrF,OAChBjiB,KAAKmtG,YAAYjrF,QACjBliB,KAAKyuG,aAAa,MACXzuG,2CAWuB4pF,OAC9B,GAAIA,MAAO,KACC1pE,MAAUlgB,KAAK8V,SAAfoK,MAERlgB,KAAK4pF,MAAMA,OACX,IAAM5qE,UAAYw2D,6BAAcoU,OAC1BjlE,KAAO+wD,YAAY12D,UAAW,OAAQhf,KAAK+e,KACjD4F,KAAK+lD,QAAL,GAAAplE,OAAgBypL,4CAAhB,KAAAzpL,ONnGc,eMmG+B,GAC7Cqf,KAAKzE,MAAM,QAAX,GAAA5a,OAAuBtF,KAAKktG,aAA5B,OACAvoF,KAAKzE,MAAM,SAAX,GAAA5a,OAAwBtF,KAAKmtG,cAA7B,OACAxoF,KAAKqmD,KAAK,IAEN9qD,OACAq2D,WAAW5xD,KAAMzE,OAEvB,OAAOlgB,6CAWT,OADAA,KAAK4pF,SAAW5pF,KAAK4pF,QAAQ33D,SACtBjyB,6DAIP,OAAO,mCArHP,OAAO2vL,qCAgCP,OAAO3vL,KAAK0yE,4DAXZ,OAAOwsC,ooCC5Cf,IAAMyyE,aAAe,SAAfA,aAAgB3uK,SAClB,IAAMshB,OAASthB,QAAQshB,SADOstJ,oBAK1B5uK,QAAQmtK,aAFA0B,eAHkBD,oBAG1B1vK,OACO4vK,cAJmBF,oBAI1B3vK,MAJ0BwgJ,gBAS3Bz/I,QAAQlN,SAFR+9E,OAP2B4uE,gBAO3B5uE,OACAyU,SAR2Bm6D,gBAQ3Bn6D,SAGCn4E,KAIC0jE,OAJD1jE,KACAI,MAGCsjE,OAHDtjE,MAIEwhK,aADDl+F,OAFD5qE,IAEC4qE,OADDn3C,OAEgCm1I,eAC9BG,YAAc7hK,KAAOI,MAAQuhK,cAC7B3kF,YAAcnqF,QAAQmqF,cAAgB4kF,aACtC7kF,WAAalqF,QAAQkqF,aAAe8kF,YACpChpF,aAAehmF,QAAQ0I,eAAes9E,aAO5C,OALAA,aAAazoF,SAASyC,QAAQw7I,iBAE7Bl2D,UAAYtlF,QAAQutK,UAAUvnF,aAAa1lF,aAAaghB,OAAQ4oE,WAAYC,aAAa,IAC1F7E,UAAYtlF,QAAQutK,UAAUvnF,aAAa1lF,aAAaghB,OAAQ6oE,YAAaD,YAAY,IAElFlqF,SAiQIs+H,oCArLX,SAAAA,SAAaxrI,OAAQ4V,cAAc,IAAAkwD,8JAAAq2G,CAAAjyL,KAAAshJ,WAC/B1lE,iLAAAs2G,CAAAlyL,KAAAmyL,yBAAA7wC,UAAArmJ,KAAA+E,KAAM8V,UAEDu1F,cAAgB3/E,aACrBkwD,MAAK2uF,WAAa3uF,MAAKqJ,QAAQx9D,YAClBm0D,MAAKqJ,QAAQj+E,OAASgoL,iBAAtB,GAAA1pL,OAAkCypL,4CAAlC,KAAAzpL,OAAiD0pL,iBAAjD,YAAA1pL,OAAoEypL,4CAApE,KAAAzpL,OAAmFi/F,eAAnF,UACb3oB,MAAK4iF,eAAiBnnF,qCAAsB7B,6BAAc,QAASoG,MAAK2uF,YACxE3uF,MAAKyvB,cAAcrC,aAAazoF,SAASq7D,MAAK4iF,gBAC9CjlG,sBAAsB64H,gCAAAx2G,OAAMiU,qCAAM0U,iBAClC,IAAMxhC,MAAQ6Y,MAAKyvB,cAAcrC,aAAariF,WAAW,KAT1B,OAU/Bi1D,MAAKu0G,YAAaluK,MAAOjf,KAAKsH,MAAoB,EAAdy4D,MAAM9gD,MAAY,GAAIC,OAAQlf,KAAKsH,MAAMy4D,MAAM7gD,OAAS,KAC5FyvK,aAAaS,gCAAAx2G,QAXkBA,8XARhBg0G,gSAuCf,OAAO5vL,KAAKskC,6DAqBZ,OAAOtkC,KAAKqrG,4DAUZ,OACI3qF,KAAM1gB,KAAKskC,SACXt9B,KAAMu9F,0EA0BV,OAHKvkG,KAAKyuG,gBACNzuG,KAAKyuG,aA1JQ,SAAnB4jF,iBAAoBrvK,SAAY,IAC1BgmF,aAAiBhmF,QAAQ0I,eAAzBs9E,aAD0BspF,qBAK9BtvK,QAAQmtK,aAFA0B,eAHsBS,qBAG9BpwK,OACO4vK,cAJuBQ,qBAI9BrwK,MAJ8BstF,iBAW/BvsF,QAAQlN,SAJR+9E,OAP+B0b,iBAO/B1b,OACAR,KAR+Bkc,iBAQ/Blc,KACA41E,SAT+B15D,iBAS/B05D,SACAkC,cAV+B57D,iBAU/B47D,cAGAh7I,KAIC0jE,OAJD1jE,KACAI,MAGCsjE,OAHDtjE,MAIGwhK,aADFl+F,OAFD5qE,IAEC4qE,OADDn3C,OAEiCm1I,eAC9BG,YAAc7hK,KAAOI,MAAQuhK,cAC7B3kF,YAAcnqF,QAAQmqF,cAAgB4kF,aACtC7kF,WAAalqF,QAAQkqF,aAAe8kF,YACpC1tJ,OAASthB,QAAQshB,SACjBy+B,MAAQ//C,QAAQutK,YAChBgC,QAAU,IAAIhtL,MAAM4lK,eAAezxJ,KAAK,KAAKnX,KAAK,IAClDiwL,cAAgBxpF,aAAariF,WAAW4rK,SAS9C,GAPAvvK,QAAQlN,QAASwyF,UAAU,IACvBvlC,MAAM9gD,OAASirF,YAAc,IAAM+7D,WACnClmG,MAAM7gD,OAAS6gD,MAAMz8C,cAAgB2iJ,UAErC/7D,YAAcA,WAAanqC,MAAM9gD,QACjC8gD,MAAM9gD,MAAQuwK,cAAcvwK,OAE5BirF,YAAcA,WAAalqG,KAAKkK,IAAIslL,cAAcvwK,MAAO8gD,MAAM18C,cAAe,CAC9E,IAAMosK,WAAazpF,aAAa1lF,aAAaghB,OAAQ6oE,YAAaqlF,cAActwK,QAAQ,GACxF6gD,MAAM9gD,MAAQwwK,WAAWvwK,OACzB6gD,MAAM7gD,OAASuwK,WAAWxwK,MAC1Be,QAAQlN,QAASwyF,UAAU,IAC3BtlF,QAAQutK,UAAUkC,YAGtB,OAAIp/F,MAEIpxE,MAAOjf,KAAKgY,KAAK+nD,MAAM9gD,OAAS+vK,YAChC9vK,OAAQlf,KAAKgY,KAAK+nD,MAAM7gD,QAAU6vK,eAGtC9vK,MAAO,EACPC,OAAQ,GAyGcmwK,CAAiBryL,OAEhCA,KAAKyuG,2EAWGxsF,MAAOC,QAKtB,OAJAliB,KAAKktG,WAAWjrF,OAChBjiB,KAAKmtG,YAAYjrF,QACjByvK,aAAa3xL,MACbA,KAAKyuG,aAAa,MACXzuG,2CAWH4pF,OACJ,IAAMsjB,WAAaltG,KAAKktG,aAClBC,YAAcntG,KAAKmtG,cAFd3M,aASPxgG,KAAK8V,SALL+9E,OAJO2M,aAIP3M,OACAR,KALOmN,aAKPnN,KACA+3E,cANO5qE,aAMP4qE,cACAsnB,UAPOlyF,aAOPkyF,UACApqF,SARO9H,aAQP8H,SAIJ,GADAtoG,KAAK4pF,MAAMA,OACPyJ,KAAM,CACN,IAAMr0E,UAAYw2D,6BAAcoU,OAC1BjlE,KAAO+wD,YAAY12D,UAAW,OAAQhf,KAAK+e,IAAzB,GAAAzZ,OAAiCypL,4CAAjC,KAAAzpL,OP3NX,cO4NPqtL,OAASvnB,eAAiB9iE,SAAW,SAAW,MAHhDsqF,gBAOF5yL,KAAKuwL,YAFLtuK,MALE2wK,gBAKF3wK,MACAC,OANE0wK,gBAMF1wK,OAGQ2vK,eACR7xL,KAAKmwL,aADLjuK,OAEE2wK,aACF5pK,IAAKhH,MAAQ4vK,eAAiB,EAC9BiB,OAAQ7wK,MAAQ,EAAI4vK,eACpBn1I,OAAQm1I,gBAGZ7yK,UAAUkB,MAAM,iBAAkByyK,QAGlChuK,KAAK+lD,QAAQ1qE,KAAKuqK,YAAY,GAG9B5lJ,KAAKzE,MAAM,aAAcwyK,WACzB/tK,KAAKzE,MAAM,UAAW,UACtByE,KAAKzE,MAAM,YAAaooF,SAAQ,aAAAhjG,OAAgB4c,OAAS,EAAzB,yBAAA5c,OAC1ButL,YAAYF,QADc,sBACgB,IAChDhuK,KAAKzE,MPjQI,QOiQSgtF,WAAU,GAAA5nG,OAAM4nG,WAAN,MAAuB,SAClDxH,oCAAKD,uCAAQE,qCAAMC,uCAAOlgG,QAAQ,SAACsB,MAChCgY,UAAUkB,MAAV,UAAA5a,OAA0B0B,MAA1B,GAAA1B,OAAqCuuF,OAAO7sF,MAA5C,SAEJ2d,KAAKzE,MAAM,aAAcwyK,WACzB/tK,KAAKzE,MAAM,UAAW,UAEtBlgB,KAAKqrG,cAAcrC,aAAazoF,SAASvgB,KAAKw+J,gBAC9C75I,KAAKqmD,KAAKhrE,KAAKqrG,cAAcrC,aAAa1lF,aAAatjB,KAAKskC,SAAU4oE,WAAYC,aAAa,GAAMzsF,MAEzG,OAAO1gB,6CAWP,OADAA,KAAK4pF,SAAW5pF,KAAK4pF,QAAQ33D,SACtBjyB,sCA5JP,OAAOukG,8CAqBP,OAAOvkG,KAAK0yE,4DAkCZ,OAAOwsC,2mCC9Kf,0BAuMekqC,gCAlLX,SAAAA,SAAatzI,QAAQ,IAAA8lE,MAAA,8JAAAm3G,CAAA/yL,KAAAopJ,WACjBxtE,iLAAAo3G,CAAAhzL,KAAAizL,yBAAA7pC,UAAAnuJ,KAAA+E,KAAM8V,UAEDo9K,MAAQ,KACbt3G,MAAK6jE,QAAU,KACf7jE,MAAK8qD,SACL9qD,MAAKu3G,cACLv3G,MAAKw3G,kBACLx3G,MAAK1lB,QAAU,KACf0lB,MAAKy3G,WAAa,KAClBz3G,MAAK03G,SAAW,KAEhB/5H,sBAAsBg6H,gCAAA33G,OAAMiU,qCAAM6/F,OAZjB9zG,8XAPFg0G,gSAuCf,OAAO5vL,KAAKskC,uDAsBZ,OACIt9B,KAAM0oL,KACNz/K,KAAMjQ,KAAKskC,SAAShpB,YACpBg1K,QAAStwL,KAAKswL,6DAqBP,IAAAt0G,OAAAh8E,KACLiQ,KAAOjQ,KAAKskC,SAKlB,OAJAr0B,KAAKgyF,gBACJqtF,UAAWD,0BAAWH,qBAAME,iBAAQG,2BAAQN,qBAAMC,qBAAMC,0BAAiBK,eAAe9pL,QAAQ,SAAC0Z,MAC9F48D,OAAK58D,SAAWnP,KAAKmP,MAAM48D,OAAK58D,WAE7Bpf,+DAUP,IAAMswL,QAAUtwL,KAAKswL,UAEjBkD,cAAiBvxK,MAAO,EAAGC,OAAQ,GAIvC,OAHIouK,UACAkD,aAAelD,QAAQr8B,mBAEpBu/B,uEAaP,OAHKxzL,KAAKyuG,gBACNzuG,KAAKyuG,aApIQ,SAAnBglF,iBAAoBzwK,SACtB,IAAMlN,OAASkN,QAAQshB,SAASxuB,SACxBmM,MAAkBnM,OAAlBmM,MAAOC,OAAWpM,OAAXoM,OACf,OACID,MAAOjf,KAAKgY,KAAKiH,OACjBC,OAAQlf,KAAKgY,KAAKkH,OAASc,QAAQ0wK,kBAAkBxxK,SA+H/BuxK,CAAiBzzL,OAEhCA,KAAKyuG,2EAYGxsF,MAAOC,QACtB,IAAMjS,KAAOjQ,KAAKskC,SAQlB,OANAtkC,KAAKktG,WAAWjrF,OAChBjiB,KAAKmtG,YAAYjrF,QACjBjS,KAAKsrE,YACAt5D,MAAMA,OAAOC,OAAOA,OAASliB,KAAK0zL,kBAAkBxxK,QACpDu5D,cACLz7E,KAAKyuG,aAAa,MACXzuG,2CAUH4pF,OACJ,GAAIA,MAAO,CACP5pF,KAAK4pF,MAAMA,OACX,IAAMujB,YAAcntG,KAAKmtG,cACnBD,WAAaltG,KAAKktG,aAClBojF,QAAUtwL,KAAKswL,UACfgB,WAAa57G,YAAYF,6BAAcoU,OAAQ,OAAQ,GAA/B,GAAAtkF,OAAsCypL,4CAAtC,KAAAzpL,OR/JjB,cQiKb,GAAIgrL,QAAS,CACT,IAAMqD,WAAaj+G,YAAY47G,WAAY,OAAQhB,SAArB,GAAAhrL,OAAkCypL,4CAAlC,kBAA8DjsK,OAC5FwtK,QAAQ/4F,OAAOo8F,YAEnB,IAAMj2I,UAAYg4B,YAAY47G,WAAY,OAAQ,GAArB,GAAAhsL,OAA4BypL,4CAA5B,UAC7BuC,WAAWpxK,MRrLF,QQqLT,GAAA5a,OAA2B4nG,WAA3B,OAA2ChtF,MRtLjC,SQsLV,GAAA5a,OAA4D6nG,YAA5D,OACAzvD,UAAUx9B,MRtLD,QQsLT,GAAA5a,OAA0B4nG,WAA1B,OACiBhtF,MRxLP,SQuLV,GAAA5a,OACkC6nG,YAAcntG,KAAK0zL,kBAAkBxxK,OADvE,OAEAliB,KAAKskC,SAASslD,MAAMlsC,UAAU56B,QAElC,OAAO9iB,6CAYP,OAFAA,KAAK4pF,SAAW5pF,KAAK4pF,QAAQ33D,SAC7BjyB,KAAKskC,SAASrS,SACPjyB,sCAxJP,OAAO0vL,oCAqBP,OAAO1vL,KAAKskC,SAASvlB,6DA0BrB,OAAOmgG,8NCzGR,IAAM00E,sBAAoBC,4BAAAC,yBCRN,aDSElE,aADIiE,4BAAAC,sBCPR,WDSExyC,eAFMuyC,4BAAAC,sBCNR,WDSEtpC,WAHMqpC,4BAAAC,sBCJR,WDQE1qC,WAJMyqC,4BAAAC,sBCLP,YDUErpC,YALKqpC,uBEYlBl+B,cAZM,SAAfA,eACF,IAAM5zB,IAAM4xD,qBACZ,OACI9oL,IAAK,SAAAA,IAACzO,IAAK4c,KAIP,OAHI5c,OAAO2lI,MACPA,IAAI3lI,KAAO4c,KAER28I,cAEXj6J,IAAK,SAAAA,MAAA,OAAMqmI,OCPb+xD,wCAA8B,SAA9BA,4BAA+BC,YACjC,MAA0B,mBAAfA,YAA8BA,WAAW1iL,UvVsgCrC,SAAb2iL,WAAc1xK,KAChB,IAAM2xK,aACFC,IAAK,QACLC,IAAK,OACLC,IAAK,OACLC,IAAK,SACLC,IAAK,SACLC,IAAK,UAGT,MAAO,GAAAlvL,OAAIid,KAAOjiB,QADE,YACmB,SAAA2E,OAAK,OAAIivL,YAAYjvL,SuV7gCrDgvL,CAAWD,cAFPA,cAuDTS,cAAgB,SAAhBA,cAAiB3+K,OAAQ9O,KAAMgiG,aAAc0rF,UAC/C,OAAK5+K,OA1Ca,SAAhBsrI,cAAiBtrI,OAAQ6+K,SAAU3rF,aAAc0rF,UACnD,IAAI7gG,UAEAC,QAGAh+E,OAHAg+E,QACA9C,YAEAl7E,OAFAk7E,YACAi4E,SACAnzJ,OADAmzJ,SAEEt7G,KAAO+mI,UAAY,IAAIpzC,eAErBt6I,KAAmB,UAAb2tL,SAAuB,SAAW,OACxCltK,UAAS,GAAAniB,OAAK0rF,YAAL,KAAA1rF,OAAoBqvL,SAApB,WAET3rF,4BAENlzF,QAASmzJ,oBAAYknB,YAAaluK,MAAO,EAAGC,OAAQ,IAYtD,OAVAyrC,KAAKrpB,OAAOwvD,SACZnmC,KAAKinI,cAAiB1yK,OAAQ,EAAGD,MAAO,GAGpC4xE,OADA/9E,OAAOkT,WAAa08E,mBACTz8E,IAAK,EAAGyzB,OAAQ5mC,OAAOqT,UAEvBF,IAAKnT,OAAOqT,QAASuzB,OAAQ,GAE5CiR,KAAK73C,QAAS+9E,iBAGV3xE,OAAQyrC,KAAKsmG,kBAAkB/xI,OAC/ByrC,WAgBGyzF,CACHtrI,OACA9O,KACAgiG,aACA0rF,UANkB,ICdbG,+BAAoB,SAApBA,kBAAqBC,aAAcrtB,OAAQhzE,YAAasgG,aACjE,IAAMC,WAEF9yK,OAGAuyE,YAHAvyE,OACAD,MAEAwyE,YAFAxyE,MACAgzK,aACAxgG,YADAwgG,aAGAjsK,SAEA8rK,aAFA9rK,SACA+K,MACA+gK,aADA/gK,MAGEmhK,WArDmB,SAAhBC,cAAiB1tB,QAC1B,IAAI2tB,UACEC,WACA/oG,KAAOm7E,OAAOjQ,iBA0BpB,OAxBAh8J,OAAOkS,QAAQ4+E,MAAM5mF,QAAQ,SAACozI,UAC1B,IAAMtlH,MAAQslH,SAAS,GAAG,GACpBgjB,UAAYhjB,SAAS,GACrBw8C,WAAa7tB,OAAO3L,aAE1B,GAAIw5B,WAAWztL,OAAS2rB,MAAO,KAAA+hK,cAIvB/hK,MAAM1d,SAFN9O,KAFuBuuL,cAEvBvuL,KACA8pB,KAHuBykK,cAGvBzkK,KAGE0kK,WAA6B,kBAAT1kK,MAAqBA,KAC/CskK,UAAYlvB,gBAAe,GAAA5gK,OAAI0B,KAAJ,KAAA1B,OAAYkwL,WAAZ,KAAAlwL,OAA0Bw2J,YACrDu5B,QAAQ/wL,MACJkvB,YACAi0I,cACA1lG,UAAWuzH,WAAWztL,MACtBszJ,MAAOt5F,yBAAyB4lG,OAAOjhK,OAAQ8uL,WAAWztL,OAC1DutL,oBACAt5B,yBAKLu5B,QAwBYF,CAAc1tB,QACzB6D,cAAkB7D,OAAO3xJ,SAAzBw1J,cAEF1pK,OAASo/D,eAAesqG,eAkD9B,OAjDA4pB,WAAWxvL,QAAQ,SAAC+vL,SAAU/zL,OAC1B,IAAMg0L,kBAEEN,UAKAK,SALAL,UACA5hK,MAIAiiK,SAJAjiK,MACAuuC,UAGA0zH,SAHA1zH,UACO4zH,UAEPF,SAFAt6B,MACAW,UACA25B,SADA35B,UAEFhmJ,OAASg/K,aAAah5B,eACtBX,MAAQrlJ,OAAOqlJ,UAErB,GADAA,MAAMz6I,KAAOy6I,MAAMz6I,MAAQi1K,UACvB7/K,OAAOu9E,KAAM,CACbv9E,OAAOkT,SAAWA,SAClBlT,OAAOie,MAAQA,MACf,IAAIk3I,OAAS/xG,WAAW67H,YAAYj5B,WAAYp6J,OAC3CupK,SACDA,OAASmqB,UAAUh5L,QACf4sG,aAAcy+D,OAAOp8D,cAAc5qF,WACnCisC,OACI89F,mBAAUlJ,2BAItBo0C,eAAelyK,U1D7BH,a0D6BeuQ,MAAsB7R,OAAS+yK,aAAyB,GAAT/yK,OAC1EwzK,eAAenyK,S1D7BD,e0D6BYwQ,MAAuB9R,MAAgB,GAARA,MACzDyzK,eAAezzK,MAAQjf,KAAKkK,IAAIwoL,eAAenyK,SAAUzN,OAAOmM,OAChEyzK,eAAexzK,OAASlf,KAAKkK,IAAIwoL,eAAelyK,UAAW1N,OAAOoM,SAEjE4jJ,QAASC,OAAQC,QAAQtgK,QAAQ,SAAC1I,GAC/B04L,eAAe14L,GAAK8Y,OAAO9Y,KAE/B,IAAMs4J,SAAW2V,OAAO3V,WACpBA,oBAAoBrgG,qBACpBqgG,SAASl5I,UAEb6uJ,OAAOz3I,MAAMA,OACIs8D,YAAYluF,QACZu5J,MAAMA,OACNp5F,UAAUA,WACVjsD,OAAOA,QACPw/I,SAASmS,OAAOvoF,cAAcwoF,YAAYkuB,iBAAiBt5K,SAASylD,aACpE0yB,YAAYihG,gBACZj9B,YAAYgP,OAAO93C,SACnBkmE,oBAEjBb,QAAQ1wL,MAAOmjK,cAAQwD,cAAQnP,yBAGhCk5B,o0CCrHUc,ixBAAsB9rB,0VACpB,IAAA+rB,eACW/1L,KAAKm+F,WAC/B,OAASl8E,MAFM8zK,eACP9zK,MACQC,OAFD6zK,eACA7zK,kEAIDk8D,MACdp+E,KAAKm+F,UAAWl1E,IAAKm1D,KAAKt7E,EAAGqtB,KAAMiuD,KAAKljE,IACxClb,KAAKyqK,eACDxoJ,MAAOm8D,KAAKn8D,MACZC,OAAQk8D,KAAKl8D,QAEjBliB,KAAK0qK,SAAStsF,KAAKssF,4DAInB,OAAO1qK,KAAKm+F,iEAIZ,MAAMx0F,MAAM,2EAIZ,MAAMA,MAAM,+zCCtBCqsL,yDACjB,SAAAA,gBAAap/K,QAAQ,IAAAglE,MAAA,oKAAAq6G,CAAAj2L,KAAAg2L,kBACjBp6G,MAAAs6G,0CAAAl2L,KAAAm2L,+BAAAH,iBAAA/6L,KAAA+E,KAAM4W,OAAOvb,KAAMub,OAAO+zJ,UAAU1W,kBAAmB,KAClDmiC,UAAUx/K,QAFEglE,iZADoBk6G,mUAM3B92K,WACV,IAAMylK,aAAezkL,KAAK4W,OAAOd,OACjCkJ,UAAYw2D,6BAAcx2D,WAFL,IAGb+U,MAAU0wJ,aAAV1wJ,MACF4mC,IAAM37C,UACT2+B,UADS,IAAAr4C,OACKm/K,aAAazzF,YADlB,qBAETxqF,MAAMxG,KAAK3E,OACds/D,IAAI7c,OAAO7rB,SACX,IAEMokK,KAFW17H,IAAI3c,QAAQvwB,OAAO,OAEd0wB,MAAMwc,KAC5B07H,KAAK3rH,QAAL,GAAAplE,OAAgBm/K,aAAazzF,YAA7B,qBAA4D,GAXvC,IAAA+kG,eAYK/1L,KAAKm+F,WAAvBj8E,OAZa6zK,eAYb7zK,OAAQD,MAZK8zK,eAYL9zK,MAChBjiB,KAAK2qK,UAAUta,kBAAkBpuI,MAAOC,QAExCliB,KAAK2qK,WAAa3qK,KAAK2qK,UAAUpzE,OAAO8+F,KAAKvzK,QAE7CuzK,KAAK14I,UAAU,OAAO+sB,QAAtB,GAAAplE,OAAiCm/K,aAAazzF,YAA9C,mBAA2E,GAC3EqlG,KAAKn2K,MAAM,QAAX,GAAA5a,OAAuB,IAAvB,MAEIm/K,cAAgBzkL,KAAK2qK,WACrB0rB,KAAKn2K,MAAM,QAASylF,oBACHzlF,MAAM,aAAc6T,yCAKvC/U,WACFhf,KAAKs2L,aAAat3K,WAAaT,SAASkB,eAAezf,KAAK0qK,iEAGjD9zJ,QAIX,OAHA5W,KAAKo2L,UAAUx/K,QACf5W,KAAK3E,KAAKub,OAAOvb,MACjB2E,KAAKm+F,SAASvnF,OAAO+zJ,UAAU1W,mBACxBj0J,iDAGA4W,QACP5W,KAAK2qK,UAAY/zJ,OAAO+zJ,UACxB3qK,KAAK4W,OAASA,OACd5W,KAAK2oC,OAAO/xB,OAAOd,OAAO6yB,QAC1B3oC,KAAKgpB,SAASpS,OAAOd,OAAOkT,UAC5BhpB,KAAKynB,UAAU7Q,OAAOd,OAAO2R,WAC7BznB,KAAKs1K,UAAU1+J,OAAOd,OAAOw/J,WAC7Bt1K,KAAKw8J,UAAU5lJ,OAAOd,OAAO0mJ,qEAGfp+E,MACdp+E,KAAKm+F,UAAWl1E,IAAKm1D,KAAKt7E,EACtBqtB,KAAMiuD,KAAKljE,EACX+G,MAAOm8D,KAAKn8D,MACZC,OAAQk8D,KAAKl8D,SACjBliB,KAAK0qK,SAAStsF,KAAKssF,0yCCvCN6rB,yDACjB,SAAAA,gBAAa3/K,QAAQ,IAAAglE,MAAA,oKAAA46G,CAAAx2L,KAAAu2L,kBACjB36G,MAAA66G,0CAAAz2L,KAAA02L,+BAAAH,iBAAAt7L,KAAA+E,KAAM4W,OAAOvb,KAAMub,OAAOd,OAAO2+E,YAAYkiG,YAAa,KACrDP,UAAUx/K,QAFEglE,iZADoBk6G,mUAM3B92K,WACVA,UAAYw2D,6BAAcx2D,WAC1B,IAAM43K,qBAFeC,oBAGa72L,KAAK4W,OAAOd,OAAtCkT,SAHa6tK,oBAGb7tK,SAAUgoE,YAHG6lG,oBAGH7lG,YACZ8lG,YAAcphH,YAAY12D,UAAW,OAAQhf,KAAK0xI,YAAzB,GAAApsI,OACI0rF,YADJ,qBACqC,SAAA51F,GAAC,OAAIA,IACzE07L,YAAYpsH,QAAZ,GAAAplE,OAAuB0rF,YAAvB,YAA6C,GAC7C,IAAMj9D,MAAS/K,WAAa28E,oBAAQ38E,WAAa48E,oB7D4BjC,WACE,a6D5BZmxF,SAAW/2L,KAAKyqK,cAAcxoJ,MAC9B+0K,UAAYh3L,KAAKyqK,cAAcvoJ,OAQrC,IANClD,UAAW83K,aAAapxL,QAAQ,SAACif,MAC9BA,KAAKzE,MAAM,QAAX,GAAA5a,OAAuBtC,KAAKsH,MAAMysL,UAAlC,OACiB72K,MAAM,SADvB,GAAA5a,OACoC0xL,UADpC,OAEiB92K,MAAM,QAASylF,sB7DqBpB,a6DlBZ5xE,MAAoB,CACpB,IAAIkjK,UAAY,EACZC,WAAaF,UACbG,UAAY,EAEhBn3L,KAAK0xI,WAAWhsI,QAAQ,SAACwvL,YACrB,IAAMkC,IAAMlC,WAAWjqB,OACnBmsB,IAAI3iG,cAAcvyE,OAASg1K,YAC3BD,WACAE,UAAY,EACZD,WAAaF,WAEbC,SAAW,GAAKA,WAEpBL,kBAAkBK,UAAYL,kBAAkBK,cAChDC,YAAcl0L,KAAKkK,IAAIkqL,IAAI3iG,cAAcvyE,OAAQg1K,YACjDC,UAAYn0L,KAAKmK,IAAInK,KAAKkK,IAAIkqL,IAAI3iG,cAAcxyE,MAAOm1K,IAAI3iG,cAAclxE,UAAW4zK,WACpFP,kBAAkBK,UAAU3yL,MACxB2mK,OAAQmsB,IACRC,aAAcL,UACdM,YAAaH,cAIrB,IAAMvtG,MAAQlU,YAAYohH,aAAc,OAAQF,kBAAvB,GAAAtxL,OAA6C0rF,YAA7C,oBAEzBpH,MAAMlf,QAAN,GAAAplE,OAAiB0rF,YAAjB,6BAAwD,GACvC9wE,MAAM,QAAS,SAAA9kB,GAAC,SAAAkK,OAAOlK,EAAE,GAAGk8L,YAAZ,QACjC5hH,YAAYkU,OAAQ,OAAQ,SAAAxuF,GAAC,OAAIA,GAAtB,GAAAkK,OAA4B0rF,YAA5B,yBAAiE,SAAA51F,GAAC,OAAIA,EAAE6vK,OAAOlsJ,OACzEiT,KAAK,SAAU52B,GACZA,EAAE6vK,OAAOrhF,MAAM5pF,QAElBkgB,MAAM,QAAS,SAAA9kB,GAAC,SAAAkK,OAAOlK,EAAEk8L,YAAT,YAC9B,CACH,IAAM1tG,OAAQlU,YAAYohH,YAAa,OAAQ,GAAtB,GAAAxxL,OAA6B0rF,YAA7B,oBACzBpH,OAAMlf,QAAN,GAAAplE,OAAiB0rF,YAAjB,+BAA0D,GAC1DpH,OAAMlf,QAAN,GAAAplE,OAAiB0rF,YAAjB,mBAA+C,IAAK,GACnC9wE,MAAM,QADvB,GAAA5a,OACmCyxL,SADnC,OAGArhH,YAAYkU,OAAO,MAAO5pF,KAAK0xI,WAApB,GAAApsI,OAAmC0rF,YAAnC,yBAAwE,SAAA51F,GAAC,OAAIA,EAAE6vK,OAAOlsJ,OAChFiT,KAAK,SAAU52B,GAAKA,EAAE6vK,OAAOrhF,MAAM5pF,QACnCkgB,MAAM,QAAS,SAAA9kB,GAAC,SAAAkK,OAAOlK,EAAE6vK,OAAOx2E,cAAcxyE,MAA9B,2CAInCjD,WACFhf,KAAKu3L,aAAav4K,WAAaT,SAASkB,eAAezf,KAAK0qK,iEAGjD9zJ,QAIX,OAHA5W,KAAK3E,KAAKub,OAAOvb,MACjB2E,KAAKm+F,SAASvnF,OAAOd,OAAO2+E,YAAYkiG,aACxC32L,KAAKo2L,UAAUx/K,QACR5W,iDAGA4W,QACP5W,KAAK0xI,WAAa96H,OAAO+zJ,UACzB3qK,KAAK4W,OAASA,OACd5W,KAAK2oC,OAAO/xB,OAAOd,OAAO6yB,QAC1B3oC,KAAKgpB,SAASpS,OAAOd,OAAOkT,UAJb,IAAAwuK,sBAhGvB,SAASC,uBAAwBzuK,UAC7B,IAAIwzI,UAAY,KACV8Y,UAAS,GAAAhwK,OAAM8rK,iBAAiB,GAAvB,KAAA9rK,OAA6BgsK,oBAAoB,IAChE,OAAQtoJ,UACR,KAAK08E,kBACL,KAAKD,qBACD+2D,UAAY6J,kBACZ,MACJ,KAAK1gE,mBACL,KAAKC,oBACD42D,UAAY8J,gBACZ,MACJ,QACI9J,UAAY8J,gBAEhB,OAAS9J,oBAAW8Y,qBAsFiBmiB,CAAuB7gL,OAAOd,OAAOkT,UAA9DssJ,UALOkiB,sBAKPliB,UAAW9Y,UALJg7B,sBAKIh7B,UACnBx8J,KAAKynB,UAAU7Q,OAAOd,OAAO2R,WAC7BznB,KAAKs1K,UAAU1+J,OAAOd,OAAOw/J,WAAaA,WAC1Ct1K,KAAKw8J,UAAU5lJ,OAAOd,OAAO0mJ,WAAaA,kCCpG5CruE,uCAAShX,4BAETugH,cACFvnK,K9DEiB,Q8DDjBI,M9DCiB,Q8DAjBtH,I9DCkB,S8DAlByzB,O9DAkB,U8DGTi7I,iBAAmB,SAAnBA,iBAAoBna,aAAcoa,YAAaC,YACxD,IAAIC,WAAa,EAIjB,OAHiBta,aAAa0E,SAAW1E,aAAa0E,QAAQ7gL,OAC1Dm8K,aAAa0E,QAAU1E,aAAa2E,WAExBn9K,IAAI,SAAChI,GACjB,IAAM+6L,aAA4B,IAAbD,YAAoBF,YAAcC,YAEvD,OADAC,YAAc96L,EACP+6L,gBAIFC,4BAAuB,SAAvBA,qBAAwBpuG,MAAO5iF,KAAM8O,QAAW,IAErDk7E,YAEAl7E,OAFAk7E,YACA+5E,UACAj1J,OADAi1J,UAEEz2E,MAAQ5e,YAAYkU,MAAO,OAAQ5iF,MAAhB,GAAA1B,OAA0B0rF,YAA1B,kBAAA1rF,OAAsD0B,OAS/E,OAPAstF,MAAM5pB,QAAN,GAAAplE,OAAiB0rF,YAAjB,kBAA6C,GAC7CsD,MAAMp0E,MAAMw3K,aAAa1wL,MAAzB,GAAA1B,OAAmCylK,UAAnC,OAEgBr1F,YAAY4e,MAAO,OAAQ,GAAhB,GAAAhvF,OAAuB0rF,YAAvB,0BAEnB/yC,KAAK,KAAb,GAAA34C,OAAsB0rF,YAAtB,0BAAA1rF,OAA0D0B,OAEnDstF,OAGE2jG,2BAAsB,SAAtBA,oBAAuBruG,MAAO9zE,QAAW,IAE9Ck7E,YACAl7E,OADAk7E,YAEEhwC,KAAO00B,YAAYkU,MAAO,OAAQ,GAAhB,GAAAtkF,OAAuB0rF,YAAvB,iBAGxB,OAAShwC,UAAMk3I,MAFDxiH,YAAY10B,KAAM,OAAQ,GAAf,GAAA17C,OAAsB0rF,YAAtB,oBA0DvBmnG,2BAA6B,SAA7BA,2BAA8BC,UAAWC,YAAartB,OAAU,IAE9DktB,MAEAE,UAFAF,MACAl3I,KACAo3I,UADAp3I,KAH8Ds3I,sBAKjDJ,MAAMp1K,OAAOupD,wBAAtBnxD,EAL0Do9K,sBAK1Dp9K,EAAGpY,EALuDw1L,sBAKvDx1L,EALuDy1L,sBAMnCv3I,KAAKl+B,OAAOupD,wBAAhCmsH,MANuDD,sBAM1Dr9K,EAAau9K,MAN6CF,sBAMhDz1L,EAElBu1L,YAAYK,qBAAsBx9K,EAAGA,EAAIs9K,MAAQxtB,MAAOloK,EAAGA,EAAI21L,MAAQztB,SAGrE2tB,+BAA0B,SAA1BA,wBAA2BN,YAAaD,UAAWQ,UAAW5tB,OAChE,IAAIt6F,MAAQ,GACN4jB,MAAQ+jG,YAAYQ,YAAYD,WAChCE,cAAgBjhH,WAEtByc,MAAMnqF,GAAG2uL,cAAgB,aAAe,YAAa,WACnC7hH,0BAER9J,iBAENuD,MAAQS,YAAY,WAChBgnH,2BAA2BC,UAAWC,YAAartB,QACpD,OACJ7gK,GAAG2uL,cAAgB,WAAa,UAAW,WAC5B7hH,0BAER9J,iBAEN+D,cAAcR,SACfvmE,GAAG,QAAS,WACXguL,2BAA2BC,UAAWC,YAAartB,UAI9C+tB,yBAAoB,SAApBA,kBAAqBV,aAAgB,IAE1CD,UACAC,YAAYQ,YADZT,UAGEptB,MAAQqtB,YAAYviL,SAASk1J,MAEnC2tB,+BAAwBN,YAAaD,UAAW,aAAcptB,OApF3C,SAAjBguB,eAAkBX,YAAaD,WACjC,IAAInrG,YACAgsG,cAAgB,EAChBC,aAAe,EACfhsG,UAEAgrG,MAEAE,UAFAF,MACAl3I,KACAo3I,UADAp3I,KAGJk3I,MAAMj9L,KAAKkzF,gBACMhkF,GAAG,QAAS,WACT,IAAMg8D,MAAQ8Q,0BAEdgiH,cAAgBf,MAAMp1K,OAAOupD,wBAC7B6sH,aAAel4I,KAAKl+B,OAAOupD,wBAC3B4gB,UACI/xE,EAAGirD,MAAMjrD,EACTpY,EAAGqjE,MAAMrjE,KAGhBqH,GAAG,OAAQ,WACR,IAAMg8D,MAAQ8Q,0BACRv8E,OAAS89D,YAMT2gI,iBAJNjsG,QACIhyE,EAAGirD,MAAMjrD,EACTpY,EAAGqjE,MAAMrjE,IAGCoY,EAAI+xE,SAAS/xE,EADrBi+K,gBAECjsG,OAAOpqF,EAAImqF,SAASnqF,EAErBs2L,gBACFl+K,EAAG+9K,cAAc/9K,EAAIi+K,gBAAkBD,aAAah+K,EAAIxgB,OAAO2+L,YAC/Dv2L,EAAGm2L,cAAcn2L,EAAIq2L,gBAAkBD,aAAap2L,EAAIpI,OAAO4+L,aAGnEjB,YAAYK,oBAAoBU,mBA+CpDJ,CAAeX,YAAaD,WAhGF,SAAjBmB,eAAkBlB,YAAaD,WAGpCA,UADAp3I,KAGC72C,GAAG,QAAS,WACb,IAAMg8D,MAAQ8Q,0BACdohH,YAAYmB,qBAAqBrzH,SA0FrCozH,CAAelB,YAAaD,WAC5BO,+BAAwBN,YAAaD,UAAW,YAAaptB,QC3JpDn7E,8BAET/5E,QACI6jD,aAAc,SAAAA,aAAC32C,QAASjnB,OAEpB,OADAA,MAAQy+D,eAAex3C,QAAQiiE,QAASlpF,SAIhD09L,WACAC,iBACAjrF,iTCLG,IAAMkrF,yBAAb,WAEI,SAAAA,yKAAeC,CAAA55L,KAAA25L,aACX35L,KAAK64L,eACL74L,KAAK+9K,iBACL/9K,KAAK65L,sBAAwB,aAC7B75L,KAAKilF,SACD8lF,UAAW,GACXC,MAAO,GAEXhrK,KAAK85L,eAAiB,KAEtBvgI,sBAAsBv5D,KAAM6vF,8BAZpC,gPAAAkqG,CAAAJ,cAAAt9L,IAAA,uBAAAN,MAAA,SAAAy9L,uBAoBQ,MAAM,IAAIl/H,UAAU,6BApB5Bj+D,IAAA,sBAAAN,MAAA,SAAA28L,sBAwBQ,MAAM,IAAIp+H,UAAU,6BAxB5Bj+D,IAAA,WAAAN,MAAA,SAAAi+L,WA4BQ,MAAM,IAAI1/H,UAAU,6BA5B5Bj+D,IAAA,gBAAAN,MAAA,SAAAk+L,gBAgCQ,MAAM,IAAI3/H,UAAU,6BAhC5Bj+D,IAAA,eAAAN,MAAA,SAAAm+L,aAmCkB7oG,YAGV,OACI8oG,mBFkHyB,SAAxBC,sBAAyB/oG,WAAYv7E,OAAQi3E,WAAY/lF,MAAS,IAEvEgqF,YACAl7E,OADAk7E,YAEEmpG,mBAAqBzkH,YAAYF,6BAAc6b,YAAa,OAAQ,GAApC,IAAA/rF,OAA4C0rF,YAA5C,gBAAA1rF,OAAsE0B,OAK5G,OAHAmzL,mBAAmBzvH,QAAnB,GAAAplE,OAA8B0rF,YAA9B,gBAAwD,GACxDmpG,mBAAmBj6K,M9DvJF,Q8DuJjB,GAAA5a,OAAmCynF,WAAW9qE,MAA9C,OACAk4K,mBAAmBj6K,M9DvJD,S8DuJlB,GAAA5a,OAAoCynF,WAAW7qE,OAA/C,OACOi4K,mBE3HqBC,CAAsB/oG,WAH/BrxF,KAAK8V,SAG8C9V,KAAKyuG,eAAgBzuG,KAAK4F,YAAYoB,YAvChH3K,IAAA,qBAAAN,MAAA,SAAAs+L,mBA2CwBC,sBAEhB,OADAt6L,KAAK65L,sBAAwBS,qBACtBt6L,QA7Cf3D,IAAA,qBAAAN,MAAA,SAAAw+L,qBAkDQ,OADAv6L,KAAK65L,sBAAwB,aACtB75L,QAlDf3D,IAAA,kBAAAN,MAAA,SAAAk4J,kBAsDQ,OAAOj0J,KAAKyuG,kBAtDpBpyG,IAAA,oBAAAN,MAAA,SAAAg9L,oBA2DQ,OADAA,yBAAkB/4L,MACXA,QA3Df3D,IAAA,SAAAN,MAAA,SAAAk2B,SAgEQ,OADAjyB,KAAK64L,YAAYsB,mBAAmBloK,SAC7BjyB,UAhEf3D,IAAA,OAAAN,MAAA,SAAAiL,OAgBQ,MAAM,IAAIszD,UAAU,8BAhB5Bq/H,YAAA,8hKCHA,IAAMa,gBACFl5B,WCDJ,SAAAm5B,cAAA,SAAAC,wBAAA,4KAAAC,CAAA36L,KAAA06L,uBAAAE,kDAAA56L,KAAA66L,uCAAAH,uBAAAr9L,MAAA2C,KAAAkE,YAAA,0YAAA42L,CAAAJ,sBAA2Cf,oSAA3CoB,CAAAL,wBAAAr+L,IAAA,eAAAN,MAAA,SAAAm+L,aAakB7oG,YAA8C,IAAlCtE,WAAkC7oF,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,GAArBlE,KAAKyuG,eAClC34F,OAAS9V,KAAK8V,SACZqkL,mBAFgDa,4BAAAH,uCAAAH,sBAAA99L,WAAA,eAAAoD,MAAA/E,KAAA+E,KAENqxF,WAAYv7E,OAAQi3E,YAA9DotG,mBACFc,UAAYjD,4BAAqBmC,mBAAoB,OAAQrkL,QAC7DsiL,UAAYH,2BAAoBkC,mBAAoBrkL,QACpDolL,UAAYlD,4BAAqBmC,mBAAoB,QAASrkL,QAEhEoiL,MAEAE,UAFAF,MACAl3I,KACAo3I,UADAp3I,KARoDm6I,mBAWOn7L,KAAKyuG,eAA5DvsF,OAXgDi5K,mBAWhDj5K,OAAQD,MAXwCk5K,mBAWxCl5K,MAAO21K,YAXiCuD,mBAWjCvD,YAAaC,WAXoBsD,mBAWpBtD,WAAYtM,WAXQ4P,mBAWR5P,WAC1C6P,2BAA6Bn5K,MAAiB,EAATC,OAE3C8+B,KAAK9gC,MlEfQ,QkEeb,GAAA5a,OAAqBynF,WAAW9qE,MAAiB,EAATC,OAAxC,OACA8+B,KAAK9gC,MlEfS,SkEed,GAAA5a,OAAsB,IAAtB,MACA4yL,MAAMh4K,MlEjBO,QkEiBb,GAAA5a,OAAuBuyL,WAAauD,2BAA8BxD,YAAlE,OACAM,MAAMh4K,MlEjBQ,SkEiBd,GAAA5a,OAAuB,IAAvB,MACA4yL,MAAMh4K,MAAMylF,mBAAZ,GAAArgG,OAAqB,EAArB,OAEAtF,KAAK64L,aACDoC,oBACAC,oBACA9C,oBACA+B,uCAEJn6L,KAAKq7L,4BAA8BD,2BACnCp7L,KAAK05L,cAAc/B,iBAAiBpM,WAAYqM,YAAaC,aAC7D73L,KAAK+4L,uBAzCb18L,IAAA,uBAAAN,MAAA,SAAAy9L,qBA4C0BrzH,OAAO,IAAAm1H,sBAIrBt7L,KAAK64L,YAAYT,UAFjBF,MAFqBoD,sBAErBpD,MACAl3I,KAHqBs6I,sBAGrBt6I,KAEEgqH,MAAQhrK,KAAK8V,SAASk1J,MALHstB,sBAMRJ,MAAMp1K,OAAOupD,wBAAtBnxD,EANiBo9K,sBAMjBp9K,EAAGpY,EANcw1L,sBAMdx1L,EANcy1L,sBAOMv3I,KAAKl+B,OAAOupD,wBAAhCmsH,MAPcD,sBAOjBr9K,EAAau9K,MAPIF,sBAOPz1L,EACdy4L,iBAA2B,GAARvwB,MACnB7kG,MAAMjrD,EAAIA,IACVqgL,iBAA4B,IAARvwB,OAExBhrK,KAAK04L,qBAAsBx9K,EAAGA,EAAIs9K,MAAQ+C,iBAAkBz4L,EAAGA,EAAI21L,MAAQ8C,sBAxDnFl/L,IAAA,sBAAAN,MAAA,SAAA28L,oBA2DyB8C,aACjB,IAAIC,WAD0BC,uBAK1B17L,KAAK64L,YAAYT,UAFjBF,MAH0BwD,uBAG1BxD,MAGEgB,aANwBwC,uBAI1B16I,KAEsBl+B,OAAOupD,wBAC3BsvH,SAAWzD,MAAMp1K,OAAOupD,wBAE1BurH,YACC53L,KAAKyuG,eADNmpF,YAIA6D,WADAD,YAAYtgL,EAAI,EACH,EACNsgL,YAAYtgL,EAAIygL,SAAS15K,MAAQi3K,aAAaj3K,MACxCi3K,aAAaj3K,MAAQ05K,SAAS15K,MAE9Bu5K,YAAYtgL,EAG7Bg9K,MAAMh4K,MAAMylF,mBAAZ,GAAArgG,OAAqBm2L,WAArB,OACA,IACMG,gBAAmBH,WAAa7D,YADhB53L,KAAKq7L,4BAG3Br7L,KAAKy5L,UAAUoC,8BAA8B77L,KAAK4F,YAAYoB,OAAQ40L,oBAnF9Ev/L,IAAA,gBAAAN,MAAA,SAAAk+L,cAsFmB6B,OAAO,IAAAC,uBAId/7L,KAAK64L,YAAYT,UAFjBF,MAFc6D,uBAEd7D,MACAl3I,KAHc+6I,uBAGd/6I,KAEE26I,SAAWzD,MAAMp1K,OAAOupD,wBACxB6sH,aAAel4I,KAAKl+B,OAAOupD,wBAGjC,OADArsE,KAAK04L,qBAAsB51L,EAAG,EAAGoY,EAAGygL,SAASzgL,EAAIg+K,aAAah+K,EAAI4gL,QAC3D97L,QA/Ff3D,IAAA,WAAAN,MAAA,SAAAi+L,SA0GcgC,kBAAkB,IAIlBL,SADF37L,KAAK64L,YAAYT,UADjBF,MAEmBp1K,OAAOupD,wBACxB4vH,SAAYD,kBAAoBh8L,KAAKq7L,4BAA8BM,SAAS15K,OAAU,IAG5F,OADAjiB,KAAK04L,qBAAsB51L,EAAG,EAAGoY,EAAG+gL,WAC7Bj8L,UAlHf3D,IAAA,OAAAN,MAAA,SAAAiL,OAUQ,MlEoDkB,iBkE9D1B0zL,sBAAA,GDEIn5B,SEFJ,SAAAk5B,cAAA,SAAAyB,sBAAA,0KAAAC,CAAAn8L,KAAAk8L,qBAAAE,gDAAAp8L,KAAAq8L,qCAAAH,qBAAA7+L,MAAA2C,KAAAkE,YAAA,sYAAAo4L,CAAAJ,oBAAyCvC,8RAAzC4C,CAAAL,sBAAA7/L,IAAA,eAAAN,MAAA,SAAAm+L,aAakB7oG,YAA8C,IAAlCtE,WAAkC7oF,UAAA7C,OAAA,QAAAnE,IAAAgH,UAAA,GAAAA,UAAA,GAArBlE,KAAKyuG,eAClC34F,OAAS9V,KAAK8V,SACZqkL,mBAFgDqC,0BAAAH,qCAAAH,oBAAAt/L,WAAA,eAAAoD,MAAA/E,KAAA+E,KAENqxF,WAAYtE,YAAtDotG,mBACFc,UAAYjD,4BAAqBmC,mBAAoB,MAAOrkL,QAC5DsiL,UAAYH,2BAAoBkC,mBAAoBrkL,QACpDolL,UAAYlD,4BAAqBmC,mBAAoB,SAAUrkL,QAEjEoiL,MAEAE,UAFAF,MACAl3I,KACAo3I,UADAp3I,KARoDm6I,mBAUQn7L,KAAKyuG,eAA7DvsF,OAVgDi5K,mBAUhDj5K,OAAQD,MAVwCk5K,mBAUxCl5K,MAAO21K,YAViCuD,mBAUjCvD,YAAaC,WAVoBsD,mBAUpBtD,WAAYvM,YAVQ6P,mBAUR7P,YAC1C8P,2BAA6Bl5K,OAAiB,EAARD,MAE5C++B,KAAK9gC,MnEbS,SmEad,GAAA5a,OAAsB81L,2BAAtB,OACAp6I,KAAK9gC,MnEfQ,QmEeb,GAAA5a,OAAqB,IAArB,MACA4yL,MAAMh4K,MnEhBO,QmEgBb,GAAA5a,OAAsB,IAAtB,MACA4yL,MAAMh4K,MnEhBQ,SmEgBd,GAAA5a,OAAwBuyL,WAAauD,2BAA8BxD,YAAnE,OACAM,MAAMh4K,MAAMwlF,kBAAZ,GAAApgG,OAAoB,EAApB,OAEAtF,KAAK64L,aACDoC,oBACAC,oBACA9C,oBACA+B,uCAEJn6L,KAAKq7L,4BAA8BD,2BAEnCp7L,KAAK05L,cAAc/B,iBAAiBrM,YAAasM,YAAaC,aAC9D73L,KAAK+4L,uBAzCb18L,IAAA,uBAAAN,MAAA,SAAAy9L,qBA4C0BrzH,OAAO,IAAAm1H,sBAIrBt7L,KAAK64L,YAAYT,UAFjBF,MAFqBoD,sBAErBpD,MACAl3I,KAHqBs6I,sBAGrBt6I,KAEEgqH,MAAQhrK,KAAK8V,SAASk1J,MALHstB,sBAMRJ,MAAMp1K,OAAOupD,wBAAtBnxD,EANiBo9K,sBAMjBp9K,EAAGpY,EANcw1L,sBAMdx1L,EANcy1L,sBAOMv3I,KAAKl+B,OAAOupD,wBAAhCmsH,MAPcD,sBAOjBr9K,EAAau9K,MAPIF,sBAOPz1L,EAEdy4L,iBAA2B,GAARvwB,MACnB7kG,MAAMrjE,EAAIA,IACVy4L,iBAA4B,IAARvwB,OAExBhrK,KAAK04L,qBAAsBx9K,EAAGA,EAAIs9K,MAAQ+C,iBAAkBz4L,EAAGA,EAAI21L,MAAQ8C,sBAzDnFl/L,IAAA,sBAAAN,MAAA,SAAA28L,oBA4DyB8C,aACjB,IAAIC,WAD0BC,uBAK1B17L,KAAK64L,YAAYT,UAFjBF,MAH0BwD,uBAG1BxD,MACAl3I,KAJ0B06I,uBAI1B16I,KAGA42I,YACC53L,KAAKyuG,eADNmpF,YAEEsB,aAAel4I,KAAKl+B,OAAOupD,wBAC3BsvH,SAAWzD,MAAMp1K,OAAOupD,wBAG1BovH,WADAD,YAAY14L,EAAI,EACH,EACN04L,YAAY14L,EAAI64L,SAASz5K,OAASg3K,aAAah3K,OACzCg3K,aAAah3K,OAASy5K,SAASz5K,OAE/Bs5K,YAAY14L,EAE7Bo1L,MAAMh4K,MAAMwlF,kBAAZ,GAAApgG,OAAoBm2L,WAApB,OACA,IACMG,gBAAmBH,WAAa7D,YADhB53L,KAAKq7L,4BAG3Br7L,KAAKy5L,UAAUoC,8BAA8B77L,KAAK4F,YAAYoB,OAAQ40L,oBAnF9Ev/L,IAAA,gBAAAN,MAAA,SAAAk+L,cAgGmB6B,OAAO,IAAAC,uBAId/7L,KAAK64L,YAAYT,UAFjBF,MAFc6D,uBAEd7D,MACAl3I,KAHc+6I,uBAGd/6I,KAEE26I,SAAWzD,MAAMp1K,OAAOupD,wBACxB6sH,aAAel4I,KAAKl+B,OAAOupD,wBAGjC,OADArsE,KAAK04L,qBAAsB51L,EAAG64L,SAAS74L,EAAIo2L,aAAap2L,EAAIg5L,MAAO5gL,EAAG,IAC/Dlb,QAzGf3D,IAAA,WAAAN,MAAA,SAAAi+L,SAoHcgC,kBAAkB,IAIlBL,SADF37L,KAAK64L,YAAYT,UADjBF,MAEmBp1K,OAAOupD,wBACxB4vH,SAAYD,kBAAoBh8L,KAAKq7L,4BAA8BM,SAASz5K,QAAW,IAG7F,OADAliB,KAAK04L,qBAAsBx9K,EAAG,EAAGpY,EAAGm5L,WAC7Bj8L,UA5Hf3D,IAAA,OAAAN,MAAA,SAAAiL,OAUQ,MnEmDgB,emE7DxBk1L,oBAAA,IFcqBO,yCAEjB,SAAAA,gBAAa7lL,QAAQ,IAAAglE,qKAAA8gH,CAAA18L,KAAAy8L,iBACjB,IAAM9C,YAAca,eAAe5jL,OAAOd,OAAO9O,MADhC,OAGjB4P,OAAO+zJ,UAAY,IAAIgvB,YACvB/iL,OAAO+zJ,UAAU70J,OAAOc,OAAOd,OAAO6mL,0BACtC/lL,OAAO+zJ,UAAUl8D,aAAa73F,OAAOm2E,aACrCnR,MAAAghH,2CAAA58L,KAAA68L,gCAAAJ,iBAAAxhM,KAAA+E,KAAM4W,OAAOvb,KAAMub,OAAO+zJ,UAAU1W,kBAAmB,KAClDmiC,UAAUx/K,QAPEglE,mZAFoBk6G,8TAarC,OAAI5xL,UAAQ7C,QACRrB,KAAK2qK,UAAU8uB,QAAfv1L,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IACOlE,MAEJA,KAAK2qK,UAAU8uB,8DAaXqC,OAEX,OADA97L,KAAK2qK,UAAUsvB,cAAc6B,OACtB97L,+CAWDg8L,kBAEN,OADAh8L,KAAK2qK,UAAUqvB,SAASgC,kBACjBh8L,iEAcQ88L,WACf,IAAMpD,cAAgB15L,KAAK2qK,UAAU+uB,gBAC/BqD,mBAAqB/5L,KAAKkK,IAAIlK,KAAKmK,IAAI,EAAG2vL,WAAYpD,cAAcr4L,OAAS,GAEnF,OADArB,KAAK2qK,UAAUqvB,SAASN,cAAcqD,qBAC/B/8L,qFAaP,OAAOA,KAAK2qK,UAAU+uB,kDAGpB16K,WAEF,OADAhf,KAAK2qK,UAAUuvB,aAAal7K,WAAaT,SAASkB,eAAezf,KAAK0qK,aAC/D1qK,mEAUSg9L,gBAEhB,OADAh9L,KAAK2qK,UAAU0vB,mBAAmB2C,gBAC3Bh9L,qEAWP,OADAA,KAAK2qK,UAAU4vB,qBACRv6L,yDAGI4W,QAMX,OALA5W,KAAK3E,KAAKub,OAAOvb,MACjB2E,KAAK2qK,UAAU70J,OAAOc,OAAOd,OAAO6mL,0BACpC38L,KAAK2qK,UAAUl8D,aAAa73F,OAAOm2E,YACnC/sF,KAAKm+F,SAASn+F,KAAK2qK,UAAU1W,mBAC7Bj0J,KAAKo2L,UAAUx/K,QACR5W,iDAGA4W,QACP5W,KAAK2qK,UAAY/zJ,OAAO+zJ,WAAa3qK,KAAK2qK,UAC1C3qK,KAAK4W,OAASA,OACd5W,KAAK2oC,OAAO/xB,OAAOd,OAAO6yB,QAC1B3oC,KAAKgpB,SAASpS,OAAOd,OAAOkT,UAC5BhpB,KAAKynB,UAAU7Q,OAAOd,OAAO2R,WAC7BznB,KAAKs1K,UAAU1+J,OAAOd,OAAOw/J,WAC7Bt1K,KAAKw8J,UAAU5lJ,OAAOd,OAAO0mJ,mDAI7Bx8J,KAAK2qK,UAAU14I,+yCGvIvB,IAOqBgrK,0DAEjB,SAAAA,gBAAarmL,QAAQ,IAAAglE,MAAA,qKAAAshH,CAAAl9L,KAAAi9L,kBACjBrhH,MAAAuhH,2CAAAn9L,KAAAo9L,gCAAAH,iBAAAhiM,KAAA+E,KAAM4W,OAAOvb,KAAMub,OAAOd,OAAOi3E,WAAY,KACxCqpG,UAAUx/K,QACfglE,MAAKn0D,UAAU7Q,OAAOd,OAAO2R,WAHZm0D,mZAFoBk6G,oUAQ5B92K,WACT,IAAM40E,IAAM5zF,KAAK4W,OAAOd,OAAO89E,IACzBmkD,OAAS/3I,KAAK4W,OAAOd,OAAOiiI,OAFdslD,sBAGar9L,KAAK4W,OAAOd,OAAO6vK,WAA5CrkB,WAHY+7B,sBAGZ/7B,WAAYC,SAHA87B,sBAGA97B,SACpBviJ,UAAUkB,MpEyCM,WAID,WoE5CflB,UAAUkB,MpEdG,QAyDD,QoE1CZlB,UAAUkB,MpEdI,SAwDF,QoExCRohJ,YAAyB,IAAXvpB,SACd/4H,UAAUkB,MpEoCE,WADF,UoElCVlB,UAAUkB,MpEnBD,QoEmBc,SAGvBqhJ,UvDwMU,WuDxME3tE,MACZ50E,UAAUkB,MpE+BE,WADF,UoE7BVlB,UAAUkB,MpEvBA,SoEuBc,2DAIlBmxE,YAEV,IAAML,YAAchxF,KAAK4W,OAAOd,OAAOk7E,YACjC4C,IAAM5zF,KAAK4W,OAAOd,OAAO89E,IACzBmkD,OAAS/3I,KAAK4W,OAAOd,OAAOiiI,OAC5BhrD,WAAa/sF,KAAK4W,OAAOd,OAAOi3E,WAChCwoE,OAASv1J,KAAK4W,OAAOd,OAAOy/I,OAG5B+nC,mBAAqB5nH,YAAY2b,WAAY,OAAQ,GAArB,GAAA/rF,OAA4B0rF,YAA5B,UAAA1rF,OAAgDsuF,IAAhD,KAAAtuF,OAAuDyyI,OAAS,IACjGrtE,QADsB,GAAAplE,OACX0rF,YADW,UAAA1rF,OACSsuF,MAAO,GACtClpB,QAFsB,GAAAplE,OAEX0rF,YAFW,UAES,GAEpChxF,KAAKu9L,YAAYD,oBAbK,IAAAE,e1B6JvB,SAASC,cAAej2J,OAAQxgC,KAAMtF,OACzC,IAAIisL,MAAQ,KACRJ,WAAa/lJ,OAF+Bk2J,qBAO5CrP,oBAAmB,GAAA/oL,OAAI0B,KAAJ,KAAA1B,OAAY5D,QAH/BwsL,YAJ4CwP,qBAI5CxP,YACAC,gBAL4CuP,qBAK5CvP,gBACAC,UAN4CsP,qBAM5CtP,UAQJ,OALI5mJ,OAAOnmC,SAGPssL,MAAQS,UADRb,WAAaY,gBAAgB3mJ,OADf0mJ,YAAY1mJ,QACb2mJ,GACLC,KAEHb,sBAAYI,a0BzJb8P,CAAcz9L,KAAK2qK,UAAW/2E,IAAKmkD,QAFnCw1C,WAhBkBiQ,eAgBlBjQ,WACAI,MAjBkB6P,eAiBlB7P,MAIIjhI,MAAU1sD,KAAK29L,YAAYL,mBAAjB,GAAAh4L,OAAwC0rF,YAAxC,SAA4Du8F,YAAtE7gI,O1BsNU,SAAbkxI,WAAclxI,MAAOihI,MAAO73K,OAAQ9O,MAC7C,IAAM62L,QAAUlP,eAAe3nL,MAC3B62L,SACAA,QAAQnxI,MAAOihI,MAAO73K,Q0BvNtB8nL,CAAWlxI,MAAOihI,OAAS5gG,sBAAYwoE,eAA7B,GAAAjwJ,OAA0CsuF,IAA1C,KAAAtuF,OAAiDyyI,SAzDxC,SAArB+lD,mBAAsBpxI,OAExBA,MAAM16B,KAAK,SAAU27B,MACjBA,KAAKmhG,YAAYv3D,OAAOv3F,QAuDxB89L,CAAmBpxI,OAEnBA,MAAM5O,OAAO9rB,KAAK,SAAC27B,MACfA,KAAKmhG,YAAY78H,WAGrBg6J,2BAAav/H,MAAO6oG,OAAQ3hE,IAAKmkD,wDAGxBnuD,MAAOniE,UAAW21J,SAC3B,IAAMnnF,MAAQvgB,YAAYkU,MAAO,SAAU,UAAlB,GAAAtkF,OAAgCmiB,UAAhC,WACnB2C,KAAOsrD,YAAYugB,MAAO,SAAU,UAAlB,GAAA3wF,OAAgCmiB,UAAhC,UAClB0uE,KAAOzgB,YAAYtrD,KAAM,KAAMgzJ,QAAb,GAAA93K,OAAyBmiB,UAAzB,QAIxB,OAASwuE,YAAO7rE,UAAM+rE,UAAMzpC,MAHdgpB,YAAYygB,KAAM,KAAM,SAAC/6F,EAAGN,GAAJ,OAAUM,EAAEwQ,OAAO,SAAA5O,GAAC,OAAU,OAANA,IAAYgI,IAAI,SAAAhI,GAAC,OAClD8xJ,YAAa9xJ,EAAGs1H,SAAUx3H,MAD9B,GAAAwK,OACwCmiB,UADxC,UAC4D,SAAAprB,KAAG,OAAIA,IAAIyyJ,YAAY/vI,wCAK1GC,WACFhf,KAAK+9L,aAAa/+K,WAAaT,SAASkB,eAAezf,KAAK0qK,iEAGjD9zJ,QAIX,OAHA5W,KAAK3E,KAAKub,OAAOvb,MACjB2E,KAAKm+F,SAASvnF,OAAOd,OAAOi3E,YAC5B/sF,KAAKo2L,UAAUx/K,QACR5W,iDAGA4W,QACP5W,KAAK2qK,UAAY/zJ,OAAO+zJ,UACxB3qK,KAAK4W,OAASA,OACd5W,KAAK2oC,OAAO/xB,OAAOd,OAAO6yB,QAC1B3oC,KAAKgpB,SvDoIM,OuDnIXhpB,KAAKynB,UAAU7Q,OAAOd,OAAO2R,6xCC3FrC,IAAMu2K,iCAAoB,SAApBA,kBAAqBr5K,KAAMqsE,YAAaitG,cAAej3L,MACzDwuE,6BAAc7wD,MACGg5B,UADjB,IAAAr4C,OAC+B0rF,YAD/B,UAEiBr0F,SAASqK,KAAMi3L,gBAwBfC,sDAEjB,SAAAA,cAAatnL,QAAQ,IAAAglE,MAAA,mKAAAuiH,CAAAn+L,KAAAk+L,gBACjBtiH,MAAAwiH,yCAAAp+L,KAAAq+L,8BAAAH,eAAAjjM,KAAA+E,KAAM4W,OAAOvb,KAAMub,OAAOd,OAAOi3E,WAAY,KACxCkqF,kBACLr7F,MAAKw6G,UAAUx/K,QAHEglE,6YAFkBk6G,gUAoBnC,IAXA,IAAI5zK,OAAS,EACTD,MAAQ,EAFAq8K,sBAGmCt+L,KAAK2qK,UAAUgQ,WAAtDG,iBAHIwjB,sBAGJxjB,iBAAkB0P,iBAHd8T,sBAGc9T,iBACpB7E,WAAa3lL,KAAK2qK,UAAUgb,aAE9BwF,WAIAX,iBAJAW,WACAD,UAGAV,iBAHAU,UACAI,YAEAd,iBAFAc,YACAC,WACAf,iBADAe,WAGKzwL,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAClBkF,KAAKi3K,eAAe51K,QAAUrB,KAAKi3K,eAAen8K,aAAcyK,QAClEvF,KAAKi3K,eAAen8K,OAExB,IAAK,IAAIuL,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAMk4L,WACFr8K,OAAQipK,WAAWrwL,GACnBmnB,MAAOipK,UAAU7kL,GACjBilL,wBACAC,uBAEE/jJ,OAASszI,iBAAiBp4B,SAAjB,GAAAp9I,OAA6B8rK,iBAAiBt2K,KAAMuL,GAC7Dm4L,WAAU,GAAAl5L,OAAM8rK,iBAAiBt2K,GAAvB,KAAAwK,OAA6BgsK,oBAAoBjrK,IAC3DkuJ,cACFxnE,WAAYwxG,UACZhpC,OAAQi1B,iBAAiBj1B,OACzBvkE,YAAahxF,KAAK4W,OAAOd,OAAOk7E,YAChC20F,sBACA/xF,IAAKw9E,iBAAiBt2K,GACtBi9I,OAAQ1xI,GAEZ,GAAIrG,KAAKi3K,eAAen8K,GAAGuL,aAAcyvL,cACrC91L,KAAKi3K,eAAen8K,GAAGuL,GAAGo4L,eACtBpjM,KAAMmjM,WACN7zB,UAAWnjI,OACX1xB,OAAQy+I,mBAET,CACH,IAAMmqC,cAAgB,IAAIzB,kCACtB5hM,KAAMmjM,WACN7zB,UAAWnjI,OACX1xB,OAAQy+I,eAEZv0J,KAAKi3K,eAAen8K,GAAGwJ,KAAKo6L,eAEtB,IAAN5jM,IACAmnB,OAASs8K,UAAUt8K,OAEb,IAAN5b,IACA6b,QAAUq8K,UAAUr8K,SAIhCliB,KAAKm+F,UAAWj8E,cAAQD,cAExBjiB,KAAK2qK,UAAY3qK,KAAKi3K,eACtBj3K,KAAK2+L,cAAgB3+L,KAAKi3K,2EAI1B,OAAI/yK,UAAQ7C,QACRrB,KAAK4+L,kBAAL16L,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK4+L,sFAWZ,IAAMC,iBAAmB7+L,KAAK6+L,mBAqB9B,OApBArpH,6BAAa,IAAAlwE,OAAKtF,KAAK2qK,UAAU,GAAG,GAAGD,aAClCvgK,GAAG,QAAS,WACT,IAAMg8D,MAAQ8Q,0BAEV6nH,YAEA34H,MAFA24H,YACAC,YACA54H,MADA44H,YAIgB,IAAhBD,aAAqB97L,KAAKiY,IAAI6jL,aAAe97L,KAAKiY,IAAI8jL,cACtDF,iBAAiBG,qBAAqB,aAAc74H,OAC/C84H,uBAAuB,aAAcH,YCpI1B,IDwIA,IAAhBC,aAAqB/7L,KAAKiY,IAAI6jL,aAAe97L,KAAKiY,IAAI8jL,cACtDF,iBAAiBG,qBAAqB,WAAY74H,OAC7C84H,uBAAuB,WAAYF,YC1IxB,MD6IrB/+L,qEAGU6xF,UAAWqtG,WAE5B,OA9HoB,SAAtBC,oBAAuBlD,SAAUj5K,SACnC,IAAMguE,YAAchuE,QAAQpM,OAAOd,OAAOk7E,YAE1C,OACIswE,WAAY,SAAAA,cACP,EAAG,EAAG,GAAG57J,QAAQ,SAAA1I,GAAC,OACfghM,iCAAiB,IAAA14L,OAAK0d,QAAQ2nJ,UAAU3tK,GAAG,GAAG0tK,YAAc15E,YAAairG,SAAU,iBAE3F16B,SAAU,SAAAA,YACL,EAAG,EAAG,GAAG77J,QAAQ,SAAA1I,GAAC,OACfghM,iCAAiB,IAAA14L,OAAK0d,QAAQ2nJ,UAAU,GAAG3tK,GAAG0tK,YAAc15E,YAAairG,SAAU,iBAmH3FkD,CAAoBD,UAAWl/L,MAAM6xF,aAC9B7xF,uDAGI,IAAAo/L,sBACWp/L,KAAK2qK,UAAU,GAAG,GAAGxsE,WAAnCl1E,IADGm2K,sBACHn2K,IAAKkH,KADFivK,sBACEjvK,KADF4lK,eAEe/1L,KAAKm+F,WAE/B,OACIl1E,QACAkH,UACAjO,OAPO6zK,eAEH7zK,OAMJD,MARO8zK,eAEK9zK,2DAULrL,QAIX,OAHA5W,KAAK3E,KAAKub,OAAOvb,MACjB2E,KAAKm+F,SAASvnF,OAAOd,OAAOi3E,YAC5B/sF,KAAKo2L,UAAUx/K,QACR5W,iDAGA4W,QAMP,OALA5W,KAAK2qK,UAAY/zJ,OAAO+zJ,UACxB3qK,KAAK4W,OAASA,OACd5W,KAAK2oC,OAAO/xB,OAAOd,OAAO6yB,QAC1B3oC,KAAKynB,UAAU7Q,OAAOd,OAAO2R,WAC7BznB,KAAKq/L,eACEr/L,6DAKP,OADAA,KAAKs/L,uBACEt/L,20CEpLMu/L,4DACjB,SAAAA,iBAAa3oL,QAAQ,IAAAglE,MAAA,sKAAA4jH,CAAAx/L,KAAAu/L,mBACjB3jH,MAAA6jH,4CAAAz/L,KAAA0/L,iCAAAH,kBAAAtkM,KAAA+E,KAAM4W,OAAOvb,KAAMub,OAAOd,OAAOi3E,WAAY,KACxCqpG,UAAUx/K,QAFEglE,sZADqBk6G,8TAMlC92K,WACJ,IAAMgW,OAASwgD,6BAAcx2D,WAErBlJ,OAAW9V,KAAK4W,OAAhBd,OACA2R,UAAc3R,OAAOk7E,YAArBvpE,UAEF3E,KAAO4yD,YAAY1gD,OAAQ,OAAQ,GAAIvN,WAN9Bk4K,mBAOW7pL,OAAOi3E,WAAzB7qE,OAPOy9K,mBAOPz9K,OAAQD,MAPD09K,mBAOC19K,MACR29K,QAAY9pL,OAAZ8pL,QAERrpH,WAAWzzD,MAAQb,MAAK,GAAA3c,OAAK2c,MAAL,MAAgBC,OAAM,GAAA5c,OAAK4c,OAAL,QAE9C,IAAMmiD,MAAQqR,YAAY5yD,KAAM,OAAQ,GAAf,GAAAxd,OAAsBmiB,UAAtB,WACLiuD,YAAYrR,MAAO,QAAS,IAEpC2G,KAAK40H,2CAGf5gL,WACFhf,KAAKu3F,OAAOv4E,WAAaT,SAASkB,eAAezf,KAAK0qK,iEAG3C9zJ,QAIX,OAHA5W,KAAK3E,KAAKub,OAAOvb,MACjB2E,KAAKm+F,SAASvnF,OAAOd,OAAOi3E,YAC5B/sF,KAAKo2L,UAAUx/K,QACR5W,iDAGA4W,QAAQ,IAAAipL,eACejpL,OAAOd,OAA7B6yB,OADOk3J,eACPl3J,OAAQlhB,UADDo4K,eACCp4K,UAMhB,OALAznB,KAAK2qK,UAAY/zJ,OAAO+zJ,UACxB3qK,KAAK4W,OAASA,OACd5W,KAAK2oC,OAAOA,QACZ3oC,KAAKynB,UAAUA,WACfznB,KAAKgpB,SAASpS,OAAOd,OAAOkT,UACrBhpB,4jCCrBf,IAAM8/L,WACF3kC,OACI4kC,WAAY,YACZC,WAAYj3B,cAEhBc,UACIk2B,WAAY,eACZC,WAAYh3B,mBAKdi3B,oBAAkBC,uCAAAC,uBACnBx6F,mBAAOA,oBADYu6F,uCAAAC,oBAEnBv6F,oBAAQA,qBAFWs6F,uCAAAC,oB3D0MF,S2DvMR95B,mBAHU85B,qBAsBlBC,cAAgB,SAAhBA,cAAiBC,eAAkB,IAAAC,sBACHD,cAAc3uD,WAChD,OAX0B,SAAxB6uD,sBAAwB3pL,QAAM,OAAIpb,OAAO4I,KAAKwS,QAAQnB,MAAO,SAAAmjD,OAAK,OAAIhiD,OAAOgiD,SAWxE2nI,EAAwBpqG,KAFMmqG,sBAC7BnqG,KAC6BpjF,QAFAutL,sBACvBvtL,QACgCyE,OAFT8oL,sBACd9oL,UAarBgpL,4CAAsB,SAAtBA,oBAAuBC,WAAYC,cAAeL,eACpD,IAAIlhL,QAAU,KAENuyH,WAA6B2uD,cAA7B3uD,WAAY+yC,aAAiB4b,cAAjB5b,aAHkDkc,sBAInCb,UAAUW,YAArCV,WAJ8DY,sBAI9DZ,WAAYC,WAJkDW,sBAIlDX,WACdr3J,QAAWA,OrExDC,UqE0DlB,GAAI+oG,WAAW8P,SAAW9P,WAAW8P,QAAQu+C,YAAa,CACtD,IAAIa,aAAenc,aAAagc,YAW1BI,eACFxlM,KAAMolM,WACN91B,UAZWj5B,WAAW8P,QAAQu+C,YAa9BjqL,OAXJ8qL,aAAeplM,OAAO0M,UAAW04L,aAAlBE,sCACX9vG,YAAayzF,aAAazzF,aACvBroD,QACH2sI,UAAS,GAAAhwK,OAAK8rK,iBAAiB,GAAtB,KAAA9rK,OAA4BgsK,oBAAoB,IACzD9U,UAAWyjC,mBAAmBW,aAAa7sK,OAC3CtM,UAAWu4K,WAAWv4K,cASpBs5K,kBAAoBL,cAAc3pB,aAAa0pB,YAEjDthL,QADA4hL,kBACUA,kBACGtC,cAAcoC,eAEjB,IAAI7K,gCAAgB6K,eAGtC,OAAO1hL,SAqFL6hL,+CAAyB,SAAzBA,uBAA0BC,cAAeP,cAAeL,cAAea,KAAMzX,YAC/E,GAAIA,WAAY,CACZ,IACQhF,aAAiB4b,cAAjB5b,aACF97I,QAAWA,OrE7KH,UqE8KNmiI,UAAc2Z,aAAd3Z,UACA0f,iBAAqB0W,KAAKvmB,WAA1B6P,iBAEJY,qBAGAZ,iBAHAY,qBACAE,YAEAd,iBAFAc,YACAC,WACAf,iBADAe,WATQ4V,sBApCC,SAAfC,aAAetrL,QAAM,OACvByrJ,UACIqJ,cAAe,oBACf3oJ,MAAO,YACPC,OAAQ,qBACRm/K,mBxE/Ic,SwEgJdC,YAAa,aACbC,SAAU,EACVC,SAA2B,UAAjB1rL,OAAOie,MAAoB,EAAI,EACzC/K,SAAUlT,OAAOie,MACjByoI,UAAW92D,mBAEf47D,YACIsJ,cAAe,sBACf3oJ,MAAO,qBACPo/K,mBxE1Ja,QwE2JbC,YAAa,YACbp/K,OAAQ,YACRq/K,SAA2B,QAAjBzrL,OAAOie,MAAkB,EAAI,EACvCytK,SAAU,EACVx4K,SAAUlT,OAAOie,MACjByoI,UAAW72D,qBA6BPy7F,CAAat2B,UAAUm2B,gBAAgBA,eAFvCr2B,cAZQu2B,sBAYRv2B,cAAey2B,mBAZPF,sBAYOE,mBAAoBp/K,MAZ3Bk/K,sBAY2Bl/K,MAAOC,OAZlCi/K,sBAYkCj/K,OAAQq/K,SAZ1CJ,sBAY0CI,SAAUC,SAZpDL,sBAYoDK,SAC5DF,YAbQH,sBAaRG,YAAat4K,SAbLm4K,sBAaKn4K,SAAUwzI,UAbf2kC,sBAae3kC,UAErBzvE,YACFg+E,UAAWD,UAAUC,UACrBs2B,mBAAoB7W,iBAAiB8W,aAAa,IAEhD9a,SAAW0a,KAAKvb,aAAasb,eAC7BrJ,YAAcxM,qBAAqBiW,oBACnCxJ,WAAarN,iBAAiB8W,aAAa,GAgB3CT,eACFxlM,KAAMuvK,cACN90J,OAhBiBta,OAAO0M,UAAP44L,sCACjB9vG,YAAayzF,aAAazzF,aACvBroD,QACHg0J,yBAA0BmE,wCACnBh2B,WACH95E,YAAayzF,aAAazzF,cAG9BhqF,KAAMi6L,cACN3rB,UAAS,GAAAhwK,OAAK8rK,iBAAiBmwB,UAAtB,KAAAj8L,OAAmCgsK,oBAAoBkwB,WAChEhlC,oBACAxzI,qBAMA+jE,YACI9qE,MAAO8qE,WAAW9qE,OAClBC,OAAQ6qE,WAAW7qE,QACnB01K,wBACAC,sBACAvM,wBACAC,wBAIFwV,kBAAoBL,cAAc3pB,aAAanM,eAErD,OAAK4b,SAKDua,kBACmBA,kBACMtC,cAAcoC,eAEpB,IAAIpE,gBAAgBoE,gBARvCE,mBAAqBA,kBAAkB9uK,SAChC,MAYf,OAAO,MAuFEwvK,8CAAwB,SAAxBA,sBAAyBh6B,OAAQy5B,KAAMb,eAChD,IAAMK,cAAgBj5B,OAAOi6B,eACvBjY,WAAa2W,cAAcC,eACjC,OACIllC,MAAOqlC,4CxEjUM,QwEiUqBE,cAAeL,eACjDx2B,SAAU22B,4CxEjUO,WwEiUwBE,cAAeL,eACxDT,QA1OqB,SAAvB+B,qBAAwBjB,cAAej5B,OAAQ44B,cAAe5W,YAKhE,IAJA,IACI7tK,IAAM,EAGVgmL,GAAA,EAAAC,cAJqBrmM,OAAOgc,OAAO6oL,cAAc3uD,WAAW8P,SAI5DogD,GAAAC,cAAAxgM,OAAAugM,KACIhmL,KADUimL,cAAAD,IACCnzF,eAAevsF,OAG9B,IAAKunK,WAAY,CACb,IAAMqY,mBAAsB5/K,OAAQulJ,OAAOvlJ,SAAWtG,IAAKqG,MAAOwlJ,OAAOxlJ,SACnE8/K,cAAgBrB,cAAc3pB,axElDxB,QwEgDChhH,KAGcgsI,eAAiBA,cAAcC,eAAkBF,kBAStEjB,eACFxlM,KxE5DW,UwE6DXsvK,UAAW,KACX70J,OAVWgrL,yCADEn4J,OrE5GH,WqE+GVokD,YAAc7qE,OAPL6zC,KAGL7zC,OAIkBD,MAPb8zC,KAGG9zC,OAKZ29K,QxEtDmB,qBwEuDnB5uG,YAAak4E,eACblgJ,SAAU08E,qBAORq7F,kBAAoBL,cAAc3pB,axEhEzB,WwEuEf,OALIgqB,kBACiBA,kBAAkBtC,cAAcoC,eAEhC,IAAItB,mCAAiBsB,eAI9C,OAAO,KAuMMc,CAAqBjB,cAAej5B,OAAQ44B,cAAe5W,YACpExe,OAnFoB,SAAtBg3B,oBAAuBvB,cAAeL,cAAe5W,YACvD,GAAIA,WAAY,CACZ,IAAIyY,cAAgB,KACZxwD,WAA0C2uD,cAA1C3uD,WAAY+yC,aAA8B4b,cAA9B5b,aAAchwF,YAAgB4rG,cAAhB5rG,YAC5B9rD,QAAWA,OrE3PH,UqE6Pd,GAAI+oG,WAAWsjD,SAAWtjD,WAAWsjD,QAAQ3zL,OAAQ,CACjD,IAAMyzL,aAAegM,wCAAKrc,aAAaxZ,UAAWtiI,QAAQ8rD,0BACpDosG,eACFxlM,KxE3PM,SwE4PNsvK,UAAWj5B,WAAWsjD,QACtBl/K,OAAQg/K,cAGNiM,kBAAoBL,cAAc3pB,axEhQ9B,UwEmQNmrB,cADAnB,kBACgBA,kBACPtC,cAAcoC,eAEP,IAAItK,gCAAgBsK,eAG5C,OAAOqB,cAEX,OAAO,KA0DKD,CAAoBvB,cAAeL,cAAe5W,YAC1DyX,KA/CkB,SAApBiB,kBAAqBzB,cAAeL,cAAea,KAAMzX,YAC3D,GAAIA,WAAY,CACZ,IACM9gJ,QAAWA,OrE/RH,UqEgSN87I,aAAiB4b,cAAjB5b,aAQFoc,eACFxlM,KxEjPQ,OwEkPRsvK,UAAWu2B,KACXprL,OATWgrL,wCACRn4J,QACHkiI,WAAY4Z,aAAa5Z,WACzB75E,YAAayzF,aAAazzF,YAC1BjE,YAAc7qE,OAAQ,EAAGD,MAAO,MAO9B8+K,kBAAoBL,cAAc3pB,axErP5B,QwE4PZ,OANIgqB,kBACcA,kBACDtC,cAAcoC,eAEb,IAAI3C,6BAAc2C,eAIxC,OAAO,KAqBGsB,CAAkBzB,cAAeL,cAAea,KAAMzX,YAC5D2Y,kBAAmBpB,+CxEhSH,WwEgSoCN,cAAeL,cAAea,KAAMzX,YACxF4Y,oBAAqBrB,+CxEhSH,awEgSsCN,cAAeL,cAAea,KAAMzX,gTClW7F,IAAM6Y,cAAb,WAEI,SAAAA,6KAAeC,CAAAviM,KAAAsiM,eACXtiM,KAAKwiM,wBACLxiM,KAAKyiM,uBAJb,sPAAAC,CAAAJ,gBAAAjmM,IAAA,sBAAAN,MAAA,SAAA4mM,sBAQQ,OAAIz+L,UAAI7C,QACJrB,KAAKwiM,qBAALt+L,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKwiM,wBAZpBnmM,IAAA,qBAAAN,MAAA,SAAA6mM,qBAgBQ,OAAI1+L,UAAI7C,QACJrB,KAAKyiM,oBAALv+L,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAKyiM,uBApBpBpmM,IAAA,uBAAAN,MAAA,SAAAijM,qBAuB0Bh4L,KAAMm/D,OAMxB,OALInmE,KAAK2iM,sBAAsB37L,QAE3Bm/D,MAAMgH,iBACNhH,MAAM73C,mBAEHtuB,QA7Bf3D,IAAA,gCAAAN,MAAA,SAAA8/L,8BAgCmC70L,KAAM40L,iBAIjC,OAHApgM,OAAOgc,OAAOxX,KAAK4iM,sBAAsBl9L,QAAQ,SAAC1I,GAC9CA,EAAE6lM,oBAAoB77L,KAAM40L,mBAEzB57L,QApCf3D,IAAA,yBAAAN,MAAA,SAAAkjM,uBAuC4Bj4L,KAAM80L,OAE1B,OADA97L,KAAK2iM,sBAAsB37L,OAAShH,KAAK2iM,sBAAsB37L,MAAMizL,cAAc6B,OAC5E97L,SAzCfsiM,cAAA,GC2DaQ,8BAAmB,SAAnBA,iBAAoB9/K,QAAS4mE,OACtC,IAAI66F,aAAejqH,kBAAmBx3C,QAAQlN,UADEitL,sBAGxBn5G,MAAMvd,wBAAxBnqD,OAH0C6gL,sBAG1C7gL,OAAQD,MAHkC8gL,sBAGlC9gL,MACR+gL,WAAahgL,QAAQd,SACrB+gL,UAAYjgL,QAAQf,QACpBihL,SAAWlgL,QAAQk8D,cAAcwoF,YANSy7B,sBAc5CD,SAASnuC,kBANT/G,kBAR4Cm1C,sBAQ5Cn1C,kBACAD,eAT4Co1C,sBAS5Cp1C,eACA9jF,SAV4Ck5H,sBAU5Cl5H,SACAksB,KAX4CgtG,sBAW5ChtG,KACApjF,QAZ4CowL,sBAY5CpwL,QACAyE,OAb4C2rL,sBAa5C3rL,OAb4CirJ,gBAuB5Cz/I,QAAQlN,SAPR4O,SAhB4C+9I,gBAgB5C/9I,SACAwmJ,UAjB4CzI,gBAiB5CyI,UACAl6E,YAlB4CyxE,gBAkB5CzxE,YACA8hE,YAnB4C2P,gBAmB5C3P,YACAmY,OApB4CxI,gBAoB5CwI,OACAJ,WArB4CpI,gBAqB5CoI,WACAC,UAtB4CrI,gBAsB5CqI,UAIEnB,YAAc3mJ,QAAQm4I,QAAQ,GAE9B2O,eAAiB9mJ,QAAQ6mJ,WAAW,GAEpCu5B,eAAiBn4B,OAAOjiJ,SAExBq6K,kB9BnFuB,SAApBC,kBAAqBtgL,SAAY,IAAAugL,cACpCzO,aAAe9xK,QAAQlN,SAASm1J,OAChCtB,YAAc3mJ,QAAQm4I,QAAQ,GAC9B2O,eAAiB9mJ,QAAQ6mJ,WAAW,GACpC25B,cAAYC,kCAAAF,iBAAA,GAAAj+L,OACVogG,kBADU,KAAApgG,OACHogG,oB5CcE,QACI,WAgCJ,U4ChDC+9F,kCAAAF,cAAA,GAAAj+L,OAEVmgG,qBAFU,KAAAngG,OAEAmgG,uB5C8CD,QAhCI,WADJ,U4CfCg+F,kCAAAF,cAAA,GAAAj+L,OAGVogG,kBAHU,KAAApgG,OAGHmgG,uB5CYE,QAiCA,QAhCI,a4ChBHg+F,kCAAAF,cAAA,GAAAj+L,OAIVmgG,qBAJU,KAAAngG,OAIAogG,oB5CYG,WAgCJ,QAjCA,U4CfC69F,eAMZG,gB5CQY,SAmCA,oBAnCA,W4CJZC,cAAgBh6B,YAAY3gJ,UAAY08E,kBACxCk+F,iBAAmB95B,eAAe9gJ,UAAY08E,kBAEpD,OACI87C,QAASgiD,aAAY,GAAAl+L,OAAIq+L,cAAJ,KAAAr+L,OAAqBs+L,mBAC1C5O,QAASF,aAAa9rK,WAAa28E,oBAAQmvF,aAAa9rK,WAAa08E,kBACrEg+F,cAAc,GAAKA,cAAc,I8B+DXJ,CAAkBtgL,SAE5Cd,OAASlf,KAAKsH,MAAM4X,QACpBD,MAAQjf,KAAKsH,MAAM2X,OAEnB,IAAM4hL,yBAA2B7gM,KAAKmK,IAAI61L,WAAa,EAAIA,WAAa9gL,OAAQgpJ,WAC1E44B,wBAA0B9gM,KAAKmK,IAAI81L,UAAY,EAAIA,UAAYhhL,MAAOyC,UAtC5Bq/K,ejBwBvB,SAAhB1uC,cAAiBryI,QAASghL,aAAcC,aACjD,IAAIhP,aAAe,EACbzzC,WACAqoB,SAAW7mJ,QAAQ6mJ,WACnBq6B,WAAanQ,wCAA4BlqB,SAAS,IAsBxD,OApBAm6B,cAAgB,KAAOC,aAAe,MAAQ,QAAS,YAAYv+L,QAAQ,SAACsB,MACxE,IAAMm9L,cAAgBnhL,QAAQhc,QACxB8sF,QAAUigG,wCAA4BoQ,cAAc,IAC1D,GAAIrwG,QAAS,CACT,IAAMh+E,OAASquL,cAAc,GAE7BruL,OAAOmM,MAAQe,QAAQf,QACvBnM,OAAOoM,OAASc,QAAQd,SACxBpM,OAAOk7E,YAAchuE,QAAQlN,SAASk7E,YACtCl7E,OAAOg+E,QAAUA,QACjBh+E,OAAOqT,QAAoB,UAATniB,MAAqBk9L,WAAW7iM,OAAgCyU,OAAOqT,QAA7B0gJ,SAAS,GAAG1gJ,QAP/D,IAAAi7K,eASgB3P,cAAc3+K,OAAQ9O,KAAMgc,QAAQ0I,eAAejL,WACxEuC,QAAO,GAAA1d,OAAI0B,KAAJ,UADHkb,OATCkiL,eASDliL,OAAQyrC,KATPy2I,eASOz2I,KAGhB6zF,QAAO,GAAAl8I,OAAI0B,KAAJ,SAAkB2mD,KACzB3qC,QAAQqxI,aAAartJ,MAAQ2mD,KAC7BsnI,cAAgB/yK,WAGf+yK,0BAAczzC,iBiBTW6T,CAAcryI,QAAS6gL,yBAA0BC,yBAA3EtiD,QAzCwCuiD,eAyCxCviD,QAASyzC,aAzC+B8O,eAyC/B9O,aAGXD,QhBmEkB,SAAfqP,aAAgBrhL,QAASiyK,aAAc/yK,OAAQD,OACxD,IAAMwyE,aACFvyE,cACAD,YACAgzK,2BAEIhqB,OAAWjoJ,QAAQlN,SAAnBm1J,OACA53E,KAAmB43E,OAAnB53E,KAAMrqE,SAAaiiJ,OAAbjiJ,SAEdiiJ,OAAOj6E,YAAchuE,QAAQlN,SAASk7E,YACtC,IAAMj9D,MAAS/K,WAAa28E,oBAAQ38E,WAAa48E,oB1DnH7B,WACE,a0DsHtB,OAFAqlE,OAAO53E,KAAOA,K1DrHM,a0DqHGt/D,OAAsB9R,MAAQ,K1DpH/B,e0DoHwC8R,OAAwB7R,OAAS,IAAQmxE,KACvG43E,OAAOl3I,MAAQA,MACR8gK,+BAAkB5pB,OAAQjoJ,QAASyxE,YAAazxE,QAAQk8D,cAAc+rF,YgBjF7Do5B,CAAarhL,QAASiyK,aAAc4O,yBAA0BC,yBAC9E9gL,QAAQqxI,aAAa4W,UACrB+pB,QAAQtvL,QAAQ,SAAC1I,GACbgmB,QAAQqxI,aAAa4W,OAAOjuK,EAAE8+J,WAAa9+J,EAAEiuK,SAGjD,IAAM0rB,YhBsBoB,SAAjB2N,eAAkBtP,QAASF,aAAcpR,gBAAiBjB,gBACnE,IACMkU,aAAgB10K,MAAO,EAAGC,OAAQ,GA2BxC,OA5BuB8yK,QAAQhwL,IAAI,SAAAkwL,YAAU,OAAIA,WAAWjqB,OAAOx2E,gBAGpD/uF,QAAQ,SAACq9D,OACpB,IAAI7gD,OACAD,MACJA,MAAQjf,KAAKkK,IAAI61D,MAAM9gD,MAAO8gD,MAAMx/C,UACpCrB,OAASlf,KAAKkK,IAAI61D,MAAM7gD,OAAQ6gD,MAAMv/C,W1DzEpB,e0D2EdsxK,aAAa/gK,MACT4iK,YAAY10K,MAAQA,MAAQwgK,gBAC5BkU,YAAY10K,MAAQwgK,eACpBkU,YAAYz0K,QAAUA,SAEtBy0K,YAAY10K,OAASA,MACrB00K,YAAYz0K,OAASlf,KAAKmK,IAAIwpL,YAAYz0K,OAAQA,SAE/Cy0K,YAAYz0K,OAASA,OAASwhK,iBACrCiT,YAAYz0K,OAASA,OACrBy0K,YAAY10K,OAASA,QAErB00K,YAAYz0K,QAAUA,OACtBy0K,YAAY10K,MAAQjf,KAAKmK,IAAIwpL,YAAY10K,MAAOA,U1DxFlC,e0D2FlB6yK,aAAa/gK,QACb4iK,YAAY10K,MAAQwgK,gBAEjBkU,YgBnDa2N,CAAetP,QAAS/pB,OAAQ44B,yBAA0BC,yBACxExM,YAAe8L,iBAAmBz9F,oBAAQy9F,iBAAmBx9F,oBAAS+wF,YAAY10K,MAAQ,EAC1Fo1K,aAAgB+L,iBAAmB19F,mBAAO09F,iBAAmB39F,qBAAUkxF,YAAYz0K,OAAS,EAG5FwvH,YACF8P,gBACAwzC,gBACA1tB,UAAWtkJ,SACXmzE,UACApjF,gBACAyE,cACA49I,eAAgB8tC,SAAS9tC,kBAGvB3gE,aACF8vG,YACIriL,cACAD,aAEJgzK,0BACA0B,wBACAsN,YAAaH,wBACbE,aAAcH,yBACd5hL,MAAO6hL,wBAA0BxM,YACjCp1K,OAAQ2hL,yBAA2B5O,aAAeoC,aAClDxb,cAAe74J,QAAQ64J,gBACvBD,aAAc54J,QAAQ44J,gBAiB1B,OACI6I,aAhBJA,aAAejqH,eAAeiqH,cAC1BzzF,wBACA8hE,wBACAyC,OAAQ/6F,eAAe0oI,SAAS5tC,WAAWC,OAAQvyI,QAAQlN,SAASy/I,QACpE8tC,oCACAp4B,cACA/mH,OAAQ4mH,UAAUC,UAClBF,sBACA1P,MAAOwO,YACPE,SAAUC,eACV9b,oCACAD,8BACAnkE,YACA3f,oBAIAynE,sBACAj9C,0BAIF+vG,kBACFrpC,MAAO,EACP0O,SAAU,EACVoB,OAAQ,EACRm3B,kBAAmB,EACnBC,oBAAqB,EACrBnB,KAAM,EACNtB,QAAS,GAGP6E,gBACFhzJ,E1EhJiB,Q0EiJjB0oG,E1EhJqB,W0EiJrBk3B,E1EnJkB,S0EoJlBqzB,E1EnG+B,oB0EoG/BC,E1EnGiC,sB0EoGjCC,E1EnGgB,O0EoGhBC,E1EnGmB,W0EqJVC,0BAAe,SAAfA,aAAgBr9B,OAAQ44B,eACjC,IAAMK,cAAgBj5B,OAAOi6B,eACvBqD,WAAat9B,OAAOmT,SAGtBsmB,KACAsD,iBADAtD,KAIE8D,aAAevD,8CAAsBh6B,OAAQs9B,WAAY1E,eACzD4E,kBAAoBzpM,OAAO4I,KAAKogM,kBAAkBx/L,IAAI,SAAAhI,GAAC,OAAIgoM,aAAahoM,KAC1DioM,kBAAkB/D,OA1Cd,SAAtBgE,oBAAuBD,kBAAmBx9B,QAAW,IAGnD26B,kBAEAoC,iBAFApC,kBACAlB,KACAsD,iBADAtD,KAGEiE,wBAA0BF,kBAF5BT,iBAHAnC,qBAME+C,sBAAwBH,kBAAkB7C,mBAC1CiD,YAAcJ,kBAAkB/D,MAChCrC,iBAAmB,IAAIyD,cACvBK,uBAENyC,wBAA0BzC,oBAAoBphC,SAAW6jC,uBACzDD,0BAA4BxC,oBAAoBrhC,WAAa6jC,yBAE7DtG,iBACiB8D,oBAAoBA,qBACpBC,oBACG1B,KAAMmE,cAE1B59B,OAAOvoF,cAAcomH,WAAaH,wBAClC19B,OAAOvoF,cAAcqmH,WAAaH,uBAEjCD,wBAAyBC,uBAAuB1/L,QAAQ,SAACyZ,SACtDA,SAAWA,QAAQs6K,QAAQoF,oBAG/BwG,YAAYxG,iBAAiBA,kBAgBzBqG,CAAoBD,kBAAmBx9B,QAG3Cw9B,kBAAkBv/L,QAAQ,SAAC8/L,iBAAkB9jM,OACzC,IAAK8jM,iBAAkB,CACnB,IAAMC,kBAAoBhB,eAAe/iM,OACzCg/L,cAAcgF,gBAAgBD,sBAGtC/E,cAAciF,mBAAmBV,mBAAmBpsB,UArEhC,SAAlB+sB,gBAAmBX,mBACrBA,kBAAkBv/L,QAAQ,SAAC8/L,kBACnBA,kBACAA,iBAAiBK,mBAmEzBD,CAAgBX,ywDC/OpB,IAAMa,0BAA2B,SAA3BA,yBAA4BhjD,YAAa34D,UAAa,IAAAp0B,KAAAgB,MAClDgvI,UAAY,SAAZA,UAAYl+L,OAAK,OAAIA,MAAMb,SAAWw0F,yBAAUv8F,SAEhDyoK,YADSv9E,SAASnnE,QACGk8D,cAAcwoF,YACnC5pB,SAAU/nF,SAAGzwD,OAAHjI,MAAA04D,KAAAiwI,iCAAat+B,YAAYu+B,qBAAqB,OACxDloD,SAAUhnF,UAAGzxD,OAAHjI,MAAA05D,MAAAivI,iCAAat+B,YAAYu+B,qBAAqB,OACxDC,OAASpoD,QAAQroI,MAAM,SAAA5N,OAAK,OAAIA,MAAMb,SAAWw0F,yBAAUt8F,YAC3Dy6F,SAAW+tE,YAAYt7I,WAAW3S,eAClC6rI,UAAY3rD,SAAS2rD,UACrBC,UAAY5rD,SAAS4rD,UAC3BzC,YAAY9wH,KAAK,SAAC27B,MACd,IAAM6tH,aAAe7tH,KAAKloB,UAAU0kD,WACpC,IAAM2zD,QAAQroI,MAAMswL,aAAchoD,QAAQtoI,MAAMswL,WAAa,CACzD,IAGIt5D,WAHE4L,YAAc1qF,KAAKloB,UAAUinG,gBAAgB,GAC7Cy5D,cAAgB9tD,YAAYzsI,OAAO,SAAAxQ,GAAC,OAA+C,IAA3CmqJ,UAAU15I,UAAU,SAAAjH,GAAC,OAAIA,EAAEwhM,OAAOhrM,OAC1EirM,cAAgBhuD,YAAYzsI,OAAO,SAAAxQ,GAAC,OAA+C,IAA3CkqJ,UAAUz5I,UAAU,SAAAjH,GAAC,OAAIA,EAAEwhM,OAAOhrM,OAG5EqxI,WADAy5D,OACaC,cAAcnhM,IAAI,SAAA5J,GAAC,SAAAkK,OAAOlK,KAE1BirM,cAAcrhM,IAAI,SAAA5J,GAAC,SAAAkK,OAAOlK,KAG3CogL,aAAa8qB,cAAc,IAAK75D,YAAY,OAKlD85D,gCACFngH,YACIuiF,IAAK,SAAA3iK,EAAC4iK,mBAAoB5lJ,SACtB,IAAMwjL,uBAAyB59B,mBAAmBt8B,aAC5CmsB,YAAcz1I,QAAQupH,cAC5B,OAAOi6D,wBAAyB/tC,cAAgB+tC,yBAGxD1jH,aACI4L,QAAS,SAAAA,QAACk6E,mBAAoB5lJ,SAC1B,IAAMyjL,gBAAkB79B,mBAAmBv8B,WACrCw8B,kBAAoBD,mBAAmBt8B,aACvC2B,OAASjrH,QAAQjE,KACjB05I,YAAcz1I,QAAQupH,cAC5B,OAAIs8B,oBACOA,oBAAsBpQ,aAAqBxqB,SAAWw4D,kBAIrEnzG,aAAc,SAAAA,eAAA,OAAM,KCxDbozG,oCD2EX,SAAAA,gBAAwB,IAAAppG,iBAAA1hB,mKAAA+qH,CAAA3mM,KAAA0mM,eAAA,QAAAttI,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MAAA,OACpBuiB,MAAAgrH,yCAAA5mM,MAAAs9F,iBAAAupG,8BAAAH,gBAAAzrM,KAAAoC,MAAAigG,kBAAAt9F,MAAAsF,OAASsR,WACJ0kK,mBAAqB1/F,MAAKh2E,YAAYkgM,2BAC3ClqH,MAAKktF,uBAAuBltF,MAAKh2E,YAAY2gM,iCAHzB3qH,6YADeoI,8UAgBnC,OAAI9/E,UAAO7C,QACPrB,KAAKs7K,oBAAqBp3K,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,KAAalE,KAAK4F,YAAYkgM,2BACjD9lM,MAEJA,KAAKs7K,2FAGmB,IAAAt/F,OAAAh8E,KAC/B,GAAIkE,UAAO7C,OAAQ,CACfrB,KAAKu7K,wBAA0B/gH,eAAeA,kBAC1Cx6D,KAAK4F,YAAY2gM,kCAAkCriM,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,SACvD,IAAM8e,QAAUhjB,KAAKgjB,QAKrB,OAJAo4J,uBAAuBp7K,MACvBgjB,QAAQ2kJ,WAAW1qF,2BAA2B9gC,aAAYG,gBAAiB,WACvE8+H,uBAAuBp/F,UAEpBh8E,KAEX,OAAOA,KAAKu7K,oFA8CGx0F,UAAW7sE,SAC1B,IAAMuxH,YAAcjwI,OAAO0M,OAAOgS,SAC5B/F,SAAWs3H,YAAYt3H,SACvB3N,KAAOxG,KAAKgjB,QAAQk8D,cAAcwoF,YAAYkuB,iBAC9C55H,aAAex1D,KAAK8O,kBACpBuC,MAAQgkD,yCAA4Br1D,KAAM2N,UAC1C2yL,kBAAoB9mM,KAAKukF,SAASC,YAAYuC,WAEpD,GAAI+/G,kBAAmB,CACnB,IACMC,aADS7xI,eAAe/gD,UAAY3Y,OAAO4I,KAAK+P,UAAaA,SAAWA,SAAS,OAC5DvI,OAAO,SAAA/D,OAAK,OAAIA,SAASm0D,eAC9CurB,QAAUu/G,kBAAkBlhM,YAAY2hF,UACxC/sE,YACFN,QAASuxH,YACT7zH,OAAQmvE,UACR5yE,SAAU0D,MACVR,SAAUrX,KAAKgjB,QAAQ2sG,QACvB11G,gBAAiBstE,QACjBjwE,4BAA6ByvL,YAAYtxL,MAAM,SAAA5N,OAAK,OAAIm0D,aAAan0D,OAAOoR,IAAIjS,OAC5Ew0F,yBAAUv8F,WAElBuH,KAAKkhF,UAAU7vE,MAAO2C,YAAY,GAEtC,OAAOxa,qEAGU8iF,aACjB,IAAK,IAAMzmF,OAAOymF,YACd9iF,KAAKokF,uBAAuBtB,YAAYzmF,KAAKgkF,cAAgByC,YAAYzmF,KAE7E,OAAO2D,mFAtGP,OAAO8lM,gHAIP,OAAOS,oDExFFS,mBACTC,KACIl8J,SACAmvG,SACA5pD,UACAm3E,WAEJzkG,OACIykG,UACA18H,SACAmvG,SACA5pD,+tCCsBa42G,4CAUjB,SAAAA,OAAaC,oBAAoB,IAAApxI,KAAA6lB,2JAAAwrH,CAAApnM,KAAAknM,SAC7BtrH,wKAAAyrH,CAAArnM,KAAAsnM,sBAAAJ,QAAAjsM,KAAA+E,QAEKg6K,YAAcx+K,OAAO0M,UAAWgX,YAASqvG,4BAC9C3yC,MAAK+0E,aACL/0E,MAAKy4E,gBACLz4E,MAAK6+F,gBACL7+F,MAAKw0C,OAAS,KACdx0C,MAAK8pD,iBAAmB,KACxB9pD,MAAK6pD,iBAAmB,IAAIvwD,QAAQ,SAACr7D,SACjC+hE,MAAK8pD,iBAAmB7rH,UAE5B+hE,MAAKy4E,aAAaumB,OAAS,IAAIsN,kBAC/BtsG,MAAKm0C,OAAS,IAAI/0C,YAAMgsH,mBAExBprH,MAAK+rF,WAAa,IAAI3sF,aAAJusH,sBAAAxxI,QACb5Z,aAAYG,gBAAiB,GADhBirJ,sBAAAxxI,KAEb5Z,aAAYE,cAAgB,MAFf0Z,OAMlB,IAAMoN,UAAYsrD,0BAAiB1yE,uBAC7Bg+H,WAAav+K,OAAO0M,UAAWgX,YAASqvG,2BAAc86C,eAtB/B,OAwB7BnrF,iBAAWspH,6BAAA5rH,OAAMm+F,WAAYn+F,MAAKm0C,QAC9B5sD,sBAGJyY,MAAKlwD,aAAalwB,OAAO0M,UAAWi/L,mBAAoBvrH,MAAKyvB,gBAC7DzvB,MAAKuO,SAAS,IAAIu8G,gBAAJc,6BAAA5rH,QACV4I,YAAaqE,4BACbpE,SAAU2E,gBACV1D,2BACD5C,iCAAaoB,0CAChBtI,MAAK+zC,MAAL,UAAArqH,OAAqB+vD,gBACrBumB,MAAKu/E,MAAM,OACXv/E,MAAKiuF,SAAS,OACdjuF,MAAKqvF,WACLrvF,MAAKp8C,UACLo8C,MAAK0a,UACL1a,MAAK96D,SACLg5J,2BAAoB0tB,6BAAA5rH,QAEpBA,MAAK8lH,eAAiBhmB,6BA3CO9/F,sXAVDizG,8SAiE5B,OAAI3qL,UAAO7C,OACArB,KAEJA,KAAKk/E,cAAc07F,yDAoB1B,OAAI12K,UAAO7C,OACArB,KAEJA,KAAKq0J,iDAIZ,OAAOr0J,KAAKylI,uDAkBZ,GAAIvhI,UAAO7C,OAAQ,CACf,IAAMqmK,YAAc1nK,KAAKk/E,cAAcwoF,YAGvC,OAFA1nK,KAAKowH,OAALlsH,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACAwjK,aAAeA,YAAY/3C,MAAM3vH,KAAK2vH,SAC/B3vH,KAEX,OAAOA,KAAKowH,mDA4CZ,OAAIlsH,UAAS7C,QACTrB,KAAK0wI,UAALxsI,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAEJA,KAAK0wI,sDASK,QAAAt3E,KAAAl1D,UAAA7C,OAARuV,OAAQ,IAAArR,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAARziD,OAAQyiD,MAAAn1D,UAAAm1D,MACjB,GAAIziD,OAAOvV,OAAQ,CACf,IAAMqwI,WAAal2I,OAAO0M,UAAW0O,OAAO,GAAG86H,YACzCukB,qBAAuBz6J,OAAO0M,UAAW0O,OAAO,GAAGq/I,sBAEzDj2J,KAAK2wJ,WAAcjf,sBAAYukB,2CAC/B,IAAMwxC,iBnDxMQ,SAAbC,WAAc1kL,SAGvB,OAAQ,IAFIA,QAAQ2tI,UAAUjf,WAEdmkB,YAAY7yI,QAAQ2tI,UAAWn1J,OAAO0M,QAClDyqH,UAAW3vG,QAAQ2kJ,YACpB3kJ,QAAQ0I,kBmDmMsBg8K,CAAW1nM,MAKpC,OAHAA,KAAKq0J,aAAaqT,YAAc+/B,iBAAiB,GnDe7B,SAAnBE,iBAAoB3kL,SAAY,IAAA4kL,uBAAAC,4BACPhyC,aAAY/iC,WADL,GAClCujC,YADkCuxC,uBAAA,GACrBnxC,WADqBmxC,uBAAA,GAEnCn6L,MAAQuV,QAAQ+sG,OACtBtiH,MAAMggB,OAAO,YAAa4oI,aAC1B5oJ,MAAMggB,OAAO,cAAegpI,YmDlBpBkxC,CAAiB3nM,MACjBA,KAAKk/E,cAAcwoF,YAAY/3C,MAAM3vH,KAAK2vH,SAASliH,MAAMzN,KAAK+vH,QACvD/vH,KAEX,OAAOA,KAAK2wJ,8DAOZ,OAAIzsJ,UAAM7C,QACNrB,KAAKqrG,cAALnnG,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GACOlE,MAGJA,KAAKqrG,0DAULrqB,YACP,IAAMqvD,iBAAmBrwI,KAAK0rB,eAAe2kH,iBAC7C,OAAIrvD,YACAqvD,iBAAiBy3D,SAAS9mH,YACnBhhF,MAEJqwI,yDAUP,OAAInsI,UAAO7C,OACArB,KAEJA,KAAKk/E,cAAc+rF,yCAmBxBlrF,WAEF,OADyB//E,KAAK0rB,eAAe2kH,iBACrB1vD,SAASZ,mDASjC,IAAM6J,MAAQ5pF,KAAK4pF,QAEbymD,iBAAmBrwI,KAAK0rB,eAAe2kH,iBAEvCgwD,cAAgByC,8BAAiB9iM,KAAM4pF,OAC7CymD,iBAAiB3L,QAASpkD,OAAQtgF,KAAM4X,OAAQ,eJhR3B,SAAhBmwL,cAAiBntB,OAAQylB,eAAkB,IAC5C3uD,WAA0C2uD,cAA1C3uD,WAAY+yC,aAA8B4b,cAA9B5b,aAAchwF,YAAgB4rG,cAAhB5rG,YAE9B0B,KAIAu7C,WAJAv7C,KACApjF,QAGA2+H,WAHA3+H,QACAyE,OAEAk6H,WAFAl6H,OACA49I,eACA1jB,WADA0jB,eAGA/B,QAIA+B,eAJA/B,QACAC,SAGA8B,eAHA9B,SACAX,WAEAyC,eAFAzC,WACAC,YACAwC,eADAxC,YAEAz8D,MAAQpjF,SACR6nK,OAAOnmF,YAAYA,aACF3+E,OAAO2uK,cACP/hC,UACGz5H,KAAMoqI,QAAStgJ,QAAQ,GAAIugJ,UAC3B71G,QAAS04C,KAAK,GAAI3+E,OAAQ2+E,KAAK,IAC/Bz5C,QAASi2G,WAAY5/I,QAAQ,GAAI6/I,eAEpCo1C,gBI4PjBD,CAAc/nM,KAAK46K,SAAUylB,eAE7BrgM,KAAK0hM,eAAetuG,WAChBlxE,OAAQm+K,cAAc5rG,YAAYuvG,aAClC/hL,MAAOo+K,cAAc5rG,YAAYwvG,cAGrCjkM,KAAK0hM,eAAeh3B,SAAS9gF,OAG7Bk7G,0BAAa9kM,KAAMqgM,enD1RS,SAAvB4H,qBAAwBjlL,SACjC,IAAM09K,cAAgB19K,QAAQ0+K,eACxBqD,WAAarE,cAAc3pB,a3B+CjB,Q2B9CV54E,SAAW4mG,YAAcA,WAAW/C,cACpCl/C,YAAc9/H,QAAQk8D,cAAcwoF,YAAYzoB,iBAAiBljJ,MACjEokB,gBAAkBq1D,6BAAa,IAAAlwE,OAAKo7L,cAAcwH,kBAAmBplL,OAC3EggI,YAAY9wH,KAAK,SAAC27B,MACdA,KAAKloB,UAAU8rG,oBACXl7C,GAAIl2E,gBACJ4sE,WAAYoR,amDmRhB8pG,CAAqBjoM,MnD3GU,SAA1BmoM,wBAA2BnlL,SACpC,IAAIslF,SAAW,EAET0xC,MAAQh3H,QAAQg3H,aAEtB,WACI,IAAK,IAAIl/I,EAAI,EAAGA,EAAIk/I,MAAM34I,OAAQvG,IAC9B,IAAK,IAAIuL,EAAI,EAAGA,EAAI2zI,MAAMl/I,GAAGuG,OAAQgF,IAAK,CACtC,IAAM+hM,YAAcpuD,MAAMl/I,GAAGuL,GAAG4iG,eAAeZ,OAAOC,SACtD,GAAI8/F,aAA+B,IAAhBA,YAEf,YADA9/F,SAAW8/F,cAL3B,GAYI9/F,UACA0xC,MAAMt0I,QAAQ,SAAC4mF,MACXA,KAAK5mF,QAAQ,SAACo3C,MACVA,KAAKmsD,cAAeZ,QAAUC,qBAC9BxrD,KAAKyrD,WAAWzrD,KAAKu1D,qBmDyF7B81F,CAAwBnoM,4CAmBxB,OAAOA,KAAKk/E,cAAcwoF,YAAY2gC,QAAQ,2CAkB9C,OAAOroM,KAAKk/E,cAAcwoF,YAAY2gC,QAAQ,6DAkB9C,OADoBroM,KAAKk/E,cAAcwoF,YACpB2gC,Q9EpTJ,iD8EwTf,GAAInkM,UAAO7C,OAAQ,CACf,IAAItF,MAAKmI,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GAKT,MAJyB,iBAArBA,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,MACAnI,MAAQy5E,6BAAatxE,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,IAAY4e,QAErC9iB,KAAK+1F,OAASh6F,MACPiE,KAEX,OAAOA,KAAK+1F,2DA1NKuyG,gBAAiBC,SAAUpB,oBAC5C,IAAMr+F,SAAW,IAAIo+F,OAAOC,oBAE5B,IAAK,IAAM9qM,OAAOisM,gBACdx/F,SAASzsG,KAAKisM,gBAAgBjsM,MAIlC,OADAysG,SAASrF,SAAS8kG,UACXz/F,yDAWP,MAAO,uBClLF0/F,YACT3yC,yBACA1lB,mCAESs4D,eACT7yC,2BACAjzD,cCTW,WACX,IAAMq/B,IAAMkB,eACNwlE,QACF59L,IAAK,SAAAA,IAACzO,IAAK4c,KAEP,OADA+oH,IAAI3lI,KAAO4c,IACJyvL,QAEX/sM,IAAK,SAAAA,MAAA,OAAMqmI,MAEf,OAAO0mE,gqBCwBX,IAAMC,eACAC,gBAAkBJ,WAElBK,4BAA8B,SAA9BA,4BAA+BC,iBAAkBrlG,UACnD,IAAK,IAAMrkF,QAAQ0pL,iBACfrlG,SAAS34F,IAAIsU,KAAM0pL,iBAAiB1pL,QA+BtC2pL,UAAO,SAAPA,OAAa,IAAAC,aAAAC,mBAEY/qH,oBAAeh/D,aAF3B,GAERgqL,IAFQF,aAAA,GAEHG,YAFGH,aAAA,GAGTt3D,WAAal2I,OAAO0M,UAAWsgM,YAC/BY,wBAA0B5tM,OAAO0M,OAAOugM,eACxCxyC,wBAEN,IAAK,IAAM72I,QAAQgqL,wBACfnzC,qBAAqB72I,MAAQgqL,wBAAwBhqL,QAgEzD,OA5DA8pL,IAAIzhC,OAAS,WAET,IAAM4hC,SAAWF,YAAY7tL,YACvBmsJ,OAASy/B,cAAOoC,aAAaD,UAC/B33D,sBACAukB,2CACDizC,IAAI/B,sBAKP,O/WshByB,SAA3BoC,yBAA4BC,iBAAkBC,oBAAqBC,kBACrEA,iBAAiBhkM,QAAQ,SAAAmwF,MAAI,OAAI2zG,iBAC5BvsH,0BAA0B4Y,KAAM,SAAAg2B,OAAA,IAAI3xD,OAAJ/D,eAAA01D,MAAA,aAAgB49E,oBAAoB5zG,MAAM37B,Y+W1hB3EqvI,CAAyBJ,YAAa1hC,OAAQjsK,OAAO4I,KAAKilM,WAEnD5hC,QAIXyhC,IAAI/B,mBAAqB,WAIrB,OAHKwB,YAAYloL,aACbkoL,YAAYloL,WAAa,IAAIkpL,4BAAW,EAAG,UAG3ClpL,WAAYkoL,YAAYloL,WACxB4vH,iBAAkB,IAAI/wD,oBAM9B4pH,IAAIG,SAAW,kBAAMF,YAAY7tL,aAEjC4tL,IAAIzlG,SAAW,WAAyB,QAAArqC,KAAAl1D,UAAA7C,OAArBynM,iBAAqB,IAAAvjM,MAAA6zD,MAAAC,KAAA,EAAAA,KAAAD,KAAAC,OAArByvI,iBAAqBzvI,MAAAn1D,UAAAm1D,MAEpC,GAAIyvI,iBAAiBznM,OAAQ,CACzB,IAAK,IAAM+d,SAAQ0pL,iBACX1pL,SAAQwpL,kBACRl3D,WAAWtyH,OAAQ0pL,iBAAiB1pL,QAG5C,OAAO8pL,IAEX,OAAOx3D,YAGXw3D,IAAItzC,aAAe,WACf,IAAMA,aAAeK,qBAAqBL,aAC1C,OAAI1xJ,UAAiB7C,QACjBwnM,4BAA2B3kM,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GAAsB0xJ,cAC1CszC,KAEJtzC,aAAaj6J,OAGxButM,IAAIvmG,cAAgB,WAChB,IAAMA,cAAgBszD,qBAAqBtzD,cAC3C,OAAIz+F,UAAiB7C,QACjBwnM,4BAA2B3kM,UAAA7C,QAAA,OAAAnE,EAAAgH,UAAA,GAAsBy+F,eAC1CumG,KAEJvmG,cAAchnG,OAGlButM,KAGLU,aACF9mH,6CACA+mH,WACIz5G,wCACAM,kDACAX,4BAIF+5G,YACFjhH,+CACAghH,WACI3/G,0CACA6B,mDACAb,+CAIR69G,UAAK9zI,UAAYA,oBACjB8zI,UAAK9rL,QAAU8sL,aAAI9sL,QACnB8rL,UAAKa,YAAcA,YACnBb,UAAK7gC,YAAcA,YACnB6gC,UAAKnnE,aAAeA,kBACpBmnE,UAAK7rL,UAAY8sL,0BACjBjB,UAAKe,WAAaA,WAClBf,UAAKkB,OACDnzH,6CACAG,iCACAvB,wBACAF,2CACAn4D,mDACAY,Q/W+hCY,SAAVA,QAAWisL,WAAYC,eAAb,OACZ33D,WAAY,SAAAA,WAAC/kI,OACT,IAAM28L,aAAe38L,MAAMy8L,YACrB53D,OAAS63D,cAAc/+L,MAAM,EAAG++L,cAAc9oM,OAAS,GACvDnD,GAAKisM,cAAcA,cAAc9oM,OAAS,GAE1C42E,KAAOq6D,OAAOttI,IAAI,SAAAud,KAAG,OAAI6nL,aAAa7nL,OAC5C,OACIrkB,GAAIA,GAAEb,WAAF,EAAAs4D,+BAAMsiB,OACVq6D,mB+WtiCZy2D,UAAK7tH,OAAQ,IAAIF,aAAQnjE,MAAMjS,YAChBmjM","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 a=t[r]={i:r,l:!1,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.l=!0,a.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 a in e)n.d(r,a,function(t){return e[t]}.bind(null,a));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=JSON.parse('{\"name\":\"datamodel\",\"description\":\"Relational algebra compliant in-memory tabular data store\",\"homepage\":\"https://github.com/chartshq/datamodel\",\"version\":\"2.2.2\",\"license\":\"MIT\",\"main\":\"dist/datamodel.js\",\"keywords\":[\"datamodel\",\"data\",\"relational\",\"algebra\",\"model\",\"muze\",\"fusioncharts\",\"table\",\"tabular\",\"operation\"],\"author\":\"Muzejs.org (https://muzejs.org/)\",\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/chartshq/datamodel.git\"},\"contributors\":[{\"name\":\"Akash Goswami\",\"email\":\"akashgoswami90s@gmail.com\"},{\"name\":\"Subhash Haldar\"},{\"name\":\"Rousan Ali\",\"email\":\"rousanali786@gmail.com\",\"url\":\"https://rousan.io\"},{\"name\":\"Ujjal Kumar Dutta\",\"email\":\"duttaujjalkumar@live.com\"},{\"name\":\"Ranajit Banerjee\",\"email\":\"ranajit.113124@gmail.com\"},{\"name\":\"Adarsh Lilha\",\"email\":\"adarshlilha@gmail.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\":\"npm run build:prod\",\"build:dev\":\"webpack --mode development\",\"build:prod\":\"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 l})),n.d(r,\"GROUP_BY_FUNCTIONS\",(function(){return s}));var a={};n.r(a),n.d(a,\"DSVArr\",(function(){return rt})),n.d(a,\"DSVStr\",(function(){return mt})),n.d(a,\"FlatJSON\",(function(){return yt})),n.d(a,\"Auto\",(function(){return bt}));var i={};n.r(i),n.d(i,\"sum\",(function(){return un})),n.d(i,\"avg\",(function(){return cn})),n.d(i,\"min\",(function(){return fn})),n.d(i,\"max\",(function(){return ln})),n.d(i,\"first\",(function(){return sn})),n.d(i,\"last\",(function(){return dn})),n.d(i,\"count\",(function(){return pn})),n.d(i,\"sd\",(function(){return hn}));var o={FLAT_JSON:\"FlatJSON\",DSV_STR:\"DSVStr\",DSV_ARR:\"DSVArr\",AUTO:\"Auto\"},u={CATEGORICAL:\"categorical\",TEMPORAL:\"temporal\",GEO:\"geo\",BINNED:\"binned\"},c={CONTINUOUS:\"continuous\"},f={MEASURE:\"measure\",DIMENSION:\"dimension\"},l={NORMAL:\"normal\",INVERSE:\"inverse\",ALL:\"all\"},s={SUM:\"sum\",AVG:\"avg\",MIN:\"min\",MAX:\"max\",FIRST:\"first\",LAST:\"last\",COUNT:\"count\",STD:\"std\"};function d(e){return e instanceof Date?e:new Date(e)}function p(e){return e<10?\"0\"+e:e}function h(e){this.format=e,this.dtParams=void 0,this.nativeDate=void 0}RegExp.escape=function(e){return e.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\"\\\\$&\")},h.TOKEN_PREFIX=\"%\",h.DATETIME_PARAM_SEQUENCE={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6},h.defaultNumberParser=function(e){return function(t){var n;return isFinite(n=parseInt(t,10))?n:e}},h.defaultRangeParser=function(e,t){return function(n){var r,a=void 0;if(!n)return t;var i=n.toLowerCase();for(a=0,r=e.length;aa.getFullYear()&&(t=\"\"+(i-1)+r),d(t).getFullYear()},formatter:function(e){var t=d(e).getFullYear().toString(),n=void 0;return t&&(n=t.length,t=t.substring(n-2,n)),t}},Y:{name:\"Y\",index:0,extract:function(){return\"(\\\\d{4})\"},parser:h.defaultNumberParser(),formatter:function(e){return d(e).getFullYear().toString()}}}},h.getTokenFormalNames=function(){var e=h.getTokenDefinitions();return{HOUR:e.H,HOUR_12:e.l,AMPM_UPPERCASE:e.p,AMPM_LOWERCASE:e.P,MINUTE:e.M,SECOND:e.S,SHORT_DAY:e.a,LONG_DAY:e.A,DAY_OF_MONTH:e.e,DAY_OF_MONTH_CONSTANT_WIDTH:e.d,SHORT_MONTH:e.b,LONG_MONTH:e.B,MONTH_OF_YEAR:e.m,SHORT_YEAR:e.y,LONG_YEAR:e.Y}},h.tokenResolver=function(){var e=h.getTokenDefinitions(),t=function(){for(var e=0,t=void 0,n=void 0,r=arguments.length;e=0;)o=e[i+1],-1!==r.indexOf(o)&&a.push({index:i,token:o});return a},h.formatAs=function(e,t){var n,r=d(e),a=h.findTokens(t),i=h.getTokenDefinitions(),o=String(t),u=h.TOKEN_PREFIX,c=void 0,f=void 0,l=void 0;for(l=0,n=a.length;l=0;d--)(f=i[d].index)+1!==s.length-1?(void 0===u&&(u=s.length),l=s.substring(f+2,u),s=s.substring(0,f+2)+RegExp.escape(l)+s.substring(u,s.length),u=f):u=f;for(d=0;d0&&e.split(\",\").forEach((function(e){var n=e.split(\"-\"),r=+n[0],a=+(n[1]||n[0]);if(a>=r)for(var i=r;i<=a;i+=1)t(i)}))}var R=function(){function e(e,t){for(var n=0;n=(i=e[a=n+Math.floor((r-n)/2)]).start&&t=i.end?n=a+1:t3&&void 0!==arguments[3]&&arguments[3],a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:U.CROSS,i=[],o=[],u=n||H,c=e.getFieldspace(),f=t.getFieldspace(),l=c.name,s=f.name,d=c.name+\".\"+f.name,p=Y(c,f);if(l===s)throw new Error(\"DataModels must have different alias names\");return c.fields.forEach((function(e){var t=_({},e.schema());-1===p.indexOf(t.name)||r||(t.name=c.name+\".\"+t.name),i.push(t)})),f.fields.forEach((function(e){var t=_({},e.schema());-1!==p.indexOf(t.name)?r||(t.name=f.name+\".\"+t.name,i.push(t)):i.push(t)})),T(e._rowDiffset,(function(n){var d=!1,h=void 0;T(t._rowDiffset,(function(v){var m=[],y={};y[l]={},y[s]={},c.fields.forEach((function(e){m.push(e.partialField.data[n]),y[l][e.name()]={rawValue:e.partialField.data[n],formattedValue:e.formattedData()[n]}})),f.fields.forEach((function(e){-1!==p.indexOf(e.schema().name)&&r||m.push(e.partialField.data[v]),y[s][e.name()]={rawValue:e.partialField.data[v],formattedValue:e.formattedData()[v]}}));var g=At(y[l]),b=At(y[s]);if(u(g,b,(function(){return e.detachedRoot()}),(function(){return t.detachedRoot()}),{})){var w={};m.forEach((function(e,t){w[i[t].name]=e})),d&&U.CROSS!==a?o[h]=w:(o.push(w),d=!0,h=n)}else if((a===U.LEFTOUTER||a===U.RIGHTOUTER)&&!d){var O={},_=c.fields.length-1;m.forEach((function(e,t){O[i[t].name]=t<=_?e:null})),d=!0,h=n,o.push(O)}}))})),new on(o,i,{name:d})}function J(e,t){var n=\"\"+e,r=\"\"+t;return nr?1:0}function z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:J;return e.length>1&&function e(t,n,r,a){if(r===n)return t;var i=n+Math.floor((r-n)/2);return e(t,n,i,a),e(t,i+1,r,a),function(e,t,n,r,a){for(var i=e,o=[],u=t;u<=r;u+=1)o[u]=i[u];for(var c=t,f=n+1,l=t;l<=r;l+=1)c>n?(i[l]=o[f],f+=1):f>r?(i[l]=o[c],c+=1):a(o[c],o[f])<=0?(i[l]=o[c],c+=1):(i[l]=o[f],f+=1)}(t,n,i,r,a),t}(e,0,e.length-1,t),e}var K=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")};function W(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);tt?1:-1}:function(e,t){return(e=\"\"+e)===(t=\"\"+t)?0:e>t?-1:1}}return n}(e.type,n)}function q(e,t){var n=new Map,r=[];return e.forEach((function(e){var a=e[t];n.has(a)?r[n.get(a)][1].push(e):(r.push([a,[e]]),n.set(a,r.length-1))})),r}function Z(e,t,n){var r={label:e[0]};return t.reduce((function(t,r,a){return t[r]=e[1].map((function(e){return e[n[a].index]})),t}),r),r}function $(e,t,n){for(var r=void 0,a=void 0,i=void 0,o=n.length-1;o>=0;o--)r=n[o][0],a=n[o][1],(i=Ht(t,r))&&(\"function\"==typeof a?z(e,(function(e,t){return a(e[i.index],t[i.index])})):E(a)?function(){var n=q(e,i.index),r=a[a.length-1],o=a.slice(0,a.length-1),u=o.map((function(e){return Ht(t,e)}));n.forEach((function(e){e.push(Z(e,o,u))})),z(n,(function(e,t){var n=e[2],a=t[2];return r(n,a)})),e.length=0,n.forEach((function(t){e.push.apply(e,W(t[1]))}))}():function(){var t=X(i,a);z(e,(function(e,n){return t(e[i.index],n[i.index])}))}())}var Q,ee=function e(t,n,r,a){if(0===t.length)return n;var i=t[0],o=new Map;n.reduce((function(e,t){var n=t[i.index];return e.has(n)?e.get(n).push(t):e.set(n,[t]),e}),o);var u=!0,c=!1,f=void 0;try{for(var l,s=o[Symbol.iterator]();!(u=(l=s.next()).done);u=!0){var d=l.value,p=K(d,2),h=p[0],v=p[1],m=e(t.slice(1),v,r,a);o.set(h,m),Array.isArray(m)&&$(m,r,a)}}catch(e){c=!0,f=e}finally{try{!u&&s.return&&s.return()}finally{if(c)throw f}}return o};function te(e,t){var n=e.schema,r=e.data;if(0!==(t=t.filter((function(e){return!!Ht(n,e[0])}))).length){var a=t.findIndex((function(e){return null===e[1]}));a=-1!==a?a:t.length;var i=t.slice(0,a),o=t.slice(a);$(r,n,i),r=function(e,t,n,r){if(0===(n=n.filter((function(e){return null!==e[1]||(r.push(e[0]),!1)}))).length)return e;r=r.map((function(e){return Ht(t,e)}));var a=ee(r,e,t,n);return e.map((function(e){for(var t=0,n=a;!Array.isArray(n);)n=n.get(e[r[t++].index]);return n.shift()}))}(r,n,o,i.map((function(e){return e[0]}))),e.uids=r.map((function(e){return e.pop()})),e.data=r}}function ne(e,t,n,r,a){a=Object.assign({},{addUid:!1,columnWise:!1},a);var i={schema:[],data:[],uids:[]},o=a.addUid,u=r&&r.length>0,c=[];if(n.split(\",\").forEach((function(t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{},n={},r=e.getFieldspace().getMeasure(),a=_e.defaultReducer();return Object.keys(r).forEach((function(e){\"string\"!=typeof t[e]&&(t[e]=r[e].defAggFn());var i=_e.resolve(t[e]);i?n[e]=i:(n[e]=a,t[e]=ge)})),n}(e,n),o=e.getFieldspace(),u=o.fieldsObj(),c=o.name,l=[],s=[],d=[],p={},h=[],v=void 0;Object.entries(u).forEach((function(e){var t=Ee(e,2),n=t[0],r=t[1];if(-1!==a.indexOf(n)||i[n])switch(d.push(_({},r.schema())),r.schema().type){case f.MEASURE:s.push(n);break;default:case f.DIMENSION:l.push(n)}}));var m=0;T(e._rowDiffset,(function(e){var t=\"\";l.forEach((function(n){t=t+\"-\"+u[n].partialField.data[e]})),void 0===p[t]?(p[t]=m,h.push({}),l.forEach((function(t){h[m][t]=u[t].partialField.data[e]})),s.forEach((function(t){h[m][t]=[u[t].partialField.data[e]]})),m+=1):s.forEach((function(n){h[p[t]][n].push(u[n].partialField.data[e])}))}));var y={},g=function(){return e.detachedRoot()};return h.forEach((function(e){var t=e;s.forEach((function(n){t[n]=i[n](e[n],g,y)}))})),r?(r.__calculateFieldspace(),v=r):v=new yn(h,d,{name:c}),v}function je(e,t){var n=Y(e.getFieldspace(),t.getFieldspace());return function(e,t){var r=!0;return n.forEach((function(n){r=!(e[n].internalValue!==t[n].internalValue||!r)})),r}}function Se(e,t){var n={},r=[],a=[],i=[],o=e.getFieldspace(),u=t.getFieldspace(),c=o.fieldsObj(),f=u.fieldsObj(),l=o.name+\" union \"+u.name;if(!j(e._colIdentifier.split(\",\").sort(),t._colIdentifier.split(\",\").sort()))return null;function s(e,t){T(e._rowDiffset,(function(e){var r={},o=\"\";a.forEach((function(n){var a=t[n].partialField.data[e];o+=\"-\"+a,r[n]=a})),n[o]||(i.push(r),n[o]=!0)}))}return e._colIdentifier.split(\",\").forEach((function(e){var t=c[e];r.push(_({},t.schema())),a.push(t.schema().name)})),s(e,c),s(t,f),new yn(i,r,{name:l})}function De(e,t,n){return G(e,t,n,!1,U.LEFTOUTER)}function Fe(e,t,n){return G(t,e,n,!1,U.RIGHTOUTER)}var Ne=function(){function e(e,t){for(var n=0;nn&&(n=a))})),[t,n]}}]),t}(Ve),He=function(){function e(e,t){for(var n=0;n9999?\"+\"+st(t,6):st(t,4))+\"-\"+st(e.getUTCMonth()+1,2)+\"-\"+st(e.getUTCDate(),2)+(i?\"T\"+st(n,2)+\":\"+st(r,2)+\":\"+st(a,2)+\".\"+st(i,3)+\"Z\":a?\"T\"+st(n,2)+\":\"+st(r,2)+\":\"+st(a,2)+\"Z\":r||n?\"T\"+st(n,2)+\":\"+st(r,2)+\"Z\":\"\")}var pt=function(e){var t=new RegExp('[\"'+e+\"\\n\\r]\"),n=e.charCodeAt(0);function r(e,t){var r,a=[],i=e.length,o=0,u=0,c=i<=0,f=!1;function l(){if(c)return it;if(f)return f=!1,at;var t,r,a=o;if(e.charCodeAt(a)===ot){for(;o++=i?c=!0:(r=e.charCodeAt(o++))===ut?f=!0:r===ct&&(f=!0,e.charCodeAt(o)===ut&&++o),e.slice(a+1,t-1).replace(/\"\"/g,'\"')}for(;o2&&void 0!==arguments[2]?arguments[2]:{},a=arguments[3];t===L.COMPOSE?(e._derivation.length=0,(n=e._derivation).push.apply(n,_t(a))):e._derivation.push({op:t,meta:r,criteria:a})},Dt=function(e,t){var n;(n=t._ancestorDerivation).push.apply(n,_t(e._ancestorDerivation).concat(_t(e._derivation)))},Ft=function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=arguments[4];St(t,n,r,a),Dt(e,t)},Nt=(Ot(gt={},l.NORMAL,{diffIndex:[\"rowDiffset\"],calcDiff:[!0,!1]}),Ot(gt,l.INVERSE,{diffIndex:[\"rejectRowDiffset\"],calcDiff:[!1,!0]}),Ot(gt,l.ALL,{diffIndex:[\"rowDiffset\",\"rejectRowDiffset\"],calcDiff:[!0,!0]}),gt),kt=function(e,t,n){if(-1!==n&&t===n+1){var r=e.length-1;e[r]=e[r].split(\"-\")[0]+\"-\"+t}else e.push(\"\"+t)},Tt=function(e,t,n){var r=[],a=[],i=wt(Nt[n].calcDiff,2),o=i[0],u=i[1];return T(e,(function(e){var n=t(e);n&&o&&kt(r,e,-1),!n&&u&&kt(a,e,-1)})),{rowDiffset:r.join(\",\"),rejectRowDiffset:a.join(\",\")}},Rt=function(e,t,n,r,a){var i={},o={},u={};return T(e,(function(e){if(t(e)){var n=\"\",c={keys:{}};r.forEach((function(t){var r=a[t].partialField.data[e];n=n+\"-\"+r,c.keys[t]=r})),void 0===o[n]&&(o[n]=[],i[n]=-1,u[n]=c),kt(o[n],e,i[n]),i[n]=e}})),{splitRowDiffset:o,dimensionMap:u}},Ct=function(e,t,n,r,a){var i={},o=function(){return r.detachedRoot()},u=n.mode,c=e._rowDiffset,f=e.getPartialFieldspace().fields,l=f.map((function(e){return e.formattedData()})),s=f.map((function(e){return e.data()}));return a(c,(function(e){return t(Et(f,l,s,e),e,o,i)}),u)},Mt=function(e){var t=e.clone(!1),n=e.getPartialFieldspace();return t._colIdentifier=n.fields.map((function(e){return e.name()})).join(\",\"),n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,t.__calculateFieldspace().calculateFieldsConfig(),t},It=function(e,t,n){for(var r=n(e,t,0),a=1,i=e.length;a2&&void 0!==arguments[2]?arguments[2]:{},r=[],a=n.operation||V,i=n.filterByMeasure||!1,o=Mt(e),u=o.getFieldsConfig();r=t.length?t.map((function(e){return n=void 0,r=(t=e).getData(),a=t.getFieldsConfig(),o=Object.keys(t.getFieldspace().getDimension()).filter((function(e){return e in u})),c=o.length,f=o.map((function(e){return a[e].index})),l=Object.keys(t.getFieldspace().getMeasure()).filter((function(e){return e in u})),s=t.getFieldspace().fieldsObj(),d=r.data,p=l.reduce((function(e,t){return e[t]=s[t].domain(),e}),{}),h={},n=function(e,t,n){return t[e[n]]},c&&d.forEach((function(e){var t=It(f,e,n);h[t]=1})),n=function(e,t,n){return t[e[n]].internalValue},d.length?function(e){var t=!c||h[It(o,e,n)];return i?l.every((function(t){return e[t].internalValue>=p[t][0]&&e[t].internalValue<=p[t][1]}))&&t:t}:function(){return!1};var t,n,r,a,o,c,f,l,s,d,p,h})):[function(){return!1}];return a===V?o.select((function(e){return r.every((function(t){return t(e)}))}),{saveChild:!1}):o.select((function(e){return r.some((function(t){return t(e)}))}),{saveChild:!1})},xt=function(e,t,n,r,a){e._rowDiffset=t,e.__calculateFieldspace().calculateFieldsConfig(),Ft(n,e,L.SELECT,{config:r},a)},Lt=function(e,t,n,r){var a=e.clone(n.saveChild),i=t;return n.mode===l.INVERSE&&(i=r.filter((function(e){return-1===t.indexOf(e)}))),a._colIdentifier=i.join(\",\"),a.__calculateFieldspace().calculateFieldsConfig(),Ft(e,a,L.PROJECT,{projField:t,config:n,actualProjField:i},null),a},Ut=function(e,t,n,r){return t.map((function(t){return Lt(e,t,n,r)}))},Vt=function(e){if((e=_({},e)).type||(e.type=f.DIMENSION),!e.subtype)switch(e.type){case f.MEASURE:e.subtype=c.CONTINUOUS;break;default:case f.DIMENSION:e.subtype=u.CATEGORICAL}return e},Bt=function(e){return e.map((function(e){return function(e){var t=[c.CONTINUOUS],n=[u.CATEGORICAL,u.BINNED,u.TEMPORAL,u.GEO],r=e.type,a=e.subtype,i=e.name;switch(r){case f.DIMENSION:if(-1===n.indexOf(a))throw new Error(\"DataModel doesn't support dimension field subtype \"+a+\" used for \"+i+\" field\");break;case f.MEASURE:if(-1===t.indexOf(a))throw new Error(\"DataModel doesn't support measure field subtype \"+a+\" used for \"+i+\" field\");break;default:throw new Error(\"DataModel doesn't support field type \"+r+\" used for \"+i+\" field\")}}(e=Vt(e)),e}))},Yt=function(e,t,n,r){n=Bt(n),r=Object.assign(Object.assign({},nt),r);var i=a[r.dataFormat];if(!i||\"function\"!=typeof i)throw new Error(\"No converter function found for \"+r.dataFormat+\" format\");var u=i(t,n,r),c=wt(u,2),f=c[0],l=c[1];!function(e,t){e.forEach((function(e){var n=e.as;if(n){var r=t.indexOf(e.name);t[r]=n,e.name=n,delete e.as}}))}(n,f);var s=tt(l,n,f),d=F.createNamespace(s,r.name);e._partialFieldspace=d,e._rowDiffset=l.length&&l[0].length?\"0-\"+(l[0].length-1):\"\";var p=[],h=d.fields,v=h.map((function(e){return e.data()})),m=h.map((function(e){return e.formattedData()}));return T(e._rowDiffset,(function(e){p[e]=Et(h,m,v,e)})),d._cachedValueObjects=p,e._colIdentifier=n.map((function(e){return e.name})).join(),e._dataFormat=r.dataFormat===o.AUTO?D(t):r.dataFormat,e},Ht=function(e,t){for(var n=0;n2&&void 0!==arguments[2]?arguments[2]:{},a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},i=a.nonTraversingModel,o=a.excludeModels||[];if(t!==i){var u=!o.length||-1===o.indexOf(t);u&&t.handlePropagation(n,r);var c=t._children;c.forEach((function(t){var i=Gt(n,t);e(t,i,r,a)}))}},zt=function(e){for(;e._parent&&e._derivation.find((function(e){return e.op!==L.GROUPBY}));)e=e._parent;return e},Kt=function(e){for(;e._parent;)e=e._parent;return e},Wt=function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];e._parent;)t.push(e),e=e._parent;return t},Xt=function(e,t,n,r){var a=void 0,i=void 0,o=n.propagationNameSpace,u=n.propagateToSource,c=n.sourceId,f=r.propagateInterpolatedValues,l=[];if(null===e&&!0!==r.persistent)l=[{criteria:[]}],a=[];else{var s,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),(a=v.filter((function(t){return t!==e})).map((function(e){return e.config.criteria}))).length&&l.push({criteria:a,models:e.model,path:Wt(e.model)}))}))}a=(s=[]).concat.apply(s,[].concat(_t(p),[e])).filter((function(e){return null!==e})),l.push({criteria:a,excludeModels:[].concat(h,_t(r.excludeModels||[]))})}var m=t.model,y=Object.assign({sourceIdentifiers:e,propagationSourceId:c},r),g=t.groupByModel;f&&g&&(i=Pt(g,a,{filterByMeasure:f}),Jt(g,i,y)),l.forEach((function(e){var t=Pt(m,e.criteria),n=e.path;if(n){var r=function(e,t){for(var n=0,r=t.length;n1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=void 0,a=t.isMutableAction,i=t.criteria,o=t.action+\"-\"+t.sourceId;r=a?e.mutableActions:e.immutableActions,null===i?delete r[o]:r[o]={model:n,config:t}},$t=function(e,t,n){var r=e.reduce((function(e,r){return\"RegExp\"===r.constructor.name?e.push.apply(e,_t(t.filter((function(e){return-1!==e.search(r)})))):r in n&&e.push(r),e}),[]);return Array.from(new Set(r)).map((function(e){return e.trim()}))},Qt=function(e,t){return e.numberFormat?e.numberFormat()(t):t},en=function(){function e(e,t){for(var n=0;n1?(a=e.clone(r.saveChild),xt(a,u[c[1]],e,n,t),[o,a]):o}(this,e,t,{saveChild:t.saveChild})}},{key:\"isEmpty\",value:function(){return!this._rowDiffset.length||!this._colIdentifier.length}},{key:\"clone\",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=new this.constructor(this);return e?t.setParent(this):t.setParent(null),t}},{key:\"project\",value:function(e,t){var n={mode:l.NORMAL,saveChild:!0};t=Object.assign({},n,t);var r=this.getFieldsConfig(),a=Object.keys(r),i=t.mode,o=$t(e,a,r),u=void 0;i===l.ALL?u=[Lt(this,o,{mode:l.NORMAL,saveChild:t.saveChild},a),Lt(this,o,{mode:l.INVERSE,saveChild:t.saveChild},a)]:u=Lt(this,o,t,a);return u}},{key:\"getFieldsConfig\",value:function(){return this._fieldConfig}},{key:\"calculateFieldsConfig\",value:function(){return this._fieldConfig=this._fieldspace.fields.reduce((function(e,t,n){return e[t.name()]={index:n,def:t.schema()},e}),{}),this}},{key:\"dispose\",value:function(){this._parent&&this._parent.removeChild(this),this._parent=null,this._children.forEach((function(e){e._parent=null})),this._children=[]}},{key:\"removeChild\",value:function(e){var t=this._children.findIndex((function(t){return t===e}));-1===t||this._children.splice(t,1)}},{key:\"setParent\",value:function(e){this._parent&&this._parent.removeChild(this),this._parent=e,e&&e._children.push(this)}},{key:\"getParent\",value:function(){return this._parent}},{key:\"getChildren\",value:function(){return this._children}},{key:\"getDerivations\",value:function(){return this._derivation}},{key:\"getAncestorDerivations\",value:function(){return this._ancestorDerivation}}]),e}(),nn=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,a=!1,i=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){a=!0,i=e}finally{try{!r&&u.return&&u.return()}finally{if(a)throw i}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")},rn=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(),a=[this,e,t],i=Ae.apply(void 0,a);return Ft(this,i,L.GROUPBY,{fieldsArr:e,groupByString:r,defaultReducer:_e.defaultReducer()},t),n.saveChild?i.setParent(this):i.setParent(null),i}},{key:\"sort\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{saveChild:!1},n=this.getData({order:\"row\",sort:e}),r=n.schema.map((function(e){return e.name})),a=[r].concat(n.data),i=new this.constructor(a,n.schema,{dataFormat:\"DSVArr\"});return Ft(this,i,L.SORT,t,e),t.saveChild?i.setParent(this):i.setParent(null),i}},{key:\"serialize\",value:function(e,t){e=e||this._dataFormat,t=Object.assign({},{fieldSeparator:\",\"},t);var n=this.getFieldspace().fields,r=n.map((function(e){return e.formattedData()})),a=r[0].length,i=void 0,u=void 0,c=void 0;if(e===o.FLAT_JSON)for(i=[],u=0;u=0&&(n.fields[o]=e)}else n.fields.push(e),r.forEach((function(t,n){t[e.name()]=new k(a[n],i[n],e)}));return n._cachedFieldsObj=null,n._cachedDimension=null,n._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:\"calculateVariable\",value:function(e,t,n){var r=this;e=Vt(e),n=Object.assign({},{saveChild:!0,replaceVar:!1},n);var a=this.getFieldsConfig(),i=t.slice(0,t.length-1),o=t[t.length-1];if(a[e.name]&&!n.replaceVar)throw new Error(e.name+\" field already exists in datamodel\");var u=i.map((function(e){var t=a[e];if(!t)throw new Error(e+\" is not a valid column name.\");return t.index})),c=this.clone(n.saveChild),f=c.getFieldspace().fields,l=u.map((function(e){return f[e]})),s={},d=function(){return r.detachedRoot()},p=[];T(c._rowDiffset,(function(e){var t=l.map((function(t){return t.partialField.data[e]}));p[e]=o.apply(void 0,an(t).concat([e,d,s]))}));var h=tt([p],[e],[e.name]),v=nn(h,1)[0];return c.addField(v),Ft(this,c,L.CAL_VAR,{config:e,fields:i},o),c}},{key:\"propagate\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},a=t.isMutableAction,i=t.sourceId,o=t.payload,u=Kt(this),c=u._propagationNameSpace,f=zt(this),l={groupByModel:f,model:u};return n&&Zt(c,t,this),Xt(e,l,{propagationNameSpace:c,sourceId:i},Object.assign({payload:o},t)),a&&qt(c,l,{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,t){var n=this.getFieldsConfig();if(!n[e])throw new Error(\"Field \"+e+\" doesn't exist\");var r=t.name||e+\"_binned\";if(n[r])throw new Error(\"Field \"+r+\" already exists\");var a=function(e,t,n){var r=n.buckets,a=n.binsCount,i=n.binSize,o=n.start,u=n.end,c=e.domain(),f=I(c,2),l=f[0],s=f[1];r||(o=0!==o&&(!o||o>l)?l:o,u=0!==u&&(!u||ul&&r.unshift(l),r[r.length-1]<=s&&r.push(s+1);for(var d=[],p=0;p2&&void 0!==arguments[2]?arguments[2]:function(e){return e},r=arguments[3],a=r.saveChild,i=e.getFieldspace().fieldsObj(),o=Ct(e.clone(a),n,r,e,(function(){for(var e=arguments.length,n=Array(e),r=0;r0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments[2],r={mode:l.NORMAL,saveChild:!0},a=this.getFieldsConfig(),i=Object.keys(a),o=[[t]];return n=Object.assign({},r,n),(e=e.length?e:[[]]).forEach((function(e,n){o[n]=$t([].concat(an(e),an(t)),i,a)})),Ut(this,o,n,i)}}],[{key:\"configureInvalidAwareTypes\",value:function(e){return M.invalidAwareVals(e)}},{key:\"Reducers\",get:function(){return _e}}]),t}(tn),un=ye.sum,cn=ye.avg,fn=ye.min,ln=ye.max,sn=ye.first,dn=ye.last,pn=ye.count,hn=ye.std,vn={compose:function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0},r=e,a=void 0,i=[];return t.forEach((function(e){r=e(r),i.push.apply(i,B(r._derivation)),a||(a=r)})),a&&a!==r&&a.dispose(),r._ancestorDerivation=[],Ft(e,r,L.COMPOSE,null,i),n.saveChild?r.setParent(e):r.setParent(null),r}},bin:function(){for(var e=arguments.length,t=Array(e),n=0;n 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'];","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"hyperdis\",[],t):\"object\"==typeof exports?exports.hyperdis=t():e.hyperdis=t()}(window,function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=0)}([function(e,t,r){\"use strict\";r.r(t);var n=function(){function e(e,t){for(var r=0;r2?(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 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 copy: function(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\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]) // eslint-disable-line no-prototype-builtins\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.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n}\n\nfunction rgb_formatRgb() {\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\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 formatHsl: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"hsl(\" : \"hsla(\")\n + (this.h || 0) + \", \"\n + (this.s || 0) * 100 + \"%, \"\n + (this.l || 0) * 100 + \"%\"\n + (a === 1 ? \")\" : \", \" + a + \")\");\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://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) return hcl2lab(o);\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.l < 100 ? 0 : NaN, 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\nfunction hcl2lab(o) {\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\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 hcl2lab(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 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","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 {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","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","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","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.js\";\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 if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\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 === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + 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.js\";\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.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"],\n minus: \"-\"\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.js\";\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.js\";\nimport formatRounded from \"./formatRounded.js\";\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.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n 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 === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"-\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\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 === undefined && (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 === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%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 === undefined ? 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 = isNaN(value) ? nan : 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 : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n\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.js\";\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.js\";\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.js\";\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(date - date.getMilliseconds());\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, durationSecond} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\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, durationSecond} from \"./duration\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\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.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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 colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\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 {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 {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 colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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.js\";\nimport ramp from \"../ramp.js\";\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","export const UNIT_GLOBAL_NAMESPACE = 'app.units';\nexport const UNIT_LOCAL_NAMESPACE = 'local.units';\nexport const LAYER_LOCAL_NAMESPACE = 'local.layers';\nexport const LAYER_GLOBAL_NAMESPACE = 'app.layers';\nexport const GROUP_GLOBAL_NAMESPACE = 'app.group';\nexport const GROUP_LOCAL_NAMESPACE = 'local.group';\nexport const CANVAS_LOCAL_NAMESPACE = 'local.canvas';\nexport const CANVAS_GLOBAL_NAMESPACE = 'app.canvas';\n\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 MATRIX_CREATED: 'matrixCreated'\n};\n\nexport default CommonProps;\n","export const COORD_TYPES = {\n POLAR: 'polar',\n CARTESIAN: 'cartesian'\n};\nexport const DATA_TYPE = {\n FUNCTION: 'function',\n STRING: 'string',\n NUMBER: 'number',\n BOOLEAN: 'Boolean'\n};\nexport const SORT_ORDER_ASCENDING = 'asc';\nexport const SORT_ORDER_DESCENDING = 'desc';\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, ccw = !!ccw;\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 = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\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 oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var 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","import { defaultValue } from '../common-utils';\n\nconst sortSelection = (dataObjects, updateData, sortFn) =>\n (a, b) => {\n const kA = a[0];\n const kB = b[0];\n return sortFn([a[0], dataObjects.get(kA), updateData.get(kA)], [kB, dataObjects.get(kB), updateData.get(kB)]);\n };\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 (idGetter) {\n this._dataObjects = new Map();\n this._updateData = new Map();\n this._enterData = new Map();\n this._exitData = new Map();\n this._idGetter = idGetter;\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) {\n const entryData = new Map();\n const exitdata = new Map();\n const tempMap = new Map();\n const duplicateData = new Map();\n const updatedData = this._updateData;\n const idGetter = this._idGetter;\n\n newData.forEach((...params) => {\n const key = idGetter ? idGetter(...params) : params[1];\n if (!tempMap.has(key)) {\n tempMap.set(key, params[0]);\n } else {\n duplicateData.push(key, params[0]);\n }\n });\n\n let val;\n // prepare enter data\n let entries = tempMap.entries();\n while (val = entries.next().value) {\n if (!updatedData.has(val[0])) {\n entryData.set(val[0], val[1]);\n } else {\n updatedData.set(val[0], val[1]);\n }\n }\n // prepare exit data\n entries = updatedData.entries();\n while (val = entries.next().value) {\n if (!tempMap.has(val[0])) {\n exitdata.set(val[0], val[1]);\n }\n }\n\n // put duplicate data to exit list\n entries = duplicateData.entries();\n while (val = entries.next().value) {\n exitdata.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = updatedData;\n newSelection._dataObjects = this._dataObjects;\n newSelection._enterData = entryData;\n newSelection._exitData = exitdata;\n\n return newSelection;\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 Selection\n */\n append (callback) {\n let val;\n const dataObjects = new Map();\n const data = new Map();\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n dataObjects.set(val[0], callback(val[1]));\n data.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = data;\n newSelection._dataObjects = dataObjects;\n\n return newSelection;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {Selection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\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 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 (target) {\n const mergedObjects = new Map();\n const mergedData = new Map();\n let val;\n let entries;\n\n // merge Object and data present in this selection\n entries = this._updateData.entries();\n while (val = entries.next().value) {\n if (!this._exitData.has(val[0])) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], this._dataObjects.get(val[0]));\n }\n }\n\n // merge object from target selection\n entries = target._updateData.entries();\n while (val = entries.next().value) {\n if (!(mergedData.has(val[0]) || target._exitData.has(val[0]))) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], target._dataObjects.get(val[0]));\n }\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = mergedData;\n newSelection._dataObjects = mergedObjects;\n\n return newSelection;\n }\n\n each (fn) {\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n fn(val[1], this._updateData.get(val[0]), val[0]);\n }\n }\n\n map (fn) {\n const newdata = new Map();\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n newdata.set(val[0], fn(val[1], this._updateData.get(val[0]), val[0]));\n }\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = this._updateData;\n newSelection._dataObjects = newdata;\n\n return newSelection;\n }\n\n remove () {\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n\n currentData.clear();\n\n return this;\n }\n\n sort (sortFn) {\n const updateData = this._updateData;\n const dataObjects = this._dataObjects;\n const sortSel = sortSelection(dataObjects, updateData, sortFn);\n\n this._updateData = new Map([...updateData.entries()].sort(sortSel));\n this._dataObjects = new Map([...dataObjects.entries()].sort(sortSel));\n return this;\n }\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 let val;\n const objects = [];\n const dataObjects = this._dataObjects;\n // select the data to create object\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n if (dataObjects.has(val[0])) {\n objects.push(dataObjects.get(val[0]));\n }\n }\n\n return objects;\n }\n}\n\nexport default Selection;\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","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype, DateTimeFormatter, DM_DERIVATIVES, default as DataModel } 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 { dataSelect } from './DataSystem';\nimport { DATA_TYPE, SORT_ORDER_ASCENDING, SORT_ORDER_DESCENDING } from './enums';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst { CATEGORICAL, TEMPORAL } = DimensionSubtype;\nconst { STRING, FUNCTION } = DATA_TYPE;\nconst { InvalidAwareTypes } = DataModel;\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.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.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 const domArr = [];\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n for (let i = 0, len = data.length; i < len; i++) {\n const arr = data[i];\n const [field0, field1] = fields;\n const arr0 = arr.filter(d => !isNaN(d[field0]));\n const arr1 = arr.filter(d => !isNaN(d[field1]));\n if (arr0.length || arr1.length) {\n const firstMin = getMin(arr0, field0);\n const secondMin = getMin(arr1, field1);\n const firstMax = getMax(arr0, field0);\n const secondMax = getMax(arr1, field1);\n domArr.push([Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)]);\n }\n }\n domain = domArr.length ? [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))] : [];\n break;\n }\n return domain;\n};\n\nconst sanitizeDomainWhenEqual = (domain) => {\n if (domain[0] === domain[1]) {\n domain[0] = domain[0] > 0 ? 0 : domain[0];\n domain[1] = domain[1] > 0 ? domain[1] : 0;\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 && dom.length);\n if (domains.length) {\n if (fieldType === CATEGORICAL) {\n domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\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\nconst getNearestValue = (data, key) => {\n const filterData = data.filter(d => typeof d === 'number');\n return filterData[getClosestIndexOf(filterData, key)];\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 *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object}\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} name\n * @return {Object}\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\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 * 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\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const { sanitization, preset, onset, typeChecker, defaultValue: defVal } = propInfo[1];\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n if (defVal) {\n context[`_${prop}`] = defVal;\n }\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0], context[`_${prop}`]);\n }\n if (preset) {\n preset(context, value);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n if (onset) {\n onset(context, value);\n }\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 *\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\n .registerImmediateListener(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\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 */\nconst createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect(idFn);\n\n selection = selection.data(data);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n const exitSelection = selection.exit();\n exitSelection.getObjects().forEach(inst => inst.remove());\n exitSelection.remove();\n return mergedSelection;\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 shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? rgbToHsv(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : '';\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\\(([\\d.]+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*(\\d*(?:\\.\\d+)?)\\)$/;\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\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 *\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].internalValue;\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 *\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].internalValue;\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 } else {\n filteredDataModel = dataModel.select(() => false, {\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, ...params) => {\n const propListenerMap = listenerMap(context, ...params);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const { namespace } = params[1];\n let ns = null;\n if (namespace) {\n ns = namespace;\n }\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, false, {\n namespace: ns\n });\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} str\n *\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 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};\n\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\n\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\n\nconst formatTemporal = (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n};\n\nconst temporalFields = (dataModel) => {\n const filteredFields = {};\n Object.entries(dataModel.getFieldspace().getDimension()).forEach(([fieldName, fieldObj]) => {\n if (fieldObj.subtype() === TEMPORAL) {\n filteredFields[fieldName] = fieldObj;\n }\n });\n return filteredFields;\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\nconst getValueParser = config => (val) => {\n if (val instanceof InvalidAwareTypes) {\n return val in config ? config[val] : `${val}`;\n }\n return val;\n};\n\nconst retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => {\n const filteredReducers = {};\n if (dataModel instanceof DataModel) {\n const derivations = [...dataModel.getDerivations().reverse(), ...dataModel.getAncestorDerivations().reverse()];\n const nearestReducers = defaultValue(\n getObjProp(derivations.find(derv => derv.op === DM_DERIVATIVES.GROUPBY), 'criteria'), {});\n\n const measures = dataModel.getFieldspace().getMeasure();\n measureFieldNames = measureFieldNames.length ? measureFieldNames : Object.keys(measures);\n measureFieldNames.forEach((measureName) => {\n if (nearestReducers[measureName]) {\n filteredReducers[measureName] = nearestReducers[measureName];\n } else {\n const measureField = measures[measureName];\n if (measureField) {\n filteredReducers[measureName] = measureField.defAggFn();\n }\n }\n });\n }\n return filteredReducers;\n};\n\nconst retrieveFieldDisplayName = (dm, fieldName) => dm.getFieldspace().fieldsObj()[fieldName].displayName();\n/**\n * Fetches the nearest sort operation details by traversing the chain of parent DataModels\n * @param {Object} dataModel Instance of DataModel\n *\n * @return {Array|null} sort criteria, null if no sort operation found\n */\nconst nearestSortingDetails = (dataModel) => {\n const allDerivations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n const nearestSortDerivation = allDerivations.reverse().find(derivation => derivation.op === DM_DERIVATIVES.SORT);\n\n return nearestSortDerivation ? nearestSortDerivation.criteria : null;\n};\n\n/**\n * Map containing key, value sortingOrder pairs\n */\nconst sortOrderMap = {\n [SORT_ORDER_ASCENDING]: (firstVal, secondVal) => firstVal.localeCompare(secondVal),\n [SORT_ORDER_DESCENDING]: (firstVal, secondVal) => secondVal.localeCompare(firstVal)\n};\n\n/**\n * Sort categorical field based on it's sorting order\n * @param {string} sortOrder Order by which field is to be sorted (asc or desc or func)\n * @param {string} firstVal First sort parameter\n * @param {string} secondVal Second sort parameter\n * @return {number} position|null if sort order is invalid\n*/\nconst sortCategoricalField = (sortOrder, firstVal, secondVal) => {\n const sortOrderType = typeof sortOrder;\n\n if (sortOrderType === FUNCTION) {\n return sortOrder(firstVal, secondVal);\n } else if (sortOrderType === STRING) {\n if (!sortOrderMap[sortOrder]) return null;\n return sortOrderMap[sortOrder](firstVal, secondVal);\n }\n return null;\n};\n\nconst intersect = (arr1, arr2, accessors = [v => v, v => v]) => {\n const [fn1, fn2] = accessors;\n const set = new Set(arr2.map(v => fn2(v)));\n return arr1.filter(value => set.has(fn1(value)));\n};\n\nexport {\n getValueParser,\n require,\n intersect,\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 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 getDependencyOrder,\n objectIterator,\n intSanitizer,\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 getNearestValue,\n retrieveNearestGroupByReducers,\n nearestSortingDetails,\n createSelection,\n formatTemporal,\n temporalFields,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField\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 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 (idFn) {\n return new Selection(idFn);\n}\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","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) > 0)) 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","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\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_join from \"./join\";\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 join: selection_join,\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","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n enter = typeof onenter === \"function\" ? onenter(enter) : enter.append(onenter + \"\");\n if (onupdate != null) update = onupdate(update);\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\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 && node.compareDocumentPosition(next) ^ 4) 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.js\";\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.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter() {\n return !event.ctrlKey && !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 navigator.maxTouchPoints || (\"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\", \"cancel\", \"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 > STARTED) throw new Error(\"too late; already running\");\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 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.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\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(node, 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 {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule\";\nimport {tweenValue} from \"./tween\";\nimport interpolate from \"./interpolate\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\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 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\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\";\nimport transition_end from \"./end\";\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 end: transition_end\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 string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, 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 attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i(t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i(t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\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","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i(t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\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 {set} from \"./schedule\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(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) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n });\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 schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\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 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","import Model from 'hyperdis';\nimport { defaultValue, getObjProp, toArray } from './common-utils';\n\nconst initProp = (obj, props, val = () => ({})) => {\n props.forEach((prop) => {\n if (!obj[prop]) {\n obj[prop] = val();\n }\n obj = obj[prop];\n });\n return obj;\n};\n\nconst fetchPropValues = (propNames, params, deps) => params.map((param, i) => {\n const prop = propNames[i];\n\n return param.map(val => (val === undefined || val === null ? val : val[deps[prop]]));\n});\n\nconst addListenerToNamespace = (namespaceInf, fn, context) => {\n let key = namespaceInf.key;\n const namespace = namespaceInf.id;\n const listeners = context._listeners;\n\n if (namespace) {\n !listeners.get(namespace) && (listeners.set(namespace, new Map()));\n const namespaceListeners = listeners.get(namespace);\n\n if (!key) {\n key = namespaceListeners.size;\n }\n namespaceListeners.set(key, fn);\n } else {\n key = key || listeners.size;\n listeners.set(key, fn);\n }\n};\n\nconst setContexts = (contexts, propObj, contextMap) => {\n for (const key of propObj.keys()) {\n contexts[key] = {\n context: contextMap[key],\n deps: propObj.get(key).depProps\n };\n }\n return contexts;\n};\n\nconst registerPropInMaps = (store, props, namespaceInf, type) => {\n const {\n _registeredListeners: registeredListeners,\n _propListenerMap: propListenerMap\n } = store;\n const {\n subNamespace,\n namespace: ns\n } = namespaceInf;\n\n initProp(registeredListeners, [ns]);\n props.forEach((prop) => {\n const subNamespaces = defaultValue(getObjProp(registeredListeners, ns, prop, 'subNamespace'), []);\n let fns = defaultValue(getObjProp(propListenerMap, prop, type, 'fns'), 0);\n\n fns++;\n subNamespace && subNamespaces.push(subNamespace);\n registeredListeners[ns][prop] = {\n subNamespace: subNamespaces,\n allProps: props,\n subNamespaces: {}\n };\n initProp(propListenerMap, [prop, type]);\n propListenerMap[prop][type] = {\n fns,\n _fnCount: fns\n };\n });\n};\n\nconst registerListener = (context, type, ...options) => {\n const [propList, callBack, instantCall, namespaceInf = {}] = options;\n let props = propList;\n\n if (!Array.isArray(propList)) {\n props = [propList];\n }\n\n const { namespace: ns } = namespaceInf;\n const callbackFn = ((propNames, namespaceVal) => (...params) => {\n const { _savedCommits: commits, _propListenerMap: propListenerMap } = context;\n\n if (!propNames.some(prop => getObjProp(propListenerMap, prop, 'disabled'))) {\n if (namespaceVal) {\n const listenersObj = context._registeredListeners[namespaceVal];\n const contextMap = context._contextMap[namespaceVal];\n const contextsObj = {};\n\n propNames.forEach((prop) => {\n const commitsObj = defaultValue(getObjProp(commits, prop, type), {});\n const listeners = listenersObj[prop].subNamespaces;\n const propDeps = propListenerMap[prop][type];\n\n for (const nm in commitsObj) {\n const fnInf = defaultValue(propDeps[nm], { fns: 0 });\n let { fns } = fnInf;\n\n if (fns > 0) {\n setContexts(contextsObj, listeners[nm], contextMap);\n fns--;\n }\n\n if (fns <= 0) {\n delete commitsObj[nm];\n }\n fnInf.fns = fns;\n }\n });\n for (const key in contextsObj) {\n const obj = contextsObj[key];\n\n callBack(obj.context, ...fetchPropValues(propNames, params, obj.deps));\n }\n } else {\n callBack(...params);\n }\n }\n })(props, ns, type);\n\n const fn = context.model[type](props, callbackFn, instantCall);\n\n if (ns) {\n registerPropInMaps(context, props, namespaceInf, type);\n }\n addListenerToNamespace(namespaceInf, fn, context);\n};\n\nconst retrieveNamespaces = (names, key) => {\n if (names instanceof Object) {\n return [names[key]];\n } else if (names instanceof Array) {\n return names;\n }\n return [names];\n};\n\nconst createMap = () => new Map();\n\nconst listenerTypes = ['next', 'on'];\n\nconst removePropValue = (context, map, propInf) => {\n const { subNamespace: sns, prop, propListenerMap } = propInf;\n const propObj = propListenerMap[prop];\n\n listenerTypes.forEach((type) => {\n if (type in propObj) {\n delete propObj[type][sns];\n }\n });\n if (map.has(sns)) {\n const value = context.get(prop);\n\n if (value instanceof Object && sns in value) {\n delete value[sns];\n }\n map.delete(sns);\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 */\nexport class 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 = new Map();\n this._registeredListeners = {};\n this._contextMap = {};\n this._commits = {};\n this._savedCommits = {};\n this._queuedProps = {};\n this._propListenerMap = {};\n this._locked = false;\n }\n\n lockModel () {\n this.model.lock();\n this._locked = true;\n return this;\n }\n\n unlockModel () {\n this._locked = false;\n this.model.unlock();\n return this;\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 lockCommits (props) {\n props.forEach((prop) => {\n this._commits[prop] = {\n locked: true,\n queue: []\n };\n });\n return this;\n }\n\n unlockCommits (props) {\n const commitsObj = this._commits;\n\n this.lockModel();\n props.forEach((prop) => {\n commitsObj[prop].locked = false;\n const queuedProps = {};\n const { queue } = commitsObj[prop];\n\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n if (namespace) {\n const propObj = initProp(queuedProps, [propName, namespace]);\n\n Object.assign(propObj, value);\n }\n });\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n this.commit(propName, propName in queuedProps ? queuedProps[propName][namespace] : value,\n namespace);\n });\n delete commitsObj[prop];\n });\n this.unlockModel();\n return this;\n }\n\n addSubNamespace (sns, namespace, context) {\n // Get all the listeners registered by the component\n const listeners = this._registeredListeners[namespace];\n const propListenerMap = this._propListenerMap;\n\n initProp(this._contextMap, [namespace]);\n this._contextMap[namespace][sns] = context;\n for (const key in listeners) {\n const obj = listeners[key];\n const propObj = propListenerMap[key];\n const propFns = listenerTypes.reduce((acc, type) => {\n const val = defaultValue(getObjProp(propObj, type, 'fns'), 0);\n val && (acc[type] = val);\n return acc;\n }, {});\n const { allProps, subNamespaces, subNamespace } = obj;\n const snsArr = subNamespace.length ? subNamespace : [sns];\n\n snsArr.forEach((ns) => {\n const nsObj = ns instanceof Function ? ns(context) : ns;\n const names = retrieveNamespaces(nsObj, key);\n const depProps = allProps.reduce((acc, prop) => {\n acc[prop] = ns instanceof Function ? nsObj[prop] : ns;\n return acc;\n }, {});\n\n names.forEach((nm) => {\n initProp(subNamespaces, [nm], createMap).set(sns, {\n depProps\n });\n\n for (const type in propFns) {\n initProp(propObj, [type, nm]);\n const fns = propFns[type];\n\n propObj[type][nm] = {\n fns,\n _fnCount: fns\n };\n }\n });\n });\n }\n return this;\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, namespace, disableListener = false) {\n let sanitizedVal = value;\n const commits = this._commits;\n const savedCommits = this._savedCommits;\n const locked = getObjProp(commits, propName, 'locked');\n const propListenerMap = this._propListenerMap[propName] || {};\n\n propListenerMap.disabled = disableListener;\n\n if (locked) {\n commits[propName].queue.push([propName, value, namespace]);\n return this;\n }\n\n if (namespace) {\n if (this._locked) {\n const queuedProps = initProp(this._queuedProps, [propName]);\n queuedProps[namespace] = value;\n sanitizedVal = queuedProps;\n } else {\n sanitizedVal = defaultValue(this.get(propName), {});\n sanitizedVal[namespace] = value;\n }\n\n listenerTypes.forEach((type) => {\n initProp(savedCommits, [propName, type]);\n savedCommits[propName][type][namespace] = true;\n if (getObjProp(propListenerMap, type, namespace)) {\n propListenerMap[type][namespace].fns = propListenerMap[type][namespace]._fnCount;\n }\n });\n }\n\n this.model.prop(propName, sanitizedVal);\n return this;\n }\n\n /**\n * This method is used to register a callback 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 (...params) {\n registerListener(this, 'next', ...params);\n return this;\n }\n\n /**\n * This method is used to register a callback 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 (...params) {\n registerListener(this, 'on', ...params);\n }\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, subNamespace) {\n const value = this.model.prop(propName);\n return subNamespace ? value && value[subNamespace] : value;\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 append (...params) {\n this.model.append(...params);\n return this;\n }\n\n unsubscribeAll () {\n Object.values(this._listeners).forEach(fn => fn());\n return this;\n }\n\n unsubscribe (namespaceInf = {}) {\n const { id, key } = namespaceInf;\n const listenersMap = this._listeners;\n const listeners = listenersMap.get(id);\n\n if (key) {\n const fn = listenersMap.get(key);\n\n fn && fn();\n } else {\n for (const fn of listeners.values()) {\n fn();\n }\n listenersMap.set(id, []);\n }\n return this;\n }\n\n removeSubNamespace (subNamespace, namespace) {\n const {\n _registeredListeners: listenerMap,\n _contextMap: contextMap,\n _propListenerMap: propListenerMap\n } = this;\n const listenersObj = listenerMap[namespace];\n\n for (const prop in listenersObj) {\n const { subNamespaces } = listenersObj[prop];\n const propInf = {\n subNamespace,\n prop,\n propListenerMap\n };\n\n if (subNamespaces[subNamespace]) {\n removePropValue(this, subNamespaces[subNamespace], propInf);\n delete subNamespaces[subNamespace];\n } else {\n for (const ns in subNamespaces) {\n const snsMap = subNamespaces[ns];\n\n removePropValue(this, snsMap, propInf);\n if (!snsMap.size) {\n delete subNamespaces[ns];\n }\n }\n }\n }\n delete contextMap[namespace][subNamespace];\n return this;\n }\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 * sanitization: // 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}\n */\nexport const transactor = (holder, options, model, namespaceInf = {}) => {\n let conf;\n const store = model instanceof Store ? model : new Store({});\n const stateProps = {};\n const { namespace, subNamespace } = namespaceInf;\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n const nameSpaceProp = namespace ? `${namespace}.${prop}` : prop;\n\n if (subNamespace) {\n const value = defaultValue(store.get(nameSpaceProp), {});\n value[subNamespace] = conf.value;\n stateProps[nameSpaceProp] = value;\n } else {\n stateProps[prop] = conf.value;\n }\n\n holder[prop] = ((context, meta, nsProp) => (...params) => {\n const paramsLen = params.length;\n if (paramsLen) {\n const { takesMultipleParams = false } = meta || {};\n // If parameters are passed then it's a setter\n let val = takesMultipleParams ? params : params[0];\n\n if (meta) {\n let values;\n const prevVal = context.get(nsProp, subNamespace);\n const { sanitization, typeCheck, typeExpected } = meta;\n if (typeof sanitization === 'function') {\n // Sanitize if required\n val = sanitization(val, prevVal, holder);\n }\n\n // Checking if a setter is valid\n if (typeof typeCheck === 'function') {\n const typeCheckResult = typeCheck(val);\n\n if (typeCheckResult) {\n values = val;\n }\n } else if (typeof typeCheck === 'string' && typeCheck === 'constructor') {\n if (val && val.constructor.name === typeExpected) {\n values = val;\n }\n } else {\n values = val;\n }\n\n const preset = meta.preset;\n const oldValues = toArray(context.get(nsProp, subNamespace));\n preset && preset(values, holder);\n if (takesMultipleParams) {\n oldValues.forEach((value, i) => {\n if (values[i] === undefined) {\n values[i] = value;\n }\n });\n }\n values && context.commit(nsProp, values, subNamespace);\n } else {\n context.commit(nsProp, val, subNamespace);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.get(nsProp, subNamespace);\n })(store, conf.meta, nameSpaceProp, Array.isArray(conf.value));\n }\n }\n\n if (subNamespace) {\n for (const key in stateProps) {\n store.commit(key, stateProps[key][subNamespace], subNamespace);\n }\n } else if (namespace === undefined) {\n store.append(stateProps);\n } else {\n store.append(namespace, stateProps);\n }\n\n return [holder, store];\n};\n","const events = [\n 'initialized',\n 'beforeupdate',\n 'updated',\n 'beforedraw',\n 'drawn',\n 'beforeremove',\n 'removed',\n 'animationend'\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';\nimport { createPromise } from './helper';\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] = resolver(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 const promise = this._makeNotifierPromise(eventName);\n this._promises.set(eventName, promise);\n createPromise(promise, eventName, this);\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","/**\n * Creates a new promise when the given promise is resolved. This needs to be done so that after the lifecycle event\n * is completed, then again when the event gets completed, then a new promise gets resolved.\n *\n * @param {Promise} promise Instance of promise\n * @param {string} eventName name of event\n * @param {LifeCycleManager} context Instance of lifecyclemanager\n */\nexport const createPromise = (promise, eventName, context) => {\n promise.then(() => {\n const prm = context._makeNotifierPromise(eventName);\n context._promises.set(eventName, prm);\n createPromise(prm, eventName, context);\n });\n};\n","import { default as DataModel } from 'datamodel';\nimport * as scales from './scales';\nimport * as colorSchemes from './color-schemes';\nimport * as STATE_NAMESPACES from './enums/namespace';\n\nconst InvalidAwareTypes = DataModel.InvalidAwareTypes;\n\nexport {\n InvalidAwareTypes,\n DataModel\n};\n\nexport {\n ReservedFields,\n CommonProps,\n COORD_TYPES\n} from './enums';\n\nexport { STATE_NAMESPACES };\n\nexport {\n scales,\n colorSchemes\n};\n\nexport {\n getNearestValue,\n getValueParser,\n transformColors,\n detectColor,\n hslToRgb,\n rgbToHsv,\n hexToHsv,\n hsvToRgb,\n escapeHTML,\n angleToRadian,\n generateGetterSetters,\n getArraySum,\n ERROR_MSG,\n interpolator,\n colorInterpolator,\n numberInterpolator,\n piecewiseInterpolator,\n reqAnimFrame,\n cancelAnimFrame,\n nextAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n replaceCSSPrefix,\n symbolFns,\n defaultValue,\n easeFns,\n clone,\n interpolateArray,\n getMinPoint,\n getMaxPoint,\n getClosestIndexOf,\n registerListeners,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n enableChainedTransaction,\n isHTMLElem,\n isEqual,\n isSimpleObject,\n nextFrame,\n getObjProp,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n transposeArray,\n toArray,\n extendsClass,\n concatModels,\n assembleModelFromIdentifiers,\n isValidValue,\n nestCollection,\n stack,\n getSymbol,\n Scales,\n Symbols,\n pathInterpolators,\n hslInterpolator,\n getSmallestDiff,\n require,\n formatTemporal,\n nearestSortingDetails,\n createSelection,\n temporalFields,\n retrieveNearestGroupByReducers,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField,\n intersect\n} from './common-utils';\n\nexport {\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 hasTouch\n} from './renderer-utils';\n\nexport {\n Store,\n transactor\n} from './store';\n\nexport {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'd3-time';\n\nexport { default as Smartlabel } from 'fusioncharts-smartlabel';\nexport { dataSelect } from './DataSystem';\n\nexport { default as LifeCycleManager } from './lifecycle-manager';\n\nexport {\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n DateTimeFormatter,\n DM_DERIVATIVES,\n GROUP_BY_FUNCTIONS\n} from 'datamodel';\n\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 SelectionSet from './selection-set';\n\nexport default SelectionSet;\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. This keeps\n * information of which rows are in previous and new entry set and previous and new exit set. This is initialized by\n * {@link Firebolt}.\n *\n * @public\n *\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n *\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. This also moves the other rows to exit set.\n *\n * @public\n * @param {Array.} ids Array of unique ids.\n *\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 an array of ids to the old entry set.\n *\n * @param {Array.} ids Array of unique ids\n *\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 * Moves all ids which in new entry set to old entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\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 * Moves an array of ids which are in new exit set to old exit set.\n *\n * @public\n *\n * @param {Array.} ids Array of unique ids.\n *\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 an array of ids from the selection set. It also moves the remaining row ids to entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\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 an array of ids in the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set which means they are neither in entry set nor in exit set. If no ids are passed,\n * then it resets all the ids to null.\n *\n * @public\n *\n * @param {Array} ids Array of unique ids.\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 *\n * @public\n *\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 *\n * @public\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 /**\n * Returns a set of unique ids which are already present in exit set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old exit set or new exit set\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 array of ids which are in the exit set.\n *\n * @public\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 /**\n * Gets all the ids which are either in exit or entry set.\n *\n * @public\n * @return {Array} Array of unique ids\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, retrieveNearestGroupByReducers } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const formalName = SideEffect.formalName();\n const sideEffectInstance = sideEffectsMap[formalName];\n sideEffectsMap[formalName] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const setSideEffectConfig = (sideEffects, config) => {\n for (const key in sideEffects) {\n const sideEffect = sideEffects[key];\n const formalName = sideEffect.constructor.formalName();\n const sideEffectConf = config[formalName];\n\n sideEffectConf && sideEffect.config(sideEffectConf);\n }\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 mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n const conditions = conditionsMap[type];\n if (model && conditions) {\n return model.select((fields, i) =>\n (conditions.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 if (type === 'mergedEnter') {\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 let aggFns = retrieveNearestGroupByReducers(model);\n if (!existingModel) {\n existingModel = models[type] = model;\n } else if (`${model.getSchema().map(d => d.name).sort()}` ===\n `${existingModel.getSchema().map(d => d.name).sort()}`) {\n aggFns = Object.assign({}, retrieveNearestGroupByReducers(existingModel));\n existingModel = models[type] = model.union(existingModel);\n } else {\n existingModel = model;\n }\n combinedSet[type].model = existingModel;\n combinedSet[type].aggFns = aggFns;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\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 setSideEffectConfig\n} from './helper';\n\n/**\n * This class is responsible for dispatching behavioural actions and side effects. It also keeps the information of\n * registered physical actions, behavioural actions and side effects. Also, it keeps the map of physical and behavioural\n * actions and behavioural actions and side effects. Whenever any behavioural action is dispatched, it also propagates\n * the rows which got affected to the other datamodels. This class is initialized by {@link VisualUnit} and legend to\n * manage it's interaction.\n *\n * @public\n * @class Firebolt\n * @module Firebolt\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 this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\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 this._config = mergeRecursive(this._config, config[0]);\n setSideEffectConfig(this.sideEffects(), this._config);\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 this.initializeSideEffects();\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, key = 'default') {\n const behaviourConditions = this._sourceBehaviours[behaviour] || (this._sourceBehaviours[behaviour] = {});\n if (value instanceof Function) {\n behaviourConditions[key] = value;\n } else {\n behaviourConditions[key] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value, key = 'default') {\n const sideEffectConditions = this._sourceSideEffects[sideEffect] || (this._sourceSideEffects[sideEffect] = {});\n if (value instanceof Function) {\n sideEffectConditions[key] = value;\n } else {\n sideEffectConditions[key] = () => value;\n }\n }\n\n removeSideEffectPolicy (sideEffect, key) {\n delete this._sourceSideEffects[sideEffect][key];\n return this;\n }\n\n removeBehaviourPolicy (behaviour, key) {\n delete this._sourceBehaviours[behaviour][key];\n return this;\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 this.mapActionsAndBehaviour(key);\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 this._entryExitSet[key] = null;\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 /**\n * Allows to propagate the datamodel with only the supplied fields. When propagation is done, then the fields\n * which are supplied for the specified behavioural action is propagated.\n *\n * @public\n *\n * @param {string} action Name of behavioural action. If '*' is specified, then for all behavioural actions it is\n * applied.\n * @param {Array} fields Array of field names which will be propagated.\n * @param {boolean} append If true, then it is appended to the existing propagation data model fields else only\n * those fields are projected from propagation data model and propagated.\n *\n * @return {Firebolt} Instance of firebolt\n */\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\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\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour (phyAction) {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map) && action === (phyAction || action)) {\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 bind && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n this._actionBehaviourMap = mergeRecursive(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 (!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 return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? propagationInf.entryRowIds :\n filteredDataModel[0].getUids())\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 /**\n * Returns the entry and exit set information of the specified behavioural action.\n *\n * @public\n *\n * @param {string} behaviour Name of behavioural action.\n *\n * @return {Object} Entry exit set information.\n */\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\n/**\n * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural\n * action needs to extend this class.\n *\n * @public\n * @class GenericBehaviour\n * @module GenericBehaviour\n */\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n /**\n * Returns entry and exit set information. This method is called by firebolt when ```dispatchBehaviour``` is called\n * dynamically or when any physical action is triggered on the chart.\n *\n * @param {Object} payload Payload information.\n * @param {Object|Array} payload.criteria Identifiers of data interacted with.\n *\n * @return {Array} Entry and exit set information.\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 /**\n * Updates the selection set by adding uids to the instance of {@link SelectionSet} or removing them.\n * {@link SelectionSet} keeps the information of which rows are in the entry set and exit set.\n *\n * @public\n * @param {Array} addSet Array of row ids which got affected during interaction.\n * @param {SelectionSet} selectionSet Instance of selection set.\n *\n * @return {GenericBehaviour} Instance of behaviour.\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 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 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, MeasureSubtype } 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;\n const yFieldType = fieldsConfig[yField].def.subtype;\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 === MeasureSubtype.CONTINUOUS ? (yFieldType === MeasureSubtype.CONTINUOUS ?\n ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.invertExtent(stPos.x, endPos.x);\n const yRange = yAxis.invertExtent(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","const ANCHORS = 'anchors';\nconst TOOLTIP = 'tooltip';\nconst BRUSH_ANCHORS = 'brush-anchors';\nconst PERSISTENT_ANCHORS = 'persistent-anchors';\nconst FILTER = 'filter';\nconst HIGHLIGHTER = 'highlighter';\nconst CROSSLINE = 'crossline';\n\nexport {\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS,\n FILTER,\n HIGHLIGHTER,\n CROSSLINE,\n TOOLTIP\n};\n","export const PROPS = {\n valueParser: {\n defaultValue: val => val\n }\n};\n","import GenericSideEffect from './generic-sideeffect';\n\nexport default GenericSideEffect;\n","import { mergeRecursive, getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { PROPS } from './props';\n\n/**\n * This is the base class of all side effects. It contains all common methods like setting configuration, disabling,\n * enabling side effect, etc. Every new side effect has to inherit this class or {@link SpawnableSideEffect} or\n * {@link SurrogateSideEffect} class. All side effects are initialized by firebolt. The instance of firebolt is\n * passed on initialization. The firebolt instance contains ```context``` which is the instance of visual unit with\n * which the firebolt is attached.\n *\n * @public\n * @class\n * @module GenericSideEffect\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 generateGetterSetters(this, PROPS);\n this.config(this.constructor.defaultConfig());\n }\n\n /**\n * Returns the default configuration of the side effect.\n *\n * @public\n * @return {Object} Default configuration of side effect.\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the formal name of a side effect. This method must be implemented by all side effects which changes\n * or adds any element in the visualization.\n *\n * @return {string} Formal name of side effect.\n */\n static formalName () {\n return 'generic';\n }\n\n static target () {\n return 'all';\n }\n\n /**\n * Returns true if the side effects mutates the data of chart.\n *\n * @public\n *\n * @return {boolean} If the side effect mutates the data of chart.\n */\n static mutates () {\n return false;\n }\n\n /**\n * Sets or gets the configuration of side effect.\n *\n * When setter,\n * @param {Object} config Configuration of side effect.\n * @return {GenericSideEffect} Side effect instance.\n *\n * When getter,\n * @return {Object} Side effect configuration.\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 /**\n * Applies the interaction effect on the chart. This is where the implemntation of the side effect is defined.\n *\n * @param {Object} selectionSet Contains the entry and exit set of data which got affected during interaction.\n * @param {Object} selectionSet.mergedEnter Combined previous entry and new entry set.\n * @param {DataModel} selectionSet.mergedEnter.model Instance of data model containing all rows which got\n * affected during interaction.\n * @param {Array} selectionSet.mergedEnter.uids Ids of all rows which were affected during interaction.\n * @param {Object} selectionSet.mergedExit Combined previous exit and new exit set.\n * @param {DataModel} selectionSet.mergedExit.model Instance of data model containing rows which were not affected\n * during interaction.\n * @param {Array} selectionSet.mergedExit.uids Ids of all rows which were not affected during interaction.\n * @param {Object} selectionSet.entrySet Entry set information.\n * @param {Array} selectionSet.entrySet[0].uids All row ids which got affected during previous interaction.\n * @param {Array} selectionSet.entrySet[1].uids All row ids which got affected during current interaction.\n * @param {Array} selectionSet.exitSet[0].uids All row ids which were not affected during previous interaction.\n * @param {Array} selectionSet.exitSet[1].uids All row ids which were not affected during current interaction.\n * @param {Object} payload Payload information of the behavioural action on trigger of which this side effect\n * is applied.\n * @param {Object} options Optional information for side effect like strategy, etc.\n */\n apply () {\n return this;\n }\n\n /**\n * Adds a new strategy method for this side effect. The strategy method is implemented by side effect class.\n *\n * @param {string} name Name of the strategy.\n * @param {Function} fn Strategy method.\n *\n * @return {GenericSideEffect} Instance of side effect.\n */\n setStrategy (name, fn) {\n if (fn) {\n this._strategies[name] = fn;\n }\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\n/**\n * This class is inherited by all side effects which changes the look of any existing elements in the visualization.\n * For example, if a side effect wants to change the color of bar plots, then it is a surrogate side effect.\n *\n * To use this,\n * ```\n * const SurrogateSideEffect = muze.SideEffects.standards.SurrogateSideEffect;\n *\n * class BarColorChanger extends SurrogateSideEffect {\n * static formalName () {\n * return 'colorChanger';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n *\n * @module SurrogateSideEffect\n * @class\n * @extends GenericSideEffect\n */\nexport default class SurrogateSideEffect extends GenericSideEffect {\n /**\n * Applies or removes interaction styles from plot elements. An array of row ids needs to be passed\n * which identifies the plot elements and applies styles to them.\n *\n * To apply the interaction style,\n * ```\n * const entryRowIds = entrySet[0].uids;\n * const interactionStyle = [{\n * type: 'fill',\n * intensity: [0, 0, 15, 0] // hsla configuration\n * }];\n *\n * this.applyInteractionStyle(entryRowIds, interactionStyle, 'brighten', true);\n * ```\n * @public\n * @param {Array} set Array of row ids.\n * @param {Array} config Style configuration.\n * @param {Object} config[0] fill or stroke configuration.\n * @param {string} config[0].type Type of style - fill or stroke.\n * @param {Array} config[0].intensity hsla configuration.\n * @param {string} interactionType Type of interaction. This is needed for storing the styles for\n * each type of interaction in the plot elements.\n * @param {boolean} apply Whether to apply or remove the interaction style.\n *\n * @return {SurrogateSideEffect} Instance of surrogate side effect.\n */\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 return this;\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\n/**\n * Any side effect which will add any new element to the chart like drawing a rectangular box or any annotation over\n * the chart needs to inherit this class. This class has methods which returns the container where the dom elements\n * needs to be created.\n *\n * To use this,\n * ```\n * const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect;\n *\n * class SelectionBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'selectionBox';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n * @class\n * @extends GenericSideEffect\n * @module SpawnableSideEffect\n */\nexport default class SpawnableSideEffect extends GenericSideEffect {\n /**\n * Creates a html or svg element in the container.\n *\n * @public\n * @param {SVGElement|HTMLElement} container Container where the dom element will be rendered.\n * @param {string} elemType Type of dom element.\n * @param {Array} data Array of objects with which the dom elements will be binded.\n * @param {string} className class name of the element.\n *\n * @return {Selection} D3 Selection of the element.\n */\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n /**\n * Returns the drawing information for side effect like svg container, dimensions of the visual unit.\n *\n * @public\n * @return {Object} Drawing information for side effect.\n * ```\n * sideEffectGroup: // svg container where the side effect needs to be appended.\n * svgContainer: // svg container of the {@link VisualUnit}.\n * htmlContainer: // html div container of the {@link VisualUnit}.\n * width: // Width of the {@link VisualUnit}\n * height: // Height of the {@link VisualUnit}\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};\nexport const TABLE_FORMAT = 'table';\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: '4px 0 4px 0',\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 selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\nimport { TABLE_FORMAT } from './constants';\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._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._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 const { classPrefix } = config;\n\n this._mount = mount;\n if (model instanceof Array) {\n data = model;\n } else {\n data = formatter(this._model, this.config(), this._context);\n }\n\n if (data instanceof Function) {\n const mountHtmlTooltip = makeElement(mount, 'div', [1], `${classPrefix}-tooltip-html-container`);\n mountHtmlTooltip.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], `${classPrefix}-tooltip-content`, {},\n d => d);\n\n if (displayFormat === TABLE_FORMAT) {\n const table = makeElement(body, 'table', [1], `${classPrefix}-tooltip-table`);\n const tbody = makeElement(table, 'tbody', [1], `${classPrefix}-tooltip-table-tbody`);\n const rows = makeElement(tbody, 'tr', content, `${classPrefix}-tooltip-table-row`);\n rows.each(function (d, i) {\n selectElement(this).classed(`${classPrefix}-tooltip-table-row-${i}`, true);\n });\n const cells = makeElement(rows, 'td', d => d, `${classPrefix}-tooltip-table-cell`);\n cells.each(function (d) {\n selectElement(this).html(d);\n });\n } else {\n const rows = makeElement(body, 'div', content, '', {\n update: (elem, elemData) => elem.attr('class', elemData.className)\n });\n const cells = makeElement(rows, 'span', d => d.data, `${classPrefix}-tooltip-content`);\n cells.attr('class', `${classPrefix}-tooltip-content`);\n setStyles(rows, {\n margin: rowMargin\n });\n setStyles(cells, {\n display: 'inline-block' // '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","export const SELECTION_SUMMARY = 'selectionSummary';\nexport const HIGHLIGHT_SUMMARY = 'highlightSummary';\n","import {\n FieldType,\n GROUP_BY_FUNCTIONS,\n formatTemporal,\n DimensionSubtype,\n MeasureSubtype,\n DataModel,\n defaultValue,\n retrieveFieldDisplayName,\n nestCollection,\n getObjProp,\n intersect\n} from 'muze-utils';\nimport { TABLE_FORMAT } from '@chartshq/muze-tooltip';\nimport { SELECTION_SUMMARY, HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\n\nconst { SUM, COUNT } = GROUP_BY_FUNCTIONS;\nconst { InvalidAwareTypes } = DataModel;\nconst FIRST_VALUE_MARGIN = '10px';\nconst SINGLE_DATA_MARGIN = 10;\n\nconst formatters = (formatter, interval, valueParser) => ({\n [DimensionSubtype.TEMPORAL]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatTemporal(Number(value), interval)),\n [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatter(value.toFixed(2))),\n [DimensionSubtype.CATEGORICAL]: value => valueParser(value)\n});\n\nconst getTabularData = (dataObj, fieldInf) => {\n const rows = [];\n const { data, schema } = dataObj;\n rows.push(schema.map(d => fieldInf[d.name].displayName));\n\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const value = fieldInf[fieldObj.name].fn(d[i]);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nconst getKeyValue = (params) => {\n const { field, value, classPrefix, margin, isSelected, removeKey } = params;\n\n if (!removeKey) {\n const keyObj = {\n value: field,\n className: `${classPrefix}-tooltip-key`\n };\n const valueObj = {\n value,\n className: `${classPrefix}-tooltip-value`\n };\n if (margin !== undefined) {\n keyObj.style = {\n 'margin-left': `${margin}px`\n };\n valueObj.style = {\n 'margin-left': `${margin}px`\n };\n }\n\n return ({\n className: isSelected ? `${classPrefix}-tooltip-row ${classPrefix}-tooltip-selected-row`\n : `${classPrefix}-tooltip-row`,\n data: [keyObj, valueObj]\n }\n );\n }\n return ({\n data: [{\n className: '',\n value,\n style: {\n 'margin-left': FIRST_VALUE_MARGIN\n }\n }],\n className: `${classPrefix}-tooltip-first`\n });\n};\n\nconst generateRetinalFieldsValues = (valueArr, retinalFields, content, context) => {\n const { fieldsConfig, dimensionMeasureMap, axes, config, fieldInf, dataLen, target } = context;\n const { classPrefix, margin, separator } = config;\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n const REF_VALUES_INDEX = 1;\n const REF_KEYS_INDEX = 0;\n\n for (const retField in retinalFields) {\n const retIndex = fieldsConfig[retField].index;\n const retinalFieldValue = valueArr[retIndex];\n const measuresArr = dimensionMeasureMap[retField];\n const icon = {\n type: 'icon',\n color: colorAxis.getColor(retinalFieldValue),\n shape: shapeAxis.getShape(retinalFieldValue),\n size: sizeAxis.getSize(retinalFieldValue) * config.iconScale\n };\n const { displayName, fn } = fieldInf[retField];\n const formattedRetinalValue = fn(retinalFieldValue);\n\n if (dataLen === 1) {\n content.push(getKeyValue({\n field: displayName,\n value: formattedRetinalValue,\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n } else {\n const hasMultipleMeasures = measuresArr.length > 1;\n hasMultipleMeasures && (content.push({ data: [icon, formattedRetinalValue] }));\n const selectedContext = target[REF_VALUES_INDEX][target[REF_KEYS_INDEX].indexOf(retField)];\n const isSelected = selectedContext === retinalFieldValue;\n measuresArr.forEach((measure) => {\n const measureIndex = fieldsConfig[measure].index;\n const { displayName: dName, fn: formatterFn } = fieldInf[measure];\n const value = formatterFn(valueArr[measureIndex]);\n const keyValue = getKeyValue({\n field: hasMultipleMeasures ? `${dName}${separator}` : formattedRetinalValue,\n value,\n classPrefix,\n margin: hasMultipleMeasures ? margin : undefined,\n isSelected\n });\n if (!hasMultipleMeasures) {\n keyValue.data = [icon, ...keyValue.data];\n }\n content.push(keyValue);\n });\n }\n }\n};\n\nconst getFieldInf = (schema, dataModel, context) => {\n const { valueParser, timeDiffs } = context;\n const fieldsObj = dataModel.getFieldspace().fieldsObj();\n const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL];\n\n return schema.reduce((inf, field) => {\n const { subtype, name, type } = field;\n const interval = subtype === DimensionSubtype.TEMPORAL ? timeDiffs[name] : 0;\n const nf = type === FieldType.MEASURE ? fieldsObj[name].numberFormat() : val => val;\n inf[name] = {\n fn: defaultValue(formatters(nf, interval, valueParser)[subtype], defFormatter),\n displayName: `${retrieveFieldDisplayName(dataModel, name)}`\n };\n return inf;\n }, {});\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let nestedDataObj;\n let fieldValues = [];\n const { data, schema } = dataModel.getData();\n const fieldspace = dataModel.getFieldspace();\n const fieldsConfig = dataModel.getFieldsConfig();\n const { color, shape, size } = context.firebolt.context.retinalFields();\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 containsDetailField = !!intersect(schema, detailFields).length;\n const dataLen = data.length;\n const {\n dimensionMeasureMap,\n axes\n } = context;\n const fieldInf = getFieldInf(schema, dataModel, context);\n\n let displayFormat;\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData({\n data,\n schema,\n fieldspace\n }, fieldInf);\n displayFormat = TABLE_FORMAT;\n } else {\n const retinalFields = [color.field, shape.field, size.field].reduce((acc, field) => {\n field && fieldsConfig[field].def.type === FieldType.DIMENSION && (acc[field] = 1);\n return acc;\n }, {});\n const filteredDimensions = dimensions.filter(field => !retinalFields[field.name]);\n const indices = filteredDimensions.map(dim => fieldsConfig[dim.name].index);\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1) : measures;\n\n nestedDataObj = nestCollection({\n data,\n keys: indices\n });\n nestedDataObj = !getObjProp(nestedDataObj[0], 'key') ? [{\n values: nestedDataObj\n }] : nestedDataObj;\n\n const generateTooltipContent = (nestedData, index = 0, content = []) => {\n const { classPrefix, separator } = config;\n for (let i = 0, len = nestedData.length; i < len; i++) {\n const { values, key } = nestedData[i];\n const field = getObjProp(schema, indices[index], 'name');\n const margin = dataLen === 1 || Object.keys(retinalFields).length === 0\n ? SINGLE_DATA_MARGIN : undefined;\n if (field) {\n const { displayName, fn } = fieldInf[field];\n const formattedValue = fn(key);\n const removeKey = values.length > 1;\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n value: formattedValue,\n classPrefix,\n margin,\n isSelected: undefined,\n removeKey\n }));\n }\n\n if (values[0] && values[0].key) {\n generateTooltipContent(values, index + 1, content);\n } else {\n for (let j = 0, len2 = values.length; j < len2; j++) {\n const valueArr = values[j];\n generateRetinalFieldsValues(valueArr, retinalFields, content, {\n fieldInf,\n axes,\n config,\n fieldsConfig,\n dimensionMeasureMap,\n dataLen,\n target: context.payload.target\n });\n\n filteredMeasures.forEach((measure) => {\n const { name } = measure;\n const { displayName, fn } = fieldInf[name];\n content.push(getKeyValue({\n field: `${displayName}${separator}`,\n value: fn(valueArr[fieldsConfig[name].index]),\n classPrefix,\n margin: SINGLE_DATA_MARGIN\n }));\n });\n }\n }\n }\n };\n generateTooltipContent(nestedDataObj, 0, fieldValues);\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\nexport const strategies = {\n [SELECTION_SUMMARY]: (dm, config, context) => {\n const { selectionSet } = context;\n const aggFns = selectionSet.mergedEnter.aggFns;\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] = aggFns[v.name] === COUNT ? SUM : aggFns[v.name];\n return acc;\n }, {\n saveChild: false\n }));\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 const data = aggregatedModel.getData().data;\n measureNames.forEach((measure) => {\n const value = data[0][fieldsConf[measure].index];\n value instanceof InvalidAwareTypes ? values.push([]) : values.push([`(${aggFns[measure].toUpperCase()})`,\n `${retrieveFieldDisplayName(dm, measure)}`,\n {\n value: `${value.toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]);\n });\n if (measureNames.length === 1) {\n values = [[...values[0], ...values[1]]];\n }\n return ([{\n data: values[0]\n }]);\n },\n [HIGHLIGHT_SUMMARY]: (data, config, context) => buildTooltipData(data, config, context)\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType, mergeRecursive, defaultValue } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport { TOOLTIP } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\nimport { HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\n\nconst configResolvers = {\n [HIGHLIGHT_SUMMARY]: (specificConf, config) => defaultValue(specificConf, config),\n default: specificConf => defaultValue(specificConf, {})\n};\n\nconst sanitizeConfig = (config, context) => {\n const strategyObj = context._strategies;\n const sanitizedConf = Object.assign({}, config);\n for (const key in strategyObj) {\n sanitizedConf[key] = defaultValue(configResolvers[key], configResolvers.default)(config[key], config);\n }\n return sanitizedConf;\n};\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = mergeRecursive({}, strategies);\n this._strategy = HIGHLIGHT_SUMMARY;\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n },\n highlightSummary: {\n dataTransform: (dt, fields) => (fields ? dt.project(fields, { saveChild: false }) : dt\n )\n },\n selectionSummary: {\n dataTransform: (dt, fields) => {\n const fieldspace = dt.getFieldspace();\n const dimensions = Object.keys(fieldspace.getDimension());\n const measures = Object.keys(fieldspace.getMeasure());\n const projectedFields = defaultValue(fields, measures.length ? [measures[0]] : []);\n return dt.project([...dimensions, ...projectedFields], {\n saveChild: false\n });\n }\n }\n };\n }\n\n static formalName () {\n return TOOLTIP;\n }\n\n config (...params) {\n if (params.length) {\n const config = this._config = mergeRecursive(this._config, sanitizeConfig(params[0], this));\n const strategyObj = this._strategies;\n for (const key in strategyObj) {\n const formatter = config[key].formatter;\n this.setStrategy(key, formatter);\n }\n return this;\n }\n return this._config;\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)) {\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 const strategy = defaultValue(options.strategy, this._strategy);\n const strategyConf = config[strategy];\n const { dataTransform, fields: projectFields } = strategyConf;\n const strategyObj = this._strategies;\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 const dt = dataTransform(dataModels[i], projectFields, this);\n\n enter[i] = true;\n const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf;\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 sourceInf.valueParser = context.valueParser();\n sourceInf.selectionSet = selectionSet;\n tooltipInst.context(sourceInf);\n const strategyFn = strategyObj[strategy];\n tooltipInst.content(strategy, dt, {\n formatter: strategyFn,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: parentContainerDimensions.width,\n height: parentContainerDimensions.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 { CROSSLINE } from '../../enums/side-effects';\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 layers = this.firebolt.context.layers();\n const plotWidth = Math.max(...layers.map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...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 !isNaN(px) && 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';\nimport { HIGHLIGHTER } from '../../enums/side-effects';\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 strategy(selectionSet, this, options.strategy || this._strategy);\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, getObjProp } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport { ANCHORS } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nconst addLayer = (layerRegistry, context, sideEffect) => {\n context.addLayer((layerDefs) => {\n const layers = [];\n\n if (layerDefs) {\n layerDefs.forEach((layerDef) => {\n const mark = layerDef.mark;\n const layerCls = layerRegistry[mark];\n\n if (layerCls && layerCls.shouldDrawAnchors()) {\n const depLayerEncoding = layerDef.def.encoding;\n const encoding = {\n x: getObjProp(depLayerEncoding, 'x', 'field'),\n y: getObjProp(depLayerEncoding, 'y', 'field'),\n color: getObjProp(depLayerEncoding, 'color', 'field'),\n size: {\n field: getObjProp(depLayerEncoding, 'size', 'field'),\n value: sideEffect.defaultSizeValue()\n }\n };\n const commonName = sideEffect.constructor.formalName();\n const name = `${layerDef.def.name}-${commonName}`;\n\n layers.push({\n name,\n mark: 'point',\n groupId: commonName,\n className: sideEffect.constructor.defaultConfig().className,\n encoding,\n transform: {\n type: 'identity'\n },\n calculateDomain: false,\n transition: sideEffect.getTransitionConfig(),\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n owner: layerDef.def.name\n });\n }\n });\n }\n return layers;\n });\n};\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._layersMap = {};\n this.addAnchorLayers();\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 () {\n const context = this.firebolt.context;\n const layerRegistry = context.registry().layerRegistry;\n\n addLayer(layerRegistry, context, this);\n return this;\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 dataModel = selectionSet.mergedEnter.model;\n const formalName = this.constructor.formalName();\n\n const context = this.firebolt.context;\n const layers = context.layers().filter(layer => layer.config().groupId === formalName);\n\n layers.forEach((layer) => {\n const linkedLayer = context.getLayerByName(layer.config().owner);\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n\n layer.data(transformedDataModel);\n });\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\nimport { PERSISTENT_ANCHORS } from '../enums/side-effects';\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';\nimport { BRUSH_ANCHORS } from '../enums/side-effects';\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: 'selectionSummary',\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 TEXT = 'text';\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 RADIUS: 'radius',\n RADIUS0: 'radius0',\n ANGLE: 'angle',\n ANGLE0: 'angle0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AGG_FN_SUM = 'sum';\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","import { COORD_TYPES, mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nconst { CARTESIAN } = COORD_TYPES;\nexport const props = {\n axes: {},\n mount: {},\n measurement: {},\n metaInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {\n defaultValue: CARTESIAN\n },\n [PROPS.CONFIG]: {\n value: null,\n sanitization: (context, config) => {\n context._customConfig = config;\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n\n return constructor.defaultPolicy(newConf, config);\n }\n }\n};\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\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 BAND = 'band';\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 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\nexport const DEFAULT_ANGLE_DOMAIN = [1];\nexport const MIN_NO_OF_TICKS = 2;\nexport const DEFAULT_NO_OF_TICKS = 10;\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 *\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 *\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 adjustRange: false,\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: null,\n smartTicks: null\n },\n orientation: 'left',\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: null,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: true,\n showOuterTicks: true,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: 0,\n yOffset: 0\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) => {\n let rotation;\n const axis = instance.axis();\n const config = instance.config();\n const renderConfig = instance.renderConfig();\n const smartTicks = instance.smartTicks();\n const scale = axis.scale();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n const ticks = labelFunc();\n const {\n orientation,\n fixedBaseline,\n type\n } = config;\n const {\n labels\n } = renderConfig;\n\n rotation = labels.rotation;\n\n const tickSize = instance.getTickSize();\n tickText.each(function (d, index) {\n let yShift;\n let xShift;\n let datum = smartTicks[index] ? smartTicks[index].text : d;\n\n datum = datum.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n\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 = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize}\n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift - xShift / 2 : xShift;\n\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize}\n ${yShift + tickSize}) rotate(${rotation})`);\n }\n selectElement(this).transition()\n .duration(1000).text(datum);\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 renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n orientation,\n classPrefix\n } = config;\n const {\n labels\n } = renderConfig;\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 && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager);\n } else if (!rotation && !isSmartTicks) {\n tickText.attr('transform', '');\n } else {\n tickText.text('');\n if (orientation === TOP || orientation === BOTTOM) {\n tickText.attr('y', 0)\n .attr('x', 0)\n .attr('transform', '')\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => {\n if (_smartTicks[i]) {\n return _smartTicks[i].lines;\n } return [];\n }, `${classPrefix}-smart-text`);\n\n tspan.attr('dy', '0')\n .style('opacity', '0')\n\n .transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[0].oriTextHeight;\n }\n return -_smartTicks[0].oriTextHeight * (_smartTicks[0].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .text(e => e)\n .attr('x', 0);\n } else {\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, `${classPrefix}-smart-text`);\n tspan.text(e => e);\n }\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n const {\n showInnerTicks\n } = axisInstance.renderConfig();\n const domain = axisInstance.domain();\n if (fixedBaseline && domain.length && showInnerTicks) {\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 availableSpace\n } = measures;\n\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})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 renderConfig = axisInstance.renderConfig();\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 _tickLabelStyle: tickLabelStyle,\n _tickFormatter: axisTickFormatter\n } = axisInstance;\n const {\n orientation,\n axisNamePadding,\n className,\n id,\n classPrefix\n } = config;\n const {\n show,\n xOffset,\n yOffset,\n showAxisName,\n labels,\n smartAxisName\n } = renderConfig;\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 const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n const ticks = axis.tickValues() || labelFunc();\n\n axis.tickFormat(axisTickFormatter(ticks));\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.axisComponentDimensions().largestTickDimensions;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false || tickSize === 0) {\n selectContainer.transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .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\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [smartAxisName], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d.text);\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 const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: smartAxisName.height,\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 {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'muze-utils';\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\n// Longest Word for each level based on which tick skipping is decided\nconst longestWord = {\n month: 'September',\n quarter: 'October',\n halfYearly: 'July',\n year: 9999,\n day: 'September',\n hour: '24 AM',\n mintues: '60:60',\n seconds: ':60',\n week: 'Wed 31'\n};\n\n// These are the various levels of ticks that can be shown by Muze.\n// Each level is described as how frequently the ticks appear\n// The format is as follows:\n// [Frequency, Milliseconds, Name of Seconds, Tick Generator, Level Type]\nconst tickIntervals = [\n [1, 1, 'milliseconds', timeMillisecond.every(1), 'seconds'],\n [1, durationSecond, 'seconds', timeSecond.every(1), 'seconds'],\n [5, 5 * durationSecond, 'five seconds', timeSecond.every(5), 'seconds'],\n [10, 10 * durationSecond, 'ten seconds', timeSecond.every(10), 'seconds'],\n [15, 15 * durationSecond, 'fifteen seconds', timeSecond.every(15), 'seconds'],\n [30, 30 * durationSecond, 'thirty seconds', timeSecond.every(30), 'seconds'],\n [1, durationMinute, 'minute', timeMinute.every(1), 'minutes'],\n [5, 5 * durationMinute, 'five minutes', timeMinute.every(5), 'minutes'],\n [10, 10 * durationMinute, 'ten minutes', timeMinute.every(10), 'minutes'],\n [15, 15 * durationMinute, 'fifteen minutes', timeMinute.every(15), 'minutes'],\n [30, 30 * durationMinute, 'thirty minutes', timeMinute.every(30), 'minutes'],\n [1, durationHour, 'hour', timeHour.every(1), 'hour'],\n [3, 3 * durationHour, 'three hours', timeHour.every(3), 'hour'],\n [6, 6 * durationHour, 'six hours', timeHour.every(6), 'hour'],\n [12, 12 * durationHour, 'twelve hours', timeHour.every(12), 'hour'],\n [1, durationDay, 'daily', timeDay.every(1), 'day'],\n [1, durationWeek, 'weekly', timeWeek.every(1), 'week'],\n [1, durationMonth, 'monthly', timeMonth.every(1), 'week'],\n [3, 3 * durationMonth, 'quaterly', timeMonth.every(3), 'quarter'],\n [6, 6 * durationMonth, 'half yearly', timeMonth.every(6), 'halfYearly'],\n [1, durationYear, 'yearly', timeYear.every(1), 'year'],\n [2, 2 * durationYear, '2 year', timeYear.every(2), 'year'],\n [3, 3 * durationYear, '3 year', timeYear.every(3), 'year'],\n [5, 5 * durationYear, '5 year', timeYear.every(5), 'year'],\n [10, 10 * durationYear, 'decade', timeYear.every(10), 'year'],\n [100, 100 * durationYear, 'century', timeYear.every(100), 'year'],\n [1000, 1000 * durationYear, 'millenium', timeYear.every(1000), 'year']\n];\n/**\n * Get the actual tick interval based on the available width, number of ticks\n * and the distance between two ticks\n *\n * @param {Object} context Axis Context\n * @param {number} noOfTicks Number of Ticks based on which interval is calculated\n * @return {number} The width for the tick interval\n */\nconst getActualTickInterval = (context, noOfTicks) => {\n const minTickDistance = context._minTickDistance;\n const minWidthBetweenTicks = minTickDistance.width;\n\n const { width } = context.availableSpace();\n const actualTickInterval = Math.floor(((width - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks));\n\n return actualTickInterval;\n};\n\n/**\n * Get the tick interval based on the current level of ticks. Levels are decided on\n * the number of ticks that are possible to show\n *\n * @param {Object} context Axis Context\n * @param {string} type Type of level (yearly, monthly, etc)\n * @return {number} The width for the tick interval\n */\nconst getTickIntervalBasedOnCurrentLevel = (context, type) => {\n const labelManager = context._dependencies.labelManager;\n const longestWordType = longestWord[type];\n const measure = labelManager.getOriSize(longestWordType);\n\n return measure.width;\n};\n\nconst getTickIntervalFnBasedOnNumberOfTicks = (interval, count, context) => {\n let possibleTickLevelIndex = tickIntervals.length - 1;\n let maxPossibleTicks = 1;\n let tickIntervalLevelInfo = null;\n\n // Decide possible tick level based on min tick width (with ellipses)\n for (let i = tickIntervals.length - 1; i >= 0; i--) {\n const tickIntervalInfo = tickIntervals[i];\n const numOfPossibleTicks = Math.floor(interval / tickIntervalInfo[1]);\n if (numOfPossibleTicks <= count) {\n possibleTickLevelIndex = i;\n maxPossibleTicks = numOfPossibleTicks;\n }\n }\n\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex];\n\n // Get actual tick interval based on the level of ticks generated\n const actualTickInterval = getActualTickInterval(context, maxPossibleTicks);\n\n // Maximum Possible tick Interval for a particular level based on a pre decided set of values\n const maxTickInterval = getTickIntervalBasedOnCurrentLevel(context, tickIntervalLevelInfo[4]);\n\n // Display the next level involving tick skipping if current level does not meet the requirement\n // for displaying max tick\n if (actualTickInterval < maxTickInterval && possibleTickLevelIndex < tickIntervals.length - 1) {\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex + 1];\n }\n return tickIntervalLevelInfo[3];\n};\n\nexport const getSkippedTicks = (context, maxPossibleTicks) => {\n let actualNumberOfTicks = maxPossibleTicks;\n const domain = context.domain();\n const minDiff = context._minDiff;\n // Get the interval in ms from the domain\n const millisecondInterval = domain[1] - domain[0];\n // Get number of ticks based on the minimum difference in the data\n const numOfTicksAccordingToMinDiff = Math.floor(millisecondInterval / minDiff);\n\n // Show ticks according to min diff if possible\n if (maxPossibleTicks >= numOfTicksAccordingToMinDiff) {\n actualNumberOfTicks = numOfTicksAccordingToMinDiff;\n }\n\n return getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval, actualNumberOfTicks, context);\n};\n","import { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { getSkippedTicks } from './skip-ticks';\nimport { TIME, LINEAR, BAND } from '../enums/scale-type';\n\nexport const applyTickSkipping = (context) => {\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n\n const { width } = context.availableSpace();\n\n const maxTicks = Math.floor((width + minWidthBetweenTicks) / (minTickWidth + minWidthBetweenTicks));\n\n const ticks = context.scale().ticks(getSkippedTicks(context, maxTicks));\n\n context.renderConfig({\n tickValues: ticks\n });\n};\n\nconst adjustHorizontalRange = (range, diff) => {\n range[0] += diff;\n range[1] -= diff;\n return range;\n};\n\nconst adjustVerticalRange = (range, diff) => {\n range[0] -= diff;\n range[1] += diff;\n return range;\n};\n\nconst rangeAdjustmentMap = {\n [TOP]: adjustHorizontalRange,\n [BOTTOM]: adjustHorizontalRange,\n [LEFT]: adjustVerticalRange,\n [RIGHT]: adjustVerticalRange\n};\n\nexport const setAxisRange = (context, type, rangeBounds, offset) => {\n context.range(rangeBounds);\n offset && context.renderConfig({ [`${type}Offset`]: offset });\n};\n\nconst getAxisOffset = (timeDiff, range, domain) => {\n const avWidth = Math.abs(range[1] - range[0]);\n const pvr = avWidth / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\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 getAdjustedRange = (minDiff, range, domain, config) => {\n const {\n orientation,\n adjustRange\n } = config;\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (adjustRange) {\n return rangeAdjustmentMap[orientation](range, diff);\n }\n return range;\n};\n\nexport const spaceSetter = (context, spaceConfig) => {\n let tickInterval;\n let heightForTicks;\n const config = context.config();\n const {\n width: availWidth,\n height: availHeight,\n padding\n } = context.availableSpace();\n const {\n top,\n left,\n bottom,\n right\n } = padding;\n const {\n isOffset\n } = spaceConfig;\n const {\n showAxisName,\n labels\n } = context.renderConfig();\n const {\n rotation\n } = labels;\n const {\n fixedBaseline,\n axisNamePadding,\n tickValues\n } = config;\n const {\n tickDimensions,\n allTickDimensions,\n axisNameDimensions,\n tickSize\n } = context.getAxisDimensions();\n const {\n height: tickDimHeight,\n width: tickDimWidth\n } = tickDimensions;\n\n const namePadding = showAxisName ? axisNamePadding : 0;\n const labelConfig = { smartTicks: true, rotation: labels.rotation };\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minDiff = context._minDiff;\n const domain = context.domain();\n const axisNameHeight = axisNameDimensions.height;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = Math.min(minTickSpace.width, tickDimWidth);\n const minTickHeight = Math.min(minTickSpace.height, tickDimHeight);\n\n return {\n [TIME]: {\n x: () => {\n !tickValues && context.applyTickSkipping();\n const noOfTicks = context.getTickValues().length;\n\n // Get the Tick Interval\n tickInterval = ((availWidth - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks);\n\n // Get height for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation;\n // Remove ticks if not enough height\n if (tickInterval < minTickHeight) {\n heightForTicks = availHeight;\n tickInterval = minTickHeight;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n const tickShifter = Math.min(tickInterval, tickDimWidth);\n // set range for axis\n setAxisRange(context, 'y', getAdjustedRange(minDiff, [tickShifter / 2,\n availWidth - left - right - tickShifter / 2], domain, config),\n isOffset ? availHeight : null);\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n\n return labelConfig;\n },\n y: () => {\n let widthForTicks = availWidth;\n const tickShifter = tickDimHeight / 2;\n\n setAxisRange(context, 'x', getAdjustedRange(minDiff,\n [availHeight - top - bottom - tickShifter, tickShifter], domain, config),\n isOffset ? availWidth : null);\n\n if ((availWidth - axisNameHeight - namePadding) <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [BAND]: {\n x: () => {\n setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null);\n const range = context.range();\n\n // Get Tick Interval\n tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minWidthBetweenTicks;\n\n // Get height available for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation === null ? -90 : rotation;\n labelConfig.smartTicks = false;\n\n tickInterval = Math.max(heightForTicks, minTickWidth);\n\n if (heightForTicks < minTickWidth) {\n context.renderConfig({ showAxisName: false });\n }\n } else if (tickValues) {\n const interval = (availWidth / domain.length) - minWidthBetweenTicks;\n if (interval < minTickWidth) {\n context.range([minTickHeight / 2, availWidth - minTickHeight / 2]);\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null);\n\n let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding;\n if (widthForTicks <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [LINEAR]: {\n x: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimWidth / 2;\n\n const baseline = fixedBaseline ? 0 : tickShifter;\n\n setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter],\n isOffset ? availHeight : null);\n\n const range = context.range();\n\n // Get Tick widths and available space\n const totalTickWidth = allTickDimensions.length * (tickDimWidth + minWidthBetweenTicks);\n const availableWidth = range[1] - range[0];\n\n // Rotate labels if not enough width\n if (availableWidth < totalTickWidth && labels.rotation !== null) {\n if (availHeight - tickDimWidth - namePadding - tickSize > axisNameHeight) {\n labelConfig.rotation = null;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: true\n });\n } else {\n labelConfig.rotation = -90;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: false\n\n });\n }\n }\n\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n },\n y: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimensions.height / 2;\n const baseline = fixedBaseline ? 1 : tickShifter;\n\n setAxisRange(context, 'x', [availHeight - bottom - baseline, tickShifter + top],\n isOffset ? availWidth : null);\n\n // Remove display of ticks if no space is left\n if (availWidth < tickDimWidth + axisNameHeight + namePadding) {\n context.renderConfig({ showInnerTicks: false });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n }\n }\n };\n};\n","import { defaultValue } from 'muze-utils';\nimport { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { MIN_NO_OF_TICKS, DEFAULT_NO_OF_TICKS } from '../enums/constants';\nimport { setAxisRange, getAdjustedRange } from './space-setter';\n\nexport const getRotatedSpaces = (rotation = 0, width, height) => {\n let rotatedHeight = height;\n let rotatedWidth = width;\n if (rotation) {\n const angle = ((rotation || 0) * Math.PI) / 180;\n rotatedWidth = Math.abs(height * Math.sin(angle)) + Math.abs(width * Math.cos(angle));\n rotatedHeight = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n }\n return { width: rotatedWidth, height: rotatedHeight };\n};\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.renderConfig({ xOffset: x, yOffset: y });\n};\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n let numberOfValues = 0;\n let tickValues = [];\n let { numberOfTicks } = axisInstance.config();\n const ticks = axis.scale().ticks();\n const tickLength = ticks.length;\n const minTickDistance = axisInstance._minTickDistance.width;\n\n numberOfValues = tickLength;\n\n if (tickLength * (labelDim + minTickDistance) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim + minTickDistance));\n }\n\n numberOfTicks = numberOfTicks || numberOfValues;\n numberOfValues = Math.min(numberOfTicks, Math.max(MIN_NO_OF_TICKS, numberOfValues));\n\n tickValues = axis.scale().ticks(numberOfValues);\n\n if (tickValues.length > numberOfValues) {\n tickValues = tickValues.filter((e, i) => i % 2 === 0);\n }\n\n if (numberOfValues === MIN_NO_OF_TICKS) {\n tickValues = axis.scale().ticks(DEFAULT_NO_OF_TICKS);\n tickValues = [tickValues[0], tickValues[tickValues.length - 1]];\n }\n return tickValues;\n};\n\nexport const getAxisComponentDimensions = (context) => {\n let largestTick = '';\n let largestTickDimensions = { width: 0, height: 0 };\n let smartTick = {};\n let axisTicks;\n const allTickDimensions = [];\n const scale = context.scale();\n const { tickValues, showAxisName } = context.renderConfig();\n const { name } = context.config();\n const { labelManager } = context.dependencies();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(context._tickLabelStyle);\n\n // get the values along the domain\n axisTicks = tickValues || labelFunc();\n\n // Get the tick labels\n axisTicks = axisTicks.map((originalLabel, i) => {\n const label = context.getFormattedText(originalLabel, i, axisTicks);\n\n // convert to string for quant values\n const tickDimensions = labelManager.getOriSize(label);\n\n // Get spaces for all labels\n allTickDimensions.push(tickDimensions);\n\n // Getting largest label\n if (tickDimensions.width > largestTickDimensions.width) {\n largestTick = label;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n\n largestTickDimensions = tickDimensions;\n smartTick = smartTick || tickDimensions;\n }\n return label;\n });\n\n labelManager.setStyle(context._axisNameStyle);\n const axisNameDimensions = showAxisName ? labelManager.getOriSize(name) : { width: 0, height: 0 };\n\n return {\n axisNameDimensions,\n largestTick,\n largestTickDimensions,\n allTickDimensions,\n axisTicks,\n smartTick,\n tickSize: context.getTickSize()\n };\n};\n\nexport const computeAxisDimensions = (context) => {\n let tickDimensions = {};\n const { labels } = context.renderConfig();\n const { smartTicks, rotation } = labels;\n const {\n largestTickDimensions,\n axisTicks,\n smartTick,\n axisNameDimensions,\n allTickDimensions,\n tickSize\n } = getAxisComponentDimensions(context);\n const { height: labelHeight, width: labelWidth } = largestTickDimensions;\n\n // get the domain of axis\n const domain = context.domain();\n // const angle = ((rotation || 0) * Math.PI) / 180;\n\n if (domain.length === 0) {\n return null;\n }\n\n if (smartTicks) {\n tickDimensions = smartTick;\n } else {\n tickDimensions = { width: labelWidth, height: labelHeight };\n }\n tickDimensions = getRotatedSpaces(rotation, tickDimensions.width, tickDimensions.height);\n\n if (tickSize === 0) {\n tickDimensions = { width: 0, height: 0 };\n }\n return {\n allTickDimensions,\n tickSize,\n tickDimensions,\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, range) => {\n let width;\n let height;\n const domain = context.domain();\n const minTickDistance = context._minTickDistance.width;\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n width = range && range.length ? range[1] - range[0] : ((tickDimWidth + minTickDistance) * 3);\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!range || !range.length) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n\n height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize;\n\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getVerticalAxisSpace = (context, axisDimensions) => {\n let height;\n let width;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\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 axisDimensions = context.getAxisDimensions();\n\n const { orientation } = context.config();\n const { show } = context.renderConfig();\n const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions;\n const { height: largestDimHeight } = largestTickDimensions;\n const minTickWidth = context._minTickDistance.width;\n if (orientation === TOP || orientation === BOTTOM) {\n let {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n\n if (!range || !range.length) {\n width = allTickDimensions.reduce((t, n) =>\n t + Math.min(n.width, n.height) + minTickWidth, 0);\n }\n\n if (show === false) {\n height = 0;\n width = 0;\n }\n return {\n width,\n height\n };\n }\n\n let {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n if (!height || height === 0) {\n height = axisTicks.length * (largestDimHeight + context._minTickDistance.height);\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 axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show, showAxisName } = context.renderConfig();\n const { axisNameDimensions } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisNameWidth } = axisNameDimensions;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n const axisWidth = Math.max(width, axisNameWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n const {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n const effHeight = Math.max(height, showAxisName ? axisNameWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n/**\n * Overwrites domain with user defined domain (if present)\n * @param {Object} context reference to current axes\n * @param {Array} domain default domain\n *\n * @return {Array} domain\n */\nexport const getValidDomain = (context, domain) => {\n const { domain: userDom } = context.config();\n\n if (userDom) {\n domain = userDom;\n }\n\n return defaultValue(domain, []);\n};\n\nexport const setContinousAxisDomain = (context, domain) => {\n const { nice } = context.config();\n const scale = context.scale.bind(context);\n\n scale().domain(domain);\n nice && scale().nice();\n context._domain = scale().domain();\n};\n\n/**\n * Checks if any of the properties have changed between two objects\n * @param {Object} obj first object\n * @param {Object} obj1 second object\n * @param {Array} properties properties to be compared between two objects\n *\n * @return {Boolean} boolean value\n */\nexport const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => {\n if (!Object.keys(obj).length || !Object.keys(obj1).length) {\n return false;\n }\n return properties.some(key => obj[key] !== obj1[key]);\n};\n\nexport const resetTickInterval = (context, domain) => {\n const {\n orientation,\n isOffset\n } = context.config();\n\n const minDiff = context._minDiff;\n // Set available space on interaction\n if (context.range().length && (orientation === TOP || orientation === BOTTOM)) {\n context.applyTickSkipping();\n const {\n largestTickDimensions\n } = context.getAxisDimensions();\n\n const noOfTicks = context.getTickValues().length;\n\n const { width, height, padding } = context.availableSpace();\n const {\n left,\n right\n } = padding;\n // Get the Tick Interval\n const tickInterval = Math.min(largestTickDimensions.width,\n ((width - (noOfTicks - 1) * (context._minTickDistance.width)) / noOfTicks));\n\n context.maxTickSpaces({\n width: tickInterval\n });\n\n const adjustedRange = getAdjustedRange(minDiff, [tickInterval / 2,\n width - left - right - tickInterval / 2], domain, context.config());\n\n // set range for axis\n setAxisRange(context, 'y', adjustedRange, isOffset ? height : null);\n\n context.setTickConfig();\n }\n};\n\nexport const getSmartAxisName = (name, width, labelManager) => {\n const oriSize = labelManager.getOriSize(name);\n\n labelManager.useEllipsesOnOverflow(true);\n\n return labelManager.getSmartText(name, width, oriSize.height, true);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { hasAxesConfigChanged } from './helper';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n axisComponentDimensions: {},\n config: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._config || {});\n const mockedOldConfig = mergeRecursive({}, oldConfig);\n value = mergeRecursive(mockedOldConfig, value);\n\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n const shouldAxesScaleUpdate = hasAxesConfigChanged(\n value, oldConfig, ['interpolator', 'exponent', 'base', 'orientation']\n );\n const tickFormatter = context.sanitizeTickFormatter(value);\n\n if (shouldAxesScaleUpdate) {\n context._scale = context.createScale(value);\n context._axis = context.createAxis(value);\n }\n\n context._tickFormatter = ticks => tickFormatter(ticks);\n\n context.resetRenderConfig(value);\n return value;\n }\n },\n renderConfig: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._renderConfig || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n return value;\n }\n },\n\n smartTicks: {},\n tickSize: {},\n maxTickSpaces: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._maxTickSpaces || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n valueParser: {\n defaultValue: val => val\n }\n};\n","import {\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 { spaceSetter } from './space-setter';\nimport {\n getAxisComponentDimensions,\n computeAxisDimensions,\n calculateContinousSpace,\n setOffset,\n getValidDomain,\n getSmartAxisName\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._axisDimensions = {};\n this._smartTicks = [];\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\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n const dist = dependencies.labelManager.getOriSize('w');\n\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n this._minTickSpace = dependencies.labelManager.getOriSize('www...');\n\n generateGetterSetters(this, PROPS);\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n this._animationDonePromises = [];\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 resetDomain () {\n this._domain = [];\n return this;\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 *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n this.scale().domain(domainValue);\n this._domain = this.scale().domain();\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n setAxisComponentDimensions () {\n this.axisComponentDimensions(getAxisComponentDimensions(this));\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n *\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 sanitizeTickFormatter (value) {\n const { tickFormat, numberFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), val, i, ticks);\n }\n\n return () => val => numberFormat(val);\n }\n\n resetRenderConfig (config) {\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n } = config;\n this.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n });\n return this;\n }\n\n resetLogicalSpace () {\n this.logicalSpace(null);\n this.range([]);\n\n this.resetRenderConfig(this.config());\n }\n\n getFormattedText (text, index, axisTicks) {\n const formatter = this._tickFormatter;\n\n return formatter(axisTicks)(text, index);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n setTickValues (tickValues) {\n const renderConfig = this.renderConfig();\n this.config({ ...renderConfig, tickValues });\n this.tickValues = tickValues;\n this.axis().tickValues(tickValues);\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 let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n const type = this.constructor.type();\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset })[type].x();\n } else {\n labelConfig = spaceSetter(this, { isOffset })[type].y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.setSmartAxisName();\n return this;\n }\n\n setSmartAxisName () {\n const { orientation, name } = this.config();\n const dimType = (orientation === TOP || orientation === BOTTOM) ? 'width' : 'height';\n const widthDim = this.availableSpace()[dimType];\n const labelManager = this.dependencies().labelManager;\n labelManager.setStyle(this._axisNameStyle);\n this.renderConfig({\n smartAxisName: getSmartAxisName(name, widthDim, labelManager)\n });\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\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 *\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 (...params) {\n this.axisDimensions(computeAxisDimensions(this, ...params));\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 }\n setOffset(this);\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 return this.scale().invert(value);\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 *\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n return [v1, v2];\n }\n\n invertExtent (v1, v2) {\n return [this.invert(v1), this.invert(v2)];\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\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 /**\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 this.setTickConfig();\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n remove () {\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n *\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 * Notifies when all animations/transitions of the axis are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n}\n\n","import { sanitizeDomainWhenEqual } from 'muze-utils';\nimport { 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 if (domain.length) {\n domain = sanitizeDomainWhenEqual(domain);\n }\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 const scale = this._scale;\n if (domainVal <= 0) {\n return scale(scale.domain()[0]);\n }\n\n return scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n domain[0] = Math.max(1, domain[0]);\n }\n if (domain[1] <= 0) {\n domain[1] = Math.max(1, domain[1]);\n }\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 {\n getNumberOfTicks,\n getValidDomain,\n setContinousAxisDomain\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 *\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 *\n *\n * @static\n *\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 *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainVal = this._interpolator.sanitizeDomain(getValidDomain(this, domain[0]));\n setContinousAxisDomain(this, domainVal);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\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 (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n const {\n tickValues,\n showInnerTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n if (!showInnerTicks) {\n axis.tickValues([]);\n return this;\n }\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n }\n const newTickValues = this.getTickValues();\n\n axis.tickValues(newTickValues);\n const smartLabel = this.dependencies().labelManager;\n smartLabel.setStyle(this._tickLabelStyle);\n const formatter = this._tickFormatter(newTickValues);\n const smartTicks = newTickValues.map((val, i) => {\n const text = formatter(val, i);\n const tickSpace = smartLabel.getOriSize(text);\n\n tickSpace.text = text;\n return tickSpace;\n });\n\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation\n\n } = this.config();\n const {\n tickValues\n } = this.renderConfig();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = this.axisComponentDimensions().largestTickDimensions;\n\n if (tickValues) {\n return 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.renderConfig().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 } = this.config();\n const {\n labels\n } = this.renderConfig();\n\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const ticks = axis.tickValues();\n const smartTicks = this.smartTicks();\n\n if (smartTicks && smartTicks.length) {\n const { width, height } = this.smartTicks()[0];\n\n axis.tickTransform((d) => {\n if (d === ticks[0]) {\n if ((orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n\n if ((orientation === TOP || orientation === BOTTOM) && !rotation) {\n return `translate(${width / 2}px, ${0}px)`;\n }\n } return '';\n });\n }\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { calculateBandSpace, setOffset, getRotatedSpaces } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n /**\n *\n *\n * @static\n *\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const domain = this.domain();\n const { labelManager } = this._dependencies;\n const { padding } = this.config();\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n tickValues && this.axis().tickValues(tickValues);\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n // Update padding between plots\n if (typeof padding === 'number') {\n const paddingNormalized = Math.min(1, Math.max(0, padding));\n this.scale().padding(paddingNormalized);\n }\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\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 }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n *\n *\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n formatTickValue (val) {\n return this.valueParser()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(this.formatTickValue(val), val, i, ticks);\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\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 invertExtent (v1, v2) {\n return this.scale().invertExtent(v1, v2);\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 const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n const extent = this.invertExtent(v1, v2);\n const p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n const p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { TIME } from '../enums/scale-type';\nimport { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset,\n resetTickInterval } from './helper';\nimport { applyTickSkipping } from './space-setter';\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 *\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 *\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n formatTickValue (val) {\n return this.scale().tickFormat()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return (ticks) => {\n const rawTicks = ticks.map(t => t.getTime());\n return (val, i) => tickFormat(this.formatTickValue(val), val.getTime(), i, rawTicks);\n };\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\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 *\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.renderConfig().tickValues || this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n *\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n applyTickSkipping () {\n applyTickSkipping(this);\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n setContinousAxisDomain(this, domainValue);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n\n resetTickInterval(this, domainValue);\n return this;\n }\n return this._domain;\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 }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\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 (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n\n tickValues && this.axis().tickValues(tickValues);\n\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n\n this.smartTicks(smartTicks);\n return this;\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, defaultValue } 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, defaultValue(Number(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 { InvalidAwareTypes, getObjProp } from 'muze-utils';\n\nexport const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => {\n if (domainVal instanceof InvalidAwareTypes) {\n return minDomainScaledVal;\n }\n return scaledVal;\n};\n\nexport const resolveAxisConfig = (propVal, defaultVal, context) => {\n const constructor = getObjProp(propVal, 'constructor');\n switch (constructor) {\n case Function:\n return propVal(defaultVal, context);\n case Array:\n return propVal;\n default:\n return defaultVal;\n }\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\nimport { treatNullMeasures } from '../helper';\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*\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 *\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 *\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 *\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(sanitizeDomainWhenEqual(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 *\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 *\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return treatNullMeasures(domainValue, scale(numVal), scale(0));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) => treatNullMeasures(domainValue, scale(domainValue),\n scale(domain[0]));\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) =>\n strategies()[`${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, defaultValue } 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, getActualHslColor } 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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n *\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 *\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n return strategyGetter(domainType, rangeType, schemeType);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n *\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 if (color) {\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 }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n *\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 = Math.min(defaultValue(color[3], 0), 1);\n const newH = h + transformationArr[0];\n const newS = s + transformationArr[1];\n const newL = l + transformationArr[2];\n const newA = Math.min(a + transformationArr[3] || 0, 1);\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 getHslArray (color) {\n return getActualHslColor(color);\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';\nimport { treatNullMeasures } from '../helper';\n\n/**\n *\n *\n * @param {*} domain\n *\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 *\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n *\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 *\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 treatNullMeasures(domainValue, interpolator(numVal), interpolator(domain[0]));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\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, domain) =>\n treatNullMeasures(domainValue, scale(domainValue), scale(domain[0]));\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 *\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n *\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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\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, InvalidAwareTypes } 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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n *\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value || value instanceof InvalidAwareTypes) {\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 *\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 { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => mergeRecursive(context.config(), config),\n preset: (context, config) => {\n const { range, domain } = config;\n range && context.range(range);\n domain && context.domain(domain);\n }\n },\n domain: {},\n range: {}\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, Symbols, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_ANGLE_DOMAIN } from '../enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst { pie } = Symbols;\n\nconst createAngleValues = (context) => {\n const angleData = context._angleFn(context._domain);\n angleData.forEach((v) => {\n v.startAngle -= Math.PI / 2;\n v.endAngle -= Math.PI / 2;\n });\n context._angleValues = angleData.reduce((values, d) => {\n const key = d.data;\n !values[key] && (values[key] = []);\n values[key].push(d);\n return values;\n }, {});\n};\n\n/**\n* This class is used to instantiate a AngleAxis.\n* @class AngleAxis\n*/\nexport default class AngleAxis {\n\n /**\n * Creates an instance of AngleAxis.\n * @param {Object} config input parameters.\n * @memberof AngleAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._range = [0, 360];\n this._angleFn = pie()\n .value(d => (typeof d === 'string' ? 1 : d))\n .sortValues(null);\n this._angleValues = {};\n }\n\n static defaultConfig () {\n return {};\n }\n\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n getScaleValue (domainVal) {\n return this._angleValues[domainVal];\n }\n\n padAngle (angle) {\n this._angleFn = this._angleFn.padAngle(angle);\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n const domain = domainVal[0].length ? domainVal[0] : DEFAULT_ANGLE_DOMAIN;\n this._domain = resolveAxisConfig(customDomain, domain, this);\n createAngleValues(this);\n return this;\n }\n return this._domain;\n }\n\n range (...range) {\n if (range.length) {\n const { range: customRange } = this.config();\n this._range = resolveAxisConfig(customRange, range[0], this);\n const domain = this.domain();\n const [startAngle, endAngle] = this._range;\n this._angleFn\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180);\n if (domain && domain.length) {\n createAngleValues(this);\n }\n return this;\n }\n return this._range;\n }\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\nexport const ANGLE0 = 'angle0';\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 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 * Ordering type\n */\nexport const ASCENDING = 'asc';\n/**\n * Ordering type\n */\nexport const DESCENDING = 'desc';\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, mergeRecursive, generateGetterSetters, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { LINEAR } from '../../../visual-group/src/enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst adjustDomain = (context) => {\n const minOuterRadius = context.config().minOuterRadius;\n const domain = context._domain;\n if (context._range.length) {\n const scale = context._scale;\n const value = scale.invert(minOuterRadius) - scale.invert(0);\n context._domain = [domain[0] - value, domain[1]];\n scale.domain(context._domain);\n }\n};\n\n/**\n* This class is used to instantiate a RadiusAxis.\n* @class RadiusAxis\n*/\nexport default class RadiusAxis {\n\n /**\n * Creates an instance of RadiusAxis.\n * @param {Object} config input parameters.\n * @memberof RadiusAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._range = [];\n this._radiusFactor = 1;\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._scale = this.createScale({\n scale: LINEAR\n });\n }\n\n static defaultConfig () {\n return {\n padding: [0, 1],\n minOuterRadius: 10\n };\n }\n\n config (...params) {\n if (params.length) {\n const config = mergeRecursive(this.config(), params[0]);\n this._config = config;\n return this;\n }\n return this._config;\n }\n\n createScale (strategy) {\n return createScale({\n type: strategy.scale,\n range: this.range()\n });\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n let domain = resolveAxisConfig(customDomain, domainVal[0], this);\n domain = sanitizeDomainWhenEqual(domain);\n this._scale.domain(domain);\n this._domain = domain;\n adjustDomain(this);\n }\n return this._domain;\n }\n\n getInnerRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[0];\n }\n return this._scale(domainVal);\n }\n\n getOuterRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[1];\n }\n const radius = this._scale(domainVal) * this._radiusFactor;\n return radius;\n }\n\n range (...range) {\n if (range.length) {\n const { padding, range: customRange } = this.config();\n const sanitizedRange = range[0].map((v, i) => v + (i ? -padding[i] : padding[i]));\n const rangeVal = resolveAxisConfig(customRange, sanitizedRange, this);\n this._range = rangeVal;\n this._scale.range(rangeVal);\n adjustDomain(this);\n }\n return this._range;\n }\n\n setRadiusFactor (val) {\n this._radiusFactor = val;\n return this;\n }\n}\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n TEMPORAL: '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.TEMPORAL]: ScaleType.TIME\n};\n\n","import { nestCollection, InvalidAwareTypes } 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 const groupedData = nestCollection({\n keys: groupByIndices,\n data\n });\n\n groupedData.forEach((d) => {\n const key = d.key;\n if (InvalidAwareTypes.isInvalid(key)) {\n d.key = InvalidAwareTypes.getInvalidType(key);\n }\n });\n return groupedData;\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 retrieveNearestGroupByReducers,\n getObjProp,\n COORD_TYPES,\n CommonProps,\n defaultValue\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM, ASCENDING, TEXT } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\nconst { POLAR, CARTESIAN } = COORD_TYPES;\n\nconst transformColor = (colorAxis, datum, styleType, intensity) => {\n const meta = datum.meta;\n const stateColor = defaultValue(meta.stateColor[styleType], meta.originalColor[styleType]);\n const colorInfo = colorAxis.transformColor(stateColor, intensity);\n\n meta.stateColor[styleType] = colorInfo.hsla;\n return colorInfo;\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.forEach((elem) => {\n elem.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 = transformColor(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 transformColor(colorAxis, d, styleType, style.intensity.map(e => -e)).color;\n }\n const [h, s, l, a] = stateColor[styleType] ? stateColor[styleType] : originalColor[styleType];\n return `hsla(${h * 360},${s * 100}%,${l * 100}%, ${a})`;\n }));\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 *\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\nexport const encodingFieldInfRetriever = {\n [POLAR]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.RADIUS, ENCODING.RADIUS0, ENCODING.ANGLE, ENCODING.ANGLE0, COLOR, SHAPE, SIZE, TEXT]\n .forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n });\n return encodingInf;\n },\n [CARTESIAN]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE, TEXT].forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n encodingInf[`${e}FieldType`] = getObjProp(fieldsConfig, field, 'def', 'type');\n encodingInf[`${e}FieldSubType`] = getObjProp(fieldsConfig, field, 'def', 'subtype');\n });\n\n return encodingInf;\n }\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n *\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\nconst dataNormalizers = {\n [POLAR]: (transformedData, encodingFieldInf, fieldsConfig) => {\n const {\n radiusFieldIndex,\n angleFieldIndex,\n radius0FieldIndex,\n angle0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map(data => data.map((d) => {\n const pointObj = {\n radius: d[radiusFieldIndex],\n angle: angleFieldIndex !== undefined ? d[angleFieldIndex] : 1,\n radius0: d[radius0FieldIndex],\n angle0: d[angle0FieldIndex]\n };\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n return pointObj;\n })).filter(d => d.length);\n },\n [CARTESIAN]: (transformedData, encodingFieldInf, fieldsConfig, transformType) => {\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 transformedData.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.source = tuple;\n pointObj.rowId = tuple[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = tuple[encodingFieldInf[`${enc}FieldIndex`]];\n });\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n }\n return pointObj;\n });\n }).filter(d => d.length);\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, context) => {\n const transformType = context.transformType();\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const encodingFieldInf = context.encodingFieldsInf();\n const fieldsConfig = context.data().getFieldsConfig();\n return dataNormalizers[context.coord()](transformedDataArr, encodingFieldInf, fieldsConfig, transformType);\n};\n\nexport const domainCalculator = {\n [POLAR]: (data, layerInst) => {\n const config = layerInst.config();\n const { sort } = config;\n let angleValues = data[0];\n const radius0Field = getObjProp(config.encoding.radius0, 'field');\n if (sort) {\n angleValues = angleValues.sort((a, b) => (sort === ASCENDING ? a.radius - b.radius : b.radius - a.radius));\n }\n const radiusDomain = getDomainFromData(data, [ENCODING.RADIUS, radius0Field ?\n ENCODING.RADIUS0 : ENCODING.RADIUS]);\n return {\n radius: radiusDomain,\n angle: angleValues.map(d => d.angle),\n angle0: angleValues.map(d => d.angle0)\n };\n },\n [CARTESIAN]: (data, layerInst) => {\n const transformType = layerInst.transformType();\n const encodingFieldInf = layerInst.encodingFieldsInf();\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};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d.rowId !== 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\nexport const renderLayer = (context) => {\n const mount = context.mount();\n if (mount) {\n context.render(mount);\n context.dependencies().throwback.commit(CommonProps.ON_LAYER_DRAW, true, context.metaInf().parentNamespace);\n }\n};\n\nconst transformResolverPredicates = (encodingFieldInf, context, groupByField) => {\n const fieldsConfig = context.data().getFieldsConfig();\n const { xField, yField, xFieldType, yFieldType } = encodingFieldInf;\n const dimensionField = ['xField', 'yField'].find(type =>\n encodingFieldInf[`${type}Type`] === FieldType.DIMENSION);\n\n return [\n !xField,\n !yField,\n !groupByField,\n getObjProp(fieldsConfig[groupByField], 'def', 'type') === FieldType.MEASURE,\n xFieldType === FieldType.DIMENSION && yFieldType === FieldType.DIMENSION,\n dimensionField && encodingFieldInf[dimensionField] === groupByField\n ];\n};\n\nexport const resolveInvalidTransformType = (context) => {\n const encodingFieldInf = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n\n if (transformResolverPredicates(encodingFieldInf, context, groupByField).some(value => value)) {\n return IDENTITY;\n }\n return null;\n};\n\nexport const getValidTransform = context => resolveInvalidTransformType(context) || context.config().transform.type;\n\nexport const getValidTransformForAggFn = (context) => {\n const resolvedInvalidTransformType = resolveInvalidTransformType(context);\n if (resolvedInvalidTransformType) {\n return resolvedInvalidTransformType;\n }\n\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const isCustomTransformTypeProvided = !!getObjProp(context._customConfig, 'transform', 'type');\n let transformType = context.config().transform.type;\n\n if (!isCustomTransformTypeProvided && groupByField && xFieldType !== yFieldType) {\n const measureField = xFieldType === FieldType.MEASURE ? xField : yField;\n const { [measureField]: aggFn } = retrieveNearestGroupByReducers(context.data(), measureField);\n transformType = aggFn === AGG_FN_SUM ? STACK : GROUP;\n }\n\n return transformType;\n};\n\nexport const getMarkId = (source, schema) => source.filter((val, i) => schema[i] &&\n schema[i].type === FieldType.DIMENSION).join();\n\nexport const resolveEncodingValues = (data, i, dataArr, layerInst) => {\n const transformedValues = {};\n const values = data.values;\n const encoding = layerInst.config().encoding;\n for (const key in values) {\n const value = getObjProp(encoding[key], 'value');\n if (value instanceof Function) {\n transformedValues[key] = value(values, i, dataArr, layerInst);\n } else {\n transformedValues[key] = values[key];\n }\n }\n return transformedValues;\n};\n\nexport const getColorMetaInf = (colorInf, colorAxis) => ({\n originalColor: Object.keys(colorInf).reduce((acc, key) => {\n if (colorInf[key]) {\n acc[key] = colorAxis.getHslArray(colorInf[key]);\n }\n return acc;\n }, {}),\n stateColor: {},\n colorTransform: {}\n});\n\nconst getCoordValue = (radius, trig, angle, offset) => radius * Math[trig](angle) + offset;\n\nconst coordValueGetter = (radius, angle, xOffset, yOffset) => ({\n x: getCoordValue(radius, 'cos', angle, xOffset),\n y: getCoordValue(radius, 'sin', angle, yOffset)\n});\n\nexport const toCartesianCoordinates = (points, measurement, rangePlot = false) => {\n const xOffset = measurement.width / 2;\n const yOffset = measurement.height / 2;\n for (let i = 0, len = points.length; i < len; i++) {\n const point = points[i];\n const { angle, radius, radius0, angle0 } = point.update;\n point.update = coordValueGetter(radius, angle, xOffset, yOffset);\n if (rangePlot) {\n const update = point.update = coordValueGetter(radius0, angle0, xOffset, yOffset);\n const { x: x0, y: y0 } = coordValueGetter(radius, angle, xOffset, yOffset);\n update.x0 = x0;\n update.y0 = y0;\n }\n }\n return points;\n};\n\nexport const sortData = (data, axes) => {\n const { x: xAxis, y: yAxis } = axes;\n const axisArr = [xAxis, yAxis];\n for (let i = 0, len = axisArr.length; i < len; i++) {\n const axis = axisArr[i];\n if (axis.constructor.type() === BAND) {\n const key = i ? 'y' : 'x';\n const dom = axis.domain();\n const indices = dom.reduce((acc, v, idx) => {\n acc[v] = idx;\n return acc;\n }, {});\n data.sort((a, b) => indices[a[key]] - indices[b[key]]);\n break;\n }\n }\n return data;\n};\n","import * as PROPS from '../enums/props';\n\nexport const localOptions = {\n [PROPS.DATA]: {\n value: null\n }\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\nimport * as PROPS from '../enums/props';\nimport { encodingFieldInfRetriever } from '../helpers';\n\nexport const listenerMap = [\n {\n props: [`${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${PROPS.DATA}`],\n type: 'registerImmediateListener',\n listener: (context, [, data]) => {\n const config = context.config();\n if (data && config) {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n const encodingValue = config.encoding;\n if (encodingValue) {\n const fieldsConfig = data.getFieldsConfig();\n const encodingFieldsInf = encodingFieldInfRetriever[context.coord()](encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.resolveTransformType();\n context._transformedData = context.getTransformedData(data, config,\n context.transformType(), encodingFieldsInf);\n context._normalizedData = context.getNormalizedData(context._transformedData, fieldsConfig);\n if (config.calculateDomain !== false) {\n const domain = context.calculateDomainFromData(context._normalizedData,\n context.encodingFieldsInf(), context.data().getFieldsConfig());\n context.domain(domain);\n }\n }\n }\n },\n namespace: context => context.metaInf().namespace\n }\n];\n","import {\n getUniqueId,\n mergeRecursive,\n FieldType,\n selectElement,\n ReservedFields,\n DataModel,\n clone,\n generateGetterSetters,\n STATE_NAMESPACES,\n COORD_TYPES,\n transactor,\n defaultValue,\n getObjProp\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport { props } from './props';\nimport {\n transformData,\n getNormalizedData,\n applyInteractionStyle,\n getValidTransform,\n domainCalculator,\n renderLayer\n} from '../helpers';\nimport { localOptions } from './local-options';\nimport { listenerMap } from './listener-map';\n\nconst layerNs = [STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * An abstract class which gives definition of common layer functionality like\n * - transforming data for various modes. Supported modes: identity, group and stack.\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 * @module BaseLayer\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n * @constructor\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.size 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} dependencies.smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies = {}) {\n super();\n\n generateGetterSetters(this, props);\n this.axes(axes);\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 this._animationDonePromises = [];\n this._graphicElems = {};\n this._customConfig = null;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys(localOptions).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getListeners () {\n return {\n store: [...listenerMap, {\n type: 'registerChangeListener',\n props: [`${layerNs[1]}.${PROPS.DATA}`,\n ...['x', 'y', 'radius'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context) => {\n renderLayer(context);\n },\n subNamespace: (context) => {\n const { unitRowIndex, unitColIndex, namespace } = context.metaInf();\n return {\n [`${layerNs[1]}.${PROPS.DATA}`]: namespace,\n [`${groupNs}.domain.x`]: `${unitColIndex}0`,\n [`${groupNs}.domain.y`]: `${unitRowIndex}0`,\n [`${groupNs}.domain.radius`]: `${unitRowIndex}-${unitColIndex}`\n };\n }\n }],\n throwback: []\n };\n }\n\n static getQualifiedStateProps () {\n const layerState = BaseLayer.getState();\n return layerState.map((state, i) => Object.keys(state).map(prop => `${layerNs[i]}.${prop}`));\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { namespace } = this.metaInf();\n store.addSubNamespace(namespace, BaseLayer.formalName(), this);\n\n transactor(this, localOptions, store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}`\n });\n return this;\n }\n return this._store;\n }\n\n domain (...dom) {\n const prop = `${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`;\n const store = this.store();\n if (dom.length) {\n const { parentNamespace, namespace } = this.metaInf();\n const domain = defaultValue(store.get(prop, parentNamespace), {});\n domain[namespace] = dom[0];\n this.store().commit(prop, domain, parentNamespace);\n return this;\n }\n return this.store().get(prop, this.metaInf().namespace);\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 * .layers([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @return {string} name of layer\n */\n static formalName () {\n return 'base';\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 *\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 * @public\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 * @public\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Returns the transformed data based on given transform type.\n * It first 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 */\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 categorical 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 = domainCalculator[this.coord()](data, this);\n }\n return domains;\n }\n\n static 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 { parentNamespace, namespace } = this.metaInf();\n const domains = getObjProp(this.store()\n .get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, parentNamespace), namespace);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Normalizes the transformed data and returns it.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData) {\n return getNormalizedData(transformedData, this);\n }\n\n /**\n * Gets the nearest point closest to the given x and y coordinate. If no nearest point is found, then it returns\n * null.\n *\n * @public\n *\n * @param {number} x X Coordinate.\n * @param {number} y Y Coordinate.\n *\n * @return {Object} Information of the nearest point.\n * ```\n * {\n * // id property contains the field names and their corresponding values in a 2d array. This is the data\n * // associated with the nearest point.\n * id: // Example data: [['Origin'], ['USA']],\n * dimensions: // Physical dimensions of the point.\n * layerId: // Id of the layer instance.\n * }\n * ```\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply, styles) {\n const interactionConfig = this.config().interaction || {};\n\n let interactionStyles = interactionConfig[interactionType];\n interactionStyles = styles || interactionStyles;\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n disableUpdate () {\n this._updateLock = true;\n return this;\n }\n\n enableUpdate () {\n this._updateLock = false;\n return this;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransform(this);\n }\n\n transformType () {\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 *\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer.\n *\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n const { namespace, parentNamespace } = this.metaInf();\n const store = this.store();\n store.removeSubNamespace(namespace, BaseLayer.formalName());\n const layersDomain = store.get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`);\n const unitDom = layersDomain[parentNamespace];\n unitDom && (delete unitDom[namespace]);\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 *\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 *\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getSchema();\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 hasPlotSpan () {\n return false;\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 * Returns the information of the marks corresponding to the supplied identifiers. Identifiers are a set of field\n * names and their corresponding values in an array. It can also be an instance of datamodel.\n *\n * For example,\n * ```\n * const identifiers = [\n * ['Origin', 'Cylinders'],\n * ['USA', '8']\n * ];\n * const points = barLayer.getPointsFromIdentifiers(identifiers);\n * ```\n * @public\n * @param {Array|DataModel} identifiers Identifiers of the marks.\n * @param {Object} config Optional configuration which describes how to get the information.\n * @param {boolean} config.getAllAttrs If true, then returns all the information of the points, else returns only\n * the positions of the points.\n * @param {boolean} config.getBBox If true, then returns the bounding box of all the marks.\n *\n * @return {Array} Array of points contains\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 { source, rowId } = 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] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -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._normalizedData;\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.source;\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.source;\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().getSchema()];\n }\n\n /**\n * Returns the dom elements associated with the supplied set of row ids.\n * Each element in the layer is mapped with a row of the datamodel. When given an array of row ids, it returns all\n * the elements which is mapped with those row ids.\n *\n * @public\n * @param {Array} set Array of row ids\n *\n * @return {Selection} D3 Selection of dom elements.\n */\n getPlotElementsFromSet (set) {\n const graphicElems = this._graphicElems;\n const elems = [];\n for (let i = 0, len = set.length; i < len; i++) {\n const elem = graphicElems[set[i]];\n if (elem) {\n elems.push(elem);\n }\n }\n return elems;\n }\n\n /**\n * Notifies when all animations/transitions of the layer are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n getRenderProps () {\n if (this.coord() === COORD_TYPES.POLAR) {\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`];\n }\n const { unitRowIndex: rowIndex, unitColIndex: colIndex } = this.metaInf();\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${rowIndex}0`,\n `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${colIndex}0`];\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\nconst filterFn = (d) => {\n const { update } = d;\n return update.y !== null && update.x !== null;\n};\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 { layer, 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(filterFn);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(filterFn);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', points.length ? [points[0].className] : []);\n element.attr('class', d => d);\n if (!transition.disabled) {\n element = element.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\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 InvalidAwareTypes,\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 {\n attachDataToVoronoi,\n animateGroup,\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\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 static formalName () {\n return 'line';\n }\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 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 static 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) {\n let points = [];\n const axes = this.axes();\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const { xFieldType, yFieldType } = 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 sortData(data, axes);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2;\n const color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color\n },\n data: d\n }, i, data, this);\n\n const point = {\n enter: {},\n update: {\n x: d.x instanceof InvalidAwareTypes ? null : resolvedEncodings.x,\n y: d.y instanceof InvalidAwareTypes ? null : resolvedEncodings.y\n },\n style: {\n stroke: resolvedEncodings.color,\n 'fill-opacity': 0\n },\n rowId: d.rowId,\n source: d.source,\n meta: getColorMetaInf({\n stroke: resolvedEncodings.color\n }, colorAxis)\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\n points = points.filter((point) => {\n const { update } = point;\n return !isNaN(update.x) && !isNaN(update.y);\n });\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 normalizedData = this._normalizedData;\n const transformedData = this._transformedData;\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);\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.source[colorFieldIndex] !== null &&\n d.source[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal.source[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n layer: this,\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].source[colorFieldIndex] || d[0].rowId);\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 { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\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 { layer, 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(points.length ? [points[0].className] : []);\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 .on('end', layer.registerAnimationDoneHook())\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n element.attr('class', d);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType, InvalidAwareTypes, getObjProp } 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 {\n getAxesScales,\n positionPoints,\n getIndividualClassName,\n getValidTransformForAggFn,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\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 *\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 && getObjProp(domains[type], 'length')) {\n domains[type][0] = Math.min(domains[type][0], 0);\n domains[type][1] = Math.max(0, domains[type][1]);\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) {\n let points = [];\n const transformType = this.transformType();\n const axes = this.axes();\n const colorAxis = axes.color;\n const config = this.config();\n const fieldsConfig = this.data().getFieldsConfig();\n const { xField, yField, y0Field } = this.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 const minYVal = yAxis.domain()[0];\n const basePos = minYVal < 0 ? yAxis.getScaleValue(0) : yAxis.getScaleValue(minYVal);\n sortData(data, axes);\n points = data.map((d, i) => {\n let color;\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) : basePos;\n color = colorAxis.getColor(d.color);\n const invalidY = d.y instanceof InvalidAwareTypes;\n const invalidY0 = d.y0 instanceof InvalidAwareTypes;\n const resolvedValues = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, this);\n color = resolvedValues.color;\n const style = {\n fill: color\n };\n\n const point = {\n enter: {\n x: xPx,\n y: invalidY ? null : basePos,\n y0: invalidY0 ? null : basePos\n },\n update: {\n x: xPx,\n y: invalidY ? null : resolvedValues.y,\n y0: invalidY0 ? null : resolvedValues.y0\n },\n source: d.source,\n rowId: d.rowId,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style,\n meta: getColorMetaInf(style, colorAxis)\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 points = points.filter((point) => {\n const update = point.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(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 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 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 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 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 Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport { getIndividualClassName, resolveEncodingValues, getColorMetaInf } from '../../helpers';\nimport { tweenPie, tweenExitPie, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates.\n *\n * @public\n *\n * @class\n * @module ArcLayer\n * @extends BaseLayer\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 static formalName () {\n return 'arc';\n }\n\n elemType () {\n return 'path';\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 { source, rowId } = dataPoint;\n return {\n id: this.getIdentifiersFromData(source, rowId),\n layerId: this.id()\n };\n }\n return null;\n }\n\n translatePoints (data) {\n const { angle, color: colorAxis, radius: radiusAxis } = this.axes();\n const pieIndex = {};\n const prevData = this._points[0] || [];\n const points = [];\n const angleV = {};\n\n this._prevPieData = {};\n prevData.forEach((e, index) => {\n this._prevPieData[e.rowId] = [e, index];\n pieIndex[e.index] = e;\n });\n data.forEach((d, i) => {\n const angles = angle.getScaleValue(d.angle);\n if (angles) {\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const uid = d.rowId;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n radius: radiusAxis.getOuterRadius(d.radius),\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color: colorAxis.getColor(d.color),\n angle0: startAngle,\n angle: endAngle,\n startAngle,\n endAngle,\n startAngle0: startAngle,\n endAngle0: endAngle\n },\n data: d\n }, i, data, this);\n const color = resolvedEncodings.color;\n points.push({\n source: d.source,\n index: i,\n enter: {},\n update: {\n angle0: resolvedEncodings.angle0,\n angle: resolvedEncodings.angle,\n radius0: resolvedEncodings.radius0,\n radius: resolvedEncodings.radius\n },\n color,\n meta: getColorMetaInf({\n fill: color\n }, colorAxis),\n rowId: uid,\n _previousInfo: this._prevPieData[uid] ? this._prevPieData[uid][0] :\n getPreviousPoint(pieIndex, i, this)\n });\n }\n });\n return points;\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const measurement = this.measurement();\n const {\n classPrefix,\n defClassName,\n cornerRadius,\n padAngle,\n padRadius,\n transition\n } = this.config();\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // This returns a function that generates the arc path based on the datum provided\n const path = this._arcFn = arc()\n .cornerRadius(cornerRadius)\n .startAngle(d => d.update.angle0 + Math.PI / 2)\n .endAngle(d => d.update.angle + Math.PI / 2)\n .padAngle(padAngle)\n .padRadius(padRadius)\n .outerRadius(d => d.update.radius)\n .innerRadius(d => d.update.radius0);\n\n this._points = this._normalizedData.map(arr => this.translatePoints(arr));\n const graphicElems = this._graphicElems = {};\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', this._points, `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${measurement.width / 2},\n ${measurement.height / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', d => [d], `${qualClassName[0]}-path`)\n .style('fill', d => d.color)\n .each(function (d) {\n graphicElems[d.rowId] = selectElement(this);\n })\n .transition()\n .duration(transition.duration)\n .on('end', this.registerAnimationDoneHook())\n .attrTween('d', (...params) => tweenPie(path, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, this._points, 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', d => d, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, path);\n return this;\n }\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 { source, rowId } = tData;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const measurement = this.measurement();\n const centroid = this._arcFn.centroid(pieSliceInf);\n return [{\n x: centroid[0] + measurement.width / 2,\n y: centroid[1] + measurement.height / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\nexport const getPreviousPoint = (prevData, currIndex, context) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n const [startAngle, endAngle] = context.axes().angle.range();\n if (prevArc && nextArc) {\n return {\n update: {\n angle0: getObjProp(prevArc, 'update', 'angle'),\n angle: getObjProp(nextArc, 'update', 'angle0')\n }\n };\n } else if (!nextArc) {\n return {\n update: {\n angle0: (endAngle - 90) * Math.PI * 2 / 360,\n angle: (endAngle - 90) * Math.PI * 2 / 360\n }\n };\n }\n return {\n update: {\n angle0: (startAngle - 90) * Math.PI * 2 / 360,\n angle: (startAngle - 90) * Math.PI * 2 / 360\n }\n };\n};\n\nexport const tweenPie = (path, b) => {\n const datum = b[0];\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\nexport const tweenExitPie = (consecutiveExits, transition, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.update.angle0;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.update.angle;\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 return path(interpolator()(datum, {\n update: {\n angle0: mid,\n angle: mid,\n radius: datum.radius,\n radius0: datum.radius0\n }\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, layerInst) => {\n const selection = selectElement(container).selectAll('g').data(data);\n const { smartLabel } = layerInst._dependencies;\n const graphicElems = layerInst._graphicElems;\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 graphicElems[dataObj.rowId] = element;\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 textEl.attr('alignment-baseline', dataObj['alignment-baseline']);\n textEl.attr('transform', `rotate(${dataObj.rotation} ${update.x} ${update.y})`);\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 size: {},\n radius: {},\n angle: {},\n text: {\n value: '',\n formatter: (val, i, data, context) => {\n const valueParser = context.valueParser();\n return valueParser(val);\n },\n background: {\n padding: 10\n }\n },\n rotation: {\n value: 0\n },\n 'alignment-baseline': {\n value: 'middle'\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 { positionPoints, getIndividualClassName, resolveEncodingValues, getColorMetaInf, toCartesianCoordinates }\n from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\n\nimport './styles.scss';\n\nconst defaultEncoding = defaultConfig.encoding;\nconst alignmentBaseLine = defaultEncoding['alignment-baseline'].value;\nconst defRotation = defaultEncoding.rotation.value;\n\nconst pointTranslators = {\n polar: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { radius: radiusAxis, color: colorAxis, angle: angleAxis } = axes;\n const { formatter: textFormatter } = textEncoding;\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const angleV = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const source = d.source;\n const text = d.text;\n\n const color = colorAxis.getColor(d.color);\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n\n const angle = (startAngle + endAngle) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n angle,\n radius,\n color,\n text,\n startAngle,\n endAngle,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n angle: resolvedVal.angle,\n radius: resolvedVal.radius\n },\n text: textFormatter ? textFormatter(text, i, data, layerInst) : resolvedVal.text,\n color: resolvedVal.color,\n rotation: resolvedVal.rotation,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedVal['alignment-baseline'],\n meta: getColorMetaInf({\n fill: resolvedVal.color\n }, colorAxis),\n style: {},\n source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = toCartesianCoordinates(positionPoints(layerInst, points), layerInst.measurement());\n\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n },\n cartesian: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const colorAxis = axes.color;\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\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.source;\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 = colorAxis.getColor(d.color, colorAxis);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n text: textValue,\n color,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n },\n text: textFormatter(resolvedEncodings.text, i, data, layerInst),\n color: resolvedEncodings.color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedEncodings['alignment-baseline'],\n rotation: resolvedEncodings.rotation,\n meta: getColorMetaInf({\n fill: resolvedEncodings.color\n }, colorAxis),\n style: {},\n source: d.source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = positionPoints(layerInst, points);\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n};\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\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 getPointTranslator (val) {\n return pointTranslators[val];\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, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\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 const config = this.config();\n const normalizedData = this._normalizedData;\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n this._graphicElems = {};\n\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group) => {\n const node = group.node();\n const points = this.translatePoints(dataArr, {}, this);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this);\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 *\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, groupElement) {\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, groupElement);\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 makeElement(groupElement, () => newShape, [1]);\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, groupElement);\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 const { layer, container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n const graphicElems = layer._graphicElems;\n mount.attr('class', className);\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const { enter } = d;\n group.attr('transform', `translate(${enter.x},${enter.y})`);\n },\n update: (group, d) => {\n createShape(d, group);\n graphicElems[d.rowId] = group;\n const { update, style } = d;\n objectIterator(style, key => group.style(key, style[key]));\n group.attr('class', className);\n group.classed(d.className, true);\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n group.attr('transform', `translate(${update.x},${update.y})`);\n },\n exit: (exitGroup) => {\n if (!disabled) {\n exitGroup.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', () => exitGroup.remove())\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroup.remove();\n }\n }\n }, params.keyFn);\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: 'stroke',\n intensity: [0, 0, 0, +1]\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 stroke: {\n value: 'hsla(0,0%,0%,0)'\n },\n fill: {},\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 {\n attachDataToVoronoi,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName,\n getMarkId,\n getColorMetaInf,\n resolveEncodingValues\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to create various symbols for each data point. This is commonly used in\n * scatterplot visualizations. The mark type of this layer is ```point```.\n *\n * @public\n *\n * @class\n * @module PointLayer\n * @extends BaseLayer\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 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 static formalName () {\n return 'point';\n }\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, config = {}) {\n let points = [];\n const encoding = this.config().encoding;\n const axes = this.axes();\n const {\n x,\n y\n } = encoding;\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 measurement = this.measurement();\n const colorAxis = axes.color;\n const { x: offsetX, y: offsetY } = config.offset;\n const stroke = encoding.stroke.value;\n\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const size = sizeAxis.getSize(d.size);\n const shape = shapeAxis.getShape(d.shape);\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 let color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color,\n shape,\n size,\n data: d\n },\n data: d\n }, i, data, this);\n color = resolvedEncodings.color;\n\n const style = {\n fill: color,\n stroke\n };\n const pos = {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: pos,\n update: pos,\n shape: resolvedEncodings.shape,\n size: Math.abs(resolvedEncodings.size),\n meta: getColorMetaInf(style, colorAxis),\n style,\n source: d.source,\n rowId: d.rowId\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._transformedData.map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._normalizedData;\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 this._graphicElems = {};\n\n const schema = this.data().getSchema();\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 layer: this,\n container: group.node(),\n points,\n interpolate: config.interpolate,\n className: seriesClassName,\n transition,\n keyFn: v => getMarkId(v.source, schema)\n });\n }\n }, data => data[0].rowId);\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 [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, 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 { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\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 = (layer, elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n\n const selTransition = disabled ? selection :\n selection.transition()\n .duration(duration)\n .ease(easeFns[effect])\n .on('end', layer.registerAnimationDoneHook());\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 { layer, points, container, keyFn } = params;\n const graphicElems = layer._graphicElems;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) {\n graphicElems[d.rowId] = elem;\n transitionBars(layer, elem, d, i, params);\n }\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 { MeasureSubtype, DimensionSubtype } from 'muze-utils';\nimport { STACK } from '../../enums/constants';\nimport { positionPoints, getIndividualClassName, getColorMetaInf, resolveEncodingValues } from '../../helpers';\n\nconst positionRetriever = {\n x: (xPx, isNegativeVal, barBasePos) => (isNegativeVal ? [xPx, barBasePos] : [barBasePos, xPx]),\n y: (yPx, isNegativeVal, barBasePos) => (isNegativeVal ? [barBasePos, yPx] : [yPx, barBasePos])\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n *\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 === MeasureSubtype.CONTINUOUS || 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 minDomVal = axis.domain()[0];\n const barBasePos = minDomVal < 0 ? axis.getScaleValue(0) : axis.getScaleValue(minDomVal);\n pos = axis.getScaleValue(data[type]);\n let endPos = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n const isNegativeVal = data[type] < 0;\n if (transformType !== STACK) {\n [pos, endPos] = positionRetriever[type](pos, isNegativeVal, barBasePos);\n }\n space = Math.abs(pos - endPos);\n enter = barBasePos;\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 *\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 sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context.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\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\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 let color = colorAxis.getColor(d.color);\n\n const update = dimensions.update;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: update.x,\n y: update.y,\n width: update.width,\n height: update.height,\n color\n },\n data: d\n }, i, data, context);\n color = resolvedEncodings.color;\n const { x, y, width, height } = resolvedEncodings;\n const style = {\n fill: color\n };\n\n if (!isNaN(x) && !isNaN(y) && d.rowId !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update: {\n x,\n y,\n width,\n height\n },\n source: d.source,\n rowId: d.rowId,\n style,\n meta: getColorMetaInf(style, colorAxis)\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 getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n Scales,\n getNearestValue,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getPlotMeasurement, getValidTransformForAggFn } 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 rectangle marks. The mark type of this layer is ```bar```. This layer can be used\n * to create stacked or grouped bars, range bars, heatmap plots and also reference bands by using\n * the encoding properties.\n *\n * @public\n *\n * @class\n * @module BarLayer\n * @extends BaseLayer\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 *\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n *\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 *\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 *\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 && getObjProp(domain[d], 'length')) {\n if (encodingFieldInf[`${d}0Field`]) {\n domain[d] = domain[d].sort((a, b) => a - b);\n } else {\n domain[d][0] = Math.min(domain[d][0], 0);\n domain[d][1] = Math.max(0, domain[d][1]);\n }\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 normalizedDataArr = this._normalizedData;\n const transformedData = this._transformedData;\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 this._graphicElems = {};\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 layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d.source[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n *\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 resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\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 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 === MeasureSubtype.CONTINUOUS) {\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 value = getNearestValue(filterData, value);\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.source;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound.rowId);\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 hasPlotSpan () {\n return true;\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 interpolate: 'linear',\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n radius: {},\n radius0: {},\n angle: {},\n angle0: {},\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\n","import { selectElement, Symbols, pathInterpolators } from 'muze-utils';\n\nconst line = Symbols.line;\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, interpolate, layer } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n const graphicElems = layer._graphicElems;\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 graphicElems[d.rowId] = selection;\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 curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(e => e[0])\n .y(e => e[1]);\n d.className && selection.classed(d.className, true);\n selection.attr('d', linepath([[update.x, update.y], [x0, y0]]));\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 { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, positionPoints, getIndividualClassName,\n getColorMetaInf, resolveEncodingValues, toCartesianCoordinates } from '../../helpers';\n\nconst pointTranslators = {\n polar: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { radius: radiusAxis, angle: angleAxis, angle0: angle0Axis } = axes;\n const measurement = layerInst.measurement();\n\n const colorAxis = axes.color;\n const angleV = {};\n const angle0V = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const color = colorAxis.getColor(d.color);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const angles0 = angle0Axis.getScaleValue(d.angle0);\n !angle0V[d.angle0] && (angle0V[d.angle0] = 0);\n const { startAngle: startAngle0, endAngle: endAngle0 } = angles0[angle0V[d.angle0]++];\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angle = (startAngle + endAngle) / 2;\n const angle0 = (startAngle0 + endAngle0) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n radius,\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color,\n angle,\n angle0,\n startAngle,\n endAngle,\n startAngle0,\n endAngle0\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedVal.color\n };\n\n const point = {\n enter: {},\n update: {\n radius: resolvedVal.radius,\n radius0: resolvedVal.radius0,\n angle: resolvedVal.angle,\n angle0: resolvedVal.angle0\n },\n style,\n source: d.source,\n rowId: d.rowId,\n meta: getColorMetaInf(style, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n points = toCartesianCoordinates(positionPoints(layerInst, points), measurement, true);\n return points;\n },\n cartesian: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = layerInst.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 measurement = layerInst.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.source;\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 color = colorAxis.getColor(d.color);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, layerInst);\n const style = {\n stroke: resolvedEncodings.color\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y,\n x0: resolvedEncodings.x0,\n y0: resolvedEncodings.y0\n },\n style,\n source: row,\n rowId: d.rowId,\n meta: getColorMetaInf(style, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @staticg\n *\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n *\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, config) {\n return pointTranslators[this.coord()](data, config, this);\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","export 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 { 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. It also registers the definition of composite layers.\n *\n * @public\n *\n * @module LayerFactory\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, ...params) => {\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(...params);\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n getLayerClass: mark => factoryObj._layerRegistry[mark],\n /**\n * Registers a new composite layer definition in the layer factory.\n *\n * @public\n *\n * @param {string} layerType Mark type of the new composite layer.\n * @param {Array} layerDefs Layer definitions of the composite layer.\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 layerFactory from './layer-factory';\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 LAYER_TYPES from './enums/layer-types';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [LAYER_TYPES.AREA_LAYER]: AreaLayer,\n [LAYER_TYPES.ARC_LAYER]: ArcLayer,\n [LAYER_TYPES.LINE_LAYER]: LineLayer,\n [LAYER_TYPES.TEXT_LAYER]: TextLayer,\n [LAYER_TYPES.POINT_LAYER]: PointLayer,\n [LAYER_TYPES.TICK_LAYER]: TickLayer,\n [LAYER_TYPES.BAR_LAYER]: BarLayer,\n [LAYER_TYPES.BASE_LAYER]: BaseLayer\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\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 * @module\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 { 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","import {\n FieldType,\n getDependencyOrder,\n getObjProp,\n defaultValue,\n objectIterator,\n unionDomain,\n makeElement,\n DimensionSubtype,\n toArray,\n MeasureSubtype,\n getNearestValue\n} from 'muze-utils';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\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 (getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION && measures.length) {\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, namespaces) => {\n let instances = existingLayer;\n const dependencies = context._dependencies;\n const metaInf = context.metaInf();\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n toArray(instances).forEach((inst, i) => {\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: namespaces[i],\n parentNamespace: metaInf.namespace\n })\n .dependencies(dependencies)\n .store(context.store());\n });\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.coord(context.coord());\n instance.config(def);\n instance.valueParser(context.valueParser());\n instance.dataProps({\n timeDiffs: context._timeDiffs\n });\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 sanitizeLayerDef = (layerDefs) => {\n const sanitizedDefs = [];\n layerDefs.forEach((layerDef, i) => {\n const def = layerDef.def;\n const mark = layerDef.mark;\n if (!def) {\n const sConf = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n if (!sConf.name) {\n sConf.name = `${mark}-${i}`;\n }\n sanitizedDefs.push({\n mark: layerDef.mark,\n def: sConf\n });\n } else {\n if (!def.name) {\n def.name = `${mark}-${i}`;\n }\n sanitizedDefs.push(layerDef);\n }\n });\n return sanitizedDefs;\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) :\n (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 const axisArr = axes[key] || [];\n const axisIndex = axisInf[key] >= 0 ? axisInf[key] : axisArr.length - 1;\n axes[key] && (axesObj[key] = defaultValue(axes[key][axisIndex]));\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nconst { X, Y, RADIUS, ANGLE, ANGLE0, RADIUS0 } = ENCODING;\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, ANGLE, ANGLE0, RADIUS].forEach((type) => {\n let index;\n const specificField = getObjProp(encoding, type, 'field');\n const encodingField = type === RADIUS ? defaultValue(specificField, getObjProp(encoding, RADIUS0, 'field'))\n : getObjProp(encoding, type, 'field');\n const field = defaultValue(getObjProp(axis, type), encodingField);\n if (fields[type] && fields[type].length) {\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\nconst getValidDomain = (domain, domain1, encodingType, fieldType) => {\n if (encodingType === ANGLE || encodingType === ANGLE0) {\n return domain.concat(domain1.filter(d => domain.indexOf(d) === -1));\n }\n return unionDomain([domain, domain1], fieldType);\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 domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const field = getObjProp(axisFields, encodingType, axisIndex);\n !fieldDomain[encodingType] && (fieldDomain[encodingType] = {});\n const encodingDomain = fieldDomain[encodingType];\n if (field) {\n const fieldStr = `${field}`;\n encodingDomain[fieldStr] = encodingDomain[fieldStr] || [];\n encodingDomain[fieldStr] = getValidDomain(encodingDomain[fieldStr],\n domain[1], encodingType, fieldsConfig[field.getMembers()[0]].def.subtype);\n }\n return fieldDomain;\n }, domains);\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 const layerDepOrder = getDependencyOrder(context._layerDepOrder);\n const groups = {};\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n groups[layer.alias()] = {\n group,\n layer\n };\n }\n });\n\n const layerSeq = layerDepOrder.map(name => groups[name]);\n layerSeq.forEach((o) => {\n const layer = o.layer;\n const group = o.group;\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context._timeDiffs\n });\n layer.config().render !== false && layer.mount(group.node());\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].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\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 !== MeasureSubtype.CONTINUOUS && yFieldType !== MeasureSubtype.CONTINUOUS)) {\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 = getNearestValue(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 createRenderPromise = (unit) => {\n const renderedPromise = unit._renderedPromise;\n renderedPromise.then(() => {\n unit._renderedPromise = new Promise((resolve) => {\n unit._renderedResolve = resolve;\n });\n createRenderPromise(unit);\n });\n};\n\nexport const getRadiusRange = (width, height, config = {}) => {\n const {\n innerRadius,\n outerRadius\n } = config;\n\n return [innerRadius || 0, outerRadius || Math.min(height,\n width) / 2];\n};\n\nexport const setAxisRange = (context) => {\n const axes = context.axes();\n const { radius: radiusAxes } = axes;\n if (radiusAxes) {\n radiusAxes.forEach((axis) => {\n axis.range(getRadiusRange(context.width(), context.height()));\n });\n }\n};\n\nexport const isXandYMeasures = (context) => {\n const { x: xFields, y: yFields } = context.fields();\n const [xMeasures, yMeasures] = [xFields, yFields].map(fields => fields\n .every(field => field.type() === FieldType.MEASURE));\n return xMeasures && yMeasures;\n};\n\nconst getKey = (arr, row) => {\n let key = row[arr[0]];\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${row[arr[i]]}`;\n }\n return key;\n};\n\nexport const getValuesMap = (model, context) => {\n const valuesMap = {};\n const { data: dataArr, schema, uids } = model.getData();\n const fieldsConfig = model.getFieldsConfig();\n const fieldIndices = isXandYMeasures(context) ? schema.map((d, i) => i) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldsConfig[d].index);\n dataArr.forEach((row, i) => {\n const key = getKey(fieldIndices, row);\n valuesMap[key] = uids[i];\n });\n return valuesMap;\n};\n\nexport const getSelectionRejectionModel = (model, propModel, measures, propValuesMap) => {\n let rejectionModel;\n const { data, schema } = propModel.getData();\n const entryRowIds = [];\n const exitRowIds = [];\n\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n const rowIdsObj = {};\n const filteredSchema = measures ? schema.map((d, idx) => idx) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldMap[d].index);\n data.forEach((row) => {\n const key = getKey(filteredSchema, row);\n const id = propValuesMap[key];\n if (key in propValuesMap) {\n entryRowIds.push(id);\n rowIdsObj[id] = 1;\n }\n });\n rejectionModel = model.select((fields, i) => {\n if (!rowIdsObj[i]) {\n exitRowIds.push(i);\n return true;\n }\n return false;\n }, {\n saveChild: false\n });\n } else {\n rejectionModel = propModel;\n }\n\n return {\n model: [propModel, rejectionModel],\n entryRowIds,\n exitRowIds\n };\n};\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRID_LINE_PARENT_GROUP_CLASS = 'grid-lines';\nexport const GRID_BAND_PARENT_GROUP_CLASS = 'grid-bands';\nexport const GRID_PARENT_GROUP = 'grid-parent-group';\nexport const BAND = 'band';\nexport const TICK = 'tick';\nexport const GRID_BAND = 'gridBands';\nexport const GRID_LINE = 'gridLines';\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","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel, createSelection } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer';\nimport {\n GRID_BAND,\n GRID_LINE,\n GRID_BAND_PARENT_GROUP_CLASS,\n GRID_LINE_PARENT_GROUP_CLASS,\n GRID_PARENT_GROUP\n} from '../enums/constants';\n\nconst { BAR_LAYER, TICK_LAYER } = LAYER_TYPES;\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 === GRID_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 === GRID_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 === GRID_BAND) {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n const { color, shape, size } = context.axes();\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n name: orientation,\n calculateDomain: false,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== GRID_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 === GRID_BAND ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis,\n color: color[0],\n shape: shape[0],\n size: size[0]\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 axes = context.axes();\n if (!axes[axisType]) {\n return null;\n }\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, axes[axisType][0]));\n\n return show ? getLayerDefinition(context, axes, type, axisType) : null;\n}).filter(d => d !== null);\n\nconst dimensionSubTypes = Object.values(DimensionSubtype).reduce((acc, v) => {\n acc[v] = 1;\n return acc;\n}, {});\nconst getValidSubtype = subtype => (!dimensionSubTypes[subtype] ? DimensionSubtype.CATEGORICAL : subtype);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n\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: getValidSubtype(subtype)\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype: getValidSubtype(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) => {\n const vuConf = context.config();\n const metaInf = context.metaInf();\n const store = context.store();\n const timeDiffs = context._timeDiffs;\n [GRID_BAND, GRID_LINE].forEach((type) => {\n let mark;\n let config;\n if (type === GRID_BAND) {\n mark = BAR_LAYER;\n config = vuConf.gridBands;\n } else {\n mark = TICK_LAYER;\n config = vuConf.gridLines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n const sel = `_${type}Selection`;\n context[sel] = createSelection(context[sel], (atomicDef) => {\n const inst = layerFactory.getLayerInstance({ mark });\n inst.dependencies(context._dependencies);\n const name = atomicDef.definition.name;\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: `${metaInf.namespace}${type}${name}`,\n parentNamespace: metaInf.namespace\n })\n .store(store);\n return inst;\n }, definitions, atomicDef => atomicDef.definition.name);\n context[sel].each((layer, atomicDef) => {\n const definition = atomicDef.definition;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n const axesObj = atomicDef.axes;\n layer.config(sConf)\n .dataProps({\n timeDiffs\n })\n .axes(axesObj);\n });\n context[`_${type}`] = context[sel].getObjects();\n });\n};\n\nexport const attachDataToGridLineLayers = (context) => {\n const axes = context.axes();\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n if (gridLines.length || gridBands.length) {\n const gridLayerData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n [].concat(...gridBands, ...gridLines).forEach((inst) => {\n inst.data(inst.axes().x ? gridLayerData.x : gridLayerData.y);\n });\n }\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const config = context.config();\n const classPrefix = config.classPrefix;\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n const gridLineParentGroup = makeElement(container, 'g', [1], `${classPrefix}-${GRID_PARENT_GROUP}`);\n\n [[gridLines, `${classPrefix}-${GRID_LINE_PARENT_GROUP_CLASS}`],\n [gridBands, `${classPrefix}-${GRID_BAND_PARENT_GROUP_CLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(gridLineParentGroup, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.dataProps({ timeDiffs: context._timeDiffs })\n .measurement(measurement)\n .mount(group.node());\n }\n });\n });\n};\n","import { STATE_NAMESPACES, temporalFields, getObjProp, defaultValue } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers\n} from './helper';\n\nimport { createGridLineLayer } from './helper/grid-lines';\n\nconst removeExitLayers = (layerDefs, context) => {\n const layersMap = context._layersMap;\n const markSet = {};\n layerDefs.forEach((layerDef, i) => {\n const id = defaultValue(layerDef.name, `${layerDef.mark}-${i}`);\n markSet[id] = true;\n });\n\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};\n\nexport const calculateDomainListener = (context) => {\n const { namespace } = context.metaInf();\n const domain = unionDomainFromLayers(context.layers(), context.fields(), context._layerAxisIndex,\n context.data().getFieldsConfig());\n context.store().commit(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, domain, namespace);\n};\n\nexport const listenerMap = [\n {\n type: 'registerImmediateListener',\n props: [PROPS.LAYERDEFS],\n listener: (context, [, layerDefs]) => {\n const fieldsVal = context.fields();\n if (layerDefs && fieldsVal) {\n removeExitLayers(layerDefs, context);\n const queuedLayerDefs = context._queuedLayerDefs;\n let layerDefArr = layerDefs;\n queuedLayerDefs.forEach((defFn) => {\n layerDefArr = [...layerDefArr, ...defFn(layerDefs)];\n });\n context.addLayer(layerDefArr);\n const adjustRange = context.layers().some(inst => inst.hasPlotSpan());\n ['x', 'y'].forEach((type) => {\n const axisArr = defaultValue(getObjProp(context.axes(), type), []);\n axisArr.forEach((axis) => {\n axis.config({\n adjustRange\n });\n });\n });\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'initialized',\n formalName: 'layer'\n });\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA],\n listener: (context, [, dataModel]) => {\n if (dataModel) {\n const axesObj = context.axes();\n const timeDiffs = {};\n const timeDiffsByField = {};\n\n Object.entries(temporalFields(dataModel)).forEach(([fieldName, fieldObj]) => {\n timeDiffsByField[fieldName] = fieldObj.minimumConsecutiveDifference();\n });\n\n Object.entries(context.fields()).forEach(([type, [field]]) => {\n if (field) {\n const timeDiff = timeDiffsByField[`${field}`];\n if (timeDiff) {\n timeDiffs[type] = timeDiff;\n axesObj[type].forEach(axis => axis.minDiff(timeDiff));\n }\n }\n });\n\n context._timeDiffsByField = timeDiffsByField;\n context._timeDiffs = timeDiffs;\n const firebolt = context.firebolt();\n const originalData = context.cachedData()[0];\n firebolt.createSelectionSet(context.data().getUids());\n firebolt.attachPropagationListener(originalData);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: (context, [, config]) => {\n if (config) {\n context.firebolt().config(config.interaction);\n createGridLineLayer(context);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA, PROPS.TRANSFORM],\n listener: (context, [, dataModel], [, transform]) => {\n if (dataModel) {\n const dataModels = transformDataModels(transform, dataModel);\n const metaInf = context.metaInf();\n context.store().commit(`${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${PROPS.TRANSFORMEDDATA}`,\n dataModels, metaInf.namespace);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.TRANSFORMEDDATA, PROPS.LAYERS],\n listener: (context, [, transformedData], [, layers]) => {\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = context.axes();\n const dataModel = context.data();\n if (transformedData && layers && axesVal && layerAxisIndexVal) {\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModel, transformedData);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModel.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n }\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 TRANSFORM = 'transform';\nexport const TRANSFORMEDDATA = 'transformedData';\nexport const DATADOMAIN = 'dataDomain';\nexport const FIELDS = 'fields';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\nexport const LAYERS = 'layers';\nexport const DOMAIN = 'domain';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [CACHED_DATA]: {},\n detailFields: {},\n axes: {\n defaultValue: {\n x: [],\n y: []\n }\n },\n fields: {\n defaultValue: {\n x: [],\n y: []\n },\n sanitization: (context, value) => mergeRecursive({\n x: [],\n y: []\n }, value)\n },\n metaInf: {},\n registry: {},\n parentContainerInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {}\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 derivedSchema = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION,\n subtype: d.subtype()\n }));\n const dataAtFirstPos = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n derivedSchema.forEach((obj, i) => {\n tuple[obj.name] = dataAtFirstPos[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...derivedSchema]);\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, intersect } from 'muze-utils';\nimport { Firebolt, SIDE_EFFECTS } from '@chartshq/muze-firebolt';\nimport { isXandYMeasures, getSelectionRejectionModel } from '../helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\nconst sideEffectPolicy = (propPayload, context, propagationInf) => {\n const { sourceIdentifiers, propagationData } = propagationInf;\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig).filter(field =>\n fieldsConfig[field].def.type !== FieldType.MEASURE);\n const propFields = Object.keys(propagationData[0].getFieldsConfig());\n const hasCommonCanvas = propPayload.sourceCanvas === context.parentAlias();\n return intersect(sourceIdentifierFields, propFields).length || hasCommonCanvas;\n};\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 const {\n TOOLTIP,\n HIGHLIGHTER,\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS\n } = SIDE_EFFECTS;\n\n const disabledSideEffects = [TOOLTIP, HIGHLIGHTER, ANCHORS, BRUSH_ANCHORS, PERSISTENT_ANCHORS];\n disabledSideEffects.forEach((sideEffect) => {\n this.changeSideEffectStateOnPropagation(sideEffect, sideEffectPolicy, 'sourceTargetPolicy');\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 sideEffectCheckers = Object.values(sourceSideEffects[se.name || se] || {});\n const { sourceIdentifiers, data: propagationData } = propagationInf;\n return sideEffectCheckers.length ? sideEffectCheckers.every(checker =>\n checker(propagationInf.propPayload, context, {\n sourceIdentifiers,\n propagationData\n })) : 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 isMutableAction = false;\n const context = this.context;\n if (!context.mount()) {\n return;\n }\n const {\n model: propagationData,\n entryRowIds,\n exitRowIds\n } = getSelectionRejectionModel(context.data(), data, isXandYMeasures(context), context._cachedValuesMap());\n const {\n enabled: enabledFn,\n sourceIdentifiers,\n action,\n payload: propPayload\n } = config;\n\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n const payload = payloadFn(context, propagationData, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFns = Object.values(sourceBehaviours[action] || sourceBehaviours['*'] || {});\n let enabled = filterFns.every(fn => fn(propPayload || {}, context, {\n sourceIdentifiers,\n propagationData\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: propagationData,\n entryRowIds,\n exitRowIds,\n propPayload,\n sourceIdentifiers,\n persistent: false,\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 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 { SpawnableSideEffect } from '@chartshq/muze-firebolt';\n\nexport const initSideEffects = (sideEffects, firebolt) => {\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = firebolt.context;\n return context.getDrawingContext();\n });\n sideEffects[key].valueParser(firebolt.context.valueParser());\n }\n }\n};\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","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 minOuterRadius: 10,\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","import { mergeRecursive, DataModel } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props';\nimport { sanitizeLayerDef, getValuesMap } from './helper';\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 meta: {\n preset: layerDef => sanitizeLayerDef(layerDef)\n }\n },\n [TRANSFORM]: {\n value: null\n },\n [LAYERS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n preset: (data, context) => {\n context._cachedValuesMap = ((model) => {\n let valuesMap = null;\n return () => {\n if (valuesMap) {\n return valuesMap;\n }\n valuesMap = getValuesMap(model, context);\n return valuesMap;\n };\n })(data);\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.cachedData()[0];\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n },\n [TRANSFORMEDDATA]: {\n value: null\n },\n width: {\n value: null\n },\n height: {\n value: null\n }\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n makeElement,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n CommonProps,\n toArray,\n STATE_NAMESPACES\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 getLayerAxisIndex,\n sanitizeLayerDef,\n createSideEffectGroup,\n resolveEncodingTransform,\n createRenderPromise,\n setAxisRange\n} from './helper';\nimport { renderGridLineLayers, attachDataToGridLineLayers } from './helper/grid-lines';\nimport { calculateDomainListener, listenerMap } from './listener-map';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport { initSideEffects, dispatchQueuedSideEffects, clearActionHistory } from './firebolt/helper';\nimport './styles.scss';\nimport localOptions from './local-options';\nimport { WIDTH, HEIGHT } from './enums/reactive-props';\n\nconst FORMAL_NAME = 'unit';\nconst unitNs = [STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * Visual Unit is hierarchical component created by {@link VisualGroup}. This component accepts layer definitions\n * and creates concrete layer instances from them, binds data and attaches axis to them. It also retreives the domain\n * from the layers and unions them and sets them on corresponding axis instances. This also creates the parent svg\n * groups for all the layers and delegates the rendering to all the layers.\n *\n * @public\n * @module VisualUnit\n * @class\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit.\n *\n * @param {Object} registry Component registry\n * @param {Object} dependencies Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n createRenderPromise(this);\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridLinesSelection = null;\n this._gridBandsSelection = null;\n this._gridLines = [];\n this._gridBands = [];\n this._layerAxisIndex = {};\n this._queuedLayerDefs = [];\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.registry(registry);\n this.cachedData([]);\n }\n\n static formalName () {\n return FORMAL_NAME;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys((localOptions)).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getQualifiedStateProps () {\n const unitState = VisualUnit.getState();\n return unitState.map((state, i) => Object.keys(state).map(prop => `${unitNs[i]}.${prop}`));\n }\n\n static getListeners () {\n return {\n store: [...listenerMap.map((d) => {\n const o = Object.assign({}, d);\n const localNs = unitNs[1];\n o.props = o.props.map(prop => `${localNs}.${prop}`);\n return o;\n }), {\n type: 'registerImmediateListener',\n props: [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`],\n listener: calculateDomainListener\n }, {\n type: 'registerImmediateListener',\n props: [`${unitNs[1]}.${WIDTH}`,\n `${unitNs[1]}.${HEIGHT}`,\n ...['x', 'y'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context, [, width], [, height]) => {\n if (width && height) {\n attachDataToGridLineLayers(context);\n }\n },\n subNamespace: (context) => {\n const { rowIndex, colIndex, namespace } = context.metaInf();\n return {\n [`${unitNs[1]}.${WIDTH}`]: namespace,\n [`${unitNs[1]}.${HEIGHT}`]: namespace,\n [`${groupNs}.domain.x`]: `${colIndex}0`,\n [`${groupNs}.domain.y`]: `${rowIndex}0`\n };\n }\n }],\n throwback: [\n {\n type: 'registerChangeListener',\n props: [CommonProps.ON_LAYER_DRAW],\n listener: (context, [, drawn]) => {\n if (drawn) {\n const firebolt = context.firebolt();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n context._renderedResolve();\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'drawn',\n formalName: 'layer'\n });\n }\n }\n ]\n };\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { throwback, fireboltDeps } = this._dependencies;\n const { namespace } = this.metaInf();\n\n store.addSubNamespace(namespace, FORMAL_NAME, this);\n throwback.addSubNamespace(namespace, FORMAL_NAME, this);\n transactor(this, localOptions, store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}`\n });\n\n this.firebolt(new UnitFireBolt(this, {\n physical: Object.assign({}, physicalActions, fireboltDeps.physicalActions),\n behavioural: Object.assign({}, behaviouralActions, fireboltDeps.behaviouralActions),\n physicalBehaviouralMap: actionBehaviourMap\n }, Object.assign({}, sideEffects, fireboltDeps.sideEffects), behaviourEffectMap));\n return this;\n }\n return this._store;\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 * Returns the instance of firebolt associated with this visual unit. Firebolt dispatches the behavioural actions\n * when any physical action happens on the elements of visual unit.\n *\n * @public\n *\n * @return {Firebolt} Instance of firebolt.\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 * Returns the unique id of this visual unit.\n *\n * @public\n * @return {string} Unique identifier.\n */\n id () {\n return this._id;\n }\n\n lockModel () {\n this.store().lockModel();\n return this;\n }\n\n unlockModel () {\n this.store().unlockModel();\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 *\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\n setAxisRange(this);\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n const firebolt = this.firebolt();\n initSideEffects(firebolt.sideEffects(), firebolt);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Caches all the datamodels in an array from the next `data()` call on visual unit until `clearCaching()` or\n * `resetData()` is called on it.\n *\n * @public\n * @return {VisualUnit} Instance of visual unit.\n */\n\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n * Clears all the previous cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n * Returns the drawing information from visual unit.Drawing context contains the dimensions of unit and the svg\n * container of the visual unit.\n *\n * @public\n *\n * @return {Object} Drawing information.\n * ```\n * {\n * htmlContainer: // Html container of svg container of the visual unit\n * svgContainer: // Root svg container\n * width: // Width of the visual unit\n * height: // Height of the visual unit\n * sideEffectGroup: // Svg group for drawing side effect elements.\n * parentContainer: // Parent html container of the visual unit.\n * xOffset: // x offset space from the starting x position of the container,\n * yOffset: // y offset space from the starting y position of the container\n * }\n * ```\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n const { el, dimensions } = this.parentContainerInf();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: el,\n parentContainerDimensions: dimensions,\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n *\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.axes().map(axis => axis.serialize())\n };\n }\n\n mount (...mount) {\n if (mount.length) {\n this._mount = mount[0];\n this.render(mount[0]);\n this.firebolt().mapActionsAndBehaviour();\n return this;\n }\n return this._mount;\n }\n\n /**\n * Adds a new layer to the visual unit. It takes a layer definition and creates layer instances from them. It does\n * not render the layers. It returns the layer instances in an array. If the layer definition is a composite layer,\n * then multiple layer instances will be returned in the array.\n *\n * To add a layer in the unit,\n * ```\n * unit.addLayer({\n * name: 'bullet',\n * mark: 'bar',\n * encoding: {\n * x: 'Year',\n * y: 'Acceleration',\n * color: 'Origin'\n * }\n * });\n * ```\n * @public\n * @param {Object} layerDef Definition of new layer.\n *\n * @return {Array} Array of layer instances.\n */\n addLayer (layerDefinition) {\n if (layerDefinition instanceof Function) {\n this._queuedLayerDefs.push(layerDefinition);\n return this;\n }\n const layerDefinitions = sanitizeLayerDef(toArray(layerDefinition));\n\n const layersMap = this._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: this\n }\n };\n let layerIndex = 0;\n const metaInf = this.metaInf();\n const layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef) => {\n const definition = layerDef.def;\n const markId = definition.name;\n const defArr = toArray(definition);\n const namespaces = [];\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n const namespace = `${metaInf.namespace}-${def.mark}-${getUniqueId()}`;\n namespaces.push(namespace);\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(this, definition, layersMap[markId], namespaces);\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\n store.unit = this;\n const layerdeps = {};\n const layersArr = [].concat(...Object.values(this._layersMap));\n layersArr.forEach((layer) => {\n const alias = layer.alias();\n store.layers[alias] = layer;\n layerdeps[alias] = [];\n });\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n this._layerDepOrder = layerdeps;\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, getLayerAxisIndex(layers, this.fields()));\n this.layers(layersArr);\n return layers;\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n remove () {\n const formalName = this.constructor.formalName();\n const { lifeCycleManager, throwback } = this._dependencies;\n const { namespace } = this.metaInf();\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n const layers = this.layers();\n this.store().removeSubNamespace(namespace, formalName);\n throwback.removeSubNamespace(namespace, FORMAL_NAME);\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: layers, action: 'beforeremove', formalName: 'layer' });\n [...layers, ...this._gridLines, ...this._gridBands].forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: 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 *\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 * Resets the data of visual unit to original data model. It also clears the cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n *\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 getDataDomain () {\n return this.store().get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`, this.metaInf().namespace);\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n * Returns an array of layer instances which matches the supplied mark type.\n *\n * @public\n *\n * @param {string} type Mark type of layer.\n *\n * @return {Array} Array of layer instances.\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n * Returns the layer instance which matches the supplied layer name. If no layer is found, then it returns\n * undefined.\n *\n * @public\n * @param {string} name Name of layer.\n *\n * @return {VisualUnit} Layer instance.\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n * Returns the point located nearest to the supplied x and y position. It returns the unique identifiers of the\n * point. This function also accepts an additional configuration `getAllPoints` inside `config` object in the third\n * argument which if set to true, then it returns the identifiers of all the points which falls on the nearest\n * x value or y value if any one of the field is a dimension. Additionally, a target property is also returned\n * which contains the identifier of the nearest point. If no nearest point is found, then it returns identifier\n * as null.\n *\n * @public\n *\n * @param {number} x X Position of the point from where nearest point is to be found.\n * @param {number} y Y Position of the point from where nearest point is to be found.\n * @param {Object} config Additional configuration options.\n * @param {boolean} config.getAllPoints If true, then returns all the points nearest to the x value or y value if\n * it is dimension.\n * @param {Object} config.data Data associated with the nearest point.\n * @return {Object} Nearest point information\n * ```\n * {\n * id: [['Origin'], ['USA'], ['Japan']], // Identifiers of all the points closest to the x value.\n * target: [['Origin'], ['Japan']] // Identifier of the nearest point.\n * }\n * ```\n */\n getNearestPoint (x, y, config) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && config.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, config);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, config) || { 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 * Get the information of all the marks such as x, y position and size from supplied identifiers. It\n * returns an array of points whose data matches the given identifiers.\n *\n * @public\n *\n * @param {Array|Object} identifiers Field names and their corresponding values.\n * ```\n * identifiers can be given in an array of array,\n * ['Origin', 'Name'], // Names of the fields supplied in first array\n * ['USA', 'ford'], // Data values of each field supplied in rest of the arrays.\n * ['Japan', 'ford']\n * or in an object,\n * {\n * Origin: ['USA']\n * }\n * ```\n * @param {Object} config Optional configurations which decides which information of the mark will\n * be retrieved.\n * @param {boolean} [config.getAllAttrs = false] If true, then returns all the information of each mark.\n * @param {boolean} [config.getBBox = false] If true, then returns the bounding box of each mark.\n *\n * @return {Array} Array of objects containing the information of each point.\n * ```\n * By default, the method returns the array of points in this structure,\n * [\n * {\n * x: 20,\n * y: 100,\n * width: 200,\n * height: 100\n * }\n * ]\n * If 'config.getAllAttrs' is true, then it returns all the information of each mark,\n * [\n * // Positions of mark on initial state of transition.\n * enter: {\n * x: 0,\n * y: 0\n * },\n * // Final positions of the mark\n * update: {\n * x: 20,\n * y: 10\n * },\n * style: // css styles of each mark\n * source: [200, 'USA'] // Row information of each mark\n * id: 20 // Row id of each mark\n * ]\n * ```\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 * Removes the layer instance which matches the supplied layer name.\n *\n * @public\n * @param {string} name Name of layer\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n * Removes all the layer instances which matches the supplied mark type.\n *\n * @public\n * @param {string} type Mark type of layer.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n}\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 * This is a wrapper on top of multiple variables which are of same type but they are shown in the same axis.This is\n * required in case of range plots or ohlc plots where one plot is mapped to multiple measure fields. At that time,\n * we need to create a composed variable from multiple variables. This class just wraps them into one variable instance\n * and provides methods to get the type and other common functionalities which can be performed on a simple variable\n * instance.\n *\n * @public\n * @class ComposeVars\n */\nclass ComposedVars extends Variable {\n\n /**\n * Creates an instance of ComposeVars.\n *\n * @param {Array} vars Array of SimpleVars.\n */\n constructor (...vars) {\n super();\n this.vars(vars);\n }\n\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n * Get all the field names from composed variable instance.\n *\n * @public\n * @return {Array} Array of field names.\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n * Type of field associated with this composed variable.\n *\n * @return {string} Type of variable (Measure/Dimension).\n */\n type () {\n return this.vars()[0].type();\n }\n\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n * Returns the number formatter function of the variable.\n *\n * @return {Function} Number formatter function of the variable.\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n format (values) {\n return this.vars()[0].format(values);\n }\n\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.vars()[0]].def;\n }\n\n /**\n * Returns the subtype of the fields associated with this variable instance.\n *\n * @public\n * @return {string} Subtype of the variable.\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n * Returns the consecutive minimum difference of the field values.\n *\n * @public\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n\n /**\n * Returns the display name of the fields.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return this.vars().map(d => d.displayName()).join(',');\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter, retrieveFieldDisplayName, DimensionSubtype } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n * This is a wrapper on top of fields passed in rows or columns in canvas. This is used to get the type of field or\n * get min difference from the field values.\n *\n * @public\n * @class SimpleVariable\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n * Creates an instance of simple variable instance.\n *\n * @param {string} name Field name.\n */\n constructor (name) {\n super();\n this.oneVar(name);\n }\n\n /**\n * Gets the field name associated with this variable instance.\n *\n * @public\n * @return {string} Name of the field.\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n toString () {\n return this.oneVar();\n }\n\n /**\n * Gets the number formatter function of this variable.\n *\n * @public\n * @return {Function} Number formatter function.\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()];\n return formatter.numberFormat();\n } return val => val;\n }\n\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n * Returns a formatter function which transforms the input value to its original form.\n *\n * @public\n * @return {Function} Returns raw formatter function.\n */\n rawFormat () {\n if (this.subtype() === DimensionSubtype.TEMPORAL) {\n const dateFormat = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n return val => DateTimeFormatter.formatAs(val, dateFormat);\n }\n return val => val;\n }\n\n /**\n * Return the field names associated with this variable instance.\n *\n * @public\n * @return {Array} Array of fields.\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n * Returns the type of the variable. Whether it is measure or dimension.\n *\n * @public\n * @return {string} Type of variable.\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n * Returns the subtype of the variable. Subtype can be categorical or temporal. If no subtype is found, then it\n * returns the type of the variable.\n *\n * @public\n * @return {string} Subtype of variable.\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n * Returns the minimum consecutive difference between the data values of this variable.\n *\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].minimumConsecutiveDifference();\n }\n\n /**\n * Returns true if two variable instances are same.If both variable has the same field names, they are equal.\n *\n * @return {Boolean} Whether two variable instances are same.\n */\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n\n /**\n * Returns the display name of the field.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return retrieveFieldDisplayName(this.data(), this.oneVar());\n }\n\n /**\n * Returns the schema defination of the field.\n *\n * @return {Object} schema def\n */\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.oneVar()].def;\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 *\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 *\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 *\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 *\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 *\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 *\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 temporal: ScaleType.TIME,\n measure: ScaleType.LINEAR,\n continuous: ScaleType.LINEAR\n};\n","import { mergeRecursive, getObjProp } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { ENCODING } from '@chartshq/visual-layer';\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, COLOR, SHAPE, SIZE, ANGLE0 } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst getAxisConfig = (axisInfo, field, axesCreators, indices, facetFields) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const { rowIndex, columnIndex } = indices;\n const rawUserAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n\n // Change config object to a function if not already one\n const userAxisConfigFn = typeof rawUserAxisConfig !== 'function' ?\n () => rawUserAxisConfig : rawUserAxisConfig;\n const userAxisConfig = userAxisConfigFn(rowIndex, columnIndex, {\n axisFields: field.getMembers(),\n facetFields\n });\n\n // If current config does not specifes config for an axis, retain old config\n if (!userAxisConfig) {\n return {};\n }\n\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.displayName(),\n field: field.toString(),\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n showAxisName: true,\n show: true,\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 *\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\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 [min[0], max[0]],\n [min[1], max[1]]\n ];\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n *\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo, indices, facetFields) => {\n let axisKey;\n const { groupAxes, valueParser } = axesInfo;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n const commonAxisKey = getAxisKey(axisType, index);\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators, indices, facetFields);\n\n let axis;\n if (!map.has(axisKey)) {\n axis = createSimpleAxis(axisConfig, field, axesCreators);\n } else {\n axis = map.get(axisKey);\n axis._rotationLock = false;\n axis.config(axisConfig);\n }\n axis.valueParser(valueParser);\n currentAxes.push(axis);\n map.set(axisKey, axis);\n });\n\n if (currentAxes.length) {\n map.set(commonAxisKey, currentAxes);\n groupAxes.add(commonAxisKey);\n }\n\n return currentAxes;\n};\n\nexport const sanitizeIndividualLayerConfig = (encodingConfigs, def) => {\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\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 }\n });\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 *\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 *\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 *\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\nexport const resolveAxisConfig = (context, fieldInf, axisInfo) => {\n const { rowIndex, columnIndex, axesObj } = axisInfo;\n const { config, facetFields, resolver } = context;\n const resolverAxes = resolver.axes();\n const { RADIUS, ANGLE } = ENCODING;\n [RADIUS, ANGLE, ANGLE0].forEach((enc) => {\n const axesArr = resolverAxes[enc];\n if (!axesArr[rowIndex]) {\n axesArr[rowIndex] = [];\n }\n axesArr[rowIndex][columnIndex] = axesObj[enc];\n const axisConfig = getObjProp(config.axes, enc) || {};\n\n axesObj[enc].forEach((axis, i) => {\n let userConfig = axisConfig;\n if (axisConfig instanceof Function) {\n userConfig = axisConfig(rowIndex, columnIndex, {\n axisFields: [fieldInf[enc][i]],\n facetFields\n });\n }\n axis.config(userConfig);\n });\n });\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n unionDomain,\n COORD_TYPES,\n toArray,\n sortCategoricalField\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport {\n generateAxisFromMap,\n getDefaultMark,\n getIndex,\n getLayerConfFromFields,\n getAdjustedDomain,\n sanitizeIndividualLayerConfig\n} from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\nconst CARTESIAN = COORD_TYPES.CARTESIAN;\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n *\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\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 { resolver, facetFields, geomCell } = context;\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, {\n groupAxes: axis === X ? xAxes : yAxes,\n valueParser: resolver.valueParser()\n }, indices, facetFields);\n });\n geomCell.axes(geomCellAxes);\n return geomCellAxes;\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const resolver = context.resolver();\n const units = resolver.units();\n const domains = {\n 0: {},\n 1: {}\n };\n const config = context.config();\n const fieldsObj = {\n 0: {},\n 1: {}\n };\n\n for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) {\n const unitsArr = units[rIdx];\n for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) {\n const unit = unitsArr[cIdx];\n const axisFields = unit.fields();\n const encodingDomains = unit.getDataDomain();\n ['x', 'y'].forEach((axisType, axisTypeIndex) => {\n const fieldArr = axisFields[axisType];\n fieldArr.forEach((field, axisIndex) => {\n const key = !axisTypeIndex ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`;\n const dom = encodingDomains[axisType];\n const typeOfField = field.subtype();\n fieldsObj[axisTypeIndex][key] = field;\n\n if (dom && Object.keys(dom).length !== 0) {\n domains[axisTypeIndex][key] = unionDomain([(domains[axisTypeIndex] &&\n domains[axisTypeIndex][key]) || [], dom[`${field}`]], typeOfField);\n }\n });\n });\n }\n }\n\n const { x: xAxes, y: yAxes } = resolver.axes();\n store.lockModel();\n [xAxes, yAxes].forEach((axesArr, axisType) => {\n axesArr.forEach((axes, idx) => {\n let key;\n let domain = [];\n let adjustedDomain = [];\n const min = [];\n const max = [];\n const typeOfAxis = axes[0].constructor.type();\n\n if (axes.length > 1 && typeOfAxis === ScaleType.LINEAR && axes[0].config().alignZeroLine) {\n axes.forEach((axis, i) => {\n key = !axisType ? `0${idx}${i}` : `${idx}0${i}`;\n domain = domains[axisType][key];\n min[i] = domain[0];\n max[i] = domain[1];\n });\n adjustedDomain = getAdjustedDomain(max, min);\n } else if (typeOfAxis === ScaleType.BAND) {\n /* Sort categorical fields to ensure consistency across all rows\n only if sorted by user */\n key = !axisType ? `0${idx}0` : `${idx}00`;\n const currentFieldName = fieldsObj[axisType][key].oneVar();\n const sortingOrder = config.sort && config.sort[currentFieldName];\n\n if (sortingOrder) {\n domains[axisType][key].sort((a, b) => sortCategoricalField(sortingOrder, a, b));\n }\n }\n\n axes.forEach((axis, index) => {\n key = !axisType ? `0${idx}${index}` : `${idx}0${index}`;\n domain = adjustedDomain[index] || domains[axisType][key];\n\n domain && axis.domain(domain);\n const type = !axisType ? 'x' : 'y';\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}`, domain, `${idx}${index}`);\n });\n });\n });\n store.unlockModel();\n }\n\n /**\n *\n *\n * @param {*} fields\n *\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 *\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n *\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 sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\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 this.sanitizeLayerConfig(retinalConfig, layerConfig);\n }\n}\n","import { AngleAxis, RadiusAxis } from '@chartshq/muze-axis';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n GROUP_BY_FUNCTIONS,\n COORD_TYPES,\n toArray,\n getObjProp,\n defaultValue\n} from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { SIZE, MEASURE, ARC, COLOR } from '../enums/constants';\nimport { sanitizeIndividualLayerConfig, resolveAxisConfig } from './encoder-helper';\nimport { SimpleVariable } from '../variable';\n\nconst POLAR = COORD_TYPES.POLAR;\nconst { RADIUS, ANGLE, ANGLE0 } = ENCODING;\n\nconst axesCls = {\n [RADIUS]: RadiusAxis,\n [ANGLE]: AngleAxis,\n [ANGLE0]: AngleAxis\n};\n\nconst getSizeMultiplier = (sizeVal, sizeAxis) => {\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n return sizeMultiplier;\n};\n\nconst setRadiusFactor = (context) => {\n const data = context.data();\n const sizeField = context.retinalFields().size.field;\n const { radius, size } = context.axes();\n\n if (sizeField && radius && radius.length) {\n const sizeFieldIndex = data.getFieldsConfig()[sizeField].index;\n const sizeVal = data.getData().data.reduce((acc, val) => acc + val[sizeFieldIndex], 1);\n const sizeMultiplier = getSizeMultiplier(sizeVal, size[0]);\n radius.forEach(axis => axis.setRadiusFactor(sizeMultiplier));\n }\n};\n\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 *\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\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 const axesObj = {};\n const { geomCell, resolver } = context;\n const layers = resolver.matrixLayers();\n const resolverAxes = resolver.axes();\n const cellLayers = layers[rowIndex][columnIndex];\n const fields = {\n radius: {},\n angle: {},\n angle0: {}\n };\n\n cellLayers.forEach((layerConf) => {\n const def = layerConf.def;\n [ANGLE, ANGLE0, RADIUS].forEach((enc) => {\n const field = getObjProp(def.encoding, enc, 'field');\n field && (fields[enc][field] = 0);\n });\n });\n const fieldInf = {};\n const varInstances = {};\n\n for (const encType in fields) {\n fieldInf[encType] = Object.keys(fields[encType]);\n axesObj[encType] = [];\n varInstances[encType] = [];\n fieldInf[encType].forEach((field, i) => {\n varInstances[encType][i] = new SimpleVariable(field);\n axesObj[encType][i] = new axesCls[encType]();\n });\n axesObj[encType][axesObj[encType].length] = new axesCls[encType]();\n }\n resolveAxisConfig(context, fieldInf, {\n axesObj,\n rowIndex,\n columnIndex\n });\n geomCell.axes(axesObj)\n .fields(Object.assign({}, varInstances, geomCell.fields()));\n resolverAxes.pie = pieAxes;\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n *\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 unionUnitDomains (context) {\n const store = context.store();\n store.lockModel();\n const domainProps = {\n radius: [],\n angle: [],\n angle0: []\n };\n const axes = context.resolver().axes();\n context.matrixInstance().value.each((cell, rIdx, cIdx) => {\n const unit = cell.valueOf();\n const unitDomains = unit.getDataDomain();\n const fields = unit.fields();\n setRadiusFactor(unit);\n [RADIUS, ANGLE, ANGLE0].forEach((encType) => {\n const encodingFields = fields[encType];\n const domains = unitDomains[encType] || {};\n encodingFields.forEach((field, i) => {\n !domainProps[encType][rIdx] && (domainProps[encType][rIdx] = []);\n !domainProps[encType][rIdx][cIdx] && (domainProps[encType][rIdx][cIdx] = []);\n domainProps[encType][rIdx][cIdx][i] = domains[`${field}`] || [];\n });\n });\n });\n\n for (const key in domainProps) {\n const specificAxes = axes[key];\n specificAxes.forEach((axesArr, rIdx) => {\n axesArr.forEach((axisArr, cIdx) => {\n axisArr.forEach((axis, i) => {\n axis.domain(defaultValue(getObjProp(domainProps[key], rIdx, cIdx, i), []));\n\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${key}`, domainProps[key],\n `${rIdx}-${cIdx}`);\n });\n });\n });\n }\n store.unlockModel();\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n *\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.groupedModel;\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]: GROUP_BY_FUNCTIONS.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 *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\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 const sanitizedConfig = this.sanitizeLayerConfig(retinalConfig, layerConfig);\n this.layers(sanitizedConfig);\n return sanitizedConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n *\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 sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n def.forEach((conf) => {\n const encoding = conf.encoding || (conf.encoding = {});\n !encoding.angle && (encoding.angle = {});\n const angleField = getObjProp(encoding.angle, 'field');\n const angle0Field = getObjProp(encoding.angle0, 'field');\n if (!angleField) {\n Object.assign(encoding.angle, {\n field: encodingConfigs.color && encodingConfigs.color.field\n });\n }\n if (!angle0Field) {\n !encoding.angle0 && (encoding.angle0 = {});\n Object.assign(encoding.angle0, {\n field: encoding.angle.field\n });\n }\n });\n\n layerConfig.push(config);\n });\n return layerConfig;\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 *\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 *\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} context\n *\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, FieldType, COORD_TYPES, getObjProp, DataModel } from 'muze-utils';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\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 ARC,\n RADIUS,\n ANGLE\n} from '../enums/constants';\n\nconst POLAR = COORD_TYPES.POLAR;\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, ...params) => `${axisName}-axis-${params.join('-')}`;\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 *\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 *\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 *\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager }) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({\n type: HEADER,\n className: `${classPrefix}-grid-headers`\n }, {\n 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 *\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 *\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d.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\nconst hasPolarEncodings = layerConf => layerConf.mark === ARC || [RADIUS, ANGLE].some(field =>\n getObjProp(layerConf.encoding, field));\n\n/**\n *\n *\n * @param {*} layers\n *\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers.length) {\n // Figuring out the kind of layers the group will have\n encoder = layers.some(layerConf => hasPolarEncodings(layerConf)) ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n *\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 *\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\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/**\n * This method sorts the facets fields inplace if field is of categorical type\n * @param {Object} facets Array of facets\n * @param {Array} keys Array of the facet field values\n * @param {Object} config configuration object\n * @return {Array} Returns sorted facets\n */\nexport const sortFacetFields = (facets, keys, config) => {\n /**\n * Check if the facet sorted by the user is plotted\n * If an incorrect field is sorted, return the keys as is\n */\n const schema = [];\n const facetNames = [];\n const sortInfo = [];\n const sortConfig = config.sort;\n\n facets.forEach((facet) => {\n const name = `${facet}`;\n const facetSortConfig = sortConfig[name];\n\n if (facetSortConfig) {\n sortInfo.push([name, facetSortConfig]);\n } else {\n sortInfo.push([name, null]);\n }\n schema.push(facet.getSchemaDef());\n });\n\n return new DataModel([facetNames, ...keys], schema).getData({ sort: sortInfo }).data;\n};\n\nexport const removeExitCells = (resolver) => {\n const exitCells = resolver.cacheMaps().exitCellMap;\n const store = resolver.store();\n const qualifiedStateProps = [].concat(...VisualUnit.getQualifiedStateProps(),\n ...BaseLayer.getQualifiedStateProps());\n store.lockCommits(qualifiedStateProps);\n exitCells.forEach((placeholder) => {\n placeholder.remove();\n });\n store.unlockCommits(qualifiedStateProps);\n};\n","import { DataModel } from 'muze-utils';\nimport { sortFacetFields } from './group-utils';\n\n/**\n* Gets name of fields form the variables\n*\n* @param {*} fields1\n* @param {*} [fields2=[]]\n*\n*/\nconst getFieldNames = fieldVar => fieldVar.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []);\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareProjectionInfo = (fieldInfo) => {\n const {\n colProjections,\n rowProjections\n } = fieldInfo;\n const uniqueFields = [];\n let indices = [];\n let projections = [];\n\n rowProjections.forEach((rowProj, rIndex) => {\n const newRIndex = rIndex;\n colProjections.forEach((colProj, cIndex) => {\n const newCIndex = cIndex;\n const newRowProj = getFieldNames(rowProj);\n const newColProj = getFieldNames(colProj);\n\n uniqueFields.push([...newRowProj, ...newColProj]);\n indices.push({ rowIndex: newRIndex, colIndex: newCIndex });\n projections.push({ rowFields: rowProj, columnFields: colProj });\n });\n });\n indices = indices.length ? indices : [{ rowIndex: 0, colIndex: 0 }];\n projections = projections.length ? projections : [{ rowFields: [], columnFields: [] }];\n return { uniqueFields, indices, projections };\n};\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareFacetInfo = (fieldInfo) => {\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const rowFacetNames = getFieldNames(rowFacets);\n const colFacetNames = getFieldNames(colFacets);\n const allFacets = [...rowFacetNames, ...colFacetNames];\n\n return { rowFacetNames, colFacetNames, allFacets, rowFacets, colFacets };\n};\n\n/**\n*\n*\n* @param {*} context\n* @param {*} facetNames\n* @param {*} hashMap\n* @param {*} keys\n* @param {*} index\n* @returns\n*/\nconst prepareHashMaps = (context, facetNames, hashMap, keys, index) => {\n const rowKey = [];\n facetNames.forEach((name) => {\n const key = context._derivation[context._derivation.length - 1].meta.keys[name];\n\n rowKey.push(key);\n });\n\n const joinedRowKey = rowKey.join(',');\n\n if (hashMap[joinedRowKey] === undefined) {\n hashMap[joinedRowKey] = index++;\n keys.push(rowKey);\n }\n return rowKey;\n};\n\nconst createJoinedKeys = keys => keys.map(e => ({\n keyArr: e,\n joinedKey: e.join(',')\n}));\n\n/**\n*\n*\n* @param {*} splitModels\n* @param {*} facetInfo\n* @returns\n*/\nconst getSplitModelHashMap = (splitModels, facetInfo, config) => {\n const {\n rowFacetNames,\n colFacetNames,\n rowFacets,\n colFacets\n } = facetInfo;\n\n const rowKeyHashMap = {};\n const colKeyHashMap = {};\n\n const rowKeys = [];\n const colKeys = [];\n const rowIndex = 0;\n\n const splitModelsHashMap = {};\n\n splitModels.forEach((splitContext) => {\n const rowKey = prepareHashMaps(splitContext, rowFacetNames, rowKeyHashMap, rowKeys, rowIndex);\n const colKey = prepareHashMaps(splitContext, colFacetNames, colKeyHashMap, colKeys, 1);\n\n splitModelsHashMap[`${rowKey}-${colKey}`] = splitContext;\n });\n\n return {\n splitModelsHashMap,\n rowKeys: createJoinedKeys(sortFacetFields(rowFacets, rowKeys, config)),\n colKeys: createJoinedKeys(sortFacetFields(colFacets, colKeys, config))\n };\n};\n\n/**\n * Formats row or columns keys with the provided formatter.\n *\n * @param {Array} keys - The collection of row or column keys.\n * @param {Array} formatterList - The list of corresponding formatter.\n */\nconst formatKeys = (keys, formatterList) => {\n const formattedKeys = [];\n keys.forEach((rKeys, rIdx) => {\n formattedKeys[rIdx] = [];\n rKeys.forEach((key, idx) => {\n formattedKeys[rIdx][idx] = formatterList[idx](key);\n });\n });\n return formattedKeys;\n};\n\n/**\n*\n*\n* @param {Object} context\n* @param {Object} fieldInfo\n* @returns\n*/\nconst splitByColumn = (context, optionalProjections) => {\n const {\n matrix,\n dataModel,\n rowIndex,\n colIndex,\n facetInfo,\n projectionInfo,\n geomCellCreator\n } = context;\n const {\n indices,\n uniqueFields,\n projections\n } = projectionInfo;\n\n const commonFields = optionalProjections;\n\n dataModel.splitByColumn(uniqueFields, commonFields).forEach((model, i) => {\n let { rowIndex: row, colIndex: col } = indices[i];\n row += rowIndex;\n col += colIndex;\n\n matrix[row] = matrix[row] || [];\n\n const projectionIndexObject = {\n indices: {\n rowIndex: row,\n columnIndex: col\n },\n projections: projections[i]\n };\n\n matrix[row][col] = geomCellCreator(model, projectionIndexObject, facetInfo);\n });\n const lastIndex = indices[indices.length - 1];\n\n return {\n rowIndex: lastIndex.rowIndex + rowIndex,\n colIndex: lastIndex.colIndex + colIndex\n };\n};\n\nconst createColumnDataModels = (colContext, fieldInfo, sourceDM) => {\n let context = {};\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n const {\n rowKeyArr,\n rowKey,\n colKeyObj,\n newRowIndex,\n splitModelsHashMap,\n currentColumnIndex\n } = colContext;\n\n const { keyArr: colKeyArr, joinedKey: colKey } = colKeyObj;\n const hashMapKey = splitModelsHashMap[`${rowKey}-${colKey}`];\n\n if (hashMapKey) {\n context = { dataModel: hashMapKey };\n } else {\n const emptyDm = new DataModel([], sourceDM.getData().schema);\n context = { dataModel: emptyDm };\n }\n\n context = {\n ...context,\n ...colContext,\n facetInfo: {\n rowFacets: [rowFacets, rowKeyArr],\n colFacets: [colFacets, colKeyArr]\n },\n rowIndex: newRowIndex,\n colIndex: currentColumnIndex\n };\n const dataModels = splitByColumn(context, fieldInfo.optionalProjections);\n\n return {\n columnIndex: dataModels.colIndex + 1,\n rowIndex: dataModels.rowIndex\n };\n};\n\nconst createRowDataModels = (rowContext, fieldInfo, sourceDM) => {\n let currentColumnIndex = 0;\n let rowIndexForCurrentKey = 0;\n const {\n colKeys,\n rowKeyObj,\n currentRowIndex\n } = rowContext;\n const newRowIndex = currentRowIndex;\n const { keyArr: rowKeyArr, joinedKey: rowKey } = rowKeyObj;\n const colContext = {\n ...rowContext,\n rowKeyArr,\n rowKey,\n newRowIndex\n };\n rowIndexForCurrentKey = currentRowIndex;\n if (colKeys.length) {\n colKeys.forEach((colKeyObj) => {\n colContext.colKeyObj = colKeyObj;\n colContext.currentColumnIndex = currentColumnIndex;\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n });\n } else {\n colContext.colKeyObj = { keyArr: [], joinedKey: '' };\n colContext.currentColumnIndex = currentColumnIndex;\n\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n }\n return {\n rowIndex: ++rowIndexForCurrentKey\n };\n};\n\n/**\n* Gets Matrixes for corresponding datamodel, facets and projections\n*\n* @param {Object} dataModel input datamodel\n* @param {Object} fieldInfo Information about the fields\n* @param {Function} geomCellCreator 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, geomCellCreator, globalConfig) => {\n let currentRowIndex = 0;\n const matrix = [];\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const projectionInfo = prepareProjectionInfo(fieldInfo);\n const facetInfo = prepareFacetInfo(fieldInfo);\n const allSplitModels = dataModel.splitByRow(facetInfo.allFacets);\n\n const {\n splitModelsHashMap,\n rowKeys,\n colKeys\n } = getSplitModelHashMap(allSplitModels, facetInfo, globalConfig);\n\n const generalContext = {\n matrix,\n geomCellCreator,\n projectionInfo,\n splitModelsHashMap,\n colKeys\n };\n if (rowKeys.length) {\n rowKeys.forEach((rowKeyObj) => {\n const rowContext = {\n ...generalContext,\n rowKeyObj,\n currentRowIndex\n };\n const { rowIndex } = createRowDataModels(rowContext, fieldInfo, dataModel);\n\n currentRowIndex = rowIndex;\n });\n } else if (colKeys.length) {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n\n colKeys.forEach((colKeyObj) => {\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj,\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n });\n } else {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj: { keyArr: [], joinedKey: '' },\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n }\n\n const formattedColKeys = formatKeys(colKeys.map(e => e.keyArr),\n colFacets.map(facetField => facetField.rawFormat()));\n const formattedRowKeys = formatKeys(rowKeys.map(e => e.keyArr),\n rowFacets.map(facetField => facetField.rawFormat()));\n\n // Getting column keys\n const transposedColKeys = formattedColKeys.length > 0 ? formattedColKeys[0].map((col, i) =>\n formattedColKeys.map(row => row[i])) : formattedColKeys;\n\n return { matrix, rowKeys: formattedRowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport {\n getObjProp,\n FieldType,\n retrieveNearestGroupByReducers,\n mergeRecursive,\n createSelection,\n DataModel\n} from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n getFieldsFromSuppliedLayers,\n extractFields,\n removeExitCells\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP,\n BOTTOM, PRIMARY, SECONDARY, X, Y, TEMPORAL } from '../enums/constants';\nimport { SimpleVariable } from '../variable';\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 *\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 sortedFields = config.sort;\n const {\n entryCellMap,\n exitCellMap\n } = cacheMaps;\n const layerConfigArr = encoder.getLayerConfig({ columnFields, rowFields }, suppliedLayers || [],\n context.retinalConfig);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const facetFields = allFacets.slice();\n facetFields[0] = facetFields[0].map(facetField => facetField.oneVar());\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\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n // Sort datamodel if user has sorted a field\n const sortConfig = Object.keys(sortedFields).map(field => [field, sortedFields[field]]);\n if (sortConfig.length) {\n datamodel = datamodel.sort(sortConfig, { saveChild: true });\n }\n\n geomCell.data(datamodel)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n\n encoder.createAxis(axesCreators, fieldInfo, Object.assign({}, context, { geomCell, facetFields }));\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\nconst extractAxisIndex = id => getObjProp(id.match(/^[0-9]*?(?=-)/g), 0);\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 */\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((currObj, 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 }).sort((a, b) => extractAxisIndex(a[0]) - extractAxisIndex(b[0]));\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.rowsSecondary = createAxisCells(selObj.rowSec, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n selObj.columnsSecondary = createAxisCells(selObj.colSec, 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) => {\n const textCell = new cells.TextCell({}, { labelManager });\n textCell.source(label);\n return textCell;\n }, headers, (key, i) => key + i);\n\nconst extractFacetIndex = id => id.split('-').pop();\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n *\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facet\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n\n const selObjUpdater = createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys,\n (keySet, i) => `${keySet.join(',')}-${i}`)\n .sort((a, b) => extractFacetIndex(a[0]) - extractFacetIndex(b[0]));\n\n return selObjUpdater.map((keySet, data) => {\n let textCells = createTextCells(null, data, cells, labelManager);\n textCells = textCells.map((cell, k) => cell.source(k).config(facet));\n return textCells;\n });\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 facet,\n encoders,\n resolver\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 keys = keys.map(arr => arr.map(val => resolver.valueParser()(val)));\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.facet = facet.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facet = facet.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n\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 facet,\n encoders,\n resolver\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\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]\n .map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n let rowPriority = rowSec.length ? 1 : -1;\n rowPrime.length && rowPriority++;\n let colPriority = colSec.length ? 1 : -1;\n colPrime.length && colPriority++;\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 colPriority,\n rowPriority\n };\n};\n\nconst getAxisFields = (projections, fieldHolder = []) =>\n projections.reduce((acc, item) =>\n [...acc, ...item.reduce((ac, field) =>\n (field instanceof SimpleVariable ? [...ac, field.oneVar()] : ac), [])], fieldHolder);\n\nconst sortDmTemporalFields = (resolver, datamodel) => {\n let axisFields = [];\n const projections = resolver.projections();\n axisFields = getAxisFields(projections.rowProjections, getAxisFields(projections.colProjections));\n\n const fieldConfig = datamodel.getFieldsConfig();\n const temporalFields = axisFields.reduce((acc, field) =>\n ((fieldConfig[field].def.subtype === TEMPORAL) ? [...acc, [field]] : acc), []);\n return temporalFields.length ? datamodel.sort(temporalFields, { saveChild: true }) : datamodel;\n};\n\nconst transformDataModel = (dataModel, config, resolver) => {\n let groupedModel;\n\n const fieldsConfig = dataModel.getFieldsConfig();\n const resolvedData = resolver.data();\n const { groupBy, suppliedLayers, facetsAndProjections } = config;\n\n if (resolvedData instanceof DataModel) {\n resolvedData.dispose();\n }\n groupedModel = dataModel.project(dataModel.getSchema().map(d => d.name));\n resolver.data(groupedModel);\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(suppliedLayers, groupedModel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n const dimensions = allFields.filter(field =>\n getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n const measureNames = Object.keys(groupedModel.getFieldspace().getMeasure());\n const nearestAggFns = retrieveNearestGroupByReducers(groupedModel, ...measureNames);\n const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns);\n\n groupedModel = groupedModel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns)\n .project(allFields);\n }\n // sort temporal fields if any in the given rows and columns\n groupedModel = sortDmTemporalFields(resolver, groupedModel);\n return groupedModel;\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 facet: globalConfig.facet || {},\n axisFrom: globalConfig.axisFrom || {},\n selection,\n resolver\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 retinalConfig: {\n color: config.color,\n size: config.size,\n shape: config.shape\n }\n };\n\n const groupedModel = transformDataModel(datamodel, {\n facetsAndProjections,\n suppliedLayers: valueCellContext.suppliedLayers,\n groupBy\n }, resolver);\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, globalConfig);\n\n removeExitCells(resolver);\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n resolver.createUnits(componentRegistry, config);\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const {\n rows,\n columns,\n selectionObj,\n rowPriority,\n colPriority\n } = 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 priority: {\n row: rowPriority,\n col: colPriority\n },\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","export const RESOLVER_PROPS = {\n dependencies: {},\n units: {},\n datamodelTransform: {},\n layerConfig: {},\n matrixLayers: {},\n colCells: {},\n rowCells: {},\n rowMatrix: {},\n columnMatrix: {},\n valueMatrix: {},\n encoder: {},\n valueParser: {},\n data: {}\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { generateGetterSetters, STATE_NAMESPACES, getUniqueId } from 'muze-utils';\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';\nimport { RESOLVER_PROPS } from './resolver-props';\n\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 = { rowFacets: [], colFacets: [] };\n this._projections = { rowProjections: [], colProjections: [] };\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._fireboltDeps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: [],\n radius: [],\n angle: [],\n angle0: []\n };\n generateGetterSetters(this, RESOLVER_PROPS);\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 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 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 *\n *\n * @param {*} facets\n *\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 *\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 *\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 *\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 radius: [],\n angle: [],\n angle0: [],\n pie: []\n });\n }\n\n setFireboltDependencies (prop, deps) {\n Object.assign(this._fireboltDeps, {\n [prop]: deps\n });\n return this;\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 coord\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager,\n throwback\n } = this.dependencies();\n const fireboltDeps = this._fireboltDeps;\n\n // Provide the source for the matrix\n const units = [[]];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n const store = this.store();\n store.lockModel();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n const namespace = `unit${i}-${j}-${getUniqueId()}`;\n\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager,\n throwback,\n fireboltDeps\n });\n unit.metaInf({\n rowIndex: i,\n colIndex: j,\n namespace\n });\n unit.store(store);\n unit.coord(coord);\n el.source(unit);\n }\n !units[i] && (units[i] = []);\n units[i][j] = unit;\n unit.parentAlias(alias)\n .valueParser(this.valueParser())\n .coord(coord);\n el.config(unitConfig);\n });\n store.unlockModel();\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 resetFacetsAndProjections () {\n this._facets = {};\n this._projections = {};\n return this;\n }\n\n /**\n *\n *\n *\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 *\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 const props = [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`,\n `${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`];\n const store = this.store();\n store.lockCommits(props);\n store.lockModel();\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(Object.assign(el.axes(), retinalAxes));\n el.source() && el.source().retinalFields(config);\n el.layerDef(matrixLayers[i][j]);\n el.updateModel();\n\n units.push(el.source());\n });\n store.unlockModel()\n .unlockCommits([props[0]])\n .unlockCommits([props[1]]);\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n *\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 {\n showHeaders,\n classPrefix\n } = config;\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], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager }),\n right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell,\n { classPrefix, 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 *\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 store (...params) {\n if (params.length) {\n this._store = params[0];\n return this;\n }\n return this._store;\n }\n\n clear () {\n const cacheMaps = this._cacheMaps;\n for (const key in cacheMaps) {\n cacheMaps[key].clear();\n }\n }\n\n}\n","/**\n * This is a wrapper class over the matrix of cells which gets created in visual group. Visual Group creates left,\n * right, bottom and top and center matrices and wraps them using this class.\n *\n * @public\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n * Creates an instance of ValueMatrix.\n *\n * @param {Array} matrixArr Matrix array.\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 instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n * Returns the array of matrices contained in this instance.\n *\n * @public\n * @return {Array} Array of matrices.\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 * Sets a filter criteria. This filter criteria gets applied when each function is called.\n *\n * @public\n * @param {Function} fn Filter function.\n *\n * @return {ValueMatrix} Instance of value matrix.\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 * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\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 * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\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 * Iterates through the two dimensional matrix array and calls the given callback function with the cell instance,\n * row index, column index and the matrix array.\n *\n * @param {Function} fn Callback function which will get called for every cell.\n * @return {ValueMatrix} Instance of the value matrix.\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 findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n clear () {\n this.each(cell => cell.remove());\n this.matrix([]);\n }\n}\n\nexport default ValueMatrix;\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { getEncoder, getBorders } from '../group-helper';\nimport { RetinalEncoder } from '../encoder';\nimport { registerDomainChangeListener, unsubscribeChangeListeners } from './change-listener';\nimport ValueMatrix from './value-matrix';\n\nexport const createUnitState = (context) => {\n const [globalState, localState] = VisualUnit.getState();\n const store = context.store();\n store.append(STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE, localState);\n};\n\nexport const initializeGlobalState = (context) => {\n const globalState = context.constructor.getState()[0];\n const store = context.store();\n store.append(STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const createLayerState = (context) => {\n const [globalState, localState] = BaseLayer.getState();\n context.store().append(STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE, localState);\n};\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\nexport const setMatrixInstances = (context, placeholder) => {\n let {\n values,\n rows,\n columns\n } = placeholder;\n values = values || [];\n rows = rows || [];\n columns = columns || [];\n context._composition.matrices = {\n value: new ValueMatrix(values),\n left: new ValueMatrix(rows[0]),\n right: new ValueMatrix(rows[1]),\n top: new ValueMatrix(columns[0]),\n bottom: new ValueMatrix(columns[1])\n };\n\n context._dependencies.throwback.commit(CommonProps.MATRIX_CREATED, true);\n return context;\n};\n\nexport const createMatrices = (context) => {\n const rows = context.rows();\n const columns = context.columns();\n const color = context.color();\n const datamodel = context.data();\n const size = context.size();\n const detail = context.detail();\n const layers = context.layers();\n const transform = context.transform();\n const config = context.config();\n const shape = context.shape();\n\n // Get the resolver for the matrices\n const resolver = context.resolver();\n resolver.store(context.store());\n resolver.valueParser(context.valueParser());\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config || {},\n rows,\n columns,\n detail,\n layers,\n transform\n };\n\n unsubscribeChangeListeners(context);\n\n const retinalConfig = sanitizeRetinalConfig({\n color,\n shape,\n size\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);\n matrixConfig.coord = encoders.simpleEncoder.constructor.type();\n resolver.encoder(encoders.simpleEncoder);\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 ? config.axisFrom : {}, fields);\n // Setting layers for the code\n layers && resolver.layerConfig(layers);\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));\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 resolver.encoder().unionUnitDomains(context);\n\n registerDomainChangeListener(context);\n return context;\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\n\nimport { STATE_NAMESPACES } from 'muze-utils';\n\nexport const setupChangeListeners = (context) => {\n const store = context.store();\n const stores = {\n throwback: context._dependencies.throwback,\n store\n };\n\n ['x', 'y'].forEach((axisType) => {\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${axisType}`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes[axisType].forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n });\n\n [VisualUnit, BaseLayer].forEach((comp) => {\n const formalName = comp.formalName();\n ['store', 'throwback'].forEach((type) => {\n const listeners = comp.getListeners()[type];\n const storeInst = stores[type];\n listeners.forEach((listenerInf) => {\n storeInst[listenerInf.type](listenerInf.props, listenerInf.listener, false, {\n namespace: formalName,\n subNamespace: listenerInf.subNamespace\n });\n });\n });\n });\n};\n\nexport const registerDomainChangeListener = (context) => {\n const store = context.store();\n store.registerChangeListener([`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`], () => {\n context.resolver().encoder().unionUnitDomains(context);\n }, false, {\n key: 'unionDomain'\n });\n};\n\nexport const unsubscribeChangeListeners = (context) => {\n context.store().unsubscribe({\n key: 'unionDomain'\n });\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\nexport const PROPS = {\n alias: {},\n data: {},\n cornerMatrices: {\n defaultValue: {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: []\n }\n },\n groupType: {},\n\n metaData: {\n defaultValue: {\n border: {}\n }\n },\n placeholderInfo: {\n defaultValue: {}\n },\n resolver: {},\n valueParser: {\n defaultValue: val => val\n },\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 [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n findInGroup\n} from '../group-helper';\nimport { createUnitState, initializeGlobalState, setMatrixInstances, createMatrices, createLayerState } from './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 * VisualGroup is instantiated by canvas for creating {@link VisualUnit} and axes instances.It creates the\n * the matrix of visual units and axes. It also creates the layout instance which manages the allocation\n * of space of matrices.\n *\n * To get instance of visual group,\n * ```\n * const visualGroup = canvas.composition().visualGroup;\n * ```\n * @public\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 *\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 generateGetterSetters(this, localOptions);\n // Populate the store with default values\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n // matrix instance store each of the matrices\n setMatrixInstances(this, {});\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n }\n\n static getState () {\n return [{\n domain: {\n x: null,\n y: null,\n radius: null,\n angle: null,\n angle0: null\n }\n }, {}];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n initializeGlobalState(this);\n createUnitState(this);\n createLayerState(this);\n // Register listeners\n setupChangeListeners(this);\n return this;\n }\n return this._store;\n }\n\n /**\n * Return the instances of matrices created by the visual group.\n *\n * @return {Object} Instance of matrices.\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 visual group.\n *\n * @public\n *\n * @return {Object} Composition of visual group. It contains instance of matrices {@link ValueMatrix}\n * and instances of axis.\n * ```\n * {\n * matrices: {\n * value: // Instance of center value matrix.\n * left: // Instance of left value matrix\n * right: // Instance of right value matrix\n * bottom: // Instance of bottom value matrix\n * top: // Instance of top value matrix.\n * },\n * axes: {\n * x: // Array of x axis.\n * y: // Array of y axis\n * color: // Array of color axis\n * shape: // Array of shape axis\n * size: // Array of size axis.\n * }\n * }\n * ```\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 */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n * Returns the channel name of the variable. Channels are rows, columns, color, shape and size.\n *\n * @public\n * @param {string} variable Name of the variable.\n *\n * @return {string} Name of the channel.\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n * Gets the axis instances of the visual group based on the given axis type.\n *\n * @public\n * @param {string} type Type of axis. X,Y or retinal axes.\n *\n * @return {Array} Array of axis instances.\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n * Returns the instances of cells based on the given type. Type can be given as `row' or `col`.\n *\n * @public\n * @return {Array} Two dimensional array of cells.\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n return channel === Y ? rowProjections : colProjections;\n }\n\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\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 /**\n * Returns the grouped datamodel prepared by visual group. If there is no group by performed, then it returns the\n * original data model passed to visual group.\n *\n * @return {DataModel} Grouped data model.\n */\n getGroupByData () {\n return this._groupedDataModel;\n }\n\n createMatrices () {\n createMatrices(this);\n }\n\n remove () {\n this.matrixInstance().value.clear();\n this.resolver().clear();\n const info = this.placeholderInfo();\n info.rows = null;\n info.columns = null;\n info.values = null;\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 MAXWIDTH = 'max-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 context = firebolt.context;\n const type = context.constructor.type();\n const payload = config.payload;\n const data = context.data();\n const metaData = context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = 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.rawVal);\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].internalValue >= values[i][0] && fields[field].internalValue <= 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 === 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.rawVal) !== -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","import { getEvent } from 'muze-utils';\n\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 event = getEvent();\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 const event = getEvent();\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 labelManager: {},\n minTickDistance: {},\n valueParser: {\n defaultValue: val => val\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, i, data, context) => context.valueParser()(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 MAXWIDTH\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n *\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 * Function to recompute the stops in array in case to left and right alignment of legend.\n *\n * @param {string} param - parameter to measure\n * @param {Object} requiredMeasure - required measure parameters\n * @param {Object} availableMeasure - available meassure parameters\n * @param {Array} domainForLegend - array\n * @param {Object} smartLabelCalc - smartLabel Manager\n * @return {Array} - Array\n */\nconst getcomputedArray = (computationhelper, requiredMeasure, availableMeasure, domainForLegend) => {\n // declaring Current and Next Tick Value variable\n let currentTickValue;\n let nextTickValue;\n const upperBound = domainForLegend[domainForLegend.length - 1];\n const param = computationhelper.measureParam;\n const smartLabelCalc = computationhelper.smartLabelCalc;\n\n // calculating pixel required per Tick Values\n const pixelPerTick = (availableMeasure[param] / upperBound);\n\n // checking if available max width is smaller than required width for legend.\n if (availableMeasure[param] >= requiredMeasure[param]) {\n return domainForLegend;\n }\n\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[0]))[param]);\n for (let i = 1; i < domainForLegend.length - 1; i++) {\n nextTickValue = Math.floor((currentTickValue / pixelPerTick) + domainForLegend[i - 1]);\n if (domainForLegend[i] < nextTickValue) {\n domainForLegend.splice(i, 1);\n i -= 1;\n }\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[i]))[param]);\n }\n return domainForLegend;\n};\n\n/**\n * function to recompute the Stops Array provided to prevent the Overlapping of values\n * @param {Array} domainForLegend - Stops Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - modified Stops Array\n */\nexport const getInterpolatedArrayData = (domainForLegend, scaleParams) => {\n // defining param for height/width selector\n let measureParam;\n\n // declaring variable for required Width\n let requiredWidth;\n\n // declaring variable for required height\n let requiredHeight;\n\n // declaring the variable for upperbound\n let upperBound = domainForLegend[domainForLegend.length - 1];\n\n // Initializing Minimum Tick Difference Variable and checking if it's less than 1 or not\n let minTickDiff = Math.ceil(domainForLegend[1] - domainForLegend[0]);\n\n // calculating max tick difference\n const maxTickDiff = Math.ceil(upperBound - domainForLegend[0]);\n\n // gradient Alignment\n const { alignment } = scaleParams;\n\n // getting SmartLabel Manager to calculate tick Params\n const smartLabelCalc = scaleParams.smartLabel;\n\n // scale Measurements (i.e MaxWidth and MaxHeight available)\n const availableSpace = scaleParams.measures;\n\n // getting minimum Tick size (i.e height and width)\n const minimumTickSize = scaleParams.minTickDistance;\n\n // getting domain upperbound dimensions\n const { height: tickDimHeight, width: tickDimWidth } = smartLabelCalc.getOriSize((upperBound));\n\n /* Checking if UpperBound of Domain is Floating or Not.\n In case of floating constricting it to 2 decimals after point. */\n if (!Number.isInteger(upperBound)) {\n upperBound = ((upperBound).toFixed(2));\n }\n\n // Calculating minimum tick difference\n minTickDiff = minTickDiff < 1 ? 1 : minTickDiff;\n\n // required width to render legend\n requiredWidth = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * (tickDimWidth + (minimumTickSize.width));\n\n requiredWidth -= Math.abs(maxTickDiff);\n\n // require height to render legend\n requiredHeight = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * tickDimHeight;\n\n requiredHeight -= Math.abs(maxTickDiff);\n\n // checking the alignment of legend\n if (alignment === TOP || alignment === BOTTOM) {\n measureParam = WIDTH;\n } else {\n measureParam = HEIGHT;\n }\n\n // calculating computed array\n domainForLegend = getcomputedArray({\n smartLabelCalc,\n measureParam\n }, {\n height: requiredHeight,\n width: requiredWidth\n }, {\n height: availableSpace.maxHeight,\n width: availableSpace.maxWidth\n }, domainForLegend);\n\n return domainForLegend;\n};\n\n/**\n * function to recalculate steps on providing more number of stops than canvas can accomodate.\n * @param {Array} domain - Array\n * @param {Array} steps - Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - recalculated Step Array\n */\nexport const getInterpolatedData = (domain, steps, scaleParams) => {\n // declaring recomputeSteps Variable\n let recomputeSteps = 0;\n\n const getTickMeasure = scaleParams.smartLabel;\n const { maxWidth, maxHeight } = scaleParams.measures;\n const { alignment } = scaleParams;\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n // getting tick measure(i.e height and width)\n const tickValue = getTickMeasure.getOriSize(domain[1].toFixed(2));\n\n // To round the floating values to Integer and checking if value is 1.\n steps = Math.round(steps);\n steps = steps < 1 ? (steps + 1) : steps;\n\n // checking alignment of the Axis\n if (alignment === TOP || alignment === BOTTOM) {\n recomputeSteps = Math.floor(maxWidth / (tickValue.width));\n } else {\n recomputeSteps = Math.floor(maxHeight / (tickValue.height));\n }\n steps = Math.min(steps, recomputeSteps);\n\n // scaling the axis based on steps provided\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 titleWidth = Math.min(measurement.maxWidth, measurement.width);\n\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${titleWidth}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, `${titleWidth}px`)\n .style(MAXWIDTH, `${titleWidth}px`)\n .style(HEIGHT, '100%')\n .style('line-height', 1)\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .style('overflow-x', 'scroll')\n .node();\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\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 *\n */\nexport const getItemMeasures = (context, prop, formatter) => {\n const space = [];\n const data = context.data();\n const labelManager = context._labelManager;\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value, index, data, context));\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 *\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);\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 const labelWidth = labelSpaces[i].width;\n const newLabelWidth = (maxItemSpaces.width - maxIconWidth);\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = Math.max(labelWidth, newLabelWidth);\n totalWidth = Math.max(totalWidth, itemSpace.width);\n }\n }\n });\n totalWidth = Math.ceil(Math.max(totalWidth, titleWidth)) + effPadding;\n totalHeight += titleHeight + effPadding;\n totalHeight = Math.ceil(totalHeight);\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n *\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, RIGHT, LEFT, TOP, BOTTOM } 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 const dist = dependencies.labelManager.getOriSize('w');\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\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 *\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\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 *\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 *\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 *\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, VALUE, 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());\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 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, maxWidth } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n maxWidth,\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 position\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 let marginPosition;\n switch (position) {\n case TOP:\n marginPosition = `margin-${BOTTOM}`;\n break;\n case LEFT:\n marginPosition = `margin-${RIGHT}`;\n break;\n case BOTTOM:\n marginPosition = `margin-${TOP}`;\n break;\n default:\n marginPosition = `margin-${LEFT}`;\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(`${marginPosition}`, `${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 *\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.rawVal]];\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\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 *\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 *\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 *\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 const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context))\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 const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import {\n FieldType,\n DimensionSubtype,\n formatTemporal\n} from 'muze-utils';\nimport 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 *\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof DiscreteLegend\n */\n dataFromScale () {\n const scale = this.scale();\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const field = this.metaData().getFieldspace().fields[0];\n const { type, subtype } = field.schema();\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n const rawVal = domainForLegend[i];\n if (type === FieldType.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 let domainVal = rawVal;\n if (subtype === DimensionSubtype.TEMPORAL) {\n domainVal = formatTemporal(domainForLegend[i], field.minimumConsecutiveDifference());\n }\n value = domainVal;\n range = [domainVal];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range,\n rawVal\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 *\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 *\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\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0]) || 1}%`)\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 labels: {\n rotation: null\n }\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 *\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 axis.source().render();\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().tickDimensions;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxItemSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(Math.min(height, maxHeight) - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(Math.min(width, maxWidth) - (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\n applyStyle(legendContainer, {\n height: `${maxItemSpaces.height + border + padding}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\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${maxWidth}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, getInterpolatedArrayData } 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 *\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n *\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 *\n * @memberof GradientLegend\n */\n dataFromScale () {\n let domainForLegend = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\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 // Sorting the domain Array\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n domainForLegend = getInterpolatedArrayData(domainForLegend, scaleParams);\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1, scaleParams);\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 *\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 *\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 *\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 *\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof StepLegend\n */\n dataFromScale () {\n let domainLeg = [];\n const scale = this.scale();\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 // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\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, scaleParams);\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 } else if (domainLeg.length === 1) {\n value = ele.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\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\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 *\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 *\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';\nexport const MUZE_PREFIX = 'muze';\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';\nexport const HORIZONTAL_CENTER = 'h-center';\nexport const VERTICAL_CENTER = 'v-center';\nexport const HIDDEN = 'hidden';\nexport const OVERFLOW = 'overflow';\nexport const OVERFLOW_X = 'overflow-x';\nexport const OVERFLOW_Y = 'overflow-y';\nexport const AUTO = 'auto';\nexport const VISIBLE = 'visible';\nexport const VERTICAL_SCROLL_BAR = 'verticalScrollBar';\nexport const HORIZONTAL_SCROLL_BAR = 'horizontalScrollBar';\nexport const GRID = 'grid';\nexport const MESSAGE = 'message';\nexport const NO_DATA_MESSAGE = 'No data to display';\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. This is required when we have multiple\n * variables on a single axis and the union of domain of all the variables needs to be set on the axis.\n *\n * To create a new composed variable from multiple fields,\n * ```\n * const sharedVar = share('open', 'high', 'low', 'close');\n * canvas.rows([sharedVar])\n * .columns(['date']);\n * ```\n *\n * @module Operators\n * @public\n * @function share\n * @param {Array} vars Variable names.\n *\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 *\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 string according to the allowed html tags.\n * This is used to render html in canvas components like title and tooltip.\n *\n * To render html in canvas components,\n * ```\n * canvas.title(html`TITLE`);\n * ```\n *\n * @public\n * @module Operators\n * @function html\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n *\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, CommonProps } 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\nconst listenerFn = (canvas, fn) => () => {\n const valueMatrix = canvas.composition().visualGroup.matrixInstance().value;\n valueMatrix.each(cell => fn(cell.valueOf().firebolt()));\n};\n\nconst canvasIterator = (canvases, iteratorFn, cFn) => {\n canvases.forEach((canvas) => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => iteratorFn(cell.valueOf().firebolt()));\n cFn && cFn(canvas);\n // Also register actions on canvas update\n const throwback = canvas._throwback;\n\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED],\n listenerFn(canvas, iteratorFn));\n });\n};\n\nconst registerActions = (context, type, fnName, deps) => {\n const canvases = context._registrableComponents;\n\n canvases.forEach((canvas) => {\n const vGroup = canvas.composition().visualGroup;\n\n vGroup.resolver().setFireboltDependencies(type, deps);\n canvas.firebolt()[fnName](deps);\n });\n};\n\n/**\n * This class is initiated only once in lifecycle and is reponsible for regisration of physical and behavioural\n * actions and side effects and the mapping between them.\n *\n * To get the instance of action model\n * ```\n * const ActionModel = muze.ActionModel;\n * ```\n *\n * @public\n * @module ActionModel\n */\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n /**\n * Takes an array of canvases on which the physical and behavioural actions will get registered.\n *\n * @public\n * @param {Canvas} components Array of canvases\n *\n * @return {ActionModel} Instance of action model.\n */\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n /**\n * Registers physical actions on the canvases. It takes an object with key as the name of action and value having\n * the definition of the action.\n *\n * To register a {@link PhysicalAction},\n * ```\n * const ActionModel = muze.ActionModel;\n * ActionModel\n * // Physical actions will be registered on these canvases.\n * .for(canvas)\n * .registerPhysicalActions({\n * // Key is the name of physical action.\n * ctrlClick: (firebolt) => (targetEl, behaviours) => {\n * targetEl.on('click', function (data) {\n * const event = utils.getEvent();\n * const pos = utils.getClientPoint(event, this);\n * // Get the data point nearest to the mouse position.\n * const nearestPoint = firebolt.context.getNearestPoint(pos, {\n * data\n * });\n * // Prepare the payload\n * const payload = {\n * criteria: nearestPoint.id\n * };\n * behaviours.forEach((behaviour) => firebolt.dispatchBehaviour(behaviour, payload));\n * });\n * }\n * });\n * ```\n * @public\n *\n * @param {Object} action Names of physical actions and their definitions.\n *\n * @return {ActionModel} Instance of the action model.\n */\n registerPhysicalActions (action) {\n registerActions(this, 'physicalActions', 'registerPhysicalActions', action);\n return this;\n }\n\n /**\n * Registers behavioural actions on the canvases. It takes definitions of the behavioural actions and registers\n * them on the canvases. Every behavioural action must inherit the {@link GenericBehaviour} class.\n *\n * To register a behavioural action\n * ```\n * // Define a new behavioural action\n * class SingleSelectBehaviour extends GenericBehaviour {\n * static formalName () {\n * return 'singleSelect';\n * }\n *\n * setSelectionSet (addSet, selectionSet) {\n * if (addSet === null) {\n * selectionSet.reset();\n * } else if (addSet.length) {\n * const existingAddSet = selectionSet.getExistingEntrySet(addSet);\n * if (existingAddSet.length){\n * selectionSet.reset();\n * } else {\n * selectionSet.add(addSet);\n * }\n * } else {\n * selectionSet.reset();\n * }\n * }\n * }\n * muze.ActionModel.registerBehaviouralActions(SingleSelectBehaviour);\n * ```\n *\n * @public\n *\n * @param {GenericBehaviour} actions Definition of behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerBehaviouralActions (...actions) {\n registerActions(this, 'behaviouralActions', 'registerBehaviouralActions', actions);\n return this;\n }\n\n /**\n * Registers the mapping of physical and behavioural actions. This mapping is used to establish which behavioural\n * actions should be dispatched on any triggering of physical actions.\n *\n * To map physical actions with behavioural actions,\n * ```\n * muze.ActionModel.registerPhysicalBehaviouralMap({\n * ctrlClick: {\n * behaviours: ['select'] // This array must be the formal names of the behavioural actions.\n * }\n * });\n * ```\n *\n * @public\n * @param {Object} map Contains the physical and behavioural action map.\n * ```\n * {\n * // Name of the physical action\n * click: {\n * // Target element selector. This is an optional field. If not passed, then by default takes the\n * // container element of visual unit.\n * target: '.muze-layers-area path',\n * // Behaviours which should be dispatched on triggering of the mapped physical action.\n * behaviours: ['select']\n * }\n * }\n * ```\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPhysicalBehaviouralMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalBehaviouralMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalBehaviouralMap(map);\n });\n return this;\n }\n\n /**\n * Registers what behaviour to propagate on dispatch of a certain behavioural action. By default, when any\n * behavioural action is dispatched, then the same behavioural action gets propagated to all the other canvases.\n * This can be changed using this api.\n *\n * To register what behaviour should be propagated on dispatch of any behavioural action,\n * ```\n * ActionModel.for(canvas1, canvas2).registerPropagationBehaviourMap({\n * select: 'filter',\n * brush: 'filter'\n * });\n * ```\n *\n * @public\n * @param {Object} map Propagation behaviour map.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPropagationBehaviourMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPropagationBehaviourMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPropagationBehaviourMap(map);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of side effects and behavioural actions. It takes an object which contains key as the\n * name of behavioural action and the side effects which will be linked to it.\n *\n * To map side effects to select behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: ['infoBox'] // This array must be the formal names of the side effects\n * });\n * ```\n *\n * To map side effects to select behaviour, but disable all the default side effects attached with this behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: {\n * effects: ['infoBox'],\n * preventDefaultActions: true\n * }\n * });\n * @public\n * @param {Object} map Mapping of behavioural actions and side effects.\n * ```\n * {\n * select: ['infoBox']\n * }\n * ```\n * @return {ActionModel} Instance of action model.\n */\n mapSideEffects (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.mapSideEffects(map);\n }, (canvas) => {\n canvas.firebolt().mapSideEffects(map);\n });\n return this;\n }\n\n /**\n * Registers the side effects on the registered canvases. It takes definitions of side effects and registers them\n * on the canvases. Every side effect must inherit the base class {@link GenericSideEffect} or\n * {@link SpawnableSideEffect} or {@link SurrogateSideEffect} class.\n *\n * ```\n * // Define a custom side effect\n * class InfoBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'infoBox';\n * }\n *\n * apply (selectionSet) {\n * }\n * }\n * muze.ActionModel.registerSideEffects(InfoBox);\n * ```\n * @public\n * @param {GenericSideEffect} sideEffects Definition of side effects.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerSideEffects (...sideEffects) {\n registerActions(this, 'sideEffects', 'registerSideEffects', sideEffects);\n return this;\n }\n\n /**\n * Breaks the link between behavioural actions and physical actions. It takes an array of behavioural action\n * and it's physical action.\n *\n * To dissociate behavioural actions from physical actions\n * ```\n * muze.ActionModel.dissociateBehaviour(['select', 'click'], ['highlight', 'hover']);\n * ```\n * @public\n * @param {Array} maps Array of behavioural action and physical action.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateBehaviour (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateBehaviour(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateBehaviour(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * Breaks the link between side effects and behavioural actions. It takes an array of formal names of the side\n * effects and it's linked behavioural action.\n *\n * To dissociate side effects from behavioural actions\n * ```\n * muze.ActionModel.dissociateSideEffect(['crossline', 'highlight'], ['selectionBox', 'brush']);\n * ```\n * @public\n * @param {Array} maps Array of side effects and behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateSideEffect (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateSideEffect(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateSideEffect(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * By default cross interactivity is disabled between canvases. This enables cross interaction between the canvases\n * so that any action happening in one canvas gets dispatched on other canvases as well. An optional policy can also\n * be passed in this method. The policy can be used to control on which canvases the behavioural actions and\n * side effects gets dispatched.\n *\n * To just enable cross interactivity between two canvases,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity();\n * ```\n *\n * To enable cross interactivity but enable any behavioural action only when it is triggered from canvas1.\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * behaviours: {\n * // Here * stands for any behavioural action name. We can also give any name of behavioural action\n * // in place of this.\n * '*': (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n *\n * To enable cross interactivity but enable tooltip effect if the action is propagated from canvas1,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * sideEffects: {\n * tooltip: (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n * @public\n * @param {Object} policy Policy definition.\n *\n * @return {ActionModel} Instance of action model.\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","import { MUZE_PREFIX } from '../constants';\n\nexport const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 4,\n className: `${MUZE_PREFIX}-title-container`\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16,\n maxLines: 2,\n className: `${MUZE_PREFIX}-subtitle-container`\n};\n\nexport const MESSAGE_CONFIG = {\n className: `${MUZE_PREFIX}-message-container`\n};\n\nexport const CANVAS = 'canvas';\n","import { mergeRecursive } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\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 * @module LocalOptions\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' || !config) {\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' || !config) {\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' || !config) {\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: [],\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};\n\nexport const canvasOptions = {\n [TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([title, titleConfig]) => {\n let t = title;\n if (typeof title === 'string' || !title) {\n t = () => title;\n }\n const defConfig = mergeRecursive({}, TITLE_CONFIG);\n return [t, mergeRecursive(defConfig, titleConfig)];\n }\n }\n },\n [SUB_TITLE]: {\n value: [null, null],\n meta: {\n takesMultipleParams: true,\n typeCheck: ([arg1, arg2]) => typeof arg1 === 'function' && typeof arg2 === 'object',\n sanitization: ([subtitle, subtitleConfig]) => {\n let sub = subtitle;\n if (typeof subtitle === 'string' || !subtitle) {\n sub = () => subtitle;\n }\n const defConfig = mergeRecursive({}, SUB_TITLE_CONFIG);\n return [sub, mergeRecursive(defConfig, subtitleConfig)];\n }\n }\n }\n};\n","export default class LayoutComponent {\n constructor (name, dimensions, seed) {\n this._seed = seed;\n this._boundBox = {\n height: dimensions.height,\n width: dimensions.width,\n top: null,\n left: null\n };\n this._renderAt = null;\n this._alignWith = null;\n this._alignment = null;\n this._target = null;\n this._position = null;\n this._componentName = name;\n this._className = null;\n }\n\n getLogicalSpace () {\n throw new Error('getLogicalSpace is not defined');\n }\n\n setSpatialConfig () {\n throw new Error('setSpatialSpace is not defined');\n }\n\n name (param) {\n if (param) {\n this._componentName = param;\n }\n return this._componentName;\n }\n\n target (param) {\n if (param) {\n this._target = param;\n }\n return this._target;\n }\n\n position (param) {\n if (param) {\n this._position = param;\n }\n return this._position;\n }\n\n alignment (param) {\n if (param) {\n this._alignment = param;\n }\n return this._alignment;\n }\n\n alignWith (param) {\n if (param) {\n this._alignWith = param;\n }\n return this._alignWith;\n }\n\n renderAt (param) {\n if (param) {\n this._renderAt = param;\n }\n return this._renderAt;\n }\n\n boundBox (param) {\n if (param) {\n Object.assign(this._boundBox, param);\n }\n return this._boundBox;\n }\n\n className (param) {\n if (param) {\n this._className = param;\n }\n return this._className;\n }\n\n draw () {\n throw new Error('draw is not defined');\n }\n\n attachListener () {\n return this;\n }\n }\n\n","import LayoutComponent from './layoutComponent';\n\nclass DummyComponent extends LayoutComponent {\n getLogicalSpace () {\n return {\n width: this.boundBox().width,\n height: this.boundBox().height\n };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n return this;\n }\n\n draw () {\n if (!this.component) {\n throw new Error(`Component not set for ${this.componentName}`);\n }\n this.component.mount(document.getElementById(this.renderAt)); // Change the draw method to component draw\n return this;\n }\n}\n\nexport default DummyComponent;\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n pagination: 'scroll',\n scrollBar: {\n thickness: 10,\n speed: 2,\n vertical: {\n align: 'right'\n },\n horizontal: {\n align: 'bottom'\n }\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 facet: {\n rows: {\n minCharacters: 3\n },\n columns: {\n maxLines: 2,\n verticalAlign: 'middle',\n minCharacters: 1\n }\n },\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 invalidValues: {},\n sort: {}\n};\n","import { DEFAULT_CONFIG } from '../../../../muze/src/defaults';\n\nconst DEFAULT_WIDTH = 600;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_CLASS_NAME = `${DEFAULT_CONFIG.classPrefix}-layout-container-component`;\nconst NODE_PREFIX = `${DEFAULT_CONFIG.classPrefix}-layout-container`;\n\nexport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n DEFAULT_CLASS_NAME,\n NODE_PREFIX\n};\n","export default class DefinitionModel {\n constructor (config) {\n this._host = config.host || null;\n this._cut = config.cut || null;\n this._ratioWeight = config.ratioWeight === 0 ? 0 : config.ratioWeight || 1;\n this._preferred = config.preferred || false;\n this._lanes = config.lanes || [];\n this._remainingHeight = 0;\n this._remainingWidth = 0;\n }\n\n host (host) {\n if (host) {\n this._host = host;\n }\n return this._host;\n }\n\n preferred (preferred) {\n if (preferred) {\n this._preferred = preferred;\n }\n return this._preferred;\n }\n\n cut (cut) {\n if (cut) {\n this._cut = cut;\n }\n return this._cut;\n }\n\n ratioWeight (ratioWeight) {\n if (ratioWeight) {\n this._ratioWeight = ratioWeight;\n }\n return this._ratioWeight;\n }\n\n lanes (lanes) {\n if (lanes) {\n this._lanes = lanes;\n }\n return this._lanes;\n }\n\n remainingHeight (remainingHeight) {\n if (remainingHeight) {\n this._remainingHeight = remainingHeight;\n }\n return this._remainingHeight;\n }\n\n remainingWidth (remainingWidth) {\n if (remainingWidth) {\n this._remainingWidth = remainingWidth;\n }\n return this._remainingWidth;\n }\n}\n","import { NODE_PREFIX } from '../../constants/defaults';\nimport DefinitionModel from '../definition-manager/definitionModel';\nimport DummyComponent from '../../layout-component/dummy-component';\n/**\n * Compares two strings in lowercase\n *\n * @export\n * @param {string} value the value to be compared\n * @param {string} compareTo whom the value would be compared\n * @return {boolean} true if values are equal\n */\nexport function isEqual (value, compareTo) {\n if (typeof value !== 'string' || typeof compareTo !== 'string') {\n throw new TypeError('value and compareTo must be string');\n }\n return value.toLowerCase() === compareTo.toLowerCase();\n}\n\nexport const getNodeId = (() => {\n let _uid = 0;\n return () => `${NODE_PREFIX}-${++_uid}`;\n})();\n\nexport function yExtraSpace (node) {\n let smallestHeight = 0;\n if (node.getCutType() === 'v') {\n smallestHeight = smallestExtraHeightHorizontally(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'h') {\n node.children().forEach((child) => {\n smallestHeight += yExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerHeight = node.boundBox().height;\n const hostHeight = node.model().host().getLogicalSpace().height;\n\n smallestHeight = containerHeight - hostHeight;\n if (smallestHeight < 0) {\n smallestHeight = 0;\n }\n } else {\n smallestHeight = 0;\n }\n return smallestHeight;\n}\n\nexport function smallestExtraHeightHorizontally (node) {\n let smallestHeight = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const h = yExtraSpace(child);\n if (h < smallestHeight) {\n smallestHeight = h;\n }\n });\n return smallestHeight;\n}\n\nexport function xExtraSpace (node) {\n let smallestWidth = 0;\n if (node.getCutType() === 'h') {\n smallestWidth = smallestExtraWidthVertically(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'v') {\n node.children().forEach((child) => {\n smallestWidth += xExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerWidth = node.boundBox().width;\n const hostWidth = node.model().host().getLogicalSpace().width;\n smallestWidth = containerWidth - hostWidth;\n if (smallestWidth < 0) {\n smallestWidth = 0;\n }\n } else {\n smallestWidth = 0;\n }\n return smallestWidth;\n}\n\nexport function smallestExtraWidthVertically (node) {\n let smallestWidth = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const w = xExtraSpace(child);\n if (w < smallestWidth) {\n smallestWidth = w;\n }\n });\n return smallestWidth;\n}\n\nexport function determineBoundBox (bb, i, arr, instance) {\n if (i) {\n // if not first sibling, take boundbox from previous sibling\n const lastSibling = arr[i - 1];\n const { top: _top, left: _left, height: _height, width: _width } = lastSibling.boundBox();\n return {\n width: bb.width,\n height: bb.height,\n\n top: instance.parentCut() === 'h'\n ? _top + _height : _top,\n\n left: instance.parentCut() === 'h'\n ? _left : _left + _width\n };\n }\n // if first sibling, take boundbox from parent\n const { top: _top, left: _left } = instance.parent().boundBox();\n return {\n width: bb.width,\n height: bb.height,\n top: _top,\n left: _left\n };\n}\n\n// prepares the targetComponent Map for target Mapping ie. where a component should lie\nexport function prepareTargetComponentMap (context) {\n context.targetComponentMap(new Map());\n context.componentMap().forEach((value) => {\n if (context.targetComponentMap().has(value.target())) {\n context.targetComponentMap().get(value.target()).push(value);\n } else {\n const temp = [];\n temp.push(value);\n context.targetComponentMap().set(value.target(), temp);\n }\n });\n}\n\nexport function getComponent (canvasComponent, componentName) {\n const comp = canvasComponent.find(component => component.name() === componentName);\n return (comp && comp !== -1) ? comp : null;\n}\nexport function createPlaceHolderComponent (height, width, position) {\n const comp = new DummyComponent(0, { height, width });\n comp.name('placeHolder');\n comp.position(position);\n return comp;\n}\n\nexport function placeComponent (definitionModel, component, isPreferred = false, isGridComponent = false) {\n let cut = '';\n let componentRatioWidth = 1;\n let leftOvercomponentRationWidth = 1;\n let leftHeight = 0;\n let leftWidth = 0;\n\n if (!component) {\n return { first: definitionModel, second: definitionModel };\n }\n\n const { height: componentHeight, width: componentWidth } = component.getLogicalSpace();\n const position = component.position();\n if (position === 'top' || position === 'bottom') {\n cut = 'h';\n componentRatioWidth = componentHeight / definitionModel.remainingHeight();\n leftHeight = definitionModel.remainingHeight() - componentHeight;\n leftWidth = definitionModel.remainingWidth();\n } else {\n cut = 'v';\n componentRatioWidth = componentWidth / definitionModel.remainingWidth();\n leftWidth = definitionModel.remainingWidth() - componentWidth;\n leftHeight = definitionModel.remainingHeight();\n }\n leftOvercomponentRationWidth = 1 - componentRatioWidth;\n\n// update parentModel\n definitionModel.cut(cut);\n const firstLaneConfig = {\n host: component.name(),\n cut: null,\n ratioWeight: componentRatioWidth,\n preferred: isGridComponent ? false : isPreferred,\n lanes: []\n };\n const firstLane = new DefinitionModel(firstLaneConfig);\n firstLane.remainingHeight(componentHeight);\n firstLane.remainingWidth(componentWidth);\n\n const secondLaneConfig = {\n host: null,\n cut: null,\n ratioWeight: leftOvercomponentRationWidth,\n preferred: isGridComponent ? false : !isPreferred,\n lanes: []\n };\n const secondLane = new DefinitionModel(secondLaneConfig);\n secondLane.remainingHeight(leftHeight);\n secondLane.remainingWidth(leftWidth);\n if (isPreferred) {\n definitionModel.lanes([firstLane]);\n } else if (position === 'top' || position === 'left') {\n definitionModel.lanes([firstLane, secondLane]);\n } else {\n definitionModel.lanes([secondLane, firstLane]);\n }\n return { first: firstLane, second: secondLane };\n}\n\nexport function placeGridComponent (definitionModel, gridComponents) {\n let tempDefModel = definitionModel;\n const rows = gridComponents.length;\n const column = rows ? gridComponents[0].length : 0;\n const height = gridComponents.reduce((acc, val) => (acc + val[0].getLogicalSpace().height), 0);\n\n for (let i = 0; i < column; i++) {\n const iscolumnPreffered = i === column - 1;\n const columnPlaceHolderComponent = createPlaceHolderComponent(height,\n gridComponents[0][i].getLogicalSpace().width, 'left');\n const { first, second } = placeComponent(tempDefModel, columnPlaceHolderComponent, iscolumnPreffered);\n tempDefModel = first;\n for (let j = 0; j < rows; j++) {\n const rowpreffred = j === (rows - 1);\n tempDefModel = placeComponent(tempDefModel, gridComponents[j][i], rowpreffred, true).second;\n }\n tempDefModel = second;\n }\n return tempDefModel;\n}\n\nexport function negotiateDimension (node) {\n let preferred;\n let cumultiveExtraSpaceAmt = 0;\n let alteredDim;\n let nonAlteredDim;\n\n const childrenLength = node.children().length;\n\n for (let index = 0; index < childrenLength; index++) {\n let fn;\n let extraSpaceAmt;\n const child = node.children()[index];\n\n if (child.parentCut() === 'h') {\n fn = yExtraSpace;\n alteredDim = 'height';\n nonAlteredDim = 'width';\n } else {\n fn = xExtraSpace;\n alteredDim = 'width';\n nonAlteredDim = 'height';\n }\n // if vertical then get extra height from other node and push it to the preferred node.\n // for horizontal cut the same thing is to be done with width\n if (child.isPreferred()) {\n // push extra space in sink. Execute it when all non preferred space are computed.\n preferred = child;\n\n continue; // eslint-disable-line no-continue\n }\n // reduce own height and save it in a var\n cumultiveExtraSpaceAmt += (extraSpaceAmt = fn(child));\n child.boundBox()[alteredDim] -= extraSpaceAmt;\n // update nonaltered dim from parent for any change which happened during negotiation\n child.boundBox()[nonAlteredDim] = child.parent().boundBox()[nonAlteredDim];\n\n negotiateDimension(child);\n }\n\n if (preferred) {\n preferred.boundBox()[alteredDim] += cumultiveExtraSpaceAmt;\n preferred.boundBox()[nonAlteredDim] = preferred.parent().boundBox()[nonAlteredDim];\n negotiateDimension(preferred);\n }\n}\n\nexport function computePosition (node) {\n node.children().forEach((child, i, children) => {\n const boundBox = determineBoundBox(child.boundBox(), i, children, child);\n child.boundBox(boundBox);\n computePosition(child);\n });\n}\n\nexport function allocateBoundingBox (node) {\n const totalWeight = node.children()\n .map(child => child.model().ratioWeight())\n .reduce((carry, val) => carry + val, 0);\n\n node.children().forEach((child, i, children) => {\n const lastSibling = children[i - 1];\n const ratio = child.model().ratioWeight() / totalWeight;\n\n if (child.parentCut() === 'h') {\n child.boundBox({\n top: i ? lastSibling.boundBox().top + lastSibling.boundBox().height : 0,\n left: child.parent().boundBox().left,\n height: child.parent().boundBox().height * ratio,\n width: child.parent().boundBox().width\n });\n } else {\n child.boundBox({\n top: child.parent().boundBox().top,\n left: i ? lastSibling.boundBox().left + lastSibling.boundBox().width : 0,\n height: child.parent().boundBox().height,\n width: child.parent().boundBox().width * ratio\n });\n }\n allocateBoundingBox(child);\n });\n}\n\n","import { getNodeId } from '../helper';\nimport { LayoutComponent } from '../../layout-component';\n\nclass Node {\n constructor (data) {\n this._model = data;\n this._parent = null;\n this._children = [];\n this._parentCut = null;\n this._boundBox = {\n top: null,\n left: null,\n height: null,\n width: null\n };\n\n this._id = this._model.host() instanceof LayoutComponent && this._model.host().renderAt() ?\n this._model.host().renderAt() :\n getNodeId();\n }\n\n addChildren (entries) {\n this._children.push(...entries);\n entries.forEach((e) => { e.parent(this); });\n }\n\n isRoot () {\n return this._parent === null;\n }\n\n isLeaf () {\n return !this._children.length;\n }\n\n getCutType () {\n return this._model.cut();\n }\n\n isPreferred () {\n return !!this._model.preferred();\n }\n\n children (children) {\n if (children) {\n this._children = children;\n }\n return this._children;\n }\n\n parent (parent) {\n if (parent) {\n this._parent = parent;\n }\n return this._parent;\n }\n\n parentCut (parentCut) {\n if (parentCut) {\n this._parentCut = parentCut;\n }\n return this._parentCut;\n }\n\n id (id) {\n if (id) {\n this._id = id;\n }\n return this._id;\n }\n\n model (model) {\n if (model) {\n this._model = model;\n }\n return this._model;\n }\n\n boundBox (bound) {\n if (bound) {\n this._boundBox = {\n top: bound.top,\n left: bound.left,\n height: bound.height,\n width: bound.width\n };\n }\n return this._boundBox;\n }\n /**\n * function to search a node and update it with the config provided.\n * @param {Object} nodeconfig\n */\n updateNode (nodeconfig) {\n if (this._id === nodeconfig._id) {\n this._model.cut(nodeconfig.cut);\n this._model.ratioWeight(nodeconfig.ratioWeight);\n } else {\n this._children.forEach((node) => {\n if (node._id === nodeconfig._id) {\n node.model.cut(nodeconfig.cut);\n node.model.ratioWeight(nodeconfig.ratioWeight);\n return;\n }\n this.searchNode(node, nodeconfig);\n });\n }\n }\n\n // Recursive function to search a node\n searchNode (node, nodeconfig) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeconfig._id) {\n childNode.model().cut(nodeconfig.cut);\n childNode.model().ratioWeight(nodeconfig.ratioWeight);\n } else {\n this.searchNode(childNode, nodeconfig);\n }\n });\n }\n\n /**\n * function to delete a node from tree Structure.\n * @param {String} nodeId - node Id of the Node\n */\n delete (nodeId) {\n this._children.forEach((node) => {\n if (node.id() === nodeId) {\n const index = this._children.indexOf(node);\n this._model.lanes().splice(index, 1);\n }\n this.deleteSearchNode(node, nodeId);\n });\n }\n\n // Recursive function to search a node\n deleteSearchNode (node, nodeId) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeId) {\n const index = node.children().indexOf(childNode);\n node.model().lanes().splice(index, 1);\n } else {\n this.deleteSearchNode(childNode, nodeId);\n }\n });\n }\n}\n\nexport default Node;\n","import Node from '../tree';\nimport {\n allocateBoundingBox,\n negotiateDimension,\n computePosition\n} from '../helper';\n\nexport default class LayoutModel {\n constructor (measurements, config) {\n this._measurements = measurements;\n this._config = config;\n this._root = this.createTree(this._config, null);\n this.setBoundBox();\n }\n\n createTree (config, parent) {\n const node = new Node(config);\n if (parent) {\n node.parentCut(parent.getCutType());\n parent.addChildren([node]);\n } else {\n this._root = node;\n }\n for (const lane of config.lanes()) {\n this.createTree(lane, node);\n }\n\n return this._root;\n }\n\n setBoundBox () {\n this._root.boundBox({\n top: 0,\n left: 0,\n width: this._measurements.width,\n height: this._measurements.height\n });\n allocateBoundingBox(this._root);\n }\n\n setHostPosition (node) {\n node.children().forEach((child) => {\n LayoutModel.setHostSpatialConfig(child);\n this.setHostPosition(child);\n });\n }\n\n static setHostSpatialConfig (node) {\n const bb = node.boundBox();\n const host = node.model().host();\n if (host && host.setSpatialConfig) {\n const conf = {\n x: bb.left,\n y: bb.top,\n width: bb.width,\n height: bb.height,\n renderAt: node.id()\n };\n host.setSpatialConfig(conf);\n }\n }\n\n negotiate () {\n negotiateDimension(this._root);\n computePosition(this._root);\n return this;\n }\n\n broadcast () {\n this.setHostPosition(this._root);\n return this;\n }\n\n tree () {\n return this._root;\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\nexport const ROW_MATRIX_INDEX = {\n 0: 'top',\n 1: 'center',\n 2: 'bottom'\n};\n\nexport const COLUMN_MATRIX_INDEX = {\n 0: 'left',\n 1: 'middle',\n 2: 'right'\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';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const GRID = 'grid';\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n\nexport const PAGINATION = 'pagination';\nexport const BUFFER = 'buffer';\nexport const HOLISTIC = 'holistic';\nexport const SCROLL = 'scroll';\nexport const MIDDLE = 'middle';\nexport const NO_BORDERS = null;\n\nexport const MAX_WIDTH_AVAIL_FOR_COL_MATRIX = 'maxWidthAvailableForColumnMatrix';\nexport const COLUMN_MATRIX = 'columnMatrix';\nexport const MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX = 'maxHeightAvailableForRowMatrix';\nexport const ROW_MATRIX = 'rowMatrix';\n","/* eslint no-undef: \"off\" */\n/* eslint default-case: \"off\" */\nexport class Utils {\n static isDOMElement (element) {\n return element instanceof Element;\n }\n\n static getID (element) {\n return element.id;\n }\n\n static getElement (id) {\n return document.getElementById(id);\n }\n\n static findContainer (data) {\n return data.filter(coordinate => coordinate.parent == null)[0];\n }\n /**\n * static method to remove the div\n * @param {} divId - div ID to be removed.\n */\n static removeDiv (divId) {\n if (document.getElementById(divId) !== null) { document.getElementById(divId).remove(); }\n }\n}\n","import { DEFAULT_CLASS_NAME } from '../constants/defaults';\nimport { LayoutComponent } from '../layout-component';\n\nexport default class DataPoint {\n constructor (node) {\n this._node = node;\n this._className = node.model().host() instanceof LayoutComponent ?\n node.model().host().className() : DEFAULT_CLASS_NAME;\n }\n\n node () {\n return this._node;\n }\n\n hasHost () {\n return this._node.model().host() instanceof LayoutComponent;\n }\n\n className () {\n return this._className || DEFAULT_CLASS_NAME;\n }\n}\n","import { getnodePoints } from './helper';\n\nexport class DataParser {\n constructor (data) {\n this._data = data;\n }\n\n defaultDataPointLogic () {\n const nodepoints = [];\n getnodePoints(this._data, nodepoints);\n return nodepoints;\n }\n\n}\n","import DataPoint from './data-point';\n\nexport const getnodePoints = (node, nodepoints) => {\n const datapoint = new DataPoint(node);\n nodepoints.push(datapoint);\n node.children().forEach((child) => {\n getnodePoints(child, nodepoints);\n });\n};\n","import { DataParser } from './data-parser';\n\nexport class HTMLDataAdapter extends DataParser {\n getCoordinates () {\n return super.defaultDataPointLogic();\n }\n}\n","export class Renderer {\n\n initRenderer (node, tree) {\n node.__logicalTree = tree;\n }\n}\n","import { HTMLDataAdapter } from '../data-adapters/html-data';\nimport { Utils } from '../utils';\nimport { Renderer } from './renderer';\n\nexport class HTMLRenderer extends Renderer {\n constructor (data) {\n super();\n this._data = data;\n this._coordinates = new HTMLDataAdapter(this._data).getCoordinates();\n }\n\n createhtml (mount, className) {\n const mainDiv = mount;\n super.initRenderer(mainDiv, this._data); // Initialise node with layout id\n this.parentDiv = this.createAndCustomiseParent(className);\n this._coordinates.forEach((node) => {\n if (node.hasHost()) {\n const host = node.node();\n this.parentDiv.appendChild(this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: node.className() }));\n }\n });\n mainDiv.appendChild(this.parentDiv);\n }\n\n createAndPositionDiv (config) {\n const { top, left, height, width, className, id } = config;\n const existingDiv = document.getElementById(id);\n const div = existingDiv || document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = `${left}px`;\n div.style.top = `${top}px`;\n div.style.height = `${height}px`;\n div.style.width = `${width}px`;\n div.id = id;\n div.className = className;\n return div;\n }\n\n createAndCustomiseParent (className) {\n const container = Utils.findContainer(this._coordinates);\n const host = container.node();\n const parentDiv = this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: container.className() });\n parentDiv.className = className;\n parentDiv.style.position = 'relative';\n return parentDiv;\n }\n\n coordinates () {\n return this._coordinates;\n }\n}\n","import { selectElement } from 'muze-utils';\nimport { HTMLRenderer } from '../renderers/html-renderer';\nimport { LayoutComponent } from '../layout-component';\n\nexport const getChildNode = (context, config) =>\n context.renderer().createAndPositionDiv(config);\n\nexport const findNode = (context, nodeID) =>\n context.renderer().coordinates().find(point => point.node().id() === nodeID);\n\nexport const renderHTML = (context) => {\n context.renderer(new HTMLRenderer(context.data()));\n context.renderer().createhtml(context.mount(), context.className());\n};\n\nexport const drawLayout = context => renderHTML(context);\n\nexport const drawComponent = (componentData) => {\n componentData.children().forEach((node) => {\n const host = node.model().host();\n if (host instanceof LayoutComponent) {\n host.draw();\n }\n drawComponent(node);\n });\n};\n\nexport const removeElement = (elemID) => {\n if (elemID) {\n selectElement(`#${elemID}`).remove();\n }\n};\n\nconst setAlignConfig = (alignment, params) => {\n let newNodeConfig = {};\n const { node, refNode } = params;\n switch (alignment) {\n case 'left':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(refNode.left - node.left))\n };\n break;\n\n case 'right':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(node.left + node.width - (refNode.left + refNode.width)))\n };\n break;\n\n case 'top':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: Math.abs(node.height - Math.abs(refNode.top - node.top)),\n width: node.width\n };\n break;\n\n case 'bottom':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: Math.abs(node.top - refNode.top + refNode.height),\n width: node.width\n };\n break;\n\n case 'h-center':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: refNode.width\n };\n break;\n\n case 'v-center':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: refNode.top,\n width: node.width\n };\n break;\n default:\n break;\n }\n return newNodeConfig;\n};\n\nexport const resolveAligment = (context, componentData) => {\n componentData.children().forEach((component) => {\n const host = component.model().host();\n\n if (host instanceof LayoutComponent && host.alignWith()) {\n const componentToAlign = context.componentMap().get(host.alignWith());\n\n if (componentToAlign) {\n const point = findNode(context, component.id()).node();\n const node = point.boundBox();\n const refNode = findNode(context, componentToAlign.renderAt())\n .node()\n .boundBox();\n const newNodeConfig = setAlignConfig(host.alignment(), { node, refNode });\n\n // check if model in parent component\n Object.assign(newNodeConfig, { id: point.id(), className: host.className() });\n context.renderer().createAndPositionDiv(newNodeConfig);\n context.componentMap().get(host.name()).setSpatialConfig({\n x: newNodeConfig.left,\n y: newNodeConfig.top,\n height: newNodeConfig.height,\n width: newNodeConfig.width\n\n });\n }\n }\n\n resolveAligment(context, component);\n });\n};\n","import { Utils } from '../utils';\nimport { drawLayout, resolveAligment, drawComponent } from './helper';\n\nexport class DrawingManager {\n constructor (data, renderer, container) {\n this._data = data.tree;\n this._componentMap = data.componentMap;\n this._layoutClassName = data.layoutClassName;\n this._renderer = renderer;\n this._mount = Utils.isDOMElement(container) ? container : Utils.getElement(container);\n }\n\n draw () {\n drawLayout(this);\n resolveAligment(this, this._data);\n drawComponent(this._data);\n return this;\n }\n\n data (data) {\n if (data) {\n this._data = data;\n }\n return this._data;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n className (param) {\n if (param) {\n this._layoutClassName = param;\n }\n return this._layoutClassName;\n }\n\n renderer (param) {\n if (param) {\n this._renderer = param;\n }\n return this._renderer;\n }\n\n mount (param) {\n if (param) {\n this._mount = param;\n }\n return this._mount;\n }\n}\n","import DefinitionModel from './definitionModel';\nimport { prepareTargetComponentMap, getComponent, placeComponent, placeGridComponent } from '../helper';\n\nexport default class DefinitionManager {\n constructor (componentMap, sequence, totalHeight, totalWidth) {\n this._componentMap = componentMap;\n this._prioritySequence = sequence;\n this._totalHeight = totalHeight;\n this._totalWidth = totalWidth;\n this._targetComponentMap = null;\n }\n\n // create the config model\n generateConfigModel () {\n prepareTargetComponentMap(this);\n const canvasComponent = this._targetComponentMap.get('canvas');\n const definitionModel = new DefinitionModel({});\n let tempDefModel = definitionModel;\n definitionModel.remainingHeight(this._totalHeight);\n definitionModel.remainingWidth(this._totalWidth);\n\n let componentRef = null;\n\n this._prioritySequence.forEach((name) => {\n componentRef = getComponent(canvasComponent, name);\n if (name !== 'grid') {\n tempDefModel = placeComponent(tempDefModel, componentRef).second;\n } else {\n tempDefModel = placeGridComponent(tempDefModel, componentRef.component);\n }\n });\n return definitionModel;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n targetComponentMap (param) {\n if (param) {\n this._targetComponentMap = param;\n }\n return this._targetComponentMap;\n }\n}\n","import { sanitizeConfig } from './helper';\n\nexport class LayoutDef {\n constructor () {\n this._componentMap = new Map();\n this._layoutDefinition = null;\n }\n\n addComponent (component) {\n this._componentMap.set(component.name(), component);\n }\n\n layoutDefinition (def) {\n if (def) {\n this._layoutDefinition = def;\n }\n return this._layoutDefinition;\n }\n\n addMultipleComponent (componentArray) {\n componentArray.forEach((comp) => {\n this.addComponent(comp);\n });\n }\n\n sanitizedDefinition () {\n sanitizeConfig(this, this._layoutDefinition);\n return this.layoutDefinition();\n }\n\n componentMap () {\n return this._componentMap;\n }\n resetComponentMap () {\n this._componentMap.clear();\n }\n}\n","import DefinitionManager from '../layout-definition/definition-manager';\n\nexport function sanitizeConfig (context, hostObj) {\n const hostID = hostObj.host();\n if (hostObj.lanes() && hostObj.lanes().length) {\n hostObj.lanes().forEach(childHost => sanitizeConfig(context, childHost));\n }\n if (hostID != null && typeof (hostID) === 'string') {\n if (context.componentMap().get(hostID) !== undefined) {\n hostObj.host(context.componentMap().get(hostID));\n }\n }\n}\n\nexport function calLayOutDef (context) {\n const { height, width } = context.dimension();\n const defManager = new DefinitionManager(context.layoutDef().componentMap(),\n context.prioritySequence(),\n height,\n width);\n const genLayoutdef = defManager.generateConfigModel();\n return genLayoutdef;\n}\n","import {\n LayoutModel\n} from '../layout-definition';\n\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT\n} from '../constants/defaults';\n\nimport {\n GRID\n} from '../../enums/constants';\n\nimport { DrawingManager } from '../drawing-manager';\nimport { removeElement } from '../drawing-manager/helper';\nimport { Utils } from '../utils';\nimport { LayoutDef } from './layout-def';\nimport { calLayOutDef } from './helper';\n\nexport default class LayoutManager {\n constructor (conf) {\n this._renderAt = conf.renderAt;\n this._layoutClassName = conf.className;\n this._dimension = {\n width: conf.width || DEFAULT_WIDTH,\n height: conf.height || DEFAULT_HEIGHT\n };\n\n this._skeletonType = conf.skeletonType || 'html';\n this._layoutDefinition = null;\n this._layoutDef = new LayoutDef();\n this._drawingManager = null;\n this._prioritySequence = [];\n this.tree = null;\n this._rootNodeID = null;\n }\n\n layoutDef (param) {\n if (param) {\n this._layoutDef = param;\n }\n return this._layoutDef;\n }\n\n prioritySequence (param) {\n if (param) {\n this._prioritySequence = param;\n }\n return this._prioritySequence;\n }\n\n dimension (param) {\n if (param) {\n Object.assign(this._dimension, param);\n }\n return this._dimension;\n }\n\n addComponent (component) {\n this._layoutDef.addComponent(component);\n }\n\n addMultipleComponent (componentArray) {\n this._layoutDef.addMultipleComponent(componentArray);\n }\n\n resetNode (node) {\n if (this.con) {\n this.con.resetNode(node);\n }\n }\n\n /**\n * function to update the node and rerender the layout.\n * @param {} config - node configuration to change.\n */\n updateNode (config) {\n this.tree.updateNode(config);\n this._layoutDefinition = this.tree.model;\n this.compute();\n }\n\n compute () {\n //----\n if (Utils.isDOMElement(this._renderAt)) {\n this._renderAt._layout = this;\n } else {\n document.getElementById(this._renderAt)._layout = this;\n }\n //-----\n this._layoutDefinition = calLayOutDef(this);\n this._layoutDef.layoutDefinition(this._layoutDefinition);\n this._layoutDefinition = this._layoutDef.sanitizedDefinition();\n this._layout = new LayoutModel({\n width: this._dimension.width,\n height: this._dimension.height\n },\n this._layoutDefinition);\n this.tree = this._layout.negotiate().tree();\n this._layout.broadcast();\n this._drawingManager = new DrawingManager({\n tree: this.tree,\n componentMap: this._layoutDef.componentMap(),\n layoutClassName: this._layoutClassName\n }, this._skeletonType, this._renderAt);\n\n if (this._rootNodeID) {\n this.tree.id(this._rootNodeID);\n } else {\n this._rootNodeID = this.tree.id();\n }\n // this will draw all the components by calling their draw method\n this._drawingManager.draw();\n }\n\n getRootNodeId () {\n return this._rootNodeID;\n }\n\n /**\n * This function takes the LayoutComponents and Register them in component store\n * @param {Array} layoutComponents\n */\n registerComponents (layoutComponents) {\n this._prioritySequence.length = 0;\n this._layoutDef.resetComponentMap();\n layoutComponents.forEach((container) => {\n if (container) {\n this._prioritySequence.push(container.name());\n this.addComponent(container);\n if (container.name() === 'grid') {\n container.component.forEach((componentArr) => {\n componentArr.forEach((compo) => {\n this.addComponent(compo);\n });\n });\n }\n }\n });\n return this;\n }\n\n getComponent (componentName) {\n return this._layoutDef.componentMap().get(componentName);\n }\n\n deleteElement (component, elementName) {\n this._layoutDef.componentMap().delete(elementName);\n const deleteElementId = component.renderAt();\n return removeElement(deleteElementId);\n }\n\n removeComponent (name) {\n const component = this.getComponent(name);\n if (component) {\n if (name === GRID) {\n return component.component.map(comp => comp.map(\n co => this.deleteElement(co, co.name())\n ));\n }\n return this.deleteElement(component, name);\n }\n return this;\n }\n\n renderAt (mount) {\n if (mount) {\n this._renderAt = mount;\n }\n return this._renderAt;\n }\n}\n","import { isEqual, STATE_NAMESPACES, selectElement, getValueParser } from 'muze-utils';\nimport { VisualGroup } from '@chartshq/visual-group';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, DATA, CONFIG, GRID }\n from '../constants';\nimport { canvasOptions } from './local-options';\nimport { LayoutManager } from '../../../layout/src/tree-layout';\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.} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, Object.assign({\n throwback: context._throwback\n }, context.dependencies()))];\n};\n\nexport const fixScrollBarConfig = (config) => {\n config.scrollBar.thickness = Math.min(50, Math.max(10, config.scrollBar.thickness));\n return config;\n};\n\nexport const setLayoutInfForUnits = (context) => {\n const layoutManager = context._layoutManager;\n const gridLayout = layoutManager.getComponent(GRID);\n const boundBox = gridLayout && gridLayout.getBoundBox();\n const valueMatrix = context.composition().visualGroup.matrixInstance().value;\n const parentContainer = selectElement(`#${layoutManager.getRootNodeId()}`).node();\n valueMatrix.each((cell) => {\n cell.valueOf().parentContainerInf({\n el: parentContainer,\n dimensions: boundBox\n });\n });\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 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 const { invalidValues } = context.config();\n\n visualGroup.valueParser(getValueParser(invalidValues));\n visualGroup.createMatrices();\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\nconst equalityChecker = (props, params) => {\n let checker = () => false;\n return !props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n checker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n checker = isEqual('Object');\n break;\n default:\n checker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return checker(oldVal, newVal);\n });\n};\n\nconst updateChecker = (props, params) => props.every((option, i) => {\n const val = params[i][1];\n switch (option) {\n case ROWS:\n case COLUMNS:\n return val !== null;\n\n case DATA:\n return val && !val.isEmpty();\n\n default:\n return true;\n\n }\n});\n\nexport const notifyAnimationEnd = (context) => {\n const viewInfo = context.layout().viewInfo();\n const centerMatrix = viewInfo && viewInfo.viewMatricesInfo.matrices.center[1] || [];\n const promises = [];\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n promises.push(cell.valueOf().done());\n });\n });\n const lifeCycleManager = context.lifeCycle();\n if (promises.length) {\n Promise.all(promises).then(() => {\n // Update life cycle\n lifeCycleManager.notify({ client: context, action: 'drawn' });\n const animDonePromises = [];\n\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n cell.valueOf().layers().forEach((layer) => {\n animDonePromises.push(layer.animationDone());\n });\n });\n });\n\n [context.xAxes(), context.yAxes()].forEach((axisArr) => {\n axisArr = axisArr || [];\n axisArr.forEach((axes) => {\n axes.forEach((axisInst) => {\n animDonePromises.push(axisInst.animationDone());\n });\n });\n });\n\n Promise.all(animDonePromises).then(() => {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n });\n });\n } else {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n }\n};\n\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n const nameSpaceProps = [...allOptions, ...Object.keys(canvasOptions)].map(prop =>\n `${STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE}.${prop}`);\n store.registerChangeListener(nameSpaceProps, (...params) => {\n const equalityProps = equalityChecker(props, params);\n const updateProps = updateChecker(props, params);\n // inform attached board to rerender\n if (equalityProps && context.mount()) {\n if (updateProps) {\n dispatchProps(context);\n } else {\n context.composition().visualGroup.remove();\n }\n context.render();\n }\n notifyAnimationEnd(context);\n }, true);\n};\n\nexport const applyInteractionPolicy = (firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n if (visualGroup) {\n const valueMatrix = visualGroup.matrixInstance().value;\n const interactionPolicy = firebolt._interactionPolicy;\n interactionPolicy(valueMatrix, firebolt);\n const crossInteractionPolicy = firebolt._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\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/**\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 */\nexport const 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 const rotationVal = xAxes[i][j].renderConfig().labels.rotation;\n if (rotationVal && rotationVal !== 0) {\n rotation = rotationVal;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.renderConfig({ labels: { rotation } });\n axis.smartTicks(axis.setTickConfig());\n });\n });\n }\n};\n\nexport const createGroupState = (context) => {\n const [globalState, localState] = VisualGroup.getState();\n const store = context._store;\n store.append('app.group', globalState);\n store.append('local.group', localState);\n};\n\nexport const removeChild = (mount) => {\n while (mount.firstChild) {\n mount.removeChild(mount.firstChild);\n }\n};\n\nexport const createLayoutManager = () => {\n const layoutManager = new LayoutManager({\n className: 'muze-group-container'\n });\n return layoutManager;\n};\n","/**\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 * @module GlobalOptions\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { fixScrollBarConfig } from './canvas/helper';\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, null],\n meta: {\n typeCheck: 'constructor',\n typeExpected: 'Object',\n takesMultipleParams: true,\n sanitization: ([config, auxConfig = {}], oldConfig) => {\n // Stores additional config, if passed\n const { reset = false } = auxConfig;\n let oldConf = {};\n\n if (!reset) {\n oldConf = mergeRecursive({}, config === null ? {} : oldConfig);\n }\n\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n const newConf = mergeRecursive(defConfig, config);\n return fixScrollBarConfig(newConf);\n }\n\n }\n }\n};\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 *\n * @memberof GenericLayout\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 this._config.border.width = Math.max(0, this._config.border.width);\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.PAGINATION]: 'scroll',\n [FieldNames.BUFFER]: 20,\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","/**\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 *\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 *\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.setAvailableSpace();\n const space = placeholder.getLogicalSpace();\n const minSecondMeasure = placeholder.getMinMeasures(minMeasures[secondMeasure]);\n\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minSecondMeasure);\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\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\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\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, ERROR_MSG } from 'muze-utils';\nimport {\n createTree,\n combineMatrices,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { 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._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\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 computeLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n computeViewableSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getPriorityDistribution () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 redistributeSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n static defaultConfig () {\n return defaultConfig;\n }\n\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\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.redistributeSpaces(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 * 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 getViewableMatrices () {\n return this.viewableMatrix;\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","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n computeLogicalSpace,\n createMatrixEachLevel\n } from '../utils';\nimport { ROW_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class RowVisualMatrix extends 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 super(matrix, config);\n\n this._breakPointer = (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: ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\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 computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, false);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height\n } = measures;\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = [height, height];\n const columnMeasures = widths;\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\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 tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n let remainingAvailWidth;\n let remainingWidth;\n let cWidths = [];\n let conditions = [];\n let maxPrioritySpace = 0;\n const {\n matrix,\n width: availableWidth,\n maxMeasures: maxWidths,\n maxWidth: currentWidth,\n height\n } = measures;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length ? this.primaryMatrix()[0].length : 0;\n\n const dist = [];\n\n remainingAvailWidth = availableWidth;\n remainingWidth = currentWidth;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n // divider = Math.min(2, matrixLen);\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n // divider = Math.min(1, matrixLen);\n }\n conditions.forEach((i) => {\n dist[i] = maxWidths[i];\n maxPrioritySpace += maxWidths[i];\n remainingAvailWidth -= dist[i];\n remainingWidth -= dist[i];\n });\n matrix[0].forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n dist[i] = remainingAvailWidth * (maxWidths[i] / remainingWidth);\n }\n });\n matrix.forEach(row => row.forEach((col, cIdx) => {\n if (conditions.indexOf(cIdx) === -1) {\n col.setAvailableSpace(dist[cIdx], height);\n\n cWidths[cIdx] = Math.max(cWidths[cIdx] || 0, Math.floor(col.getLogicalSpace().width));\n } else {\n cWidths[cIdx] = 0;\n }\n }));\n\n const prioritySpace = availableWidth - cWidths.reduce((t, n) => t + n);\n if (prioritySpace < 0) {\n cWidths = cWidths.map(() => 0);\n } else {\n conditions.forEach((i) => {\n cWidths[i] = Math.floor(prioritySpace * (dist[i] / maxPrioritySpace || 1));\n });\n }\n return cWidths;\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 const { height } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n\n return Math.min(widthMeasures.length - 1, i);\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 redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const maxMeasures = this.maxMeasures();\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n const logicalWidths = this.getPriorityDistribution({\n matrix: this._layoutMatrix,\n maxWidth,\n maxMeasures,\n width,\n height\n });\n\n this.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, logicalWidths };\n const measures = this.redistributeViewSpaces(options);\n maxWidths = measures.maxWidths;\n maxHeights = measures.maxHeights;\n });\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, height, maxHeights, maxWidths, logicalWidths } = measures;\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n measures.maxMeasures = maxMeasures;\n measures.maxWidth = maxWidth;\n if (maxWidth > 0) {\n cWidths = logicalWidths;\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 if (maxWidths.length > 0) {\n cWidths = cWidths.map((e, i) => Math.max(e, maxWidths[0][i] || 0));\n }\n maxWidths.push(cWidths);\n for (let x = 0; x < maxWidths.length; x++) {\n maxWidths[x] = cWidths;\n }\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = measures;\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 cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n\n if (rIdx === 0 && cIdx < breakPointer) {\n columnWidths[0][cIdx] = colWidth;\n widths[0] = (widths[0] || 0) + colWidth;\n } else if (rIdx === 0 && cIdx >= breakPointer) {\n columnWidths[1][cIdx - breakPointer] = colWidth;\n widths[1] = (widths[1] || 0) + colWidth;\n }\n if (cIdx === this._lastLevelKey) {\n rowHeights[0][rIdx] = colHeight;\n rowHeights[1][rIdx] = colHeight;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n getDistributedWidth,\n spaceTakenByRow,\n createMatrixEachLevel,\n computeLogicalSpace\n } from '../utils';\nimport { COLUMN_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class ColumnVisualMatrix extends 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 super(matrix, config);\n\n this._breakPointer = matrix[0].length;\n\n // Create Tree\n this._tree = {\n key: COLUMN_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\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 computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, true);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height,\n width\n } = measures;\n\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i, height };\n const {\n heights,\n rowHeights,\n columnWidths\n } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = heights;\n const 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\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\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n const {\n height,\n maxHeights\n } = measures;\n let remainingHeight = height;\n let heightDist = [];\n let conditions = [];\n let divider = 2;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n divider = 2;\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n divider = 1;\n }\n maxHeights.forEach((heights, index) => {\n if (conditions.indexOf(index) === -1) {\n heightDist[index] = heights;\n remainingHeight -= heights;\n }\n });\n if (remainingHeight < 0) {\n heightDist = heightDist.map(() => 0);\n } else {\n conditions.forEach((condition) => {\n heightDist[condition] = Math.min(maxHeights[condition], (remainingHeight) / divider);\n });\n }\n return heightDist;\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) {\n let j;\n const { width } = this.availableSpace();\n\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, 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 redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n\n this.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 = this.redistributeViewSpaces(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let rHeights = [];\n const {\n matrix,\n width,\n maxHeights,\n maxWidths\n } = measures;\n const borderWidth = this.config().unitMeasures.border;\n\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();\n\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace.height);\n\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, Math.floor(col.getLogicalSpace().height));\n }));\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n maxHeights.push(rHeights);\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} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, height, maxWidths, maxHeights, matrixIndex } = measures;\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 const heightDistribution = this.getPriorityDistribution({ height, maxHeights: maxHeights[0] || [] });\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = heightDistribution[rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n\n if (cIdx === 0 && rIdx < breakPointer) {\n rowHeights[0][rIdx] = colHeight;\n heights[0] = (heights[0] || 0) + colHeight;\n } else if (cIdx === 0 && rIdx >= breakPointer) {\n rowHeights[1][rIdx - breakPointer] = colHeight;\n heights[1] = (heights[1] || 0) + colHeight;\n }\n if (rIdx === this._lastLevelKey) {\n columnWidths[0][cIdx] = colWidth;\n columnWidths[1][cIdx] = colWidth;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import {\n HEIGHT, WIDTH, COLUMN, ROW, HORIZONTAL, VERTICAL, HOLISTIC,\n MAX_WIDTH_AVAIL_FOR_COL_MATRIX, COLUMN_MATRIX, MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX, ROW_MATRIX, SCROLL\n} 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\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\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\nconst paginationDetailsMap = {\n column: {\n maxMeasure: MAX_WIDTH_AVAIL_FOR_COL_MATRIX,\n matrix: COLUMN_MATRIX,\n measureType: WIDTH,\n scrollType: HORIZONTAL\n },\n row: {\n maxMeasure: MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX,\n matrix: ROW_MATRIX,\n measureType: HEIGHT,\n scrollType: VERTICAL\n }\n};\n\n/**\n * This method provides the required width/height in the different pagination stages.\n * If the pagination is holistic, then only the max width/height will be provided for layouting\n * If scroll is enabled, then the entire width/height shall be provided for layouting\n * Note: width is required for scrolling the columns while height is required for scrolling rows\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {Object} measureDetails different measure details for row/column\n * @param {number} maxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst getMatrixMeasureForPagination = (layout, measureDetails, maxMeasure, buffer) => {\n const {\n pagination\n } = layout.config();\n const {\n matrix,\n measureType,\n scrollType\n } = measureDetails;\n\n switch (pagination) {\n case HOLISTIC:\n return maxMeasure;\n default: {\n const actualMeasure = getMatrixMeasurement(layout[matrix](), measureType) + buffer;\n\n if (actualMeasure > maxMeasure) {\n layout.scrollInfo({ [scrollType]: true });\n }\n return Math.max(maxMeasure, actualMeasure);\n }\n }\n};\n\n/**\n * This method uses the getMatrixMeasureForPagination function to calculate maximum measure\n * depending on the layouting algorithm used\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {string} matrixType row/column\n * @param {number} relatedMaxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst paginationMeasureGetter = (layout, matrixType, relatedMaxMeasure, buffer) =>\n getMatrixMeasureForPagination(layout, paginationDetailsMap[matrixType], relatedMaxMeasure, buffer);\n\nconst getMatrixWidthDetails = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const {\n width\n } = layout.measurement();\n const {\n border,\n buffer\n } = layout.config();\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Get maximum width allowed for the row matrix\n const maxRowMatrixWidth = Math.min(rowMatrixWidth + buffer, width / 2);\n\n // Get maximum width available for the column matrix\n const maxWidthAvailableForColumnMatrix = width - maxRowMatrixWidth - borderWidth;\n\n // Set width for column matrix\n const columnMatrixWidth = paginationMeasureGetter(layout, COLUMN, maxWidthAvailableForColumnMatrix, 0);\n\n return {\n rowMatrixWidth,\n maxRowMatrixWidth,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n\nconst getHeightRequiredByColMatrix = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const columnMatrix = layout.columnMatrix();\n\n // Get maximum allowed height for colum matrix\n const maxColumnMatrixHeight = Math.min(columnMatrix.getLogicalSpace().height, height / 2);\n\n // Set the computed width and max height to column matrix to determine the actual height\n // that will be taken by the column matrix\n columnMatrix.setAvailableSpace(columnMatrixWidth, maxColumnMatrixHeight);\n\n // Get the set of pages column view\n const columnViewPages = columnMatrix.getViewableSpaces();\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 return {\n columnMatrixHeight,\n maxColumnMatrixHeight\n };\n};\n\nconst getMatrixHeightDetails = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const {\n buffer\n } = layout.config();\n\n // Get actual height required by column matrix\n const { columnMatrixHeight, maxColumnMatrixHeight } = getHeightRequiredByColMatrix(layout, columnMatrixWidth);\n\n // Based on column height, compute max height available for row matrix\n const maxHeightAvailableForRowMatrix = height - Math.min(maxColumnMatrixHeight, columnMatrixHeight);\n\n // Get height for row matrix\n const rowMatrixHeight = paginationMeasureGetter(layout, ROW, maxHeightAvailableForRowMatrix, buffer);\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n };\n};\n\nconst setValueMatrixMeasurements = (layout, rowViewableSpaces, columnViewableSpaces) => {\n const centerMatrix = layout.centerMatrix();\n\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get the heights for each cell in the row matrix\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n\n // Get the widths for each of the row matrix cells(primary and secondary)\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n\n // Get the widths for each cell in the column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n\n // Get the widths for each of the column matrix cells(primary and secondary)\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix computed throught the row and\n // column matrices\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n\n // Set the heights and widths for the corner matrices namely:\n // TOP_LEFT\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n // TOP_RIGHT\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n // BOTTOM_LEFT\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n // BOTTOM_RIGHT\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n};\n\nconst bufferCondition = {\n isScroll: true,\n pagination: SCROLL\n};\n\nconst getBufferFromCondition = (layout, type) => {\n const scrollInfo = layout.scrollInfo();\n const {\n pagination\n } = layout.config();\n\n const currentBufferType = {\n pagination,\n isScroll: scrollInfo[type]\n };\n\n return Object.keys(bufferCondition).every(e => bufferCondition[e] === currentBufferType[e]);\n};\n\nconst getActualBufferFromConfig = (layout) => {\n const {\n buffer\n } = layout.config();\n const [horizontalBuffer, verticalBuffer] = [HORIZONTAL, VERTICAL].map((type) => {\n if (getBufferFromCondition(layout, type)) {\n return buffer;\n }\n return 0;\n });\n\n return {\n horizontalBuffer,\n verticalBuffer\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\n // Compute the widths of the row and column matrices\n const {\n rowMatrixWidth,\n maxRowMatrixWidth,\n maxWidthAvailableForColumnMatrix,\n columnMatrixWidth\n } = getMatrixWidthDetails(layout);\n\n // Compute the heights of the row and column matrices\n const {\n columnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n } = getMatrixHeightDetails(layout, columnMatrixWidth);\n\n const {\n horizontalBuffer,\n verticalBuffer\n } = getActualBufferFromConfig(layout);\n rowMatrix.setAvailableSpace(maxRowMatrixWidth - verticalBuffer, rowMatrixHeight - horizontalBuffer);\n\n // Get row and columns viewable spaces\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n\n // Set view spaces for row and columns\n setViewSpaces(layout, ROW, rowViewableSpaces);\n setViewSpaces(layout, COLUMN, columnViewableSpaces);\n\n // Set measures for each cell of the value matrix\n setValueMatrixMeasurements(layout, rowViewableSpaces, columnViewableSpaces);\n\n return {\n rowMatrixHeight: rowMatrixHeight - horizontalBuffer,\n rowMatrixWidth: rowMatrixWidth - verticalBuffer,\n maxHeightAvailableForRowMatrix: maxHeightAvailableForRowMatrix - horizontalBuffer,\n\n columnMatrixHeight,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\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.getViewableMatrices();\n const columnMatrices = columnMatrix.getViewableMatrices();\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\nconst measureSum = measureArr => measureArr.reduce((total, measure) => total + measure, 0);\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, maxRowHeight, maxColWidth) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowSpaces = rowMatrix.getViewableSpaces()[rowPointer];\n const colSpaces = columnMatrix.getViewableSpaces()[columnPointer];\n\n const {\n rowHeights,\n width: rowMatrixWidth\n } = rowSpaces;\n const {\n columnWidths,\n height: columnMatrixHeight\n } = colSpaces;\n\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = measureSum(rowHeights.primary);\n const centerWidth = measureSum(columnWidths.primary);\n const viewWidth = [leftWidth, Math.min(centerWidth, maxColWidth), rightWidth];\n const viewHeight = [topHeight, Math.min(centerHeight, maxRowHeight), bottomHeight];\n\n return {\n viewWidth,\n viewHeight,\n actualCenterMeasures: {\n height: centerHeight,\n width: centerWidth\n },\n totalMeasures: {\n width: measureSum(viewWidth),\n height: measureSum(viewHeight)\n },\n unitHeights: rowHeights,\n unitWidths: columnWidths\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, mergeRecursive } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements } from './computations';\nimport { getViewMeasurements, getViewMatrices } from './view-info-getter';\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 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 this._scrollInfo = { horizontal: false, vertical: false };\n }\n\n static defaultViewInfo () {\n return Object.assign({}, {\n layoutDimensions: {\n border: this.defaultConfig().border,\n viewHeight: [0, 0, 0],\n viewWidth: [0, 0, 0]\n },\n viewMatricesInfo: {\n columnPages: 0,\n rowPages: 0,\n matrices: { top: [], center: [], bottom: [] }\n }\n });\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 this.scrollInfo({ horizontal: false, vertical: false });\n const {\n maxHeightAvailableForRowMatrix,\n maxWidthAvailableForColumnMatrix\n } = computeLayoutMeasurements(this);\n\n this.setViewInformation(maxHeightAvailableForRowMatrix, maxWidthAvailableForColumnMatrix);\n return this;\n }\n\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.viewInfo();\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 pages (type) {\n const { viewMatricesInfo } = this.viewInfo();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n viewInfo (...viewInfo) {\n if (viewInfo.length) {\n this._viewInfo = viewInfo[0];\n return this;\n }\n return this._viewInfo;\n }\n\n scrollInfo (...scrollInfo) {\n if (scrollInfo.length) {\n this._scrollInfo = mergeRecursive(this._scrollInfo, scrollInfo[0]);\n return this;\n }\n return this._scrollInfo;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation (maxRowHeight, maxColWidth) {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this, maxRowHeight, maxColWidth);\n layoutDimensions.border = border;\n this.viewInfo({\n viewMatricesInfo,\n layoutDimensions\n });\n return this;\n }\n}\n","import RowMatrix from '../visual-matrix/row-matrix';\nimport ColumnMatrix from '../visual-matrix/column-matrix';\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 priority\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\n context.rowMatrix(new RowMatrix([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 priority: priority.row,\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 ColumnMatrix([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 priority: priority.col,\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import {\n TOP, BOTTOM, LEFT, RIGHT, CENTER, BLANK_BORDERS, COLUMN, ROW,\n VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS\n} from '../enums/constants';\n\nconst borderMap = {\n [`${TOP}-${LEFT}`]: NO_BORDERS,\n [`${TOP}-${MIDDLE}`]: COLUMN,\n [`${TOP}-${RIGHT}`]: NO_BORDERS,\n [`${CENTER}-${LEFT}`]: ROW,\n [`${CENTER}-${MIDDLE}`]: CENTER,\n [`${CENTER}-${RIGHT}`]: ROW,\n [`${BOTTOM}-${LEFT}`]: NO_BORDERS,\n [`${BOTTOM}-${MIDDLE}`]: COLUMN,\n [`${BOTTOM}-${RIGHT}`]: NO_BORDERS\n};\n\nconst applySpecificBorder = (cells, color, type, style) => {\n cells.style(`border-${type}`, `${style} ${color}`);\n};\n\nconst specificBorderApplier = (borderTypes, showBorders, cells, borderInfo) => {\n const {\n color,\n width,\n style\n } = borderInfo;\n const borderStyle = `${width}px ${style}`;\n\n borderTypes.forEach((borderType) => {\n applySpecificBorder(cells, showBorders[borderType] ? color : BLANK_BORDERS, borderType, borderStyle);\n });\n};\n\nconst borderApplier = (cells, borderInfo) => {\n const {\n showRowBorders,\n showColBorders,\n showValueBorders\n } = borderInfo;\n return {\n row: () => specificBorderApplier([TOP, BOTTOM], showRowBorders, cells, borderInfo),\n column: () => specificBorderApplier([LEFT, RIGHT], showColBorders, cells, borderInfo),\n center: () => specificBorderApplier([LEFT, RIGHT, TOP, BOTTOM], showValueBorders, cells, borderInfo)\n };\n};\n\nexport const applyBorders = (cells, border, row, column) => {\n const borderApplierFn = borderApplier(cells, border);\n const borderMapVal = borderMap[`${ROW_MATRIX_INDEX[VIEW_INDEX[row]]}-${COLUMN_MATRIX_INDEX[column]}`];\n if (borderMapVal) {\n borderApplierFn[borderMapVal]();\n }\n};\n","import { selectElement } from 'muze-utils';\nimport {\n TOP, BOTTOM, ROW_SPAN, COL_SPAN, CENTER, ROW, COLUMN\n} from '../enums/constants';\n\nconst orderMaker = arr => Array.from(Array(arr.length).keys());\n\nconst nestByStack = (stack, updateArr, optionalParams = {}) => {\n let {\n order,\n keyFn\n } = optionalParams;\n const arr = updateArr.slice();\n const currStack = stack.slice();\n const prevStack = currStack.slice();\n // Order in which element are to be checked for nesting, default normal looping\n // Order is always in the order of nest, i.e., left to right\n order = order || Array.from(Array(arr.length).keys());\n\n // Key function, if array of objects\n keyFn = keyFn || (v => v);\n\n // Return same array if stack is empty\n if (currStack.length === 0) {\n const newArr = [];\n order.forEach((e) => {\n newArr.push(arr[e]);\n });\n return { prevStack, currStack: arr, arr: newArr };\n }\n\n let arrVal = '';\n let stackVal = '';\n const newArr = [];\n\n // Loop in order\n for (let i = order.length - 1; i >= 0; i--) {\n // Get current element index from the order given\n const currElemIndex = order[i];\n\n // Crete a hashmap for the hierarchy by joining strings of the array for both stack and input array\n arrVal += keyFn(arr[currElemIndex]);\n stackVal += keyFn(currStack[currElemIndex]);\n\n // If the current value and value in stack is same, convert it to null\n if (arrVal === stackVal) {\n newArr[currElemIndex] = null;\n } else {\n stackVal = '';\n // Loop from the current index in order to the last element in order to change the\n // whole hierarchy\n for (let j = i; j < order.length; j++) {\n const newElem = order[j];\n const arrElem = arr[newElem];\n\n newArr[newElem] = arrElem;\n\n // Reset stack to new stack\n currStack[newElem] = arrElem;\n stackVal = arrVal;\n }\n }\n }\n const returnArr = [];\n order.forEach((e) => {\n returnArr.push(newArr[e]);\n });\n return { prevStack, currStack, arr: returnArr };\n};\n\nconst spanCalculator = (colData, colIdx, matrix, rIdx) => {\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData) {\n return () => null;\n }\n\n const conditions = {\n row: count => matrix[rIdx + count] && matrix[rIdx + count][colIdx],\n column: count => matrix[rIdx][colIdx + count]\n };\n\n return (type) => {\n let count = 1;\n let isNull = false;\n\n while (!isNull) {\n if (conditions[type](count) === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n };\n};\n\nconst maskCreator = (matrix, order) => ({\n row: () => {\n let stack = [];\n return matrix.map((e) => {\n const {\n currStack,\n arr\n } = nestByStack(stack, e, { keyFn: val => val.valueOf(), order });\n\n stack = currStack;\n return arr;\n });\n },\n column: () => {\n let stack = [];\n const viewMatrix = [];\n matrix.length && matrix[0].forEach((cell, colIndex) => {\n const hierarchy = [];\n matrix.forEach((row) => {\n hierarchy.push(row[colIndex]);\n });\n const {\n currStack,\n arr\n } = nestByStack(stack, hierarchy, { keyFn: val => val.valueOf(), order });\n stack = currStack;\n\n matrix.forEach((row, rowIndex) => {\n viewMatrix[rowIndex] = viewMatrix[rowIndex] || [];\n viewMatrix[rowIndex][colIndex] = arr[rowIndex];\n });\n });\n return viewMatrix;\n }\n});\n\nconst spanGenerator = viewMatrix => ({\n row: () => {\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 = spanCalculator(col, i, viewMatrix, ridx)('row');\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return spans;\n },\n column: () => viewMatrix.map((row, ridx) => row.map((col, i) => spanCalculator(col, i, viewMatrix, ridx)('column'))\n .filter(col => col !== null))\n});\n\nconst getOrder = () => ({\n row: matrix => orderMaker(matrix[0]),\n column: matrix => orderMaker(matrix)\n});\n\nconst matrixSpanGeneratorMap = {\n [`${TOP}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${BOTTOM}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${CENTER}-0`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n },\n [`${CENTER}-2`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n }\n};\n\nconst matrixSpanGenerator = (type) => {\n const generator = matrixSpanGeneratorMap[type];\n if (generator) {\n return generator;\n }\n return {\n orderGetter: () => null,\n viewMatrixMaker: matrix => () => matrix,\n spanMaker: () => () => null\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 spans = null;\n let viewMatrix = matrix;\n const {\n orderGetter,\n viewMatrixMaker,\n spanMaker\n } = matrixSpanGenerator(`${type}-${index}`);\n\n if (matrix.length) {\n const order = orderGetter(matrix);\n viewMatrix = viewMatrixMaker(matrix, order)();\n spans = spanMaker(viewMatrix)();\n }\n return { viewMatrix, spans };\n}\n\nconst spaceAllocationDueToSpan = (span = 1, placeholder, config, index) => {\n const height = placeholder.availHeight();\n const width = placeholder.availWidth();\n const borderWidth = config.border.width;\n const { unitWidths } = config.dimensions;\n const { col } = index;\n\n return {\n [ROW_SPAN] () {\n placeholder.setAvailableSpace(width, height * span);\n if (span === 1) {\n selectElement(this).style('height', `${height * span + borderWidth}px`);\n }\n },\n [COL_SPAN] () {\n const primaryUnitWidth = unitWidths.primary[col];\n if (span > 1) {\n let cumulativeWidth = 0;\n for (let i = col; i < col + span; i++) {\n cumulativeWidth += unitWidths.primary[i] - borderWidth;\n }\n placeholder.setAvailableSpace(cumulativeWidth + borderWidth, height);\n } else if (primaryUnitWidth) {\n placeholder.setAvailableSpace(primaryUnitWidth - borderWidth, height);\n }\n selectElement(this).style('height', `${height}px`);\n }\n };\n};\n\nconst spanApplier = (cells, spans, config, type) => {\n let cellCounter = 0;\n cells.attr(type, function (cell, colIndex) {\n if (colIndex === 0) {\n cellCounter = 0;\n }\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n const index = {\n row: cell.rowIndex,\n col: cellCounter\n };\n\n spaceAllocationDueToSpan(span, placeholder, config, index)[type].bind(this)();\n cellCounter += span;\n return span;\n });\n};\n\nconst spanApplierMap = {\n [`${TOP}-0`]: null,\n [`${TOP}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${TOP}-2`]: null,\n [`${CENTER}-0`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${CENTER}-1`]: null,\n [`${CENTER}-2`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${BOTTOM}-0`]: null,\n [`${BOTTOM}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${BOTTOM}-2`]: null\n};\n\nexport const applySpans = (cells, spans, config, type) => {\n const applier = spanApplierMap[type];\n if (applier) {\n applier(cells, spans, config);\n }\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 *\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';\nexport const MAX_LINES = 'maxLines';\nexport const MIN_CHARS = 'minCharacters';\nexport const ROTATION = 'rotation';\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 getMinMeasures (providedMinMeasure = 0) {\n return providedMinMeasure;\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]: null,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true,\n [CONSTANTS.MAX_LINES]: 0,\n [CONSTANTS.MIN_CHARS]: 0,\n [CONSTANTS.ROTATION]: null\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 minSpacing: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {},\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nconst textProps = {\n smartText: {}\n};\nexport const PROPS = {\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [TEXT]: mergeRecursive(textProps, 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, BOTTOM, TOP } 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\n if (width || height) {\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.source().logicalSpace(null);\n } else {\n this.source().resetLogicalSpace();\n }\n this.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 let actualWidth = 0;\n let actualHeight = 0;\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 orientation\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 selection.classed(`${CLASSPREFIX}-axis-container-${orientation}`, true);\n\n this.mount(mount);\n if (!availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (!availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n actualWidth = availWidth;\n actualHeight = availHeight;\n if (!show) {\n actualWidth = (orientation === TOP || orientation === BOTTOM) ? availWidth : 0;\n actualHeight = (orientation === TOP || orientation === BOTTOM) ? 0 : availHeight;\n }\n wrapperDiv.style(WIDTH, `${actualWidth}px`)\n .style(HEIGHT, `${actualHeight}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\n getMinMeasures () {\n return 0;\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\nconst setSmartText = (context) => {\n const source = context.source();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n rotation\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const labelManager = context.dependencies().labelManager;\n\n labelManager.setStyle(context._computedStyle);\n\n !rotation && context.smartText(labelManager.getSmartText(source, availWidth, availHeight, false));\n rotation && context.smartText(labelManager.getSmartText(source, availHeight, availWidth, true));\n\n return context;\n};\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 {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n show,\n maxLines,\n minCharacters\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const source = context.source();\n const space = context.smartText();\n const minText = new Array(minCharacters).fill('W').join('');\n const _minTextSpace = labelManager.getOriSize(minText);\n\n context.config({ rotation: false });\n if (space.width > (availWidth || 0) && maxLines) {\n space.height = space.oriTextHeight * maxLines;\n }\n if (availWidth && availWidth < space.width) {\n space.width = _minTextSpace.width;\n }\n if (availWidth && availWidth < Math.min(_minTextSpace.width, space.oriTextWidth)) {\n const smartSpace = labelManager.getSmartText(source, availHeight, _minTextSpace.height, true);\n space.width = smartSpace.height;\n space.height = smartSpace.width;\n context.config({ rotation: true });\n context.smartText(smartSpace);\n }\n\n if (show) {\n return {\n width: Math.ceil(space.width) + paddedWidth,\n height: Math.ceil(space.height) + paddedHeight\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 generateGetterSetters(this, PROPS[TEXT]);\n const space = this._dependencies.labelManager.getOriSize('w');\n this.minSpacing({ width: Math.floor(space.width * 3 / 4), height: Math.floor(space.height / 2) });\n setSmartText(this);\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 setSmartText(this);\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 availHeight = this.availHeight();\n const {\n margin,\n show,\n verticalAlign,\n textAlign,\n rotation\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 const vAlign = verticalAlign || rotation ? 'middle' : 'top';\n const {\n width,\n height\n } = this.smartText();\n const {\n height: minHeightSpace\n } = this.minSpacing();\n const translation = {\n top: width + minHeightSpace / 2,\n middle: width / 2 + minHeightSpace,\n bottom: minHeightSpace\n };\n\n container.style('vertical-align', vAlign);\n\n // Set class name\n elem.classed(this._className, true);\n\n // Apply styles\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n elem.style('transform', rotation ? `translate(${height / 2}px,\n ${translation[vAlign]}px) rotate(-90deg)` : '');\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n container.style(`margin-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n this._dependencies.labelManager.setStyle(this._computedStyle);\n elem.html(this._dependencies.labelManager.getSmartText(this.source(), availWidth, availHeight, true).text);\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.clearCaching();\n [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\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 .width(width).height(height - this.getCaptionSpace().height)\n .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';\nimport { TOP } from '../constants';\n\n/**\n *\n *\n * @param {*} rawContent\n *\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 *\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n let margin = {};\n const {\n content,\n classPrefix,\n maxLines\n } = config;\n const cell = prevCell || new TextCell(\n {\n type: cellType === 'title' ? 'header' : 'text',\n className: `${classPrefix}-${cellType}-cell`\n }, {\n labelManager\n })\n .config({ maxLines }).minSpacing({ width: 0, height: 0 });\n\n cell.source(content);\n cell._minTickDiff = { height: 0, width: 0 };\n\n if (config.position === TOP) {\n margin = { top: 0, bottom: config.padding };\n } else {\n margin = { top: config.padding, bottom: 0 };\n }\n cell.config({ margin });\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 *\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type,\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 const subtitle = context.subtitle();\n const isSubtitle = resolveTitleSubTitleContent(subtitle[0]);\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.height = context.height();\n config.classPrefix = context.config().classPrefix;\n config.content = content;\n config.padding = (type === 'title' && !isSubtitle.length) ? subtitle[1].padding : config.padding;\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;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport { getValueParser, retrieveFieldDisplayName, DataModel, getObjProp } from 'muze-utils';\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 *\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 && scale) {\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({\n scale,\n canvas,\n fieldName: scaleProps.field,\n title: retrieveFieldDisplayName(canvas.data(), scaleProps.field),\n LegendCls,\n scaleType\n });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n *\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 const { invalidValues } = canvas.config();\n\n const parser = getValueParser(invalidValues);\n legendInfo.forEach((dataInfo, index) => {\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n title: titleText,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || titleText;\n if (config.show) {\n config.position = position;\n config.align = align;\n let legend = getObjProp(prevLegends[scaleType], index);\n if (!legend) {\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 const metaData = legend.metaData();\n if (metaData instanceof DataModel) {\n metaData.dispose();\n }\n legend.scale(scale)\n .valueParser(parser)\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 *\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 *\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.composition().legend || {});\n};\n","import { LayoutComponent } from '../../../../layout/src/tree-layout';\n\nexport default class MuzeComponent extends LayoutComponent {\n getLogicalSpace () {\n const { width, height } = this.boundBox();\n return { width, height };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n }\n\n getBoundBox () {\n return this.boundBox();\n }\n\n updateWrapper () {\n throw Error('Update is not implemented');\n }\n\n setParams () {\n throw Error('set params is not implemented');\n }\n}\n","import { selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { LEFT } from '../../constants';\n\nexport default class HeaderComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n renderHeader (container) {\n const layoutConfig = this.params.config;\n container = selectElement(container);\n const { align } = layoutConfig;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([this.name]);\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 const { height, width } = this.boundBox();\n this.component.setAvailableSpace(width, height);\n\n this.component && this.component.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (layoutConfig && this.component) {\n cont.style('float', LEFT)\n .style('text-align', align);\n // .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n }\n\n draw (container) {\n this.renderHeader(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.setParams(params);\n this.name(params.name);\n this.boundBox(params.component.getLogicalSpace());\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y,\n left: conf.x,\n width: conf.width,\n height: conf.height });\n this.renderAt(conf.renderAt);\n }\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport {\n LEFT, RIGHT, VERTICAL, HORIZONTAL, TOP, BOTTOM, HORIZONTAL_CENTER, VERTICAL_CENTER\n} from '../../constants';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\nfunction defaultAlignmentHelper (position) {\n let alignment = null;\n const alignWith = `${ROW_MATRIX_INDEX[1]}-${COLUMN_MATRIX_INDEX[1]}`;\n switch (position) {\n case TOP:\n case BOTTOM:\n alignment = HORIZONTAL_CENTER;\n break;\n case LEFT:\n case RIGHT:\n alignment = VERTICAL_CENTER;\n break;\n default:\n alignment = VERTICAL_CENTER;\n }\n return { alignment, alignWith };\n}\nexport default class LegendComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.measurement.legendSpace, 0);\n this.setParams(params);\n }\n\n renderLegend (container) {\n container = selectElement(container);\n const sectionComponents = [];\n const { position, classPrefix } = this.params.config;\n const legendMount = makeElement(container, 'div', [this.components],\n `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = this.newDimensions.width;\n const legHeight = this.newDimensions.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 this.components.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 // mount.each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true));\n mount.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 mount.classed(`${classPrefix}-legend-horizontal-section`, true);\n mount.classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', this.components, `${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 draw (container) {\n this.renderLegend(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.measurement.legendSpace);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.components = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n const { alignWith, alignment } = defaultAlignmentHelper(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith || alignWith);\n this.alignment(params.config.alignment || alignment);\n }\n\n}\n","import {\n selectElement,\n makeElement,\n getD3Drag,\n getEvent,\n getWindow,\n hasTouch\n} from 'muze-utils';\nimport './scroll-bar.scss';\nimport { WIDTH, HEIGHT } from '../../../constants';\n\nconst d3Drag = getD3Drag();\n\nconst arrowSizeMap = {\n left: WIDTH,\n right: WIDTH,\n top: HEIGHT,\n bottom: HEIGHT\n};\n\nexport const getUnitPositions = (unitMeasures, totalLength, viewLength) => {\n let currentLen = 0;\n const measures = unitMeasures.primary && unitMeasures.primary.length ?\n unitMeasures.primary : unitMeasures.secondary;\n\n return measures.map((e) => {\n const unitPosition = currentLen * 100 / (totalLength - viewLength);\n currentLen += e;\n return unitPosition;\n });\n};\n\nexport const createScrollBarArrow = (mount, type, config) => {\n const {\n classPrefix,\n thickness\n } = config;\n const arrow = makeElement(mount, 'div', [type], `${classPrefix}-scroll-arrow-${type}`);\n\n arrow.classed(`${classPrefix}-scroll-arrow`, true);\n arrow.style(arrowSizeMap[type], `${thickness}px`);\n\n const chevron = makeElement(arrow, 'div', [1], `${classPrefix}-scroll-arrow-chevron`);\n\n chevron.attr('id', `${classPrefix}-scroll-arrow-chevron-${type}`);\n\n return arrow;\n};\n\nexport const createScrollBarRect = (mount, config) => {\n const {\n classPrefix\n } = config;\n const rect = makeElement(mount, 'div', [1], `${classPrefix}-scroll-rect`);\n const mover = makeElement(rect, 'div', [1], `${classPrefix}-scroll-mover`);\n\n return { rect, mover };\n};\n\nexport const applyRectClick = (scrollMaker, moverRect) => {\n const {\n rect\n } = moverRect;\n\n rect.on('click', () => {\n const event = getEvent();\n scrollMaker.emptyScrollAreaClick(event);\n });\n};\n\nconst applyMoverDrag = (scrollMaker, moverRect) => {\n let startPos = {};\n let moverStartPos = 0;\n let rectStartPos = 0;\n let endPos = {};\n const {\n mover,\n rect\n } = moverRect;\n\n mover.call(d3Drag()\n .on('start', () => {\n const event = getEvent();\n\n moverStartPos = mover.node().getBoundingClientRect();\n rectStartPos = rect.node().getBoundingClientRect();\n startPos = {\n x: event.x,\n y: event.y\n };\n })\n .on('drag', () => {\n const event = getEvent();\n const window = getWindow();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n const distanceMoved = {\n x: endPos.x - startPos.x,\n y: endPos.y - startPos.y\n };\n const actualPosition = {\n x: moverStartPos.x + distanceMoved.x - rectStartPos.x + window.pageXOffset,\n y: moverStartPos.y + distanceMoved.y - rectStartPos.y + window.pageYOffset\n };\n\n scrollMaker.changeMoverPosition(actualPosition);\n }));\n};\n\nconst applyScrollMouseDownAction = (moverRect, scrollMaker, speed) => {\n const {\n mover,\n rect\n } = moverRect;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n scrollMaker.changeMoverPosition({ x: x - rectX + speed, y: y - rectY + speed });\n};\n\nconst registerListenerOnArrow = (scrollMaker, moverRect, arrowType, speed) => {\n let timer = '';\n const arrow = scrollMaker._components[arrowType];\n const isTouchDevice = hasTouch();\n\n arrow.on(isTouchDevice ? 'touchstart' : 'mousedown', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n timer = setInterval(() => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n }, 100);\n }).on(isTouchDevice ? 'touchend' : 'mouseup', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n clearInterval(timer);\n }).on('click', () => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n });\n};\n\nexport const registerListeners = (scrollMaker) => {\n const {\n moverRect\n } = scrollMaker._components;\n\n const speed = scrollMaker.config().speed;\n\n registerListenerOnArrow(scrollMaker, moverRect, 'prevArrow', -speed);\n applyMoverDrag(scrollMaker, moverRect);\n applyRectClick(scrollMaker, moverRect);\n registerListenerOnArrow(scrollMaker, moverRect, 'nextArrow', speed);\n};\n\nexport const scrollContainerHelper = (mountPoint, config, dimensions, type) => {\n const {\n classPrefix\n } = config;\n const scrollBarContainer = makeElement(selectElement(mountPoint), 'div', [1], `#${classPrefix}-scroll-bar-${type}`);\n\n scrollBarContainer.classed(`${classPrefix}-scroll-bar`, true);\n scrollBarContainer.style(WIDTH, `${dimensions.width}px`);\n scrollBarContainer.style(HEIGHT, `${dimensions.height}px`);\n return scrollBarContainer;\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n\n config: {\n sanitization: (context, value) => {\n value = mergeRecursive(context._config, value);\n return value;\n }\n },\n manager: {},\n unitPositions: {},\n logicalSpace: {}\n};\n\n","import { ERROR_MSG, generateGetterSetters } from 'muze-utils';\nimport {\n scrollContainerHelper,\n registerListeners\n} from './helper';\nimport { PROPS } from './props';\n\nexport class ScrollMaker {\n\n constructor () {\n this._components = {};\n this._logicalSpace = {};\n this._attachedScrollAction = () => {};\n this._config = {\n thickness: 10,\n speed: 2\n };\n this._unitPositions = null;\n\n generateGetterSetters(this, PROPS);\n }\n\n static type () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n emptyScrollAreaClick () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n changeMoverPosition () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollDeltaTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n createScroll (mountPoint) {\n const config = this.config();\n\n return {\n scrollBarContainer: scrollContainerHelper(mountPoint, config, this.logicalSpace(), this.constructor.type())\n };\n }\n\n attachScrollAction (externalScrollAction) {\n this._attachedScrollAction = externalScrollAction;\n return this;\n }\n\n detachScrollAction () {\n this._attachedScrollAction = () => {};\n return this;\n }\n\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n registerListeners () {\n registerListeners(this);\n return this;\n }\n\n remove () {\n this._components.scrollBarContainer.remove();\n return this;\n }\n}\n\n","import MuzeComponent from './muze-chart-component';\nimport { HorizontalScrollMaker } from './scroll-bar-maker/horizontal-scroll-maker';\nimport { VerticalScrollMaker } from './scroll-bar-maker/vertical-scroll-maker';\n\nconst scrollMakerMap = {\n horizontal: HorizontalScrollMaker,\n vertical: VerticalScrollMaker\n};\n\n/**\n * Scroll Component acts as a wrapper over the scoll bars created using the respective Scroll Makers\n * This provides a consistent API for layouting using the tree layout system.\n *\n *\n * @class\n * @public\n * @module ScrollComponent\n */\nexport default class ScrollComponent extends MuzeComponent {\n\n constructor (params) {\n const ScrollMaker = scrollMakerMap[params.config.type];\n\n params.component = new ScrollMaker();\n params.component.config(params.config.scrollBarComponentConfig);\n params.component.logicalSpace(params.dimensions);\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n manager (...manager) {\n if (manager.length) {\n this.component.manager(manager[0]);\n return this;\n }\n return this.component.manager();\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollDeltaTo (delta) {\n this.component.scrollDeltaTo(delta);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollTo (scrollPercentage) {\n this.component.scrollTo(scrollPercentage);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page based on the unit index.\n * The input is provided as a number represting the index for the unit.\n * For vertical scroll, it's the row index that will be required.\n * For horizontal scroll, it's the column index that will be required\n *\n * @public\n *\n * @param {number} unitIndex Index of the unit appearing in the grid\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollToUnitIndex (unitIndex) {\n const unitPositions = this.component.unitPositions();\n const sanitizedUnitIndex = Math.min(Math.max(0, unitIndex), unitPositions.length - 1);\n this.component.scrollTo(unitPositions[sanitizedUnitIndex]);\n return this;\n }\n\n /**\n * Provides the positions of the units(either horizontal or vertical based on the type\n * of scroll bar it wraps) relative to it's container. The position of the first unit starts at 0\n *\n *\n * @public\n *\n * @return {Array} Positions of units either horizontal or vertical\n */\n getScrollPositionsForUnits () {\n return this.component.unitPositions();\n }\n\n draw (container) {\n this.component.createScroll(container || document.getElementById(this.renderAt()));\n return this;\n }\n\n /**\n * Can be used to attach a scroll action whenever scrolling occurs in the canvas\n *\n * @public\n * @param {number} externalAction Action to be attached during scroll\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n attachScrollAction (externalAction) {\n this.component.attachScrollAction(externalAction);\n return this;\n }\n\n /**\n * Can be used to detach the scroll action already bound to the scroll bar\n *\n * @public\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n detachScrollAction () {\n this.component.detachScrollAction();\n return this;\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.component.config(params.config.scrollBarComponentConfig);\n this.component.logicalSpace(params.dimensions);\n this.boundBox(this.component.getLogicalSpace());\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component || this.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n remove () {\n this.component.remove();\n }\n}\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { HORIZONTAL, HEIGHT, WIDTH, LEFT } from '../../../constants';\n\nexport class HorizontalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: horizontal\n */\n static type () {\n return HORIZONTAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, config, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'left', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'right', config);\n const {\n mover,\n rect\n } = moverRect;\n\n const { height, width, totalLength, viewLength, unitWidths } = this.logicalSpace();\n const scrollBarWithouArrowLength = width - height * 2;\n\n rect.style(WIDTH, `${dimensions.width - height * 2}px`);\n rect.style(HEIGHT, `${100}%`);\n mover.style(WIDTH, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(HEIGHT, `${100}%`);\n mover.style(LEFT, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n this.unitPositions(getUnitPositions(unitWidths, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n let positionAdjuster = speed * 10;\n if (event.x < x) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n const {\n totalLength\n } = this.logicalSpace();\n\n if (newPosition.x < 0) {\n currentPos = 0;\n } else if (newPosition.x + moverPos.width > rectStartPos.width) {\n currentPos = rectStartPos.width - moverPos.width;\n } else {\n currentPos = newPosition.x;\n }\n\n mover.style(LEFT, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: 0, x: moverPos.x - rectStartPos.x - delta });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {HorizontalScrollMaker} Instance of the HorizontalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.width)) / 100;\n\n this.changeMoverPosition({ y: 0, x: movement });\n return this;\n }\n\n}\n\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { VERTICAL, TOP, HEIGHT, WIDTH } from '../../../constants';\n\nexport class VerticalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: vertical\n */\n static type () {\n return VERTICAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'top', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'bottom', config);\n const {\n mover,\n rect\n } = moverRect;\n const { height, width, totalLength, viewLength, unitHeights } = this.logicalSpace();\n const scrollBarWithouArrowLength = height - width * 2;\n\n rect.style(HEIGHT, `${scrollBarWithouArrowLength}px`);\n rect.style(WIDTH, `${100}%`);\n mover.style(WIDTH, `${100}%`);\n mover.style(HEIGHT, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(TOP, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n\n this.unitPositions(getUnitPositions(unitHeights, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n let positionAdjuster = speed * 10;\n if (event.y < y) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const {\n totalLength\n } = this.logicalSpace();\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n\n if (newPosition.y < 0) {\n currentPos = 0;\n } else if (newPosition.y + moverPos.height > rectStartPos.height) {\n currentPos = rectStartPos.height - moverPos.height;\n } else {\n currentPos = newPosition.y;\n }\n mover.style(TOP, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: moverPos.y - rectStartPos.y - delta, x: 0 });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.height)) / 100;\n\n this.changeMoverPosition({ x: 0, y: movement });\n return this;\n }\n\n}\n","import { makeElement } from 'muze-utils';\nimport { cellSpanMaker, applySpans } from '../../../../layout/src/grid-layout/span-maker';\nimport { applyBorders } from '../../../../layout/src/grid-layout/border-helper';\n\nimport {\n TOP, CENTER\n} from '../../../../layout/src/enums/constants';\nimport MuzeComponent from './muze-chart-component';\nimport { WIDTH, HEIGHT, HIDDEN, OVERFLOW, AUTO, VISIBLE } from '../../constants';\n\nconst renderPlaceholders = (cells) => {\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder.render(this);\n });\n};\n\nexport default class MatrixComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n this.className(params.config.className);\n }\n\n applyScroll (container) {\n const row = this.params.config.row;\n const column = this.params.config.column;\n const { horizontal, vertical } = this.params.config.scrollInfo;\n container.style(OVERFLOW, VISIBLE);\n container.style(WIDTH, AUTO);\n container.style(HEIGHT, AUTO);\n\n if (horizontal && column === 1) {\n container.style(OVERFLOW, HIDDEN);\n container.style(WIDTH, '100%');\n }\n\n if (vertical && row === CENTER) {\n container.style(OVERFLOW, HIDDEN);\n container.style(HEIGHT, '100%');\n }\n }\n\n renderMatrix (mountPoint) {\n // Creating containers for each matrix individually\n const classPrefix = this.params.config.classPrefix;\n const row = this.params.config.row;\n const column = this.params.config.column;\n const dimensions = this.params.config.dimensions;\n const border = this.params.config.border;\n\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${row}-${column + 1}`)\n .classed(`${classPrefix}-grid-${row}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n this.applyScroll(containerForMatrix);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(this.component, row, column);\n\n // Rendering the table components\n const { cells } = this.renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n applySpans(cells, spans, { dimensions, border }, `${row}-${column}`);\n renderPlaceholders(cells);\n\n cells.exit().each((cell) => {\n cell.placeholder.remove();\n });\n\n applyBorders(cells, border, row, column);\n }\n\n 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\n draw (container) {\n this.renderMatrix(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(TOP);\n this.className(params.config.className);\n }\n}\n","import { selectElement, getEvent } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport MatrixComponent from './matrix-component';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\nimport { WHEEL_DELTA_MODIFIER } from '../../enums/constants';\n\n/**\n * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific\n * elements based on the scroll distance provided\n *\n *\n */\nconst applyScrollAction = (elem, classPrefix, scollDistance, type) => {\n selectElement(elem)\n .selectAll(`.${classPrefix}-grid`)\n .property(type, scollDistance);\n};\n\n/**\n * Applies the action of the scroll by actually scrolling the respective matrices based on the\n * type of scroll. It returns a function which has both the scroll methods available\n *\n * @return {Object} contains the horizontal and vertical scroll actions on the grid component\n */\nconst scrollActionApplier = (movement, context) => {\n const classPrefix = context.params.config.classPrefix;\n\n return {\n horizontal: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[e][1].renderAt()}`, classPrefix, movement, 'scrollLeft'));\n },\n vertical: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[1][e].renderAt()}`, classPrefix, movement, 'scrollTop'));\n }\n };\n};\n\nexport default class GridComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.gridComponents = [];\n this.setParams(params);\n }\n\n sanitizeGrid () {\n let height = 0;\n let width = 0;\n const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo();\n const scrollInfo = this.component.scrollInfo();\n const {\n viewHeight,\n viewWidth,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n\n for (let i = 0; i < 3; i++) {\n if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) {\n this.gridComponents[i] = [];\n }\n for (let j = 0; j < 3; j++) {\n const matrixDim = {\n height: viewHeight[i],\n width: viewWidth[j],\n unitHeights,\n unitWidths\n };\n const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j];\n const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`;\n const matrixConfig = {\n dimensions: matrixDim,\n border: layoutDimensions.border,\n classPrefix: this.params.config.classPrefix,\n scrollInfo,\n row: ROW_MATRIX_INDEX[i],\n column: j\n };\n if (this.gridComponents[i][j] instanceof MuzeComponent) {\n this.gridComponents[i][j].updateWrapper({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n } else {\n const matrixWrapper = new MatrixComponent({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n this.gridComponents[i].push(matrixWrapper);\n }\n if (i === 0) {\n width += matrixDim.width;\n }\n if (j === 0) {\n height += matrixDim.height;\n }\n }\n }\n this.boundBox({ height, width });\n\n this.component = this.gridComponents;\n this.allComponents = this.gridComponents;\n }\n\n scrollBarManager (...manager) {\n if (manager.length) {\n this._scrollBarManager = manager[0];\n return this;\n }\n return this._scrollBarManager;\n }\n\n /**\n * Attaches a mousewheel listener to the center matrix, based on which the scrolling can occur.\n * It uses the scroll component to change the position of the scroller, which ultimately scrolls the center matrix\n *\n *\n * @return {GridComponent} Instance of the GridComponent\n */\n attachScrollListener () {\n const scrollBarManager = this.scrollBarManager();\n selectElement(`#${this.component[1][1].renderAt()}`)\n .on('wheel', () => {\n const event = getEvent();\n const {\n wheelDeltaX,\n wheelDeltaY\n } = event;\n\n // Scrolling horizontally\n if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('horizontal', event)\n .triggerScrollBarAction('horizontal', wheelDeltaX / WHEEL_DELTA_MODIFIER);\n }\n\n // Scrolling Vertically\n if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('vertical', event)\n .triggerScrollBarAction('vertical', wheelDeltaY / WHEEL_DELTA_MODIFIER);\n }\n });\n return this;\n }\n\n performScrollAction (direction, movedView) {\n scrollActionApplier(movedView, this)[direction]();\n return this;\n }\n\n getBoundBox () {\n const { top, left } = this.component[0][0].boundBox();\n const { height, width } = this.boundBox();\n\n return {\n top,\n left,\n height,\n width\n };\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.className(params.config.className);\n this.sanitizeGrid();\n return this;\n }\n\n attachListener () {\n this.attachScrollListener();\n return this;\n }\n}\n","export const SIDE_EFFECT_COMMON = 'common';\nexport const SIDE_EFFECT_INDIVIDUAL = 'individual';\nexport const TOOLTIP_CONSOLIDATED = 'consolidated';\nexport const TOOLTIP_FRAGMENTED = 'fragmented';\nexport const WHEEL_DELTA_MODIFIER = 30;\n","import { selectElement, makeElement, applyStyle } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\n\nexport default class MessageComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n }\n\n render (container) {\n const parent = selectElement(container);\n\n const { config } = this.params;\n const { className } = config.classPrefix;\n\n const node = makeElement(parent, 'div', [1], className);\n const { height, width } = config.dimensions;\n const { message } = config;\n\n applyStyle(node, { width: `${width}px`, height: `${height}px` });\n\n const child = makeElement(node, 'div', [1], `${className}-child`);\n const textElement = makeElement(child, 'text', [1]);\n\n textElement.html(message);\n }\n\n draw (container) {\n this.render(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n const { target, className } = params.config;\n this.component = params.component;\n this.params = params;\n this.target(target);\n this.className(className);\n this.position(params.config.position);\n return this;\n }\n}\n","import {\n TITLE,\n SUB_TITLE,\n LEGEND, VERTICAL,\n HORIZONTAL,\n WIDTH,\n HEIGHT,\n TOP,\n LEFT,\n RIGHT,\n MESSAGE,\n GRID,\n NO_DATA_MESSAGE,\n HORIZONTAL_CENTER\n} from '../constants';\nimport HeaderComponent from './components/headerComponent';\nimport LegendComponent from './components/legendComponent';\nimport ScrollComponent from './components/scroll-component';\nimport GridComponent from './components/grid-component';\nimport MessageComponent from './components/message-component';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG, CANVAS, MESSAGE_CONFIG } from './defaults';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, CENTER } from '../../../layout/src/enums/constants';\n\n// Mapping between types of headers and their required configs for wrapper creation\nconst headerMap = {\n title: {\n headerCell: 'titleCell',\n configType: TITLE_CONFIG\n },\n subtitle: {\n headerCell: 'subtitleCell',\n configType: SUB_TITLE_CONFIG\n }\n};\n\n// Mapping of header alignment values\nconst headerAlignmentMap = {\n [LEFT]: LEFT,\n [RIGHT]: RIGHT,\n [CENTER]: HORIZONTAL_CENTER\n};\n\n/**\n * returns if data is Valid\n *\n *\n * @param {Object} params object where data has to be checked for validity\n * @return {Boolean} Returns true if all of the params are valid\n */\nconst checkParamsValidation = params => Object.keys(params).every((param => params[param]));\n\n/**\n * returns if message Component is needed or not\n *\n *\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Boolean} Returns if grid is present\n */\nconst isGridPresent = (renderDetails) => {\n const { rows, columns, values } = renderDetails.components;\n return checkParamsValidation({ rows, columns, values });\n};\n\n/**\n * Creates the wrapper for the header, i.e., title and subtitle to be used in the tree layout\n *\n *\n * @param {string} headerType type of header: title/subtite\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createHeaderWrapper = (headerType, layoutManager, renderDetails) => {\n let wrapper = null;\n\n const { components, layoutConfig } = renderDetails;\n const { headerCell, configType } = headerMap[headerType];\n const target = { target: CANVAS };\n\n if (components.headers && components.headers[headerCell]) {\n let headerConfig = layoutConfig[headerType];\n const header = components.headers[headerCell];\n\n headerConfig = Object.assign({}, headerConfig, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n alignWith: `${ROW_MATRIX_INDEX[0]}-${COLUMN_MATRIX_INDEX[1]}`,\n alignment: headerAlignmentMap[headerConfig.align],\n className: configType.className\n });\n\n const wrapperParams = {\n name: headerType,\n component: header,\n config: headerConfig\n };\n\n const existingComponent = layoutManager.getComponent(headerType);\n if (existingComponent) {\n wrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n wrapper = new HeaderComponent(wrapperParams);\n }\n }\n return wrapper;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} canvas canvas instance\n * @return {Instance} Returns the respective wrappers\n */\nconst createMessageWrapper = (layoutManager, canvas, renderDetails, renderGrid) => {\n const headerValues = Object.values(renderDetails.components.headers);\n let sum = 0;\n let messageWrapper = null;\n\n for (const val of headerValues) {\n sum += val.logicalSpace().height;\n }\n\n if (!renderGrid) {\n const defaultDimensions = { height: canvas.height() - sum, width: canvas.width() };\n const gridComponent = layoutManager.getComponent(GRID);\n const { height, width } = (gridComponent && gridComponent.getBoundBox()) || defaultDimensions;\n const target = { target: CANVAS };\n const config = {\n ...target,\n dimensions: { height, width },\n message: NO_DATA_MESSAGE,\n classPrefix: MESSAGE_CONFIG,\n position: TOP\n };\n const wrapperParams = {\n name: MESSAGE,\n component: null,\n config\n };\n const existingComponent = layoutManager.getComponent(MESSAGE);\n\n if (existingComponent) {\n messageWrapper = existingComponent.updateWrapper(wrapperParams);\n } else {\n messageWrapper = new MessageComponent(wrapperParams);\n }\n return messageWrapper;\n }\n return null;\n};\n\n// Mapping between types of scrollBars and their required configs for wrapper creation\nconst scrollBarMap = config => ({\n vertical: {\n componentName: 'verticalScrollBar',\n width: 'thickness',\n height: 'layoutBasedMeasure',\n layoutBasedMeasure: HEIGHT,\n viewMeasure: 'viewHeight',\n rowAlign: 1,\n colAlign: config.align === 'right' ? 2 : 0,\n position: config.align,\n alignment: TOP\n },\n horizontal: {\n componentName: 'horizontalScrollBar',\n width: 'layoutBasedMeasure',\n layoutBasedMeasure: WIDTH,\n viewMeasure: 'viewWidth',\n height: 'thickness',\n rowAlign: config.align === 'top' ? 0 : 2,\n colAlign: 1,\n position: config.align,\n alignment: LEFT\n }\n});\n\n/**\n * Creates the wrapper for the scroller, i.e., horizontal and vertical to be used in the tree layout\n *\n *\n * @param {string} scrollBarType type of scrollbar: horizontal/vertical\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst createScrollBarWrapper = (scrollBarType, layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let scrollBarWrapper = null;\n const { layoutConfig } = renderDetails;\n const target = { target: CANVAS };\n const { scrollBar } = layoutConfig;\n const { layoutDimensions } = grid.viewInfo();\n const {\n actualCenterMeasures,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n const {\n componentName, layoutBasedMeasure, width, height, rowAlign, colAlign,\n viewMeasure, position, alignment\n } = scrollBarMap(scrollBar[scrollBarType])[scrollBarType];\n const dimensions = {\n thickness: scrollBar.thickness,\n layoutBasedMeasure: layoutDimensions[viewMeasure][1]\n };\n const isScroll = grid.scrollInfo()[scrollBarType];\n const totalLength = actualCenterMeasures[layoutBasedMeasure];\n const viewLength = layoutDimensions[viewMeasure][1];\n\n const scrollConfig = Object.assign({}, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n scrollBarComponentConfig: {\n ...scrollBar,\n classPrefix: layoutConfig.classPrefix\n },\n\n type: scrollBarType,\n alignWith: `${ROW_MATRIX_INDEX[rowAlign]}-${COLUMN_MATRIX_INDEX[colAlign]}`,\n alignment,\n position\n });\n\n const wrapperParams = {\n name: componentName,\n config: scrollConfig,\n dimensions: {\n width: dimensions[width],\n height: dimensions[height],\n totalLength,\n viewLength,\n unitHeights,\n unitWidths\n }\n };\n\n const existingComponent = layoutManager.getComponent(componentName);\n\n if (!isScroll) {\n existingComponent && existingComponent.remove();\n return null;\n }\n\n if (existingComponent) {\n scrollBarWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n scrollBarWrapper = new ScrollComponent(wrapperParams);\n }\n\n return scrollBarWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the legend to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createLegendWrapper = (layoutManager, renderDetails, renderGrid) => {\n if (renderGrid) {\n let legendWrapper = null;\n const { components, layoutConfig, measurement } = renderDetails;\n const target = { target: CANVAS };\n\n if (components.legends && components.legends.length) {\n const legendConfig = { ...layoutConfig.legend, ...target, measurement };\n const wrapperParams = {\n name: LEGEND,\n component: components.legends,\n config: legendConfig\n };\n\n const existingComponent = layoutManager.getComponent(LEGEND);\n\n if (existingComponent) {\n legendWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n legendWrapper = new LegendComponent(wrapperParams);\n }\n }\n return legendWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst gridLayoutWrapper = (layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let gridWrapper = null;\n const target = { target: CANVAS };\n const { layoutConfig } = renderDetails;\n\n const config = {\n ...target,\n pagination: layoutConfig.pagination,\n classPrefix: layoutConfig.classPrefix,\n dimensions: { height: 0, width: 0 }\n };\n const wrapperParams = {\n name: GRID,\n component: grid,\n config\n };\n const existingComponent = layoutManager.getComponent(GRID);\n if (existingComponent) {\n gridWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n gridWrapper = new GridComponent(wrapperParams);\n }\n return gridWrapper;\n }\n return null;\n};\n/**\n * Responsible for providing the wrapper creators for every component in Muze.\n * This function, when called, returns the set of components and their respective wrappers.\n *\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} grid Instance of the grid layout\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers for each component\n */\nexport const componentWrapperMaker = (canvas, grid, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const renderGrid = isGridPresent(renderDetails);\n return {\n title: createHeaderWrapper(TITLE, layoutManager, renderDetails),\n subtitle: createHeaderWrapper(SUB_TITLE, layoutManager, renderDetails),\n message: createMessageWrapper(layoutManager, canvas, renderDetails, renderGrid),\n legend: createLegendWrapper(layoutManager, renderDetails, renderGrid),\n grid: gridLayoutWrapper(layoutManager, renderDetails, grid, renderGrid),\n verticalScrollBar: createScrollBarWrapper(VERTICAL, layoutManager, renderDetails, grid, renderGrid),\n horizontalScrollBar: createScrollBarWrapper(HORIZONTAL, layoutManager, renderDetails, grid, renderGrid)\n };\n};\n","export class ScrollManager {\n\n constructor () {\n this._scrollBarComponents = {};\n this._attachedComponents = {};\n }\n\n scrollBarComponents (...sbc) {\n if (sbc.length) {\n this._scrollBarComponents = sbc[0];\n return this;\n }\n return this._scrollBarComponents;\n }\n\n attachedComponents (...abc) {\n if (abc.length) {\n this._attachedComponents = abc[0];\n return this;\n }\n return this._attachedComponents;\n }\n\n preventBrowserScroll (type, event) {\n if (this.scrollBarComponents()[type]) {\n // Prevent default behaviour and stop propagating\n event.preventDefault();\n event.stopPropagation();\n }\n return this;\n }\n\n performAttachedScrollFunction (type, movedViewLength) {\n Object.values(this.attachedComponents()).forEach((e) => {\n e.performScrollAction(type, movedViewLength);\n });\n return this;\n }\n\n triggerScrollBarAction (type, delta) {\n this.scrollBarComponents()[type] && this.scrollBarComponents()[type].scrollDeltaTo(delta);\n return this;\n }\n}\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { componentWrapperMaker } from './component-wrapper-maker';\nimport {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n TITLE,\n SUB_TITLE,\n LEGEND,\n VERTICAL_SCROLL_BAR,\n HORIZONTAL_SCROLL_BAR,\n GRID,\n MESSAGE\n} from '../constants';\nimport { ScrollManager } from './scroll-manager';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const prepareLayout = (layout, renderDetails) => {\n const { components, layoutConfig, measurement } = renderDetails;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n if (rows && columns) {\n layout.measurement(measurement)\n .config(layoutConfig)\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 *\n * @param {*} context\n * @param {*} mount\n *\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 priority,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend,\n pagination,\n scrollBar\n } = context.config();\n\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\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 buffer: scrollBar.thickness,\n pagination,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual,\n mount,\n priority\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n\nconst componentIndexes = {\n title: 0,\n subtitle: 1,\n legend: 2,\n verticalScrollBar: 3,\n horizontalScrollBar: 4,\n grid: 5,\n message: 6\n};\n\nconst componentNames = {\n 0: TITLE,\n 1: SUB_TITLE,\n 2: LEGEND,\n 3: VERTICAL_SCROLL_BAR,\n 4: HORIZONTAL_SCROLL_BAR,\n 5: GRID,\n 6: MESSAGE\n};\n\nconst attachListeners = (componentWrappers) => {\n componentWrappers.forEach((componentWrapper) => {\n if (componentWrapper) {\n componentWrapper.attachListener();\n }\n });\n};\n\n/**\n * Responsible for creating a scroll manager that manages interactions between the grid\n * component and the scroll bar components\n *\n * @param {Array} componentWrappers Contains the wrappers for all the components\n * @param {Canvas} canvas Instance of the current canvas\n * @return {Array} Positions of units either horizontal or vertical\n */\nconst createScrollManager = (componentWrappers, canvas) => {\n const {\n horizontalScrollBar,\n verticalScrollBar,\n grid\n } = componentIndexes;\n\n const horizontalScrollWrapper = componentWrappers[horizontalScrollBar];\n const verticalScrollWrapper = componentWrappers[verticalScrollBar];\n const gridWrapper = componentWrappers[grid];\n const scrollBarManager = new ScrollManager();\n const scrollBarComponents = {};\n\n verticalScrollWrapper && (scrollBarComponents.vertical = verticalScrollWrapper);\n horizontalScrollWrapper && (scrollBarComponents.horizontal = horizontalScrollWrapper);\n\n scrollBarManager\n .scrollBarComponents(scrollBarComponents)\n .attachedComponents({\n grid: gridWrapper\n });\n canvas.composition().hScrollBar = horizontalScrollWrapper;\n canvas.composition().vScrollBar = verticalScrollWrapper;\n\n [horizontalScrollWrapper, verticalScrollWrapper].forEach((wrapper) => {\n wrapper && wrapper.manager(scrollBarManager);\n });\n\n gridWrapper.scrollBarManager(scrollBarManager);\n};\n\nexport const renderLayout = (canvas, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const gridLayout = canvas.layout();\n const {\n\n grid\n } = componentIndexes;\n\n // Get the component wrappers\n const compWrappers = componentWrapperMaker(canvas, gridLayout, renderDetails);\n const componentWrappers = Object.keys(componentIndexes).map(e => compWrappers[e]);\n const gridWrapper = componentWrappers[grid];\n if (gridWrapper) {\n createScrollManager(componentWrappers, canvas);\n }\n\n componentWrappers.forEach((componentWrapper, index) => {\n if (!componentWrapper) {\n const deleteElementName = componentNames[index];\n layoutManager.removeComponent(deleteElementName);\n }\n });\n layoutManager.registerComponents(componentWrappers).compute();\n attachListeners(componentWrappers);\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive,\n isSimpleObject,\n CommonProps\n} from 'muze-utils';\nimport { Firebolt } from '@chartshq/muze-firebolt';\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 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 selectionBox: () => false\n }\n};\n\n/**\n * This class is responsible for dispatching any behavioural action to all the visual units housed by the canvas.\n * It is created by {@link Canvas}. This class does not handle any physical actions. Physical actions get triggered\n * in {@link VisualUnit} which is managed by it's own firebolt instance. The firebolt instance of canvas only\n * propagates the action to all the visual units in it's composition.\n *\n * To get the firebolt instance of {@link Canvas}\n * ```\n * const firebolt = canvas.firebolt();\n * ```\n *\n * @class GroupFireBolt\n * @public\n */\nexport default class GroupFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy());\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 const context = this.context;\n applyInteractionPolicy(this);\n context._throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => {\n applyInteractionPolicy(this);\n });\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n /**\n * Dispatches a behavioural action with a payload. It takes the name of the behavioural action and a payload\n * object which contains the criteria aend an array of side effects which determines what side effects are\n * going to be shown in each visual unit of the canvas. It prepares the datamodel from the given criteria\n * and initiates a propagation from the datamodel of canvas. Then all the visual units of canvas which listens\n * to the propagation gets informed on which rows got selected and dispatches the behavioural action sent during\n * propagation.\n *\n * To dispatch a behavioural action on the canvas\n * ```\n * // Get the firebolt instance of the canvas\n * const firebolt = canvas.firebolt();\n * // Dispatch a brush behaviour\n * firebolt.dispatchBehaviour('brush', {\n * // Selects all the rows with Horsepower having range between 100 and 200.\n * criteria: {\n * Horsepower: [100, 200]\n * }\n * });\n * // On dispatch of this behavioural action, a selection box gets created and plots gets faded out which are the\n * // default side effects mapped to this behavioural action.\n * ```\n *\n * ```\n * Additionally, it can also be passed an array of side effects in the payload.\n * // Dispatch a select behaviour with only crossline as side effect.\n * firebolt.dispatchBehaviour('select', {\n * criteria: {\n * Cylinders: ['8']\n * },\n * sideEffects: ['crossline']\n * });\n * ```\n *\n * @public\n *\n * @param {string} behaviour Name of the behavioural action\n * @param {Object} payload Object which contains the interaction information.\n * @param {Object | Array.} payload.criteria Identifiers by which the selection happens.\n * @param {Array.} payload.sideEffects Side effects which needs to be shown.\n *\n * @return {GroupFireBolt} Instance of firebolt.\n */\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.composition().visualGroup.getGroupByData();\n const fieldsConfig = data.getFieldsConfig();\n const model = getDataModelFromIdentifiers(data, criteria);\n const behaviouralAction = this._actions.behavioural[behaviour];\n\n if (behaviouralAction) {\n const fields = isSimpleObject(criteria) ? Object.keys(criteria) : (criteria ? criteria[0] : []);\n const validFields = fields.filter(field => field in fieldsConfig);\n const mutates = behaviouralAction.constructor.mutates();\n const propConfig = {\n payload: propPayload,\n action: behaviour,\n criteria: model,\n sourceId: this.context.alias(),\n isMutableAction: mutates,\n propagateInterpolatedValues: validFields.every(field => fieldsConfig[field].def.type ===\n FieldType.MEASURE)\n };\n data.propagate(model, propConfig, true);\n }\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","import GroupFireBolt from './group-firebolt';\n\nexport default GroupFireBolt;\n","export const APP_INITIAL_STATE = {\n app: {\n group: {},\n units: {},\n layers: {},\n canvas: {}\n },\n local: {\n canvas: {},\n group: {},\n units: {},\n layers: {}\n }\n};\n\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId, selectElement, STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout, renderLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { APP_INITIAL_STATE } from './app-state';\nimport { initCanvas,\n setupChangeListener,\n setLabelRotationForAxes,\n createGroupState,\n createLayoutManager,\n setLayoutInfForUnits\n} from './helper';\n/**\n * Canvas is a logical component which houses a visualization by taking multiple variable in different encoding channel.\n * Canvas manages lifecycle of many other logical component and exposes one consistent interface for creation of chart.\n * Canvas is intialized from environment with settings from environment and singleton dependencies.\n *\n * To create an instance of canvas\n * ```\n * const env = Muze();\n * const canvas = env.canvas()\n * ```\n *\n *\n * @class\n * @public\n * @module Canvas\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(APP_INITIAL_STATE);\n\n this._throwback = new Store({\n [CommonProps.MATRIX_CREATED]: false,\n [CommonProps.ON_LAYER_DRAW]: null\n });\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE;\n const allOptions = Object.assign({}, options, localOptions, canvasOptions);\n\n transactor(this, allOptions, this._store, {\n namespace\n });\n\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this, {\n behavioural: behaviouralActions,\n physical: physicalActions,\n physicalBehaviouralMap: {}\n }, sideEffects, behaviourEffectMap));\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 // init layoutManager\n this._layoutManager = createLayoutManager();\n }\n\n /**\n * Retrieves an instance of layout which is responsible for layouting. Layout is responsible for creating faceted\n * presentation using table layout.\n *\n * @public\n *\n * @return {GridLayout} Instance of layout attached to canvas.\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n * Retrieves the composition for a canvas\n *\n * @public\n *\n * @return {object} Instances of the components which canvas requires to draw the full visualization.\n * ```\n * {\n * layout: // Instance of {@link GridLayout}\n * legend: // Instance of {@link Legend}\n * subtitle: // Instance of {@link TextCell} using which the title is rendered\n * title: // Instance of {@link TextCell} using which the title is rendered\n * visualGroup: // Instance of {@link visualGroup}\n * }\n * ```\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 * Sets or gets the alias of the canvas. Alias is a name by which the canvas can be referred.\n *\n * When setter\n * @param {string} alias Name of the alias.\n *\n * @return {Canvas} Instance of the canvas.\n *\n * When getter\n *\n * @return {string} Alias of canvas.\n *\n * @public\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 *\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n * Returns the instance of firebolt associated with this canvas. The firebolt instance can be used to dispatch a\n * behaviour dynamically on the canvas. This firebolt does not handle any physical actions. It is just used to\n * propagate the action to all the visual units in it's composition.\n *\n * @public\n *\n * @return {GroupFireBolt} Instance of firebolt associated with 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 createGroupState(this);\n this.composition().visualGroup.alias(this.alias()).store(this._store);\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 *\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 * Returns a promise for various {@link LifecycleEvents} of the various components of canvas. The promise gets\n * resolved once the particular event gets completed.\n *\n * To use this,\n * ```\n * canvas.once('layer.drawn').then(() => {\n * // Do any post drawing work here.\n * });\n * ```\n * @public\n *\n * @param {string} eventName Name of the lifecycle event.\n *\n * @return {Promise} A pending promise waiting for resolve to be called.\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 // removeChild(mount);\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const renderDetails = getRenderDetails(this, mount);\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), renderDetails);\n\n this._layoutManager.dimension({\n height: renderDetails.measurement.canvasHeight,\n width: renderDetails.measurement.canvasWidth\n });\n\n this._layoutManager.renderAt(mount);\n\n // Render each component\n renderLayout(this, renderDetails);\n\n setLayoutInfForUnits(this);\n\n // setLabelRotation\n setLabelRotationForAxes(this);\n }\n\n /**\n * Returns the instances of x axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the top axis and the second element represents the bottom\n * // axis.\n * [\n * [X1, X2],\n * [X3, X4]\n * ]\n * ```\n * @public\n *\n * @return {Array.} Instances of x axis.\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n * Returns the instances of y axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the left axis and the second element represents the right\n * // axis.\n * [\n * [Y1, Y2],\n * [Y3, Y4]\n * ]\n * ```\n * @public\n * @return {Array.} Instances of y axis.\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n * Returns all the retinal axis of the canvas. Color, shape and size axis are combinedly called retinal axis.\n *\n * @public\n * @return {Object} Instances of retinal axis.\n * ```\n * {\n * color: [ColorAxis], // Array of color axis.\n * shape: [ShapeAxis], // Array of shape axis.\n * size: [SizeAxis] // Array of size axis.\n * }\n * ```\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n\n mount (...params) {\n if (params.length) {\n let value = params[0];\n if (typeof params[0] === 'string') {\n value = selectElement(params[0]).node();\n }\n this._mount = value;\n return this;\n }\n return this._mount;\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 Store\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};\nmuze.Model = new Store().model.constructor;\nexport default muze;\n"],"sourceRoot":""} \ No newline at end of file diff --git a/packages/muze/npm/muze.css b/packages/muze/npm/muze.css deleted file mode 100644 index da599e3d..00000000 --- a/packages/muze/npm/muze.css +++ /dev/null @@ -1 +0,0 @@ -.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{font-style:"normal";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,.muze-legend-item-info,.muze-legend-title{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-legend-box{line-height:10px!important;height:100px;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:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1;white-space:nowrap;-webkit-transform-origin:0 0;transform-origin:0 0}.muze-header-cell{font-size:16px}.muze-header-cell,.muze-subheader-cell{text-align:center;color:#858585;font-weight:800;font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif;line-height:1;white-space:nowrap}.muze-subheader-cell{font-size:15px}.muze-scroll-bar{background:#f8f8f8;position:relative;font-size:10px}.muze-scroll-arrow{float:left;cursor:pointer;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;background:#a2a2a2;color:#fff}.muze-scroll-arrow-left{height:100%;width:20px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.muze-scroll-arrow-right{height:100%;width:20px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px}.muze-scroll-arrow-right,.muze-scroll-arrow-top{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px}.muze-scroll-arrow-top{width:100%;height:20px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px}.muze-scroll-arrow-bottom{width:100%;height:20px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px}.muze-scroll-rect{float:left;position:relative}.muze-scroll-mover{position:absolute;-webkit-border-radius:3px;background:#a2a2a2;cursor:-webkit-grab;border-radius:3px}.muze-scroll-mover:active{cursor:-webkit-grabbing}.muze-scroll-arrow-chevron{position:relative;text-align:center;padding:1px;margin-bottom:0}.muze-scroll-arrow-chevron:after,.muze-scroll-arrow-chevron:before{content:"";position:absolute;background:#fff}#muze-scroll-arrow-chevron-bottom,#muze-scroll-arrow-chevron-top{height:1px;width:6px}#muze-scroll-arrow-chevron-left,#muze-scroll-arrow-chevron-right{width:1px;height:6px}#muze-scroll-arrow-chevron-bottom:before{top:0;left:0;height:100%;width:51%;-webkit-transform:skew(0deg,35deg);transform:skew(0deg,35deg)}#muze-scroll-arrow-chevron-bottom:after{right:0;width:50%}#muze-scroll-arrow-chevron-bottom:after,#muze-scroll-arrow-chevron-top:before{top:0;height:100%;-webkit-transform:skew(0deg,-35deg);transform:skew(0deg,-35deg)}#muze-scroll-arrow-chevron-top:before{left:0;width:51%}#muze-scroll-arrow-chevron-top:after{top:0;right:0;height:100%;width:50%;-webkit-transform:skew(0deg,35deg);transform:skew(0deg,35deg)}#muze-scroll-arrow-chevron-right:before{top:0;left:0;height:51%;width:100%;-webkit-transform:skew(35deg,0deg);transform:skew(35deg,0deg)}#muze-scroll-arrow-chevron-right:after{bottom:0;left:0;width:100%;height:50%;-webkit-transform:skew(-35deg,0deg);transform:skew(-35deg,0deg)}#muze-scroll-arrow-chevron-left:before{bottom:0;left:0;width:100%;height:51%;-webkit-transform:skew(35deg,0deg);transform:skew(35deg,0deg)}#muze-scroll-arrow-chevron-left:after{top:0;left:0;width:100%;height:50%;-webkit-transform:skew(-35deg,0deg);transform:skew(-35deg,0deg)}@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,.muze-subtitle-cell,.muze-title-cell{font-family:Source Sans Pro,Helvetica Neue,Helvetica,Arial,sans-serif}.muze-group-container{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-grid div{float:left}.muze-grid div,.muze-grid table{border-collapse:collapse}.muze-title-cell{font-size:24px;font-weight:700;color:#5f5f5f}.muze-grid-headers{font-size:14px;font-weight:700}.muze-subtitle-cell{font-size:16px;font-weight:400;color:#b1b1b1}.domain{opacity:0}.muze-group-container,.muze-layout-container,.muze-legend-container{float:left}.muze-message-container{background-color:#f1f1f1;display:table;border:1px solid #c3c9d0}.muze-message-container-child{vertical-align:middle;text-align:center;font-size:18px;color:#8c8d8e;display:table-cell}.hidden{display:none} \ No newline at end of file diff --git a/packages/muze/npm/muze.js b/packages/muze/npm/muze.js deleted file mode 100644 index 1fe8bc36..00000000 --- a/packages/muze/npm/muze.js +++ /dev/null @@ -1,654 +0,0 @@ -!function webpackUniversalModuleDefinition(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define("muze",[],factory):"object"==typeof exports?exports.muze=factory():root.muze=factory()}(window,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"==typeof value&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=5)}([function(module,exports,__webpack_require__){(function(module){var __WEBPACK_AMD_DEFINE_FACTORY__,__WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;function _typeof2(obj){return(_typeof2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof2(obj){return typeof obj}:function _typeof2(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function webpackUniversalModuleDefinition(root,factory){"object"===_typeof2(exports)&&"object"===_typeof2(module)?module.exports=factory():(__WEBPACK_AMD_DEFINE_ARRAY__=[],void 0===(__WEBPACK_AMD_DEFINE_RESULT__="function"==typeof(__WEBPACK_AMD_DEFINE_FACTORY__=factory)?__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports,__WEBPACK_AMD_DEFINE_ARRAY__):__WEBPACK_AMD_DEFINE_FACTORY__)||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__))}(window,function(){return function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{enumerable:!0,get:getter})},__webpack_require__.r=function(exports){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(exports,"__esModule",{value:!0})},__webpack_require__.t=function(value,mode){if(1&mode&&(value=__webpack_require__(value)),8&mode)return value;if(4&mode&&"object"===_typeof2(value)&&value&&value.__esModule)return value;var ns=Object.create(null);if(__webpack_require__.r(ns),Object.defineProperty(ns,"default",{enumerable:!0,value:value}),2&mode&&"string"!=typeof value)for(var key in value)__webpack_require__.d(ns,key,function(key){return value[key]}.bind(null,key));return ns},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module.default}:function getModuleExports(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s="./src/index.js")}({"./node_modules/d3-dsv/src/csv.js": -/*!****************************************!*\ - !*** ./node_modules/d3-dsv/src/csv.js ***! - \****************************************/ -/*! exports provided: csvParse, csvParseRows, csvFormat, csvFormatRows */ -function node_modulesD3DsvSrcCsvJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"csvParse",function(){return csvParse}),__webpack_require__.d(__webpack_exports__,"csvParseRows",function(){return csvParseRows}),__webpack_require__.d(__webpack_exports__,"csvFormat",function(){return csvFormat}),__webpack_require__.d(__webpack_exports__,"csvFormatRows",function(){return csvFormatRows});var _dsv__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ./dsv */ -"./node_modules/d3-dsv/src/dsv.js"),csv=Object(_dsv__WEBPACK_IMPORTED_MODULE_0__.default)(","),csvParse=csv.parse,csvParseRows=csv.parseRows,csvFormat=csv.format,csvFormatRows=csv.formatRows},"./node_modules/d3-dsv/src/dsv.js": -/*!****************************************!*\ - !*** ./node_modules/d3-dsv/src/dsv.js ***! - \****************************************/ -/*! exports provided: default */ -function node_modulesD3DsvSrcDsvJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var EOL={},EOF={},QUOTE=34,NEWLINE=10,RETURN=13;function objectConverter(columns){return new Function("d","return {"+columns.map(function(name,i){return JSON.stringify(name)+": d["+i+"]"}).join(",")+"}")}__webpack_exports__.default=function(delimiter){var reFormat=new RegExp('["'+delimiter+"\n\r]"),DELIMITER=delimiter.charCodeAt(0);function parseRows(text,f){var t,rows=[],N=text.length,I=0,n=0,eof=N<=0,eol=!1;function token(){if(eof)return EOF;if(eol)return eol=!1,EOL;var i,c,j=I;if(text.charCodeAt(j)===QUOTE){for(;I++=N?eof=!0:(c=text.charCodeAt(I++))===NEWLINE?eol=!0:c===RETURN&&(eol=!0,text.charCodeAt(I)===NEWLINE&&++I),text.slice(j+1,i-1).replace(/""/g,'"')}for(;I1&&void 0!==arguments[1]?arguments[1]:{},config=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{saveChild:!0},groupByString=""+fieldsArr.join(),params=[this,fieldsArr,reducers],newDataModel=_operator__WEBPACK_IMPORTED_MODULE_3__.groupBy.apply(void 0,params);return Object(_helper__WEBPACK_IMPORTED_MODULE_1__.persistDerivations)(this,newDataModel,_constants__WEBPACK_IMPORTED_MODULE_2__.DM_DERIVATIVES.GROUPBY,{fieldsArr:fieldsArr,groupByString:groupByString,defaultReducer:_utils_reducer_store__WEBPACK_IMPORTED_MODULE_6__.default.defaultReducer()},reducers),config.saveChild?newDataModel.setParent(this):newDataModel.setParent(null),newDataModel}},{key:"sort",value:function sort(sortingDetails){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{saveChild:!1},rawData=this.getData({order:"row",sort:sortingDetails}),dataInCSVArr=[rawData.schema.map(function(field){return field.name})].concat(rawData.data),sortedDm=new this.constructor(dataInCSVArr,rawData.schema,{dataFormat:"DSVArr"});return Object(_helper__WEBPACK_IMPORTED_MODULE_1__.persistDerivations)(this,sortedDm,_constants__WEBPACK_IMPORTED_MODULE_2__.DM_DERIVATIVES.SORT,config,sortingDetails),config.saveChild?sortedDm.setParent(this):sortedDm.setParent(null),sortedDm}},{key:"serialize",value:function serialize(type,options){type=type||this._dataFormat,options=Object.assign({},{fieldSeparator:","},options);var fields=this.getFieldspace().fields,colData=fields.map(function(f){return f.formattedData()}),rowsCount=colData[0].length,serializedData=void 0,rowIdx=void 0,colIdx=void 0;if(type===_enums__WEBPACK_IMPORTED_MODULE_0__.DataFormat.FLAT_JSON)for(serializedData=[],rowIdx=0;rowIdx=0&&(partialFieldspace.fields[fieldIndex]=field)}else partialFieldspace.fields.push(field),cachedValueObjects.forEach(function(obj,i){obj[field.name()]=new _value__WEBPACK_IMPORTED_MODULE_9__.default(field.partialField.data[i],field)});return partialFieldspace._cachedFieldsObj=null,partialFieldspace._cachedDimension=null,partialFieldspace._cachedMeasure=null,this.__calculateFieldspace().calculateFieldsConfig(),this}},{key:"calculateVariable",value:function calculateVariable(schema,dependency,config){var _this2=this;schema=Object(_helper__WEBPACK_IMPORTED_MODULE_1__.sanitizeUnitSchema)(schema),config=Object.assign({},{saveChild:!0,replaceVar:!1},config);var fieldsConfig=this.getFieldsConfig(),depVars=dependency.slice(0,dependency.length-1),retrieveFn=dependency[dependency.length-1];if(fieldsConfig[schema.name]&&!config.replaceVar)throw new Error(schema.name+" field already exists in datamodel");var depFieldIndices=depVars.map(function(field){var fieldSpec=fieldsConfig[field];if(!fieldSpec)throw new Error(field+" is not a valid column name.");return fieldSpec.index}),clone=this.clone(config.saveChild),fs=clone.getFieldspace().fields,suppliedFields=depFieldIndices.map(function(idx){return fs[idx]}),cachedStore={},cloneProvider=function cloneProvider(){return _this2.detachedRoot()},computedValues=[];Object(_operator__WEBPACK_IMPORTED_MODULE_3__.rowDiffsetIterator)(clone._rowDiffset,function(i){var fieldsData=suppliedFields.map(function(field){return field.partialField.data[i]});computedValues[i]=retrieveFn.apply(void 0,_toConsumableArray(fieldsData).concat([i,cloneProvider,cachedStore]))});var _createFields=Object(_field_creator__WEBPACK_IMPORTED_MODULE_7__.createFields)([computedValues],[schema],[schema.name]),field=_slicedToArray(_createFields,1)[0];return clone.addField(field),Object(_helper__WEBPACK_IMPORTED_MODULE_1__.persistDerivations)(this,clone,_constants__WEBPACK_IMPORTED_MODULE_2__.DM_DERIVATIVES.CAL_VAR,{config:schema,fields:depVars},retrieveFn),clone}},{key:"propagate",value:function propagate(identifiers){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},addToNameSpace=arguments[2],propConfig=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},isMutableAction=config.isMutableAction,propagationSourceId=config.sourceId,payload=config.payload,rootModel=Object(_helper__WEBPACK_IMPORTED_MODULE_1__.getRootDataModel)(this),propagationNameSpace=rootModel._propagationNameSpace,rootModels={groupByModel:Object(_helper__WEBPACK_IMPORTED_MODULE_1__.getRootGroupByModel)(this),model:rootModel};return addToNameSpace&&Object(_helper__WEBPACK_IMPORTED_MODULE_1__.addToPropNamespace)(propagationNameSpace,config,this),Object(_helper__WEBPACK_IMPORTED_MODULE_1__.propagateToAllDataModels)(identifiers,rootModels,{propagationNameSpace:propagationNameSpace,sourceId:propagationSourceId},Object.assign({payload:payload},config)),isMutableAction&&Object(_helper__WEBPACK_IMPORTED_MODULE_1__.propagateImmutableActions)(propagationNameSpace,rootModels,{config:config,propConfig:propConfig},this),this}},{key:"on",value:function on(eventName,callback){switch(eventName){case _constants__WEBPACK_IMPORTED_MODULE_2__.PROPAGATION:this._onPropagation.push(callback)}return this}},{key:"unsubscribe",value:function unsubscribe(eventName){switch(eventName){case _constants__WEBPACK_IMPORTED_MODULE_2__.PROPAGATION:this._onPropagation=[]}return this}},{key:"handlePropagation",value:function handlePropagation(propModel,payload){var _this3=this;this._onPropagation.forEach(function(fn){return fn.call(_this3,propModel,payload)})}},{key:"bin",value:function bin(measureFieldName,config){var fieldsConfig=this.getFieldsConfig();if(!fieldsConfig[measureFieldName])throw new Error("Field "+measureFieldName+" doesn't exist");var binFieldName=config.name||measureFieldName+"_binned";if(fieldsConfig[binFieldName])throw new Error("Field "+binFieldName+" already exists");var measureField=this.getFieldspace().fieldsObj()[measureFieldName],_createBinnedFieldDat=Object(_operator_bucket_creator__WEBPACK_IMPORTED_MODULE_4__.createBinnedFieldData)(measureField,this._rowDiffset,config),binnedData=_createBinnedFieldDat.binnedData,bins=_createBinnedFieldDat.bins,binField=Object(_field_creator__WEBPACK_IMPORTED_MODULE_7__.createFields)([binnedData],[{name:binFieldName,type:_enums__WEBPACK_IMPORTED_MODULE_0__.FieldType.DIMENSION,subtype:_enums__WEBPACK_IMPORTED_MODULE_0__.DimensionSubtype.BINNED,bins:bins}],[binFieldName])[0],clone=this.clone(config.saveChild);return clone.addField(binField),Object(_helper__WEBPACK_IMPORTED_MODULE_1__.persistDerivations)(this,clone,_constants__WEBPACK_IMPORTED_MODULE_2__.DM_DERIVATIVES.BIN,{measureFieldName:measureFieldName,config:config,binFieldName:binFieldName},null),clone}},{key:"detachedRoot",value:function detachedRoot(){return new DataModel(this.serialize(_enums__WEBPACK_IMPORTED_MODULE_0__.DataFormat.FLAT_JSON),this.getSchema())}},{key:"splitByRow",value:function splitByRow(dimensionArr,reducerFn,config){var fieldsConfig=this.getFieldsConfig();dimensionArr.forEach(function(fieldName){if(!fieldsConfig[fieldName])throw new Error("Field "+fieldName+" doesn't exist in the schema")});var defConfig={mode:_enums__WEBPACK_IMPORTED_MODULE_0__.FilteringMode.NORMAL,saveChild:!0};return config=Object.assign({},defConfig,config),Object(_helper__WEBPACK_IMPORTED_MODULE_1__.splitWithSelect)(this,dimensionArr,reducerFn,config)}},{key:"splitByColumn",value:function splitByColumn(){var uniqueFields=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],commonFields=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],config=arguments[2],defConfig={mode:_enums__WEBPACK_IMPORTED_MODULE_0__.FilteringMode.NORMAL,saveChild:!0},fieldConfig=this.getFieldsConfig(),allFields=Object.keys(fieldConfig),normalizedProjFieldSets=[[commonFields]];return config=Object.assign({},defConfig,config),(uniqueFields=uniqueFields.length?uniqueFields:[[]]).forEach(function(fieldSet,i){normalizedProjFieldSets[i]=Object(_helper__WEBPACK_IMPORTED_MODULE_1__.getNormalizedProFields)([].concat(_toConsumableArray(fieldSet),_toConsumableArray(commonFields)),allFields,fieldConfig)}),Object(_helper__WEBPACK_IMPORTED_MODULE_1__.splitWithProject)(this,normalizedProjFieldSets,config,allFields)}}],[{key:"configureInvalidAwareTypes",value:function configureInvalidAwareTypes(config){return _invalid_aware_types__WEBPACK_IMPORTED_MODULE_8__.default.invalidAwareVals(config)}},{key:"Reducers",get:function get(){return _utils_reducer_store__WEBPACK_IMPORTED_MODULE_6__.default}}]),DataModel}();__webpack_exports__.default=DataModel},"./src/default-config.js": -/*!*******************************!*\ - !*** ./src/default-config.js ***! - \*******************************/ -/*! exports provided: default */ -function srcDefaultConfigJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var _enums__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ./enums */ -"./src/enums/index.js");__webpack_exports__.default={dataFormat:_enums__WEBPACK_IMPORTED_MODULE_0__.DataFormat.AUTO}},"./src/enums/data-format.js": -/*!**********************************!*\ - !*** ./src/enums/data-format.js ***! - \**********************************/ -/*! exports provided: default */ -function srcEnumsDataFormatJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);__webpack_exports__.default={FLAT_JSON:"FlatJSON",DSV_STR:"DSVStr",DSV_ARR:"DSVArr",AUTO:"Auto"}},"./src/enums/dimension-subtype.js": -/*!****************************************!*\ - !*** ./src/enums/dimension-subtype.js ***! - \****************************************/ -/*! exports provided: default */ -function srcEnumsDimensionSubtypeJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);__webpack_exports__.default={CATEGORICAL:"categorical",TEMPORAL:"temporal",GEO:"geo",BINNED:"binned"}},"./src/enums/field-type.js": -/*!*********************************!*\ - !*** ./src/enums/field-type.js ***! - \*********************************/ -/*! exports provided: default */ -function srcEnumsFieldTypeJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);__webpack_exports__.default={MEASURE:"measure",DIMENSION:"dimension"}},"./src/enums/filtering-mode.js": -/*!*************************************!*\ - !*** ./src/enums/filtering-mode.js ***! - \*************************************/ -/*! exports provided: default */ -function srcEnumsFilteringModeJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);__webpack_exports__.default={NORMAL:"normal",INVERSE:"inverse",ALL:"all"}},"./src/enums/group-by-functions.js": -/*!*****************************************!*\ - !*** ./src/enums/group-by-functions.js ***! - \*****************************************/ -/*! exports provided: default */ -function srcEnumsGroupByFunctionsJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);__webpack_exports__.default={SUM:"sum",AVG:"avg",MIN:"min",MAX:"max",FIRST:"first",LAST:"last",COUNT:"count",STD:"std"}},"./src/enums/index.js": -/*!****************************!*\ - !*** ./src/enums/index.js ***! - \****************************/ -/*! exports provided: DataFormat, DimensionSubtype, MeasureSubtype, FieldType, FilteringMode, GROUP_BY_FUNCTIONS */ -function srcEnumsIndexJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var _data_format__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ./data-format */ -"./src/enums/data-format.js");__webpack_require__.d(__webpack_exports__,"DataFormat",function(){return _data_format__WEBPACK_IMPORTED_MODULE_0__.default});var _dimension_subtype__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__( -/*! ./dimension-subtype */ -"./src/enums/dimension-subtype.js");__webpack_require__.d(__webpack_exports__,"DimensionSubtype",function(){return _dimension_subtype__WEBPACK_IMPORTED_MODULE_1__.default});var _measure_subtype__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__( -/*! ./measure-subtype */ -"./src/enums/measure-subtype.js");__webpack_require__.d(__webpack_exports__,"MeasureSubtype",function(){return _measure_subtype__WEBPACK_IMPORTED_MODULE_2__.default});var _field_type__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__( -/*! ./field-type */ -"./src/enums/field-type.js");__webpack_require__.d(__webpack_exports__,"FieldType",function(){return _field_type__WEBPACK_IMPORTED_MODULE_3__.default});var _filtering_mode__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__( -/*! ./filtering-mode */ -"./src/enums/filtering-mode.js");__webpack_require__.d(__webpack_exports__,"FilteringMode",function(){return _filtering_mode__WEBPACK_IMPORTED_MODULE_4__.default});var _group_by_functions__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__( -/*! ./group-by-functions */ -"./src/enums/group-by-functions.js");__webpack_require__.d(__webpack_exports__,"GROUP_BY_FUNCTIONS",function(){return _group_by_functions__WEBPACK_IMPORTED_MODULE_5__.default})},"./src/enums/measure-subtype.js": -/*!**************************************!*\ - !*** ./src/enums/measure-subtype.js ***! - \**************************************/ -/*! exports provided: default */ -function srcEnumsMeasureSubtypeJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);__webpack_exports__.default={CONTINUOUS:"continuous"}},"./src/export.js": -/*!***********************!*\ - !*** ./src/export.js ***! - \***********************/ -/*! exports provided: default */ -function srcExportJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var _datamodel__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ./datamodel */ -"./src/datamodel.js"),_operator__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__( -/*! ./operator */ -"./src/operator/index.js"),_stats__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__( -/*! ./stats */ -"./src/stats/index.js"),_enums__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__( -/*! ./enums */ -"./src/enums/index.js"),_utils__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__( -/*! ./utils */ -"./src/utils/index.js"),_constants__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__( -/*! ./constants */ -"./src/constants/index.js"),_invalid_aware_types__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__( -/*! ./invalid-aware-types */ -"./src/invalid-aware-types.js"),_package_json__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__( -/*! ../package.json */ -"./package.json"),Operators={compose:_operator__WEBPACK_IMPORTED_MODULE_1__.compose,bin:_operator__WEBPACK_IMPORTED_MODULE_1__.bin,select:_operator__WEBPACK_IMPORTED_MODULE_1__.select,project:_operator__WEBPACK_IMPORTED_MODULE_1__.project,groupBy:_operator__WEBPACK_IMPORTED_MODULE_1__.groupby,calculateVariable:_operator__WEBPACK_IMPORTED_MODULE_1__.calculateVariable,sort:_operator__WEBPACK_IMPORTED_MODULE_1__.sort,crossProduct:_operator__WEBPACK_IMPORTED_MODULE_1__.crossProduct,difference:_operator__WEBPACK_IMPORTED_MODULE_1__.difference,naturalJoin:_operator__WEBPACK_IMPORTED_MODULE_1__.naturalJoin,leftOuterJoin:_operator__WEBPACK_IMPORTED_MODULE_1__.leftOuterJoin,rightOuterJoin:_operator__WEBPACK_IMPORTED_MODULE_1__.rightOuterJoin,fullOuterJoin:_operator__WEBPACK_IMPORTED_MODULE_1__.fullOuterJoin,union:_operator__WEBPACK_IMPORTED_MODULE_1__.union},version=_package_json__WEBPACK_IMPORTED_MODULE_7__.version;Object.assign(_datamodel__WEBPACK_IMPORTED_MODULE_0__.default,{Operators:Operators,Stats:_stats__WEBPACK_IMPORTED_MODULE_2__,DM_DERIVATIVES:_constants__WEBPACK_IMPORTED_MODULE_5__.DM_DERIVATIVES,DateTimeFormatter:_utils__WEBPACK_IMPORTED_MODULE_4__.DateTimeFormatter,DataFormat:_constants__WEBPACK_IMPORTED_MODULE_5__.DataFormat,FilteringMode:_constants__WEBPACK_IMPORTED_MODULE_5__.FilteringMode,InvalidAwareTypes:_invalid_aware_types__WEBPACK_IMPORTED_MODULE_6__.default,version:version},_enums__WEBPACK_IMPORTED_MODULE_3__),__webpack_exports__.default=_datamodel__WEBPACK_IMPORTED_MODULE_0__.default},"./src/field-creator.js": -/*!******************************!*\ - !*** ./src/field-creator.js ***! - \******************************/ -/*! exports provided: createUnitFieldFromPartial, createFields */ -function srcFieldCreatorJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"createUnitFieldFromPartial",function(){return createUnitFieldFromPartial}),__webpack_require__.d(__webpack_exports__,"createFields",function(){return createFields});var _enums__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ./enums */ -"./src/enums/index.js"),_fields__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__( -/*! ./fields */ -"./src/fields/index.js");function createUnitFieldFromPartial(partialField,rowDiffset){var schema=partialField.schema;switch(schema.type){case _enums__WEBPACK_IMPORTED_MODULE_0__.FieldType.MEASURE:switch(schema.subtype){case _enums__WEBPACK_IMPORTED_MODULE_0__.MeasureSubtype.CONTINUOUS:default:return new _fields__WEBPACK_IMPORTED_MODULE_1__.Continuous(partialField,rowDiffset)}case _enums__WEBPACK_IMPORTED_MODULE_0__.FieldType.DIMENSION:switch(schema.subtype){case _enums__WEBPACK_IMPORTED_MODULE_0__.DimensionSubtype.CATEGORICAL:return new _fields__WEBPACK_IMPORTED_MODULE_1__.Categorical(partialField,rowDiffset);case _enums__WEBPACK_IMPORTED_MODULE_0__.DimensionSubtype.TEMPORAL:return new _fields__WEBPACK_IMPORTED_MODULE_1__.Temporal(partialField,rowDiffset);case _enums__WEBPACK_IMPORTED_MODULE_0__.DimensionSubtype.BINNED:return new _fields__WEBPACK_IMPORTED_MODULE_1__.Binned(partialField,rowDiffset);default:return new _fields__WEBPACK_IMPORTED_MODULE_1__.Categorical(partialField,rowDiffset)}default:return new _fields__WEBPACK_IMPORTED_MODULE_1__.Categorical(partialField,rowDiffset)}}function createFields(dataColumn,schema,headers){var headersObj={};return headers&&headers.length||(headers=schema.map(function(item){return item.name})),headers.forEach(function(header,i){headersObj[header]=i}),schema.map(function(item){return function createUnitField(data,schema){data=data||[];var partialField=void 0;switch(schema.type){case _enums__WEBPACK_IMPORTED_MODULE_0__.FieldType.MEASURE:switch(schema.subtype){case _enums__WEBPACK_IMPORTED_MODULE_0__.MeasureSubtype.CONTINUOUS:default:return partialField=new _fields__WEBPACK_IMPORTED_MODULE_1__.PartialField(schema.name,data,schema,new _fields__WEBPACK_IMPORTED_MODULE_1__.ContinuousParser),new _fields__WEBPACK_IMPORTED_MODULE_1__.Continuous(partialField,"0-"+(data.length-1))}case _enums__WEBPACK_IMPORTED_MODULE_0__.FieldType.DIMENSION:switch(schema.subtype){case _enums__WEBPACK_IMPORTED_MODULE_0__.DimensionSubtype.CATEGORICAL:return partialField=new _fields__WEBPACK_IMPORTED_MODULE_1__.PartialField(schema.name,data,schema,new _fields__WEBPACK_IMPORTED_MODULE_1__.CategoricalParser),new _fields__WEBPACK_IMPORTED_MODULE_1__.Categorical(partialField,"0-"+(data.length-1));case _enums__WEBPACK_IMPORTED_MODULE_0__.DimensionSubtype.TEMPORAL:return partialField=new _fields__WEBPACK_IMPORTED_MODULE_1__.PartialField(schema.name,data,schema,new _fields__WEBPACK_IMPORTED_MODULE_1__.TemporalParser(schema)),new _fields__WEBPACK_IMPORTED_MODULE_1__.Temporal(partialField,"0-"+(data.length-1));case _enums__WEBPACK_IMPORTED_MODULE_0__.DimensionSubtype.BINNED:return partialField=new _fields__WEBPACK_IMPORTED_MODULE_1__.PartialField(schema.name,data,schema,new _fields__WEBPACK_IMPORTED_MODULE_1__.BinnedParser),new _fields__WEBPACK_IMPORTED_MODULE_1__.Binned(partialField,"0-"+(data.length-1));default:return partialField=new _fields__WEBPACK_IMPORTED_MODULE_1__.PartialField(schema.name,data,schema,new _fields__WEBPACK_IMPORTED_MODULE_1__.CategoricalParser),new _fields__WEBPACK_IMPORTED_MODULE_1__.Categorical(partialField,"0-"+(data.length-1))}default:return partialField=new _fields__WEBPACK_IMPORTED_MODULE_1__.PartialField(schema.name,data,schema,new _fields__WEBPACK_IMPORTED_MODULE_1__.CategoricalParser),new _fields__WEBPACK_IMPORTED_MODULE_1__.Categorical(partialField,"0-"+(data.length-1))}}(dataColumn[headersObj[item.name]],item)})}},"./src/field-store.js": -/*!****************************!*\ - !*** ./src/field-store.js ***! - \****************************/ -/*! exports provided: default */ -function srcFieldStoreJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var _enums__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ./enums */ -"./src/enums/index.js"),_utils__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__( -/*! ./utils */ -"./src/utils/index.js"),fieldStore={data:{},createNamespace:function createNamespace(fieldArr,name){var dataId=name||Object(_utils__WEBPACK_IMPORTED_MODULE_1__.getUniqueId)();return this.data[dataId]={name:dataId,fields:fieldArr,fieldsObj:function fieldsObj(){var fieldsObj=this._cachedFieldsObj;return fieldsObj||(fieldsObj=this._cachedFieldsObj={},this.fields.forEach(function(field){fieldsObj[field.name()]=field})),fieldsObj},getMeasure:function getMeasure(){var measureFields=this._cachedMeasure;return measureFields||(measureFields=this._cachedMeasure={},this.fields.forEach(function(field){field.schema().type===_enums__WEBPACK_IMPORTED_MODULE_0__.FieldType.MEASURE&&(measureFields[field.name()]=field)})),measureFields},getDimension:function getDimension(){var dimensionFields=this._cachedDimension;return this._cachedDimension||(dimensionFields=this._cachedDimension={},this.fields.forEach(function(field){field.schema().type===_enums__WEBPACK_IMPORTED_MODULE_0__.FieldType.DIMENSION&&(dimensionFields[field.name()]=field)})),dimensionFields}},this.data[dataId]}};__webpack_exports__.default=fieldStore},"./src/fields/binned/index.js": -/*!************************************!*\ - !*** ./src/fields/binned/index.js ***! - \************************************/ -/*! exports provided: default */ -function srcFieldsBinnedIndexJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var _dimension__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ../dimension */ -"./src/fields/dimension/index.js"),_createClass=function(){function defineProperties(target,props){for(var i=0;imax&&(max=datum))}),[min,max]}}]),Continuous}();__webpack_exports__.default=Continuous},"./src/fields/dimension/index.js": -/*!***************************************!*\ - !*** ./src/fields/dimension/index.js ***! - \***************************************/ -/*! exports provided: default */ -function srcFieldsDimensionIndexJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var _field__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ../field */ -"./src/fields/field/index.js"),_createClass=function(){function defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{},criteriaFn=arguments[3];operation===_constants__WEBPACK_IMPORTED_MODULE_4__.DM_DERIVATIVES.COMPOSE?(model._derivation.length=0,(_model$_derivation=model._derivation).push.apply(_model$_derivation,_toConsumableArray(criteriaFn))):model._derivation.push({op:operation,meta:config,criteria:criteriaFn})},persistAncestorDerivation=function persistAncestorDerivation(sourceDm,newDm){var _newDm$_ancestorDeriv;(_newDm$_ancestorDeriv=newDm._ancestorDerivation).push.apply(_newDm$_ancestorDeriv,_toConsumableArray(sourceDm._ancestorDerivation).concat(_toConsumableArray(sourceDm._derivation)))},persistDerivations=function persistDerivations(sourceDm,model,operation){var config=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},criteriaFn=arguments[4];persistCurrentDerivation(model,operation,config,criteriaFn),persistAncestorDerivation(sourceDm,model)},selectModeMap=(_defineProperty(_selectModeMap={},_enums__WEBPACK_IMPORTED_MODULE_0__.FilteringMode.NORMAL,{diffIndex:["rowDiffset"],calcDiff:[!0,!1]}),_defineProperty(_selectModeMap,_enums__WEBPACK_IMPORTED_MODULE_0__.FilteringMode.INVERSE,{diffIndex:["rejectRowDiffset"],calcDiff:[!1,!0]}),_defineProperty(_selectModeMap,_enums__WEBPACK_IMPORTED_MODULE_0__.FilteringMode.ALL,{diffIndex:["rowDiffset","rejectRowDiffset"],calcDiff:[!0,!0]}),_selectModeMap),generateRowDiffset=function generateRowDiffset(rowDiffset,i,lastInsertedValue){if(-1!==lastInsertedValue&&i===lastInsertedValue+1){var li=rowDiffset.length-1;rowDiffset[li]=rowDiffset[li].split("-")[0]+"-"+i}else rowDiffset.push(""+i)},selectRowDiffsetIterator=function selectRowDiffsetIterator(rowDiffset,checker,mode){var newRowDiffSet=[],rejRowDiffSet=[],_selectModeMap$mode$c=_slicedToArray(selectModeMap[mode].calcDiff,2),shouldSelect=_selectModeMap$mode$c[0],shouldReject=_selectModeMap$mode$c[1];return Object(_operator__WEBPACK_IMPORTED_MODULE_3__.rowDiffsetIterator)(rowDiffset,function(i){var checkerResult=checker(i);checkerResult&&shouldSelect&&generateRowDiffset(newRowDiffSet,i,-1),!checkerResult&&shouldReject&&generateRowDiffset(rejRowDiffSet,i,-1)}),{rowDiffset:newRowDiffSet.join(","),rejectRowDiffset:rejRowDiffSet.join(",")}},rowSplitDiffsetIterator=function rowSplitDiffsetIterator(rowDiffset,checker,mode,dimensionArr,fieldStoreObj){var lastInsertedValue={},splitRowDiffset={},dimensionMap={};return Object(_operator__WEBPACK_IMPORTED_MODULE_3__.rowDiffsetIterator)(rowDiffset,function(i){if(checker(i)){var hash="",dimensionSet={keys:{}};dimensionArr.forEach(function(_){var data=fieldStoreObj[_].partialField.data[i];hash=hash+"-"+data,dimensionSet.keys[_]=data}),void 0===splitRowDiffset[hash]&&(splitRowDiffset[hash]=[],lastInsertedValue[hash]=-1,dimensionMap[hash]=dimensionSet),generateRowDiffset(splitRowDiffset[hash],i,lastInsertedValue[hash]),lastInsertedValue[hash]=i}}),{splitRowDiffset:splitRowDiffset,dimensionMap:dimensionMap}},selectHelper=function selectHelper(clonedDm,selectFn,config,sourceDm,iterator){var cachedStore={},cloneProvider=function cloneProvider(){return sourceDm.detachedRoot()},mode=config.mode,rowDiffset=clonedDm._rowDiffset,fields=clonedDm.getPartialFieldspace().fields;return iterator(rowDiffset,function selectorHelperFn(index){return selectFn(prepareSelectionData(fields,index),index,cloneProvider,cachedStore)},mode)},cloneWithAllFields=function cloneWithAllFields(model){var clonedDm=model.clone(!1),partialFieldspace=model.getPartialFieldspace();return clonedDm._colIdentifier=partialFieldspace.fields.map(function(f){return f.name()}).join(","),partialFieldspace._cachedFieldsObj=null,partialFieldspace._cachedDimension=null,partialFieldspace._cachedMeasure=null,clonedDm.__calculateFieldspace().calculateFieldsConfig(),clonedDm},getKey=function getKey(arr,data,fn){for(var key=fn(arr,data,0),i=1,len=arr.length;i2&&void 0!==arguments[2]?arguments[2]:{},fns=[],operation=config.operation||_constants__WEBPACK_IMPORTED_MODULE_4__.LOGICAL_OPERATORS.AND,filterByMeasure=config.filterByMeasure||!1,clonedModel=cloneWithAllFields(model),modelFieldsConfig=clonedModel.getFieldsConfig();fns=propModels.length?propModels.map(function(propModel){return function(dataModel){var keyFn=void 0,dataObj=dataModel.getData(),fieldsConfig=dataModel.getFieldsConfig(),dimensions=Object.keys(dataModel.getFieldspace().getDimension()).filter(function(d){return d in modelFieldsConfig}),dLen=dimensions.length,indices=dimensions.map(function(d){return fieldsConfig[d].index}),measures=Object.keys(dataModel.getFieldspace().getMeasure()).filter(function(d){return d in modelFieldsConfig}),fieldsSpace=dataModel.getFieldspace().fieldsObj(),data=dataObj.data,domain=measures.reduce(function(acc,v){return acc[v]=fieldsSpace[v].domain(),acc},{}),valuesMap={};return keyFn=function keyFn(arr,row,idx){return row[arr[idx]]},dLen&&data.forEach(function(row){var key=getKey(indices,row,keyFn);valuesMap[key]=1}),keyFn=function keyFn(arr,fields,idx){return fields[arr[idx]].value},data.length?function(fields){var present=!dLen||valuesMap[getKey(dimensions,fields,keyFn)];return filterByMeasure?measures.every(function(field){return fields[field].value>=domain[field][0]&&fields[field].value<=domain[field][1]})&&present:present}:function(){return!1}}(propModel)}):[function(){return!1}];return operation===_constants__WEBPACK_IMPORTED_MODULE_4__.LOGICAL_OPERATORS.AND?clonedModel.select(function(fields){return fns.every(function(fn){return fn(fields)})},{saveChild:!1}):clonedModel.select(function(fields){return fns.some(function(fn){return fn(fields)})},{saveChild:!1})},splitWithSelect=function splitWithSelect(sourceDm,dimensionArr){var reducerFn=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(val){return val},config=arguments[3],saveChild=config.saveChild,fieldStoreObj=sourceDm.getFieldspace().fieldsObj(),_selectHelper=selectHelper(sourceDm.clone(saveChild),reducerFn,config,sourceDm,function(){for(var _len=arguments.length,params=Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return rowSplitDiffsetIterator.apply(void 0,params.concat([dimensionArr,fieldStoreObj]))}),splitRowDiffset=_selectHelper.splitRowDiffset,dimensionMap=_selectHelper.dimensionMap,clonedDMs=[];return Object.keys(splitRowDiffset).sort().forEach(function(e){if(splitRowDiffset[e]){var cloned=sourceDm.clone(saveChild),derivation=dimensionMap[e];cloned._rowDiffset=splitRowDiffset[e].join(","),cloned.__calculateFieldspace().calculateFieldsConfig();saveChild&&persistDerivations(sourceDm,cloned,_constants__WEBPACK_IMPORTED_MODULE_4__.DM_DERIVATIVES.SELECT,config,function derivationFormula(fields){return dimensionArr.every(function(_){return fields[_].value===derivation.keys[_]})}),cloned._derivation[cloned._derivation.length-1].meta=dimensionMap[e],clonedDMs.push(cloned)}}),clonedDMs},addDiffsetToClonedDm=function addDiffsetToClonedDm(clonedDm,rowDiffset,sourceDm,selectConfig,selectFn){clonedDm._rowDiffset=rowDiffset,clonedDm.__calculateFieldspace().calculateFieldsConfig(),persistDerivations(sourceDm,clonedDm,_constants__WEBPACK_IMPORTED_MODULE_4__.DM_DERIVATIVES.SELECT,{config:selectConfig},selectFn)},cloneWithSelect=function cloneWithSelect(sourceDm,selectFn,selectConfig,cloneConfig){var extraCloneDm={},mode=selectConfig.mode,cloned=sourceDm.clone(cloneConfig.saveChild),setOfRowDiffsets=selectHelper(cloned,selectFn,selectConfig,sourceDm,selectRowDiffsetIterator),diffIndex=selectModeMap[mode].diffIndex;return addDiffsetToClonedDm(cloned,setOfRowDiffsets[diffIndex[0]],sourceDm,selectConfig,selectFn),diffIndex.length>1?(extraCloneDm=sourceDm.clone(cloneConfig.saveChild),addDiffsetToClonedDm(extraCloneDm,setOfRowDiffsets[diffIndex[1]],sourceDm,selectConfig,selectFn),[cloned,extraCloneDm]):cloned},cloneWithProject=function cloneWithProject(sourceDm,projField,config,allFields){var cloned=sourceDm.clone(config.saveChild),projectionSet=projField;return config.mode===_enums__WEBPACK_IMPORTED_MODULE_0__.FilteringMode.INVERSE&&(projectionSet=allFields.filter(function(fieldName){return-1===projField.indexOf(fieldName)})),cloned._colIdentifier=projectionSet.join(","),cloned.__calculateFieldspace().calculateFieldsConfig(),persistDerivations(sourceDm,cloned,_constants__WEBPACK_IMPORTED_MODULE_4__.DM_DERIVATIVES.PROJECT,{projField:projField,config:config,actualProjField:projectionSet},null),cloned},splitWithProject=function splitWithProject(sourceDm,projFieldSet,config,allFields){return projFieldSet.map(function(projFields){return cloneWithProject(sourceDm,projFields,config,allFields)})},sanitizeUnitSchema=function sanitizeUnitSchema(unitSchema){if((unitSchema=Object(_utils__WEBPACK_IMPORTED_MODULE_8__.extend2)({},unitSchema)).type||(unitSchema.type=_enums__WEBPACK_IMPORTED_MODULE_0__.FieldType.DIMENSION),!unitSchema.subtype)switch(unitSchema.type){case _enums__WEBPACK_IMPORTED_MODULE_0__.FieldType.MEASURE:unitSchema.subtype=_enums__WEBPACK_IMPORTED_MODULE_0__.MeasureSubtype.CONTINUOUS;break;default:case _enums__WEBPACK_IMPORTED_MODULE_0__.FieldType.DIMENSION:unitSchema.subtype=_enums__WEBPACK_IMPORTED_MODULE_0__.DimensionSubtype.CATEGORICAL}return unitSchema},validateUnitSchema=function validateUnitSchema(unitSchema){var supportedMeasureSubTypes=[_enums__WEBPACK_IMPORTED_MODULE_0__.MeasureSubtype.CONTINUOUS],supportedDimSubTypes=[_enums__WEBPACK_IMPORTED_MODULE_0__.DimensionSubtype.CATEGORICAL,_enums__WEBPACK_IMPORTED_MODULE_0__.DimensionSubtype.BINNED,_enums__WEBPACK_IMPORTED_MODULE_0__.DimensionSubtype.TEMPORAL,_enums__WEBPACK_IMPORTED_MODULE_0__.DimensionSubtype.GEO],type=unitSchema.type,subtype=unitSchema.subtype,name=unitSchema.name;switch(type){case _enums__WEBPACK_IMPORTED_MODULE_0__.FieldType.DIMENSION:if(-1===supportedDimSubTypes.indexOf(subtype))throw new Error("DataModel doesn't support dimension field subtype "+subtype+" used for "+name+" field");break;case _enums__WEBPACK_IMPORTED_MODULE_0__.FieldType.MEASURE:if(-1===supportedMeasureSubTypes.indexOf(subtype))throw new Error("DataModel doesn't support measure field subtype "+subtype+" used for "+name+" field");break;default:throw new Error("DataModel doesn't support field type "+type+" used for "+name+" field")}},sanitizeAndValidateSchema=function sanitizeAndValidateSchema(schema){return schema.map(function(unitSchema){return unitSchema=sanitizeUnitSchema(unitSchema),validateUnitSchema(unitSchema),unitSchema})},resolveFieldName=function resolveFieldName(schema,dataHeader){schema.forEach(function(unitSchema){var fieldNameAs=unitSchema.as;if(fieldNameAs){var idx=dataHeader.indexOf(unitSchema.name);dataHeader[idx]=fieldNameAs,unitSchema.name=fieldNameAs,delete unitSchema.as}})},updateData=function updateData(relation,data,schema,options){schema=sanitizeAndValidateSchema(schema),options=Object.assign(Object.assign({},_default_config__WEBPACK_IMPORTED_MODULE_6__.default),options);var converterFn=_converter__WEBPACK_IMPORTED_MODULE_7__[options.dataFormat];if(!converterFn||"function"!=typeof converterFn)throw new Error("No converter function found for "+options.dataFormat+" format");var _converterFn=converterFn(data,options),_converterFn2=_slicedToArray(_converterFn,2),header=_converterFn2[0],formattedData=_converterFn2[1];resolveFieldName(schema,header);var fieldArr=Object(_field_creator__WEBPACK_IMPORTED_MODULE_5__.createFields)(formattedData,schema,header),nameSpace=_field_store__WEBPACK_IMPORTED_MODULE_1__.default.createNamespace(fieldArr,options.name);relation._partialFieldspace=nameSpace,relation._rowDiffset=formattedData.length&&formattedData[0].length?"0-"+(formattedData[0].length-1):"";var valueObjects=[];return Object(_operator__WEBPACK_IMPORTED_MODULE_3__.rowDiffsetIterator)(relation._rowDiffset,function(i){valueObjects[i]=prepareSelectionData(nameSpace.fields,i)}),nameSpace._cachedValueObjects=valueObjects,relation._colIdentifier=schema.map(function(_){return _.name}).join(),relation._dataFormat=options.dataFormat===_enums__WEBPACK_IMPORTED_MODULE_0__.DataFormat.AUTO?Object(_utils__WEBPACK_IMPORTED_MODULE_8__.detectDataFormat)(data):options.dataFormat,relation},fieldInSchema=function fieldInSchema(schema,field){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{},propModelInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},nonTraversingModel=propModelInf.nonTraversingModel,excludeModels=propModelInf.excludeModels||[];dataModel!==nonTraversingModel&&((!excludeModels.length||-1===excludeModels.indexOf(dataModel))&&dataModel.handlePropagation(propModel,config),dataModel._children.forEach(function(child){var selectionModel=applyExistingOperationOnModel(propModel,child);propagateIdentifiers(child,selectionModel,config,propModelInf)}))},getRootGroupByModel=function getRootGroupByModel(model){for(;model._parent&&model._derivation.find(function(d){return d.op!==_constants__WEBPACK_IMPORTED_MODULE_4__.DM_DERIVATIVES.GROUPBY});)model=model._parent;return model},getRootDataModel=function getRootDataModel(model){for(;model._parent;)model=model._parent;return model},getPathToRootModel=function getPathToRootModel(model){for(var path=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];model._parent;)path.push(model),model=model._parent;return path},propagateToAllDataModels=function propagateToAllDataModels(identifiers,rootModels,propagationInf,config){var criteria=void 0,propModel=void 0,propagationNameSpace=propagationInf.propagationNameSpace,propagateToSource=propagationInf.propagateToSource,propagationSourceId=propagationInf.sourceId,propagateInterpolatedValues=config.propagateInterpolatedValues,criterias=[];if(null===identifiers&&!0!==config.persistent)criterias=[{criteria:[]}],criteria=[];else{var _ref3,actionCriterias=Object.values(propagationNameSpace.mutableActions);!1!==propagateToSource&&(actionCriterias=actionCriterias.filter(function(d){return d.config.sourceId!==propagationSourceId}));var filteredCriteria=actionCriterias.filter(function filterFn(entry){return(config.filterFn||function(){return!0})(entry,config)}).map(function(action){return action.config.criteria}),excludeModels=[];if(!1!==propagateToSource){var sourceActionCriterias=Object.values(propagationNameSpace.mutableActions);sourceActionCriterias.forEach(function(actionInf){var actionConf=actionInf.config;!1===actionConf.applyOnSource&&actionConf.action===config.action&&actionConf.sourceId!==propagationSourceId&&(excludeModels.push(actionInf.model),(criteria=sourceActionCriterias.filter(function(d){return d!==actionInf}).map(function(d){return d.config.criteria})).length&&criterias.push({criteria:criteria,models:actionInf.model,path:getPathToRootModel(actionInf.model)}))})}criteria=(_ref3=[]).concat.apply(_ref3,[].concat(_toConsumableArray(filteredCriteria),[identifiers])).filter(function(d){return null!==d}),criterias.push({criteria:criteria,excludeModels:[].concat(excludeModels,_toConsumableArray(config.excludeModels||[]))})}var rootModel=rootModels.model,propConfig=Object.assign({sourceIdentifiers:identifiers,propagationSourceId:propagationSourceId},config),rootGroupByModel=rootModels.groupByModel;propagateInterpolatedValues&&rootGroupByModel&&(propModel=filterPropagationModel(rootGroupByModel,criteria,{filterByMeasure:propagateInterpolatedValues}),propagateIdentifiers(rootGroupByModel,propModel,propConfig)),criterias.forEach(function(inf){var propagationModel=filterPropagationModel(rootModel,inf.criteria),path=inf.path;if(path){var filteredModel=function getFilteredModel(propModel,path){for(var i=0,len=path.length;i1&&void 0!==arguments[1]?arguments[1]:{},model=arguments[2],sourceNamespace=void 0,isMutableAction=config.isMutableAction,criteria=config.criteria,key=config.action+"-"+config.sourceId;sourceNamespace=isMutableAction?propagationNameSpace.mutableActions:propagationNameSpace.immutableActions,null===criteria?delete sourceNamespace[key]:sourceNamespace[key]={model:model,config:config}},getNormalizedProFields=function getNormalizedProFields(projField,allFields,fieldConfig){var normalizedProjField=projField.reduce(function(acc,field){return"RegExp"===field.constructor.name?acc.push.apply(acc,_toConsumableArray(allFields.filter(function(fieldName){return-1!==fieldName.search(field)}))):field in fieldConfig&&acc.push(field),acc},[]);return Array.from(new Set(normalizedProjField)).map(function(field){return field.trim()})}},"./src/index.js": -/*!**********************!*\ - !*** ./src/index.js ***! - \**********************/ -/*! no static exports found */ -function srcIndexJs(module,exports,__webpack_require__){var DataModel=__webpack_require__( -/*! ./export */ -"./src/export.js");module.exports=DataModel.default?DataModel.default:DataModel},"./src/invalid-aware-types.js": -/*!************************************!*\ - !*** ./src/invalid-aware-types.js ***! - \************************************/ -/*! exports provided: default */ -function srcInvalidAwareTypesJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var _createClass=function(){function defineProperties(target,props){for(var i=0;i=(range=bucketRanges[midIdx=leftIdx+Math.floor((rightIdx-leftIdx)/2)]).start&&value=range.end?leftIdx=midIdx+1:valuedMin)?dMin:start,end=0!==end&&(!end||enddMin&&buckets.unshift(dMin),buckets[buckets.length-1]<=dMax&&buckets.push(dMax+1);for(var bucketRanges=[],i=0;i1&&void 0!==arguments[1]?arguments[1]:{saveChild:!0},currentDM=dm,firstChild=void 0,derivations=[];return operations.forEach(function(operation){currentDM=operation(currentDM),derivations.push.apply(derivations,function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i3&&void 0!==arguments[3]&&arguments[3],jointype=arguments.length>4&&void 0!==arguments[4]?arguments[4]:_constants__WEBPACK_IMPORTED_MODULE_4__.JOINS.CROSS,schema=[],data=[],applicableFilterFn=filterFn||defaultFilterFn,dm1FieldStore=dm1.getFieldspace(),dm2FieldStore=dm2.getFieldspace(),dm1FieldStoreName=dm1FieldStore.name,dm2FieldStoreName=dm2FieldStore.name,name=dm1FieldStore.name+"."+dm2FieldStore.name,commonSchemaList=Object(_get_common_schema__WEBPACK_IMPORTED_MODULE_2__.getCommonSchema)(dm1FieldStore,dm2FieldStore);if(dm1FieldStoreName===dm2FieldStoreName)throw new Error("DataModels must have different alias names");return dm1FieldStore.fields.forEach(function(field){var tmpSchema=Object(_utils__WEBPACK_IMPORTED_MODULE_1__.extend2)({},field.schema());-1===commonSchemaList.indexOf(tmpSchema.name)||replaceCommonSchema||(tmpSchema.name=dm1FieldStore.name+"."+tmpSchema.name),schema.push(tmpSchema)}),dm2FieldStore.fields.forEach(function(field){var tmpSchema=Object(_utils__WEBPACK_IMPORTED_MODULE_1__.extend2)({},field.schema());-1!==commonSchemaList.indexOf(tmpSchema.name)?replaceCommonSchema||(tmpSchema.name=dm2FieldStore.name+"."+tmpSchema.name,schema.push(tmpSchema)):schema.push(tmpSchema)}),Object(_row_diffset_iterator__WEBPACK_IMPORTED_MODULE_3__.rowDiffsetIterator)(dm1._rowDiffset,function(i){var rowAdded=!1,rowPosition=void 0;Object(_row_diffset_iterator__WEBPACK_IMPORTED_MODULE_3__.rowDiffsetIterator)(dm2._rowDiffset,function(ii){var tuple=[],userArg={};userArg[dm1FieldStoreName]={},userArg[dm2FieldStoreName]={},dm1FieldStore.fields.forEach(function(field){tuple.push(field.partialField.data[i]),userArg[dm1FieldStoreName][field.name()]=field.partialField.data[i]}),dm2FieldStore.fields.forEach(function(field){-1!==commonSchemaList.indexOf(field.schema().name)&&replaceCommonSchema||tuple.push(field.partialField.data[ii]),userArg[dm2FieldStoreName][field.name()]=field.partialField.data[ii]});var dm1Fields=Object(_helper__WEBPACK_IMPORTED_MODULE_5__.prepareJoinData)(userArg[dm1FieldStoreName]),dm2Fields=Object(_helper__WEBPACK_IMPORTED_MODULE_5__.prepareJoinData)(userArg[dm2FieldStoreName]);if(applicableFilterFn(dm1Fields,dm2Fields,function cloneProvider1(){return dm1.detachedRoot()},function cloneProvider2(){return dm2.detachedRoot()},{})){var tupleObj={};tuple.forEach(function(cellVal,iii){tupleObj[schema[iii].name]=cellVal}),rowAdded&&_constants__WEBPACK_IMPORTED_MODULE_4__.JOINS.CROSS!==jointype?data[rowPosition]=tupleObj:(data.push(tupleObj),rowAdded=!0,rowPosition=i)}else if((jointype===_constants__WEBPACK_IMPORTED_MODULE_4__.JOINS.LEFTOUTER||jointype===_constants__WEBPACK_IMPORTED_MODULE_4__.JOINS.RIGHTOUTER)&&!rowAdded){var _tupleObj={},len=dm1FieldStore.fields.length-1;tuple.forEach(function(cellVal,iii){_tupleObj[schema[iii].name]=iii<=len?cellVal:null}),rowAdded=!0,rowPosition=i,data.push(_tupleObj)}})}),new _datamodel__WEBPACK_IMPORTED_MODULE_0__.default(data,schema,{name:name})}},"./src/operator/data-builder.js": -/*!**************************************!*\ - !*** ./src/operator/data-builder.js ***! - \**************************************/ -/*! exports provided: dataBuilder */ -function srcOperatorDataBuilderJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"dataBuilder",function(){return dataBuilder});var _enums__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ../enums */ -"./src/enums/index.js"),_row_diffset_iterator__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__( -/*! ./row-diffset-iterator */ -"./src/operator/row-diffset-iterator.js"),_merge_sort__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__( -/*! ./merge-sort */ -"./src/operator/merge-sort.js"),_helper__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__( -/*! ../helper */ -"./src/helper.js"),_utils__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__( -/*! ../utils */ -"./src/utils/index.js");function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);ib1?"desc"===sortType?-1:1:0}}return retFunc}function groupData(data,fieldIndex){var hashMap=new Map,groupedData=[];return data.forEach(function(datum){var fieldVal=datum[fieldIndex];hashMap.has(fieldVal)?groupedData[hashMap.get(fieldVal)][1].push(datum):(groupedData.push([fieldVal,[datum]]),hashMap.set(fieldVal,groupedData.length-1))}),groupedData}function createSortingFnArg(groupedDatum,targetFields,targetFieldDetails){var arg={label:groupedDatum[0]};return targetFields.reduce(function(acc,next,idx){return acc[next]=groupedDatum[1].map(function(datum){return datum[targetFieldDetails[idx].index]}),acc},arg),arg}function dataBuilder(fieldStore,rowDiffset,colIdentifier,sortingDetails,options){var retObj={schema:[],data:[],uids:[]},addUid=(options=Object.assign({},{addUid:!1,columnWise:!1},options)).addUid,reqSorting=sortingDetails&&sortingDetails.length>0,tmpDataArr=[];if(colIdentifier.split(",").forEach(function(colName){for(var i=0;i=0;i--)fieldName=sortingDetails[i][0],sortMeta=sortingDetails[i][1],(fDetails=Object(_helper__WEBPACK_IMPORTED_MODULE_3__.fieldInSchema)(schema,fieldName))&&(Object(_utils__WEBPACK_IMPORTED_MODULE_4__.isCallable)(sortMeta)?Object(_merge_sort__WEBPACK_IMPORTED_MODULE_2__.mergeSort)(data,function(a,b){return sortMeta(a[fDetails.index],b[fDetails.index])}):Object(_utils__WEBPACK_IMPORTED_MODULE_4__.isArray)(sortMeta)?function(){var groupedData=groupData(data,fDetails.index),sortingFn=sortMeta[sortMeta.length-1],targetFields=sortMeta.slice(0,sortMeta.length-1),targetFieldDetails=targetFields.map(function(f){return Object(_helper__WEBPACK_IMPORTED_MODULE_3__.fieldInSchema)(schema,f)});groupedData.forEach(function(groupedDatum){groupedDatum.push(createSortingFnArg(groupedDatum,targetFields,targetFieldDetails))}),Object(_merge_sort__WEBPACK_IMPORTED_MODULE_2__.mergeSort)(groupedData,function(a,b){var m=a[2],n=b[2];return sortingFn(m,n)}),data.length=0,groupedData.forEach(function(datum){data.push.apply(data,_toConsumableArray(datum[1]))})}():(sortMeta="desc"===String(sortMeta).toLowerCase()?"desc":"asc",Object(_merge_sort__WEBPACK_IMPORTED_MODULE_2__.mergeSort)(data,getSortFn(fDetails.type,sortMeta,fDetails.index))));dataObj.uids=[],data.forEach(function(value){dataObj.uids.push(value.pop())})}(retObj,sortingDetails),options.columnWise){var tmpData=Array.apply(void 0,_toConsumableArray(Array(retObj.schema.length))).map(function(){return[]});retObj.data.forEach(function(tuple){tuple.forEach(function(data,i){tmpData[i].push(data)})}),retObj.data=tmpData}return retObj}},"./src/operator/difference.js": -/*!************************************!*\ - !*** ./src/operator/difference.js ***! - \************************************/ -/*! exports provided: difference */ -function srcOperatorDifferenceJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"difference",function(){return difference});var _datamodel__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ../datamodel */ -"./src/datamodel.js"),_utils__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__( -/*! ../utils */ -"./src/utils/index.js"),_row_diffset_iterator__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__( -/*! ./row-diffset-iterator */ -"./src/operator/row-diffset-iterator.js"),_utils_helper__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__( -/*! ../utils/helper */ -"./src/utils/helper.js");function difference(dm1,dm2){var hashTable={},schema=[],schemaNameArr=[],data=[],dm1FieldStore=dm1.getFieldspace(),dm2FieldStore=dm2.getFieldspace(),dm1FieldStoreFieldObj=dm1FieldStore.fieldsObj(),dm2FieldStoreFieldObj=dm2FieldStore.fieldsObj(),name=dm1FieldStore.name+" union "+dm2FieldStore.name;if(!Object(_utils_helper__WEBPACK_IMPORTED_MODULE_3__.isArrEqual)(dm1._colIdentifier.split(",").sort(),dm2._colIdentifier.split(",").sort()))return null;function prepareDataHelper(dm,fieldsObj,addData){Object(_row_diffset_iterator__WEBPACK_IMPORTED_MODULE_2__.rowDiffsetIterator)(dm._rowDiffset,function(i){var tuple={},hashData="";schemaNameArr.forEach(function(schemaName){var value=fieldsObj[schemaName].partialField.data[i];hashData+="-"+value,tuple[schemaName]=value}),hashTable[hashData]||(addData&&data.push(tuple),hashTable[hashData]=!0)})}return dm1._colIdentifier.split(",").forEach(function(fieldName){var field=dm1FieldStoreFieldObj[fieldName];schema.push(Object(_utils__WEBPACK_IMPORTED_MODULE_1__.extend2)({},field.schema())),schemaNameArr.push(field.schema().name)}),prepareDataHelper(dm2,dm2FieldStoreFieldObj,!1),prepareDataHelper(dm1,dm1FieldStoreFieldObj,!0),new _datamodel__WEBPACK_IMPORTED_MODULE_0__.default(data,schema,{name:name})}},"./src/operator/get-common-schema.js": -/*!*******************************************!*\ - !*** ./src/operator/get-common-schema.js ***! - \*******************************************/ -/*! exports provided: getCommonSchema */ -function srcOperatorGetCommonSchemaJs(module,__webpack_exports__,__webpack_require__){"use strict";function getCommonSchema(fs1,fs2){var retArr=[],fs1Arr=[];return fs1.fields.forEach(function(field){fs1Arr.push(field.schema().name)}),fs2.fields.forEach(function(field){-1!==fs1Arr.indexOf(field.schema().name)&&retArr.push(field.schema().name)}),retArr}__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"getCommonSchema",function(){return getCommonSchema})},"./src/operator/group-by-function.js": -/*!*******************************************!*\ - !*** ./src/operator/group-by-function.js ***! - \*******************************************/ -/*! exports provided: defaultReducerName, defReducer, fnList */ -function srcOperatorGroupByFunctionJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"defaultReducerName",function(){return defaultReducerName}),__webpack_require__.d(__webpack_exports__,"defReducer",function(){return sum}),__webpack_require__.d(__webpack_exports__,"fnList",function(){return fnList});var _fnList,_utils__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ../utils */ -"./src/utils/index.js"),_invalid_aware_types__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__( -/*! ../invalid-aware-types */ -"./src/invalid-aware-types.js"),_enums__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__( -/*! ../enums */ -"./src/enums/index.js");function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},retObj={},measures=dataModel.getFieldspace().getMeasure(),defReducer=_utils_reducer_store__WEBPACK_IMPORTED_MODULE_3__.default.defaultReducer();return Object.keys(measures).forEach(function(measureName){"string"!=typeof reducers[measureName]&&(reducers[measureName]=measures[measureName].defAggFn());var reducerFn=_utils_reducer_store__WEBPACK_IMPORTED_MODULE_3__.default.resolve(reducers[measureName]);reducerFn?retObj[measureName]=reducerFn:(retObj[measureName]=defReducer,reducers[measureName]=_group_by_function__WEBPACK_IMPORTED_MODULE_4__.defaultReducerName)}),retObj}function groupBy(dataModel,fieldArr,reducers,existingDataModel){var sFieldArr=getFieldArr(dataModel,fieldArr),reducerObj=getReducerObj(dataModel,reducers),fieldStore=dataModel.getFieldspace(),fieldStoreObj=fieldStore.fieldsObj(),dbName=fieldStore.name,dimensionArr=[],measureArr=[],schema=[],hashMap={},data=[],newDataModel=void 0;Object.entries(fieldStoreObj).forEach(function(_ref3){var _ref4=_slicedToArray(_ref3,2),key=_ref4[0],value=_ref4[1];if(-1!==sFieldArr.indexOf(key)||reducerObj[key])switch(schema.push(Object(_utils__WEBPACK_IMPORTED_MODULE_0__.extend2)({},value.schema())),value.schema().type){case _enums__WEBPACK_IMPORTED_MODULE_5__.FieldType.MEASURE:measureArr.push(key);break;default:case _enums__WEBPACK_IMPORTED_MODULE_5__.FieldType.DIMENSION:dimensionArr.push(key)}});var rowCount=0;Object(_row_diffset_iterator__WEBPACK_IMPORTED_MODULE_1__.rowDiffsetIterator)(dataModel._rowDiffset,function(i){var hash="";dimensionArr.forEach(function(_){hash=hash+"-"+fieldStoreObj[_].partialField.data[i]}),void 0===hashMap[hash]?(hashMap[hash]=rowCount,data.push({}),dimensionArr.forEach(function(_){data[rowCount][_]=fieldStoreObj[_].partialField.data[i]}),measureArr.forEach(function(_){data[rowCount][_]=[fieldStoreObj[_].partialField.data[i]]}),rowCount+=1):measureArr.forEach(function(_){data[hashMap[hash]][_].push(fieldStoreObj[_].partialField.data[i])})});var cachedStore={},cloneProvider=function cloneProvider(){return dataModel.detachedRoot()};return data.forEach(function(row){var tuple=row;measureArr.forEach(function(_){tuple[_]=reducerObj[_](row[_],cloneProvider,cachedStore)})}),existingDataModel?(existingDataModel.__calculateFieldspace(),newDataModel=existingDataModel):newDataModel=new _export__WEBPACK_IMPORTED_MODULE_2__.default(data,schema,{name:dbName}),newDataModel}},"./src/operator/index.js": -/*!*******************************!*\ - !*** ./src/operator/index.js ***! - \*******************************/ -/*! exports provided: createBinnedFieldData, compose, bin, select, project, groupby, calculateVariable, sort, crossProduct, dataBuilder, difference, getCommonSchema, defReducer, fnList, groupBy, getFieldArr, getReducerObj, mergeSort, naturalJoinFilter, naturalJoin, leftOuterJoin, rightOuterJoin, fullOuterJoin, rowDiffsetIterator, union */ -function srcOperatorIndexJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var _bucket_creator__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ./bucket-creator */ -"./src/operator/bucket-creator.js");__webpack_require__.d(__webpack_exports__,"createBinnedFieldData",function(){return _bucket_creator__WEBPACK_IMPORTED_MODULE_0__.createBinnedFieldData});var _compose__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__( -/*! ./compose */ -"./src/operator/compose.js");__webpack_require__.d(__webpack_exports__,"compose",function(){return _compose__WEBPACK_IMPORTED_MODULE_1__.compose}),__webpack_require__.d(__webpack_exports__,"bin",function(){return _compose__WEBPACK_IMPORTED_MODULE_1__.bin}),__webpack_require__.d(__webpack_exports__,"select",function(){return _compose__WEBPACK_IMPORTED_MODULE_1__.select}),__webpack_require__.d(__webpack_exports__,"project",function(){return _compose__WEBPACK_IMPORTED_MODULE_1__.project}),__webpack_require__.d(__webpack_exports__,"groupby",function(){return _compose__WEBPACK_IMPORTED_MODULE_1__.groupBy});var _pure_operators__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__( -/*! ./pure-operators */ -"./src/operator/pure-operators.js");__webpack_require__.d(__webpack_exports__,"calculateVariable",function(){return _pure_operators__WEBPACK_IMPORTED_MODULE_2__.calculateVariable}),__webpack_require__.d(__webpack_exports__,"sort",function(){return _pure_operators__WEBPACK_IMPORTED_MODULE_2__.sort});var _cross_product__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__( -/*! ./cross-product */ -"./src/operator/cross-product.js");__webpack_require__.d(__webpack_exports__,"crossProduct",function(){return _cross_product__WEBPACK_IMPORTED_MODULE_3__.crossProduct});var _data_builder__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__( -/*! ./data-builder */ -"./src/operator/data-builder.js");__webpack_require__.d(__webpack_exports__,"dataBuilder",function(){return _data_builder__WEBPACK_IMPORTED_MODULE_4__.dataBuilder});var _difference__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__( -/*! ./difference */ -"./src/operator/difference.js");__webpack_require__.d(__webpack_exports__,"difference",function(){return _difference__WEBPACK_IMPORTED_MODULE_5__.difference});var _get_common_schema__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__( -/*! ./get-common-schema */ -"./src/operator/get-common-schema.js");__webpack_require__.d(__webpack_exports__,"getCommonSchema",function(){return _get_common_schema__WEBPACK_IMPORTED_MODULE_6__.getCommonSchema});var _group_by_function__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__( -/*! ./group-by-function */ -"./src/operator/group-by-function.js");__webpack_require__.d(__webpack_exports__,"defReducer",function(){return _group_by_function__WEBPACK_IMPORTED_MODULE_7__.defReducer}),__webpack_require__.d(__webpack_exports__,"fnList",function(){return _group_by_function__WEBPACK_IMPORTED_MODULE_7__.fnList});var _group_by__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__( -/*! ./group-by */ -"./src/operator/group-by.js");__webpack_require__.d(__webpack_exports__,"groupBy",function(){return _group_by__WEBPACK_IMPORTED_MODULE_8__.groupBy}),__webpack_require__.d(__webpack_exports__,"getFieldArr",function(){return _group_by__WEBPACK_IMPORTED_MODULE_8__.getFieldArr}),__webpack_require__.d(__webpack_exports__,"getReducerObj",function(){return _group_by__WEBPACK_IMPORTED_MODULE_8__.getReducerObj});var _merge_sort__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__( -/*! ./merge-sort */ -"./src/operator/merge-sort.js");__webpack_require__.d(__webpack_exports__,"mergeSort",function(){return _merge_sort__WEBPACK_IMPORTED_MODULE_9__.mergeSort});var _natural_join_filter_function__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__( -/*! ./natural-join-filter-function */ -"./src/operator/natural-join-filter-function.js");__webpack_require__.d(__webpack_exports__,"naturalJoinFilter",function(){return _natural_join_filter_function__WEBPACK_IMPORTED_MODULE_10__.naturalJoinFilter});var _natural_join__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__( -/*! ./natural-join */ -"./src/operator/natural-join.js");__webpack_require__.d(__webpack_exports__,"naturalJoin",function(){return _natural_join__WEBPACK_IMPORTED_MODULE_11__.naturalJoin});var _outer_join__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__( -/*! ./outer-join */ -"./src/operator/outer-join.js");__webpack_require__.d(__webpack_exports__,"leftOuterJoin",function(){return _outer_join__WEBPACK_IMPORTED_MODULE_12__.leftOuterJoin}),__webpack_require__.d(__webpack_exports__,"rightOuterJoin",function(){return _outer_join__WEBPACK_IMPORTED_MODULE_12__.rightOuterJoin}),__webpack_require__.d(__webpack_exports__,"fullOuterJoin",function(){return _outer_join__WEBPACK_IMPORTED_MODULE_12__.fullOuterJoin});var _row_diffset_iterator__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__( -/*! ./row-diffset-iterator */ -"./src/operator/row-diffset-iterator.js");__webpack_require__.d(__webpack_exports__,"rowDiffsetIterator",function(){return _row_diffset_iterator__WEBPACK_IMPORTED_MODULE_13__.rowDiffsetIterator});var _union__WEBPACK_IMPORTED_MODULE_14__=__webpack_require__( -/*! ./union */ -"./src/operator/union.js");__webpack_require__.d(__webpack_exports__,"union",function(){return _union__WEBPACK_IMPORTED_MODULE_14__.union})},"./src/operator/merge-sort.js": -/*!************************************!*\ - !*** ./src/operator/merge-sort.js ***! - \************************************/ -/*! exports provided: mergeSort */ -function srcOperatorMergeSortJs(module,__webpack_exports__,__webpack_require__){"use strict";function defSortFn(a,b){var a1=""+a,b1=""+b;return a1b1?1:0}function mergeSort(arr){var sortFn=arguments.length>1&&void 0!==arguments[1]?arguments[1]:defSortFn;return arr.length>1&&function sort(arr,lo,hi,sortFn){if(hi===lo)return arr;var mid=lo+Math.floor((hi-lo)/2);return sort(arr,lo,mid,sortFn),sort(arr,mid+1,hi,sortFn),function merge(arr,lo,mid,hi,sortFn){for(var mainArr=arr,auxArr=[],i=lo;i<=hi;i+=1)auxArr[i]=mainArr[i];for(var a=lo,b=mid+1,_i=lo;_i<=hi;_i+=1)a>mid?(mainArr[_i]=auxArr[b],b+=1):b>hi?(mainArr[_i]=auxArr[a],a+=1):sortFn(auxArr[a],auxArr[b])<=0?(mainArr[_i]=auxArr[a],a+=1):(mainArr[_i]=auxArr[b],b+=1)}(arr,lo,mid,hi,sortFn),arr}(arr,0,arr.length-1,sortFn),arr}__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"mergeSort",function(){return mergeSort})},"./src/operator/natural-join-filter-function.js": -/*!******************************************************!*\ - !*** ./src/operator/natural-join-filter-function.js ***! - \******************************************************/ -/*! exports provided: naturalJoinFilter */ -function srcOperatorNaturalJoinFilterFunctionJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"naturalJoinFilter",function(){return naturalJoinFilter});var _get_common_schema__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ./get-common-schema */ -"./src/operator/get-common-schema.js");function naturalJoinFilter(dm1,dm2){var dm1FieldStore=dm1.getFieldspace(),dm2FieldStore=dm2.getFieldspace(),commonSchemaArr=Object(_get_common_schema__WEBPACK_IMPORTED_MODULE_0__.getCommonSchema)(dm1FieldStore,dm2FieldStore);return function(dm1Fields,dm2Fields){var retainTuple=!0;return commonSchemaArr.forEach(function(fieldName){retainTuple=!(dm1Fields[fieldName].value!==dm2Fields[fieldName].value||!retainTuple)}),retainTuple}}},"./src/operator/natural-join.js": -/*!**************************************!*\ - !*** ./src/operator/natural-join.js ***! - \**************************************/ -/*! exports provided: naturalJoin */ -function srcOperatorNaturalJoinJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"naturalJoin",function(){return naturalJoin});var _cross_product__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ./cross-product */ -"./src/operator/cross-product.js"),_natural_join_filter_function__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__( -/*! ./natural-join-filter-function */ -"./src/operator/natural-join-filter-function.js");function naturalJoin(dataModel1,dataModel2){return Object(_cross_product__WEBPACK_IMPORTED_MODULE_0__.crossProduct)(dataModel1,dataModel2,Object(_natural_join_filter_function__WEBPACK_IMPORTED_MODULE_1__.naturalJoinFilter)(dataModel1,dataModel2),!0)}},"./src/operator/outer-join.js": -/*!************************************!*\ - !*** ./src/operator/outer-join.js ***! - \************************************/ -/*! exports provided: leftOuterJoin, rightOuterJoin, fullOuterJoin */ -function srcOperatorOuterJoinJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"leftOuterJoin",function(){return leftOuterJoin}),__webpack_require__.d(__webpack_exports__,"rightOuterJoin",function(){return rightOuterJoin}),__webpack_require__.d(__webpack_exports__,"fullOuterJoin",function(){return fullOuterJoin});var _cross_product__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ./cross-product */ -"./src/operator/cross-product.js"),_constants__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__( -/*! ../constants */ -"./src/constants/index.js"),_union__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__( -/*! ./union */ -"./src/operator/union.js");function leftOuterJoin(dataModel1,dataModel2,filterFn){return Object(_cross_product__WEBPACK_IMPORTED_MODULE_0__.crossProduct)(dataModel1,dataModel2,filterFn,!1,_constants__WEBPACK_IMPORTED_MODULE_1__.JOINS.LEFTOUTER)}function rightOuterJoin(dataModel1,dataModel2,filterFn){return Object(_cross_product__WEBPACK_IMPORTED_MODULE_0__.crossProduct)(dataModel2,dataModel1,filterFn,!1,_constants__WEBPACK_IMPORTED_MODULE_1__.JOINS.RIGHTOUTER)}function fullOuterJoin(dataModel1,dataModel2,filterFn){return Object(_union__WEBPACK_IMPORTED_MODULE_2__.union)(leftOuterJoin(dataModel1,dataModel2,filterFn),rightOuterJoin(dataModel1,dataModel2,filterFn))}},"./src/operator/pure-operators.js": -/*!****************************************!*\ - !*** ./src/operator/pure-operators.js ***! - \****************************************/ -/*! exports provided: calculateVariable, sort */ -function srcOperatorPureOperatorsJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"calculateVariable",function(){return calculateVariable}),__webpack_require__.d(__webpack_exports__,"sort",function(){return sort});var calculateVariable=function calculateVariable(){for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return function(dm){return dm.calculateVariable.apply(dm,args)}},sort=function sort(){for(var _len2=arguments.length,args=Array(_len2),_key2=0;_key2<_len2;_key2++)args[_key2]=arguments[_key2];return function(dm){return dm.sort.apply(dm,args)}}},"./src/operator/row-diffset-iterator.js": -/*!**********************************************!*\ - !*** ./src/operator/row-diffset-iterator.js ***! - \**********************************************/ -/*! exports provided: rowDiffsetIterator */ -function srcOperatorRowDiffsetIteratorJs(module,__webpack_exports__,__webpack_require__){"use strict";function rowDiffsetIterator(rowDiffset,callback){rowDiffset.length>0&&rowDiffset.split(",").forEach(function(diffStr){var diffStsArr=diffStr.split("-"),start=+diffStsArr[0],end=+(diffStsArr[1]||diffStsArr[0]);if(end>=start)for(var i=start;i<=end;i+=1)callback(i)})}__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"rowDiffsetIterator",function(){return rowDiffsetIterator})},"./src/operator/union.js": -/*!*******************************!*\ - !*** ./src/operator/union.js ***! - \*******************************/ -/*! exports provided: union */ -function srcOperatorUnionJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"union",function(){return union});var _export__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ../export */ -"./src/export.js"),_utils__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__( -/*! ../utils */ -"./src/utils/index.js"),_row_diffset_iterator__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__( -/*! ./row-diffset-iterator */ -"./src/operator/row-diffset-iterator.js"),_utils_helper__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__( -/*! ../utils/helper */ -"./src/utils/helper.js");function union(dm1,dm2){var hashTable={},schema=[],schemaNameArr=[],data=[],dm1FieldStore=dm1.getFieldspace(),dm2FieldStore=dm2.getFieldspace(),dm1FieldStoreFieldObj=dm1FieldStore.fieldsObj(),dm2FieldStoreFieldObj=dm2FieldStore.fieldsObj(),name=dm1FieldStore.name+" union "+dm2FieldStore.name;if(!Object(_utils_helper__WEBPACK_IMPORTED_MODULE_3__.isArrEqual)(dm1._colIdentifier.split(",").sort(),dm2._colIdentifier.split(",").sort()))return null;function prepareDataHelper(dm,fieldsObj){Object(_row_diffset_iterator__WEBPACK_IMPORTED_MODULE_2__.rowDiffsetIterator)(dm._rowDiffset,function(i){var tuple={},hashData="";schemaNameArr.forEach(function(schemaName){var value=fieldsObj[schemaName].partialField.data[i];hashData+="-"+value,tuple[schemaName]=value}),hashTable[hashData]||(data.push(tuple),hashTable[hashData]=!0)})}return dm1._colIdentifier.split(",").forEach(function(fieldName){var field=dm1FieldStoreFieldObj[fieldName];schema.push(Object(_utils__WEBPACK_IMPORTED_MODULE_1__.extend2)({},field.schema())),schemaNameArr.push(field.schema().name)}),prepareDataHelper(dm1,dm1FieldStoreFieldObj),prepareDataHelper(dm2,dm2FieldStoreFieldObj),new _export__WEBPACK_IMPORTED_MODULE_0__.default(data,schema,{name:name})}},"./src/relation.js": -/*!*************************!*\ - !*** ./src/relation.js ***! - \*************************/ -/*! exports provided: default */ -function srcRelationJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);var _enums__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ./enums */ -"./src/enums/index.js"),_utils__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__( -/*! ./utils */ -"./src/utils/index.js"),_helper__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__( -/*! ./helper */ -"./src/helper.js"),_operator__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__( -/*! ./operator */ -"./src/operator/index.js"),_createClass=function(){function defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0])||arguments[0],clonedDm=new this.constructor(this);return saveChild?clonedDm.setParent(this):clonedDm.setParent(null),clonedDm}},{key:"project",value:function project(projField,config){var defConfig={mode:_enums__WEBPACK_IMPORTED_MODULE_0__.FilteringMode.NORMAL,saveChild:!0};config=Object.assign({},defConfig,config);var fieldConfig=this.getFieldsConfig(),allFields=Object.keys(fieldConfig),mode=config.mode,normalizedProjField=Object(_helper__WEBPACK_IMPORTED_MODULE_2__.getNormalizedProFields)(projField,allFields,fieldConfig),dataModel=void 0;mode===_enums__WEBPACK_IMPORTED_MODULE_0__.FilteringMode.ALL?dataModel=[Object(_helper__WEBPACK_IMPORTED_MODULE_2__.cloneWithProject)(this,normalizedProjField,{mode:_enums__WEBPACK_IMPORTED_MODULE_0__.FilteringMode.NORMAL,saveChild:config.saveChild},allFields),Object(_helper__WEBPACK_IMPORTED_MODULE_2__.cloneWithProject)(this,normalizedProjField,{mode:_enums__WEBPACK_IMPORTED_MODULE_0__.FilteringMode.INVERSE,saveChild:config.saveChild},allFields)]:dataModel=Object(_helper__WEBPACK_IMPORTED_MODULE_2__.cloneWithProject)(this,normalizedProjField,config,allFields);return dataModel}},{key:"getFieldsConfig",value:function getFieldsConfig(){return this._fieldConfig}},{key:"calculateFieldsConfig",value:function calculateFieldsConfig(){return this._fieldConfig=this._fieldspace.fields.reduce(function(acc,fieldObj,i){return acc[fieldObj.name()]={index:i,def:fieldObj.schema()},acc},{}),this}},{key:"dispose",value:function dispose(){this._parent&&this._parent.removeChild(this),this._parent=null,this._children.forEach(function(child){child._parent=null}),this._children=[]}},{key:"removeChild",value:function removeChild(child){var idx=this._children.findIndex(function(sibling){return sibling===child});-1===idx||this._children.splice(idx,1)}},{key:"setParent",value:function setParent(parent){this._parent&&this._parent.removeChild(this),this._parent=parent,parent&&parent._children.push(this)}},{key:"getParent",value:function getParent(){return this._parent}},{key:"getChildren",value:function getChildren(){return this._children}},{key:"getDerivations",value:function getDerivations(){return this._derivation}},{key:"getAncestorDerivations",value:function getAncestorDerivations(){return this._ancestorDerivation}}]),Relation}();__webpack_exports__.default=Relation},"./src/stats/index.js": -/*!****************************!*\ - !*** ./src/stats/index.js ***! - \****************************/ -/*! exports provided: sum, avg, min, max, first, last, count, sd */ -function srcStatsIndexJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"sum",function(){return sum}),__webpack_require__.d(__webpack_exports__,"avg",function(){return avg}),__webpack_require__.d(__webpack_exports__,"min",function(){return min}),__webpack_require__.d(__webpack_exports__,"max",function(){return max}),__webpack_require__.d(__webpack_exports__,"first",function(){return first}),__webpack_require__.d(__webpack_exports__,"last",function(){return last}),__webpack_require__.d(__webpack_exports__,"count",function(){return count}),__webpack_require__.d(__webpack_exports__,"sd",function(){return sd});var _operator_group_by_function__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__( -/*! ../operator/group-by-function */ -"./src/operator/group-by-function.js"),sum=_operator_group_by_function__WEBPACK_IMPORTED_MODULE_0__.fnList.sum,avg=_operator_group_by_function__WEBPACK_IMPORTED_MODULE_0__.fnList.avg,min=_operator_group_by_function__WEBPACK_IMPORTED_MODULE_0__.fnList.min,max=_operator_group_by_function__WEBPACK_IMPORTED_MODULE_0__.fnList.max,first=_operator_group_by_function__WEBPACK_IMPORTED_MODULE_0__.fnList.first,last=_operator_group_by_function__WEBPACK_IMPORTED_MODULE_0__.fnList.last,count=_operator_group_by_function__WEBPACK_IMPORTED_MODULE_0__.fnList.count,sd=_operator_group_by_function__WEBPACK_IMPORTED_MODULE_0__.fnList.std},"./src/utils/column-major.js": -/*!***********************************!*\ - !*** ./src/utils/column-major.js ***! - \***********************************/ -/*! exports provided: default */ -function srcUtilsColumnMajorJs(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default=function(store){var i=0;return function(){for(var _len=arguments.length,fields=Array(_len),_key=0;_key<_len;_key++)fields[_key]=arguments[_key];fields.forEach(function(val,fieldIndex){store[fieldIndex]instanceof Array||(store[fieldIndex]=Array.from({length:i})),store[fieldIndex].push(val)}),i++}}},"./src/utils/date-time-formatter.js": -/*!******************************************!*\ - !*** ./src/utils/date-time-formatter.js ***! - \******************************************/ -/*! exports provided: default */ -function srcUtilsDateTimeFormatterJs(module,__webpack_exports__,__webpack_require__){"use strict";function convertToNativeDate(date){return date instanceof Date?date:new Date(date)}function pad(n){return n<10?"0"+n:n}function DateTimeFormatter(format){this.format=format,this.dtParams=void 0,this.nativeDate=void 0}__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"default",function(){return DateTimeFormatter}),RegExp.escape=function(text){return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},DateTimeFormatter.TOKEN_PREFIX="%",DateTimeFormatter.DATETIME_PARAM_SEQUENCE={YEAR:0,MONTH:1,DAY:2,HOUR:3,MINUTE:4,SECOND:5,MILLISECOND:6},DateTimeFormatter.defaultNumberParser=function(defVal){return function(val){var parsedVal;return isFinite(parsedVal=parseInt(val,10))?parsedVal:defVal}},DateTimeFormatter.defaultRangeParser=function(range,defVal){return function(val){var l,i=void 0;if(!val)return defVal;var nVal=val.toLowerCase();for(i=0,l=range.length;ipresentDate.getFullYear()&&(result=""+(presentYear-1)+parsedVal),convertToNativeDate(result).getFullYear()},formatter:function formatter(val){var year=convertToNativeDate(val).getFullYear().toString(),l=void 0;return year&&(l=year.length,year=year.substring(l-2,l)),year}},Y:{name:"Y",index:0,extract:function extract(){return"(\\d{4})"},parser:DateTimeFormatter.defaultNumberParser(),formatter:function formatter(val){return convertToNativeDate(val).getFullYear().toString()}}}},DateTimeFormatter.getTokenFormalNames=function(){var definitions=DateTimeFormatter.getTokenDefinitions();return{HOUR:definitions.H,HOUR_12:definitions.l,AMPM_UPPERCASE:definitions.p,AMPM_LOWERCASE:definitions.P,MINUTE:definitions.M,SECOND:definitions.S,SHORT_DAY:definitions.a,LONG_DAY:definitions.A,DAY_OF_MONTH:definitions.e,DAY_OF_MONTH_CONSTANT_WIDTH:definitions.d,SHORT_MONTH:definitions.b,LONG_MONTH:definitions.B,MONTH_OF_YEAR:definitions.m,SHORT_YEAR:definitions.y,LONG_YEAR:definitions.Y}},DateTimeFormatter.tokenResolver=function(){var definitions=DateTimeFormatter.getTokenDefinitions(),defaultResolver=function defaultResolver(){for(var i=0,arg=void 0,targetParam=void 0,l=arguments.length;i=0;)forwardChar=format[i+1],-1!==tokenLiterals.indexOf(forwardChar)&&occurrence.push({index:i,token:forwardChar});return occurrence},DateTimeFormatter.formatAs=function(date,format){var l,nDate=convertToNativeDate(date),occurrence=DateTimeFormatter.findTokens(format),definitions=DateTimeFormatter.getTokenDefinitions(),formattedStr=String(format),tokenPrefix=DateTimeFormatter.TOKEN_PREFIX,token=void 0,formattedVal=void 0,i=void 0;for(i=0,l=occurrence.length;i=0;i--)(occIndex=occurrence[i].index)+1!==regexFormat.length-1?(void 0===lastOccurrenceIndex&&(lastOccurrenceIndex=regexFormat.length),targetText=regexFormat.substring(occIndex+2,lastOccurrenceIndex),regexFormat=regexFormat.substring(0,occIndex+2)+RegExp.escape(targetText)+regexFormat.substring(lastOccurrenceIndex,regexFormat.length),lastOccurrenceIndex=occIndex):lastOccurrenceIndex=occIndex;for(i=0;imax&&(max=d)}),[min,max]}},"./src/utils/extend2.js": -/*!******************************!*\ - !*** ./src/utils/extend2.js ***! - \******************************/ -/*! exports provided: default */ -function srcUtilsExtend2Js(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"default",function(){return extend2});var _typeof="function"==typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?function(obj){return _typeof2(obj)}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":_typeof2(obj)},OBJECTSTRING="object",objectToStrFn=Object.prototype.toString,objectToStr="[object Object]",arrayToStr="[object Array]";function checkCyclicRef(obj,parentArr){for(var i=parentArr.length,bIndex=-1;i;){if(obj===parentArr[i])return bIndex=i;i-=1}return bIndex}function extend2(obj1,obj2,skipUndef){return(void 0===obj1?"undefined":_typeof(obj1))!==OBJECTSTRING&&(void 0===obj2?"undefined":_typeof(obj2))!==OBJECTSTRING?null:(void 0===obj2?"undefined":_typeof(obj2))!==OBJECTSTRING||null===obj2?obj1:((void 0===obj1?"undefined":_typeof(obj1))!==OBJECTSTRING&&(obj1=obj2 instanceof Array?[]:{}),function merge(obj1,obj2,skipUndef,tgtArr,srcArr){var item,srcVal,tgtVal,str,cRef;if(srcArr?(tgtArr.push(obj1),srcArr.push(obj2)):(tgtArr=[obj1],srcArr=[obj2]),obj2 instanceof Array)for(item=0;item2?(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 value(e,t){return this._graph.createNodesFrom(t,e),this}},{key:"on",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"CurrFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("nextFrame")).resetNodeValue.apply(n,P(e)),o}},{key:"next",value:function value(e,t,r){var n,i=e instanceof Array?e:[e],o=this._graph.createElectricNodeOf(i,{type:"NextFrame",fn:t});return r&&(n=this._graph.stopPropagation().setPropagationOverride("currentFrame")).resetNodeValue.apply(n,P(e)),o}},{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,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 value(){for(var e,t=this,r=arguments.length,n=Array(r),i=0;ib?1:a>=b?0:NaN},bisector=function(compare){return 1===compare.length&&(compare=function ascendingComparator(f){return function(d,x){return ascending(f(d),x)}}(compare)),{left:function left(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)<0?lo=mid+1:hi=mid}return lo},right:function right(a,x,lo,hi){for(null==lo&&(lo=0),null==hi&&(hi=a.length);lo>>1;compare(a[mid],x)>0?hi=mid:lo=mid+1}return lo}}};var ascendingBisect=bisector(ascending),bisectRight=ascendingBisect.right,bisect=(ascendingBisect.left,bisectRight);var number=function(x){return null===x?NaN:+x},array_array=Array.prototype,src_range=(array_array.slice,array_array.map,function(start,stop,step){start=+start,stop=+stop,step=(n=arguments.length)<2?(stop=start,start=0,1):n<3?1:+step;for(var i=-1,n=0|Math.max(0,Math.ceil((stop-start)/step)),range=new Array(n);++i0)return[start];if((reverse=stop0)for(start=Math.ceil(start/step),stop=Math.floor(stop/step),ticks=new Array(n=Math.ceil(stop-start+1));++i=0?(error>=e10?10:error>=e5?5:error>=e2?2:1)*Math.pow(10,power):-Math.pow(10,-power)/(error>=e10?10:error>=e5?5:error>=e2?2:1)}function tickStep(start,stop,count){var step0=Math.abs(stop-start)/Math.max(0,count),step1=Math.pow(10,Math.floor(Math.log(step0)/Math.LN10)),error=step0/step1;return error>=e10?step1*=10:error>=e5?step1*=5:error>=e2&&(step1*=2),stop=1)return+valueof(values[n-1],n-1,values);var n,i=(n-1)*p,i0=Math.floor(i),value0=+valueof(values[i0],i0,values);return value0+(+valueof(values[i0+1],i0+1,values)-value0)*(i-i0)}};function map_Map(){}function map_map(object,f){var map=new map_Map;if(object instanceof map_Map)object.each(function(value,key){map.set(key,value)});else if(Array.isArray(object)){var o,i=-1,n=object.length;if(null==f)for(;++i=keys.length)return null!=_sortValues&&array.sort(_sortValues),null!=_rollup?_rollup(array):array;for(var keyValue,value,values,i=-1,n=array.length,key=keys[depth++],valuesByKey=src_map(),result=createResult();++ikeys.length)return map;var array,sortKey=_sortKeys[depth-1];return null!=_rollup&&depth>=keys.length?array=map.entries():(array=[],map.each(function(v,k){array.push({key:k,values:_entries(v,depth)})})),null!=sortKey?array.sort(function(a,b){return sortKey(a.key,b.key)}):array}(apply(array,0,createMap,setMap),0)},key:function key(d){return keys.push(d),nest},sortKeys:function sortKeys(order){return _sortKeys[keys.length-1]=order,nest},sortValues:function sortValues(order){return _sortValues=order,nest},rollup:function rollup(f){return _rollup=f,nest}}};function createObject(){return{}}function setObject(object,key,value){object[key]=value}function createMap(){return src_map()}function setMap(map,key,value){map.set(key,value)}function set_Set(){}var proto=src_map.prototype;function set_set(object,f){var set=new set_Set;if(object instanceof set_Set)object.each(function(value){set.add(value)});else if(object){var i=-1,n=object.length;if(null==f)for(;++i1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo)),hiIndex=getClosestIndexOf(values,hi),b=lo===hi?a:Math.max(a,hiIndex-1),reverse&&(t=a,a=n-b,b=n-t),a>b?void 0:domain().slice(a,b+1)},scale.invert=function(r0,r1){var a,t,lo=+r0,hi=arguments.length>1?+r1:lo,reverse=range[1]range[1-reverse]))return a=Math.max(0,getClosestIndexOf(values,lo,"left")),domain()[reverse?n-a:a]},rescale()}function getClosestIndexOf(arr,value,side){for(var highVal,mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1:high}var define=function(constructor,factory,prototype){constructor.prototype=factory.prototype=prototype,prototype.constructor=constructor};function extend(parent,definition){var prototype=Object.create(parent.prototype);for(var key in definition)prototype[key]=definition[key];return prototype}function Color(){}var reI="\\s*([+-]?\\d+)\\s*",reN="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",reP="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",reHex3=/^#([0-9a-f]{3})$/,reHex6=/^#([0-9a-f]{6})$/,reRgbInteger=new RegExp("^rgb\\("+[reI,reI,reI]+"\\)$"),reRgbPercent=new RegExp("^rgb\\("+[reP,reP,reP]+"\\)$"),reRgbaInteger=new RegExp("^rgba\\("+[reI,reI,reI,reN]+"\\)$"),reRgbaPercent=new RegExp("^rgba\\("+[reP,reP,reP,reN]+"\\)$"),reHslPercent=new RegExp("^hsl\\("+[reN,reP,reP]+"\\)$"),reHslaPercent=new RegExp("^hsla\\("+[reN,reP,reP,reN]+"\\)$"),named={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(format){var m;return format=(format+"").trim().toLowerCase(),(m=reHex3.exec(format))?new Rgb((m=parseInt(m[1],16))>>8&15|m>>4&240,m>>4&15|240&m,(15&m)<<4|15&m,1):(m=reHex6.exec(format))?rgbn(parseInt(m[1],16)):(m=reRgbInteger.exec(format))?new Rgb(m[1],m[2],m[3],1):(m=reRgbPercent.exec(format))?new Rgb(255*m[1]/100,255*m[2]/100,255*m[3]/100,1):(m=reRgbaInteger.exec(format))?rgba(m[1],m[2],m[3],m[4]):(m=reRgbaPercent.exec(format))?rgba(255*m[1]/100,255*m[2]/100,255*m[3]/100,m[4]):(m=reHslPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,1):(m=reHslaPercent.exec(format))?hsla(m[1],m[2]/100,m[3]/100,m[4]):named.hasOwnProperty(format)?rgbn(named[format]):"transparent"===format?new Rgb(NaN,NaN,NaN,0):null}function rgbn(n){return new Rgb(n>>16&255,n>>8&255,255&n,1)}function rgba(r,g,b,a){return a<=0&&(r=g=b=NaN),new Rgb(r,g,b,a)}function rgbConvert(o){return o instanceof Color||(o=color_color(o)),o?new Rgb((o=o.rgb()).r,o.g,o.b,o.opacity):new Rgb}function color_rgb(r,g,b,opacity){return 1===arguments.length?rgbConvert(r):new Rgb(r,g,b,null==opacity?1:opacity)}function Rgb(r,g,b,opacity){this.r=+r,this.g=+g,this.b=+b,this.opacity=+opacity}function _hex(value){return((value=Math.max(0,Math.min(255,Math.round(value)||0)))<16?"0":"")+value.toString(16)}function hsla(h,s,l,a){return a<=0?h=s=l=NaN:l<=0||l>=1?h=s=NaN:s<=0&&(h=NaN),new Hsl(h,s,l,a)}function hsl(h,s,l,opacity){return 1===arguments.length?function hslConvert(o){if(o instanceof Hsl)return new Hsl(o.h,o.s,o.l,o.opacity);if(o instanceof Color||(o=color_color(o)),!o)return new Hsl;if(o instanceof Hsl)return o;var r=(o=o.rgb()).r/255,g=o.g/255,b=o.b/255,min=Math.min(r,g,b),max=Math.max(r,g,b),h=NaN,s=max-min,l=(max+min)/2;return s?(h=r===max?(g-b)/s+6*(g0&&l<1?0:h,new Hsl(h,s,l,o.opacity)}(h):new Hsl(h,s,l,null==opacity?1:opacity)}function Hsl(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function hsl2rgb(h,m1,m2){return 255*(h<60?m1+(m2-m1)*h/60:h<180?m2:h<240?m1+(m2-m1)*(240-h)/60:m1)}define(Color,color_color,{displayable:function displayable(){return this.rgb().displayable()},hex:function hex(){return this.rgb().hex()},toString:function toString(){return this.rgb()+""}}),define(Rgb,color_rgb,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Rgb(this.r*k,this.g*k,this.b*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Rgb(this.r*k,this.g*k,this.b*k,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 a=this.opacity;return(1===(a=isNaN(a)?1:Math.max(0,Math.min(1,a)))?"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===a?")":", "+a+")")}})),define(Hsl,hsl,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Hsl(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=this.h%360+360*(this.h<0),s=isNaN(h)||isNaN(this.s)?0:this.s,l=this.l,m2=l+(l<.5?l:1-l)*s,m1=2*l-m2;return new Rgb(hsl2rgb(h>=240?h-240:h+120,m1,m2),hsl2rgb(h,m1,m2),hsl2rgb(h<120?h+240:h-120,m1,m2),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 deg2rad=Math.PI/180,rad2deg=180/Math.PI,Xn=.96422,Yn=1,Zn=.82521,lab_t0=4/29,lab_t1=6/29,t2=3*lab_t1*lab_t1,t3=lab_t1*lab_t1*lab_t1;function labConvert(o){if(o instanceof Lab)return new Lab(o.l,o.a,o.b,o.opacity);if(o instanceof Hcl){if(isNaN(o.h))return new Lab(o.l,0,0,o.opacity);var h=o.h*deg2rad;return new Lab(o.l,Math.cos(h)*o.c,Math.sin(h)*o.c,o.opacity)}o instanceof Rgb||(o=rgbConvert(o));var x,z,r=rgb2lrgb(o.r),g=rgb2lrgb(o.g),b=rgb2lrgb(o.b),y=xyz2lab((.2225045*r+.7168786*g+.0606169*b)/Yn);return r===g&&g===b?x=z=y:(x=xyz2lab((.4360747*r+.3850649*g+.1430804*b)/Xn),z=xyz2lab((.0139322*r+.0971045*g+.7141733*b)/Zn)),new Lab(116*y-16,500*(x-y),200*(y-z),o.opacity)}function lab(l,a,b,opacity){return 1===arguments.length?labConvert(l):new Lab(l,a,b,null==opacity?1:opacity)}function Lab(l,a,b,opacity){this.l=+l,this.a=+a,this.b=+b,this.opacity=+opacity}function xyz2lab(t){return t>t3?Math.pow(t,1/3):t/t2+lab_t0}function lab2xyz(t){return t>lab_t1?t*t*t:t2*(t-lab_t0)}function lrgb2rgb(x){return 255*(x<=.0031308?12.92*x:1.055*Math.pow(x,1/2.4)-.055)}function rgb2lrgb(x){return(x/=255)<=.04045?x/12.92:Math.pow((x+.055)/1.055,2.4)}function hclConvert(o){if(o instanceof Hcl)return new Hcl(o.h,o.c,o.l,o.opacity);if(o instanceof Lab||(o=labConvert(o)),0===o.a&&0===o.b)return new Hcl(NaN,0,o.l,o.opacity);var h=Math.atan2(o.b,o.a)*rad2deg;return new Hcl(h<0?h+360:h,Math.sqrt(o.a*o.a+o.b*o.b),o.l,o.opacity)}function hcl(h,c,l,opacity){return 1===arguments.length?hclConvert(h):new Hcl(h,c,l,null==opacity?1:opacity)}function Hcl(h,c,l,opacity){this.h=+h,this.c=+c,this.l=+l,this.opacity=+opacity}define(Lab,lab,extend(Color,{brighter:function brighter(k){return new Lab(this.l+18*(null==k?1:k),this.a,this.b,this.opacity)},darker:function darker(k){return new Lab(this.l-18*(null==k?1:k),this.a,this.b,this.opacity)},rgb:function rgb(){var y=(this.l+16)/116,x=isNaN(this.a)?y:y+this.a/500,z=isNaN(this.b)?y:y-this.b/200;return new Rgb(lrgb2rgb(3.1338561*(x=Xn*lab2xyz(x))-1.6168667*(y=Yn*lab2xyz(y))-.4906146*(z=Zn*lab2xyz(z))),lrgb2rgb(-.9787684*x+1.9161415*y+.033454*z),lrgb2rgb(.0719453*x-.2289914*y+1.4052427*z),this.opacity)}})),define(Hcl,hcl,extend(Color,{brighter:function brighter(k){return new Hcl(this.h,this.c,this.l+18*(null==k?1:k),this.opacity)},darker:function darker(k){return new Hcl(this.h,this.c,this.l-18*(null==k?1:k),this.opacity)},rgb:function rgb(){return labConvert(this).rgb()}}));var A=-.14861,B=1.78277,C=-.29227,cubehelix_D=-.90649,E=1.97294,ED=E*cubehelix_D,EB=E*B,BC_DA=B*C-cubehelix_D*A;function cubehelix_cubehelix(h,s,l,opacity){return 1===arguments.length?function cubehelixConvert(o){if(o instanceof Cubehelix)return new Cubehelix(o.h,o.s,o.l,o.opacity);o instanceof Rgb||(o=rgbConvert(o));var r=o.r/255,g=o.g/255,b=o.b/255,l=(BC_DA*b+ED*r-EB*g)/(BC_DA+ED-EB),bl=b-l,k=(E*(g-l)-C*bl)/cubehelix_D,s=Math.sqrt(k*k+bl*bl)/(E*l*(1-l)),h=s?Math.atan2(k,bl)*rad2deg-120:NaN;return new Cubehelix(h<0?h+360:h,s,l,o.opacity)}(h):new Cubehelix(h,s,l,null==opacity?1:opacity)}function Cubehelix(h,s,l,opacity){this.h=+h,this.s=+s,this.l=+l,this.opacity=+opacity}function basis(t1,v0,v1,v2,v3){var t2=t1*t1,t3=t2*t1;return((1-3*t1+3*t2-t3)*v0+(4-6*t2+3*t3)*v1+(1+3*t1+3*t2-3*t3)*v2+t3*v3)/6}define(Cubehelix,cubehelix_cubehelix,extend(Color,{brighter:function brighter(k){return k=null==k?1/.7:Math.pow(1/.7,k),new Cubehelix(this.h,this.s,this.l*k,this.opacity)},darker:function darker(k){return k=null==k?.7:Math.pow(.7,k),new Cubehelix(this.h,this.s,this.l*k,this.opacity)},rgb:function rgb(){var h=isNaN(this.h)?0:(this.h+120)*deg2rad,l=+this.l,a=isNaN(this.s)?0:this.s*l*(1-l),cosh=Math.cos(h),sinh=Math.sin(h);return new Rgb(255*(l+a*(A*cosh+B*sinh)),255*(l+a*(C*cosh+cubehelix_D*sinh)),255*(l+a*(E*cosh)),this.opacity)}}));var src_constant=function(x){return function(){return x}};function linear(a,d){return function(t){return a+t*d}}function color_hue(a,b){var d=b-a;return d?linear(a,d>180||d<-180?d-360*Math.round(d/360):d):src_constant(isNaN(a)?b:a)}function gamma(y){return 1==(y=+y)?nogamma:function(a,b){return b-a?function exponential(a,b,y){return a=Math.pow(a,y),b=Math.pow(b,y)-a,y=1/y,function(t){return Math.pow(a+t*b,y)}}(a,b,y):src_constant(isNaN(a)?b:a)}}function nogamma(a,b){var d=b-a;return d?linear(a,d):src_constant(isNaN(a)?b:a)}var src_rgb=function rgbGamma(y){var color=gamma(y);function rgb(start,end){var r=color((start=color_rgb(start)).r,(end=color_rgb(end)).r),g=color(start.g,end.g),b=color(start.b,end.b),opacity=nogamma(start.opacity,end.opacity);return function(t){return start.r=r(t),start.g=g(t),start.b=b(t),start.opacity=opacity(t),start+""}}return rgb.gamma=rgbGamma,rgb}(1);function rgbSpline(spline){return function(colors){var i,color,n=colors.length,r=new Array(n),g=new Array(n),b=new Array(n);for(i=0;i=1?(t=1,n-1):Math.floor(t*n),v1=values[i],v2=values[i+1],v0=i>0?values[i-1]:2*v1-v2,v3=ibi&&(bs=b.slice(bi,bs),s[i]?s[i]+=bs:s[++i]=bs),(am=am[0])===(bm=bm[0])?s[i]?s[i]+=bm:s[++i]=bm:(s[++i]=null,q.push({i:i,x:src_number(am,bm)})),bi=reB.lastIndex;return bi180?b+=360:b-a>180&&(a+=360),q.push({i:s.push(pop(s)+"rotate(",null,degParen)-2,x:src_number(a,b)})):b&&s.push(pop(s)+"rotate("+b+degParen)}(a.rotate,b.rotate,s,q),function skewX(a,b,s,q){a!==b?q.push({i:s.push(pop(s)+"skewX(",null,degParen)-2,x:src_number(a,b)}):b&&s.push(pop(s)+"skewX("+b+degParen)}(a.skewX,b.skewX,s,q),function scale(xa,ya,xb,yb,s,q){if(xa!==xb||ya!==yb){var i=s.push(pop(s)+"scale(",null,",",null,")");q.push({i:i-4,x:src_number(xa,xb)},{i:i-2,x:src_number(ya,yb)})}else 1===xb&&1===yb||s.push(pop(s)+"scale("+xb+","+yb+")")}(a.scaleX,a.scaleY,b.scaleX,b.scaleY,s,q),a=b=null,function(t){for(var o,i=-1,n=q.length;++i2?polymap:bimap,output=input=null,scale}function scale(x){return(output||(output=piecewise(domain,range,clamp?function deinterpolateClamp(deinterpolate){return function(a,b){var d=deinterpolate(a=+a,b=+b);return function(x){return x<=a?0:x>=b?1:d(x)}}}(deinterpolate):deinterpolate,interpolate)))(+x)}return scale.invert=function(y){return(input||(input=piecewise(range,domain,deinterpolateLinear,clamp?function reinterpolateClamp(reinterpolate){return function(a,b){var r=reinterpolate(a=+a,b=+b);return function(t){return t<=0?a:t>=1?b:r(t)}}}(reinterpolate):reinterpolate)))(+y)},scale.domain=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),rescale()):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),rescale()):range.slice()},scale.rangeRound=function(_){return range=array_slice.call(_),interpolate=src_round,rescale()},scale.clamp=function(_){return arguments.length?(clamp=!!_,rescale()):clamp},scale.interpolate=function(_){return arguments.length?(interpolate=_,rescale()):interpolate},rescale()}var formatDecimal=function(x,p){if((i=(x=p?x.toExponential(p-1):x.toExponential()).indexOf("e"))<0)return null;var i,coefficient=x.slice(0,i);return[coefficient.length>1?coefficient[0]+coefficient.slice(2):coefficient,+x.slice(i+1)]},src_exponent=function(x){return(x=formatDecimal(Math.abs(x)))?x[1]:NaN},re=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function formatSpecifier(specifier){return new FormatSpecifier(specifier)}function FormatSpecifier(specifier){if(!(match=re.exec(specifier)))throw new Error("invalid format: "+specifier);var match;this.fill=match[1]||" ",this.align=match[2]||">",this.sign=match[3]||"-",this.symbol=match[4]||"",this.zero=!!match[5],this.width=match[6]&&+match[6],this.comma=!!match[7],this.precision=match[8]&&+match[8].slice(1),this.trim=!!match[9],this.type=match[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 prefixExponent,defaultLocale_locale,defaultLocale_format,defaultLocale_formatPrefix,formatTrim=function(s){out:for(var i1,n=s.length,i=1,i0=-1;i0){if(!+s[i])break out;i0=0}}return i0>0?s.slice(0,i0)+s.slice(i1+1):s},formatRounded=function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1];return exponent<0?"0."+new Array(-exponent).join("0")+coefficient:coefficient.length>exponent+1?coefficient.slice(0,exponent+1)+"."+coefficient.slice(exponent+1):coefficient+new Array(exponent-coefficient.length+2).join("0")},formatTypes={"%":function _(x,p){return(100*x).toFixed(p)},b:function b(x){return Math.round(x).toString(2)},c:function c(x){return x+""},d:function d(x){return Math.round(x).toString(10)},e:function e(x,p){return x.toExponential(p)},f:function f(x,p){return x.toFixed(p)},g:function g(x,p){return x.toPrecision(p)},o:function o(x){return Math.round(x).toString(8)},p:function p(x,_p){return formatRounded(100*x,_p)},r:formatRounded,s:function(x,p){var d=formatDecimal(x,p);if(!d)return x+"";var coefficient=d[0],exponent=d[1],i=exponent-(prefixExponent=3*Math.max(-8,Math.min(8,Math.floor(exponent/3))))+1,n=coefficient.length;return i===n?coefficient:i>n?coefficient+new Array(i-n+1).join("0"):i>0?coefficient.slice(0,i)+"."+coefficient.slice(i):"0."+new Array(1-i).join("0")+formatDecimal(x,Math.max(0,p+i-1))[0]},X:function X(x){return Math.round(x).toString(16).toUpperCase()},x:function x(_x){return Math.round(_x).toString(16)}},src_identity=function(x){return x},prefixes=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],src_locale=function(locale){var group=locale.grouping&&locale.thousands?function(grouping,thousands){return function(value,width){for(var i=value.length,t=[],j=0,g=grouping[0],length=0;i>0&&g>0&&(length+g+1>width&&(g=Math.max(1,width-length)),t.push(value.substring(i-=g,i+g)),!((length+=g+1)>width));)g=grouping[j=(j+1)%grouping.length];return t.reverse().join(thousands)}}(locale.grouping,locale.thousands):src_identity,currency=locale.currency,decimal=locale.decimal,numerals=locale.numerals?function(numerals){return function(value){return value.replace(/[0-9]/g,function(i){return numerals[+i]})}}(locale.numerals):src_identity,percent=locale.percent||"%";function newFormat(specifier){var fill=(specifier=formatSpecifier(specifier)).fill,align=specifier.align,sign=specifier.sign,symbol=specifier.symbol,zero=specifier.zero,width=specifier.width,comma=specifier.comma,precision=specifier.precision,trim=specifier.trim,type=specifier.type;"n"===type?(comma=!0,type="g"):formatTypes[type]||(null==precision&&(precision=12),trim=!0,type="g"),(zero||"0"===fill&&"="===align)&&(zero=!0,fill="0",align="=");var prefix="$"===symbol?currency[0]:"#"===symbol&&/[boxX]/.test(type)?"0"+type.toLowerCase():"",suffix="$"===symbol?currency[1]:/[%p]/.test(type)?percent:"",formatType=formatTypes[type],maybeSuffix=/[defgprs%]/.test(type);function format(value){var i,n,c,valuePrefix=prefix,valueSuffix=suffix;if("c"===type)valueSuffix=formatType(value)+valueSuffix,value="";else{var valueNegative=(value=+value)<0;if(value=formatType(Math.abs(value),precision),trim&&(value=formatTrim(value)),valueNegative&&0==+value&&(valueNegative=!1),valuePrefix=(valueNegative?"("===sign?sign:"-":"-"===sign||"("===sign?"":sign)+valuePrefix,valueSuffix=("s"===type?prefixes[8+prefixExponent/3]:"")+valueSuffix+(valueNegative&&"("===sign?")":""),maybeSuffix)for(i=-1,n=value.length;++i(c=value.charCodeAt(i))||c>57){valueSuffix=(46===c?decimal+value.slice(i+1):value.slice(i))+valueSuffix,value=value.slice(0,i);break}}comma&&!zero&&(value=group(value,1/0));var length=valuePrefix.length+value.length+valueSuffix.length,padding=length>1)+valuePrefix+value+valueSuffix+padding.slice(length);break;default:value=padding+valuePrefix+value+valueSuffix}return numerals(value)}return precision=null==precision?6:/[gprs]/.test(type)?Math.max(1,Math.min(21,precision)):Math.max(0,Math.min(20,precision)),format.toString=function(){return specifier+""},format}return{format:newFormat,formatPrefix:function formatPrefix(specifier,value){var f=newFormat(((specifier=formatSpecifier(specifier)).type="f",specifier)),e=3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3))),k=Math.pow(10,-e),prefix=prefixes[8+e/3];return function(value){return f(k*value)+prefix}}}};!function defaultLocale(definition){return defaultLocale_locale=src_locale(definition),defaultLocale_format=defaultLocale_locale.format,defaultLocale_formatPrefix=defaultLocale_locale.formatPrefix,defaultLocale_locale}({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var src_tickFormat=function(domain,count,specifier){var precision,start=domain[0],stop=domain[domain.length-1],step=tickStep(start,stop,null==count?10:count);switch((specifier=formatSpecifier(null==specifier?",f":specifier)).type){case"s":var value=Math.max(Math.abs(start),Math.abs(stop));return null!=specifier.precision||isNaN(precision=function(step,value){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(src_exponent(value)/3)))-src_exponent(Math.abs(step)))}(step,value))||(specifier.precision=precision),defaultLocale_formatPrefix(specifier,value);case"":case"e":case"g":case"p":case"r":null!=specifier.precision||isNaN(precision=function(step,max){return step=Math.abs(step),max=Math.abs(max)-step,Math.max(0,src_exponent(max)-src_exponent(step))+1}(step,Math.max(Math.abs(start),Math.abs(stop))))||(specifier.precision=precision-("e"===specifier.type));break;case"f":case"%":null!=specifier.precision||isNaN(precision=function(step){return Math.max(0,-src_exponent(Math.abs(step)))}(step))||(specifier.precision=precision-2*("%"===specifier.type))}return defaultLocale_format(specifier)};function linearish(scale){var domain=scale.domain;return scale.ticks=function(count){var d=domain();return src_ticks(d[0],d[d.length-1],null==count?10:count)},scale.tickFormat=function(count,specifier){return src_tickFormat(domain(),count,specifier)},scale.nice=function(count){null==count&&(count=10);var step,d=domain(),i0=0,i1=d.length-1,start=d[i0],stop=d[i1];return stop0?step=tickIncrement(start=Math.floor(start/step)*step,stop=Math.ceil(stop/step)*step,count):step<0&&(step=tickIncrement(start=Math.ceil(start*step)/step,stop=Math.floor(stop*step)/step,count)),step>0?(d[i0]=Math.floor(start/step)*step,d[i1]=Math.ceil(stop/step)*step,domain(d)):step<0&&(d[i0]=Math.ceil(start*step)/step,d[i1]=Math.floor(stop*step)/step,domain(d)),scale},scale}function linear_linear(){var scale=continuous(deinterpolateLinear,src_number);return scale.copy=function(){return copy(scale,linear_linear())},linearish(scale)}function identity_identity(){var domain=[0,1];function scale(x){return+x}return scale.invert=scale,scale.domain=scale.range=function(_){return arguments.length?(domain=src_array_map.call(_,d3_scale_src_number),scale):domain.slice()},scale.copy=function(){return identity_identity().domain(domain)},linearish(scale)}var nice=function(domain,interval){var t,i0=0,i1=(domain=domain.slice()).length-1,x0=domain[i0],x1=domain[i1];return x10){for(;iv)break;z.push(t)}}else for(;i=1;--k)if(!((t=p*k)v)break;z.push(t)}}else z=src_ticks(i,j,Math.min(j-i,n)).map(pows);return r?z.reverse():z},scale.tickFormat=function(count,specifier){if(null==specifier&&(specifier=10===base?".0e":","),"function"!=typeof specifier&&(specifier=defaultLocale_format(specifier)),count===1/0)return specifier;null==count&&(count=10);var k=Math.max(1,base*count/scale.ticks().length);return function(d){var i=d/pows(Math.round(logs(d)));return i*base0?thresholds[i-1]:domain[0],i=n?[domain[n-1],x1]:[domain[i-1],domain[i]]},scale.copy=function(){return quantize_quantize().domain([x0,x1]).range(range)},linearish(scale)}function threshold_threshold(){var domain=[.5],range=[0,1],n=1;function scale(x){if(x<=x)return range[bisect(domain,x,0,n)]}return scale.domain=function(_){return arguments.length?(domain=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):domain.slice()},scale.range=function(_){return arguments.length?(range=array_slice.call(_),n=Math.min(domain.length,range.length-1),scale):range.slice()},scale.invertExtent=function(y){var i=range.indexOf(y);return[domain[i-1],domain[i]]},scale.copy=function(){return threshold_threshold().domain(domain).range(range)},scale}var interval_t0=new Date,interval_t1=new Date;function newInterval(floori,offseti,count,field){function interval(date){return floori(date=new Date(+date)),date}return interval.floor=interval,interval.ceil=function(date){return floori(date=new Date(date-1)),offseti(date,1),floori(date),date},interval.round=function(date){var d0=interval(date),d1=interval.ceil(date);return date-d00))return range;do{range.push(previous=new Date(+start)),offseti(start,step),floori(start)}while(previous=date)for(;floori(date),!test(date);)date.setTime(date-1)},function(date,step){if(date>=date)if(step<0)for(;++step<=0;)for(;offseti(date,-1),!test(date););else for(;--step>=0;)for(;offseti(date,1),!test(date););})},count&&(interval.count=function(start,end){return interval_t0.setTime(+start),interval_t1.setTime(+end),floori(interval_t0),floori(interval_t1),Math.floor(count(interval_t0,interval_t1))},interval.every=function(step){return step=Math.floor(step),isFinite(step)&&step>0?step>1?interval.filter(field?function(d){return field(d)%step==0}:function(d){return interval.count(0,d)%step==0}):interval:null}),interval}var millisecond_millisecond=newInterval(function(){},function(date,step){date.setTime(+date+step)},function(start,end){return end-start});millisecond_millisecond.every=function(k){return k=Math.floor(k),isFinite(k)&&k>0?k>1?newInterval(function(date){date.setTime(Math.floor(date/k)*k)},function(date,step){date.setTime(+date+step*k)},function(start,end){return(end-start)/k}):millisecond_millisecond:null};var src_millisecond=millisecond_millisecond,durationMinute=(millisecond_millisecond.range,6e4),durationWeek=6048e5,second_second=newInterval(function(date){date.setTime(date-date.getMilliseconds())},function(date,step){date.setTime(+date+1e3*step)},function(start,end){return(end-start)/1e3},function(date){return date.getUTCSeconds()}),src_second=second_second,minute_minute=(second_second.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds())},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getMinutes()})),src_minute=minute_minute,hour_hour=(minute_minute.range,newInterval(function(date){date.setTime(date-date.getMilliseconds()-1e3*date.getSeconds()-date.getMinutes()*durationMinute)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getHours()})),src_hour=hour_hour,day_day=(hour_hour.range,newInterval(function(date){date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/864e5},function(date){return date.getDate()-1})),src_day=day_day;day_day.range;function weekday(i){return newInterval(function(date){date.setDate(date.getDate()-(date.getDay()+7-i)%7),date.setHours(0,0,0,0)},function(date,step){date.setDate(date.getDate()+7*step)},function(start,end){return(end-start-(end.getTimezoneOffset()-start.getTimezoneOffset())*durationMinute)/durationWeek})}var sunday=weekday(0),monday=weekday(1),tuesday=weekday(2),wednesday=weekday(3),thursday=weekday(4),friday=weekday(5),saturday=weekday(6),month_month=(sunday.range,monday.range,tuesday.range,wednesday.range,thursday.range,friday.range,saturday.range,newInterval(function(date){date.setDate(1),date.setHours(0,0,0,0)},function(date,step){date.setMonth(date.getMonth()+step)},function(start,end){return end.getMonth()-start.getMonth()+12*(end.getFullYear()-start.getFullYear())},function(date){return date.getMonth()})),src_month=month_month,year_year=(month_month.range,newInterval(function(date){date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step)},function(start,end){return end.getFullYear()-start.getFullYear()},function(date){return date.getFullYear()}));year_year.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setFullYear(Math.floor(date.getFullYear()/k)*k),date.setMonth(0,1),date.setHours(0,0,0,0)},function(date,step){date.setFullYear(date.getFullYear()+step*k)}):null};var src_year=year_year,utcMinute=(year_year.range,newInterval(function(date){date.setUTCSeconds(0,0)},function(date,step){date.setTime(+date+step*durationMinute)},function(start,end){return(end-start)/durationMinute},function(date){return date.getUTCMinutes()})),utcHour=(utcMinute.range,newInterval(function(date){date.setUTCMinutes(0,0,0)},function(date,step){date.setTime(+date+36e5*step)},function(start,end){return(end-start)/36e5},function(date){return date.getUTCHours()})),utcDay=(utcHour.range,newInterval(function(date){date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+step)},function(start,end){return(end-start)/864e5},function(date){return date.getUTCDate()-1})),src_utcDay=utcDay;utcDay.range;function utcWeekday(i){return newInterval(function(date){date.setUTCDate(date.getUTCDate()-(date.getUTCDay()+7-i)%7),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCDate(date.getUTCDate()+7*step)},function(start,end){return(end-start)/durationWeek})}var utcSunday=utcWeekday(0),utcMonday=utcWeekday(1),utcTuesday=utcWeekday(2),utcWednesday=utcWeekday(3),utcThursday=utcWeekday(4),utcFriday=utcWeekday(5),utcSaturday=utcWeekday(6),utcMonth=(utcSunday.range,utcMonday.range,utcTuesday.range,utcWednesday.range,utcThursday.range,utcFriday.range,utcSaturday.range,newInterval(function(date){date.setUTCDate(1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCMonth(date.getUTCMonth()+step)},function(start,end){return end.getUTCMonth()-start.getUTCMonth()+12*(end.getUTCFullYear()-start.getUTCFullYear())},function(date){return date.getUTCMonth()})),utcYear=(utcMonth.range,newInterval(function(date){date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step)},function(start,end){return end.getUTCFullYear()-start.getUTCFullYear()},function(date){return date.getUTCFullYear()}));utcYear.every=function(k){return isFinite(k=Math.floor(k))&&k>0?newInterval(function(date){date.setUTCFullYear(Math.floor(date.getUTCFullYear()/k)*k),date.setUTCMonth(0,1),date.setUTCHours(0,0,0,0)},function(date,step){date.setUTCFullYear(date.getUTCFullYear()+step*k)}):null};var src_utcYear=utcYear;utcYear.range;function localDate(d){if(0<=d.y&&d.y<100){var date=new Date(-1,d.m,d.d,d.H,d.M,d.S,d.L);return date.setFullYear(d.y),date}return new Date(d.y,d.m,d.d,d.H,d.M,d.S,d.L)}function utcDate(d){if(0<=d.y&&d.y<100){var date=new Date(Date.UTC(-1,d.m,d.d,d.H,d.M,d.S,d.L));return date.setUTCFullYear(d.y),date}return new Date(Date.UTC(d.y,d.m,d.d,d.H,d.M,d.S,d.L))}function newYear(y){return{y:y,m:0,d:1,H:0,M:0,S:0,L:0}}var src_defaultLocale_locale,timeFormat,utcFormat,utcParse,pads={"-":"",_:" ",0:"0"},numberRe=/^\s*\d+/,percentRe=/^%/,requoteRe=/[\\^$*+?|[\]().{}]/g;function locale_pad(value,fill,width){var sign=value<0?"-":"",string=(sign?-value:value)+"",length=string.length;return sign+(length68?1900:2e3),i+n[0].length):-1}function parseZone(d,string,i){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i,i+6));return n?(d.Z=n[1]?0:-(n[2]+(n[3]||"00")),i+n[0].length):-1}function parseMonthNumber(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.m=n[0]-1,i+n[0].length):-1}function parseDayOfMonth(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.d=+n[0],i+n[0].length):-1}function parseDayOfYear(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.m=0,d.d=+n[0],i+n[0].length):-1}function parseHour24(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.H=+n[0],i+n[0].length):-1}function parseMinutes(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.M=+n[0],i+n[0].length):-1}function parseSeconds(d,string,i){var n=numberRe.exec(string.slice(i,i+2));return n?(d.S=+n[0],i+n[0].length):-1}function parseMilliseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+3));return n?(d.L=+n[0],i+n[0].length):-1}function parseMicroseconds(d,string,i){var n=numberRe.exec(string.slice(i,i+6));return n?(d.L=Math.floor(n[0]/1e3),i+n[0].length):-1}function parseLiteralPercent(d,string,i){var n=percentRe.exec(string.slice(i,i+1));return n?i+n[0].length:-1}function parseUnixTimestamp(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=+n[0],i+n[0].length):-1}function parseUnixTimestampSeconds(d,string,i){var n=numberRe.exec(string.slice(i));return n?(d.Q=1e3*+n[0],i+n[0].length):-1}function formatDayOfMonth(d,p){return locale_pad(d.getDate(),p,2)}function formatHour24(d,p){return locale_pad(d.getHours(),p,2)}function formatHour12(d,p){return locale_pad(d.getHours()%12||12,p,2)}function formatDayOfYear(d,p){return locale_pad(1+src_day.count(src_year(d),d),p,3)}function formatMilliseconds(d,p){return locale_pad(d.getMilliseconds(),p,3)}function formatMicroseconds(d,p){return formatMilliseconds(d,p)+"000"}function formatMonthNumber(d,p){return locale_pad(d.getMonth()+1,p,2)}function formatMinutes(d,p){return locale_pad(d.getMinutes(),p,2)}function formatSeconds(d,p){return locale_pad(d.getSeconds(),p,2)}function formatWeekdayNumberMonday(d){var day=d.getDay();return 0===day?7:day}function formatWeekNumberSunday(d,p){return locale_pad(sunday.count(src_year(d),d),p,2)}function formatWeekNumberISO(d,p){var day=d.getDay();return d=day>=4||0===day?thursday(d):thursday.ceil(d),locale_pad(thursday.count(src_year(d),d)+(4===src_year(d).getDay()),p,2)}function formatWeekdayNumberSunday(d){return d.getDay()}function formatWeekNumberMonday(d,p){return locale_pad(monday.count(src_year(d),d),p,2)}function locale_formatYear(d,p){return locale_pad(d.getFullYear()%100,p,2)}function formatFullYear(d,p){return locale_pad(d.getFullYear()%1e4,p,4)}function formatZone(d){var z=d.getTimezoneOffset();return(z>0?"-":(z*=-1,"+"))+locale_pad(z/60|0,"0",2)+locale_pad(z%60,"0",2)}function formatUTCDayOfMonth(d,p){return locale_pad(d.getUTCDate(),p,2)}function formatUTCHour24(d,p){return locale_pad(d.getUTCHours(),p,2)}function formatUTCHour12(d,p){return locale_pad(d.getUTCHours()%12||12,p,2)}function formatUTCDayOfYear(d,p){return locale_pad(1+src_utcDay.count(src_utcYear(d),d),p,3)}function formatUTCMilliseconds(d,p){return locale_pad(d.getUTCMilliseconds(),p,3)}function formatUTCMicroseconds(d,p){return formatUTCMilliseconds(d,p)+"000"}function formatUTCMonthNumber(d,p){return locale_pad(d.getUTCMonth()+1,p,2)}function formatUTCMinutes(d,p){return locale_pad(d.getUTCMinutes(),p,2)}function formatUTCSeconds(d,p){return locale_pad(d.getUTCSeconds(),p,2)}function formatUTCWeekdayNumberMonday(d){var dow=d.getUTCDay();return 0===dow?7:dow}function formatUTCWeekNumberSunday(d,p){return locale_pad(utcSunday.count(src_utcYear(d),d),p,2)}function formatUTCWeekNumberISO(d,p){var day=d.getUTCDay();return d=day>=4||0===day?utcThursday(d):utcThursday.ceil(d),locale_pad(utcThursday.count(src_utcYear(d),d)+(4===src_utcYear(d).getUTCDay()),p,2)}function formatUTCWeekdayNumberSunday(d){return d.getUTCDay()}function formatUTCWeekNumberMonday(d,p){return locale_pad(utcMonday.count(src_utcYear(d),d),p,2)}function formatUTCYear(d,p){return locale_pad(d.getUTCFullYear()%100,p,2)}function formatUTCFullYear(d,p){return locale_pad(d.getUTCFullYear()%1e4,p,4)}function formatUTCZone(){return"+0000"}function formatLiteralPercent(){return"%"}function formatUnixTimestamp(d){return+d}function formatUnixTimestampSeconds(d){return Math.floor(+d/1e3)}!function defaultLocale_defaultLocale(definition){return src_defaultLocale_locale=function formatLocale(locale){var locale_dateTime=locale.dateTime,locale_date=locale.date,locale_time=locale.time,locale_periods=locale.periods,locale_weekdays=locale.days,locale_shortWeekdays=locale.shortDays,locale_months=locale.months,locale_shortMonths=locale.shortMonths,periodRe=formatRe(locale_periods),periodLookup=formatLookup(locale_periods),weekdayRe=formatRe(locale_weekdays),weekdayLookup=formatLookup(locale_weekdays),shortWeekdayRe=formatRe(locale_shortWeekdays),shortWeekdayLookup=formatLookup(locale_shortWeekdays),monthRe=formatRe(locale_months),monthLookup=formatLookup(locale_months),shortMonthRe=formatRe(locale_shortMonths),shortMonthLookup=formatLookup(locale_shortMonths),formats={a:function formatShortWeekday(d){return locale_shortWeekdays[d.getDay()]},A:function formatWeekday(d){return locale_weekdays[d.getDay()]},b:function formatShortMonth(d){return locale_shortMonths[d.getMonth()]},B:function formatMonth(d){return locale_months[d.getMonth()]},c:null,d:formatDayOfMonth,e:formatDayOfMonth,f:formatMicroseconds,H:formatHour24,I:formatHour12,j:formatDayOfYear,L:formatMilliseconds,m:formatMonthNumber,M:formatMinutes,p:function formatPeriod(d){return locale_periods[+(d.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},utcFormats={a:function formatUTCShortWeekday(d){return locale_shortWeekdays[d.getUTCDay()]},A:function formatUTCWeekday(d){return locale_weekdays[d.getUTCDay()]},b:function formatUTCShortMonth(d){return locale_shortMonths[d.getUTCMonth()]},B:function formatUTCMonth(d){return locale_months[d.getUTCMonth()]},c:null,d:formatUTCDayOfMonth,e:formatUTCDayOfMonth,f:formatUTCMicroseconds,H:formatUTCHour24,I:formatUTCHour12,j:formatUTCDayOfYear,L:formatUTCMilliseconds,m:formatUTCMonthNumber,M:formatUTCMinutes,p:function formatUTCPeriod(d){return locale_periods[+(d.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},parses={a:function parseShortWeekday(d,string,i){var n=shortWeekdayRe.exec(string.slice(i));return n?(d.w=shortWeekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},A:function parseWeekday(d,string,i){var n=weekdayRe.exec(string.slice(i));return n?(d.w=weekdayLookup[n[0].toLowerCase()],i+n[0].length):-1},b:function parseShortMonth(d,string,i){var n=shortMonthRe.exec(string.slice(i));return n?(d.m=shortMonthLookup[n[0].toLowerCase()],i+n[0].length):-1},B:function parseMonth(d,string,i){var n=monthRe.exec(string.slice(i));return n?(d.m=monthLookup[n[0].toLowerCase()],i+n[0].length):-1},c:function parseLocaleDateTime(d,string,i){return parseSpecifier(d,locale_dateTime,string,i)},d:parseDayOfMonth,e:parseDayOfMonth,f:parseMicroseconds,H:parseHour24,I:parseHour24,j:parseDayOfYear,L:parseMilliseconds,m:parseMonthNumber,M:parseMinutes,p:function parsePeriod(d,string,i){var n=periodRe.exec(string.slice(i));return n?(d.p=periodLookup[n[0].toLowerCase()],i+n[0].length):-1},Q:parseUnixTimestamp,s:parseUnixTimestampSeconds,S:parseSeconds,u:parseWeekdayNumberMonday,U:parseWeekNumberSunday,V:parseWeekNumberISO,w:parseWeekdayNumberSunday,W:parseWeekNumberMonday,x:function parseLocaleDate(d,string,i){return parseSpecifier(d,locale_date,string,i)},X:function parseLocaleTime(d,string,i){return parseSpecifier(d,locale_time,string,i)},y:parseYear,Y:parseFullYear,Z:parseZone,"%":parseLiteralPercent};function newFormat(specifier,formats){return function(date){var c,pad,format,string=[],i=-1,j=0,n=specifier.length;for(date instanceof Date||(date=new Date(+date));++i53)return null;"w"in d||(d.w=1),"Z"in d?(week=(day=(week=utcDate(newYear(d.y))).getUTCDay())>4||0===day?utcMonday.ceil(week):utcMonday(week),week=src_utcDay.offset(week,7*(d.V-1)),d.y=week.getUTCFullYear(),d.m=week.getUTCMonth(),d.d=week.getUTCDate()+(d.w+6)%7):(week=(day=(week=newDate(newYear(d.y))).getDay())>4||0===day?monday.ceil(week):monday(week),week=src_day.offset(week,7*(d.V-1)),d.y=week.getFullYear(),d.m=week.getMonth(),d.d=week.getDate()+(d.w+6)%7)}else("W"in d||"U"in d)&&("w"in d||(d.w="u"in d?d.u%7:"W"in d?1:0),day="Z"in d?utcDate(newYear(d.y)).getUTCDay():newDate(newYear(d.y)).getDay(),d.m=0,d.d="W"in d?(d.w+6)%7+7*d.W-(day+5)%7:d.w+7*d.U-(day+6)%7);return"Z"in d?(d.H+=d.Z/100|0,d.M+=d.Z%100,utcDate(d)):newDate(d)}}function parseSpecifier(d,specifier,string,j){for(var c,parse,i=0,n=specifier.length,m=string.length;i=m)return-1;if(37===(c=specifier.charCodeAt(i++))){if(c=specifier.charAt(i++),!(parse=parses[c in pads?specifier.charAt(i++):c])||(j=parse(d,string,j))<0)return-1}else if(c!=string.charCodeAt(j++))return-1}return j}return formats.x=newFormat(locale_date,formats),formats.X=newFormat(locale_time,formats),formats.c=newFormat(locale_dateTime,formats),utcFormats.x=newFormat(locale_date,utcFormats),utcFormats.X=newFormat(locale_time,utcFormats),utcFormats.c=newFormat(locale_dateTime,utcFormats),{format:function format(specifier){var f=newFormat(specifier+="",formats);return f.toString=function(){return specifier},f},parse:function parse(specifier){var p=newParse(specifier+="",localDate);return p.toString=function(){return specifier},p},utcFormat:function utcFormat(specifier){var f=newFormat(specifier+="",utcFormats);return f.toString=function(){return specifier},f},utcParse:function utcParse(specifier){var p=newParse(specifier,utcDate);return p.toString=function(){return specifier},p}}}(definition),timeFormat=src_defaultLocale_locale.format,src_defaultLocale_locale.parse,utcFormat=src_defaultLocale_locale.utcFormat,utcParse=src_defaultLocale_locale.utcParse,src_defaultLocale_locale}({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||utcFormat("%Y-%m-%dT%H:%M:%S.%LZ");+new Date("2000-01-01T00:00:00.000Z")||utcParse("%Y-%m-%dT%H:%M:%S.%LZ");var time_durationSecond=1e3,time_durationMinute=60*time_durationSecond,time_durationHour=60*time_durationMinute,time_durationDay=24*time_durationHour,time_durationWeek=7*time_durationDay,durationMonth=30*time_durationDay,durationYear=365*time_durationDay;function time_date(t){return new Date(t)}function time_number(t){return t instanceof Date?+t:+new Date(+t)}function calendar(year,month,week,day,hour,minute,second,millisecond,format){var scale=continuous(deinterpolateLinear,src_number),invert=scale.invert,domain=scale.domain,formatMillisecond=format(".%L"),formatSecond=format(":%S"),formatMinute=format("%I:%M"),formatHour=format("%I %p"),formatDay=format("%a %d"),formatWeek=format("%b %d"),formatMonth=format("%B"),formatYear=format("%Y"),tickIntervals=[[second,1,time_durationSecond],[second,5,5*time_durationSecond],[second,15,15*time_durationSecond],[second,30,30*time_durationSecond],[minute,1,time_durationMinute],[minute,5,5*time_durationMinute],[minute,15,15*time_durationMinute],[minute,30,30*time_durationMinute],[hour,1,time_durationHour],[hour,3,3*time_durationHour],[hour,6,6*time_durationHour],[hour,12,12*time_durationHour],[day,1,time_durationDay],[day,2,2*time_durationDay],[week,1,time_durationWeek],[month,1,durationMonth],[month,3,3*durationMonth],[year,1,durationYear]];function tickFormat(date){return(second(date)1)&&(t-=Math.floor(t));var ts=Math.abs(t-.5);return rainbow_c.h=360*t-100,rainbow_c.s=1.5-1.5*ts,rainbow_c.l=.8-.9*ts,rainbow_c+""};color_rgb(),Math.PI,Math.PI;function viridis_ramp(range){var n=range.length;return function(t){return range[Math.max(0,Math.min(n-1,Math.floor(t*n)))]}}var sequential_multi_viridis=viridis_ramp(d3_scale_chromatic_src_colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),viridis_magma=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),viridis_inferno=viridis_ramp(d3_scale_chromatic_src_colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),viridis_plasma=viridis_ramp(d3_scale_chromatic_src_colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),UNIT_GLOBAL_NAMESPACE="app.units",UNIT_LOCAL_NAMESPACE="local.units",LAYER_LOCAL_NAMESPACE="local.layers",LAYER_GLOBAL_NAMESPACE="app.layers",GROUP_GLOBAL_NAMESPACE="app.group",GROUP_LOCAL_NAMESPACE="local.group",CANVAS_LOCAL_NAMESPACE="local.canvas",CANVAS_GLOBAL_NAMESPACE="app.canvas",reserved_fields={ROW_ID:"__id__"},common_props={ACTION_INF:"actionInf",ON_LAYER_DRAW:"onLayerDraw",MATRIX_CREATED:"matrixCreated"},COORD_TYPES_POLAR="polar",COORD_TYPES_CARTESIAN="cartesian",DATA_TYPE_FUNCTION="function",DATA_TYPE_STRING="string",src_array_slice=Array.prototype.slice,d3_axis_src_identity=function(x){return x},axis_top=1,axis_right=2,axis_bottom=3,axis_left=4,epsilon=1e-6;function translateX(x){return"translate("+(x+.5)+",0)"}function translateY(y){return"translate(0,"+(y+.5)+")"}function entering(){return!this.__axis}function axis_axis(orient,scale){var tickArguments=[],tickValues=null,tickFormat=null,tickTransform=null,tickSizeInner=6,tickSizeOuter=6,tickPadding=3,k=orient===axis_top||orient===axis_left?-1:1,x=orient===axis_left||orient===axis_right?"x":"y",transform=orient===axis_top||orient===axis_bottom?translateX:translateY;function axis(context){var values=null==tickValues?scale.ticks?scale.ticks.apply(scale,tickArguments):scale.domain():tickValues,format=null==tickFormat?scale.tickFormat?scale.tickFormat.apply(scale,tickArguments):d3_axis_src_identity:tickFormat,spacing=Math.max(tickSizeInner,0)+tickPadding,range=scale.range(),range0=+range[0]+.5,range1=+range[range.length-1]+.5,position=(scale.bandwidth?function axis_center(scale){var offset=Math.max(0,scale.bandwidth()-1)/2;return scale.round()&&(offset=Math.round(offset)),function(d){return+scale(d)+offset}}:function axis_number(scale){return function(d){return+scale(d)}})(scale.copy()),selection=context.selection?context.selection():context,path=selection.selectAll(".domain").data([null]),tick=selection.selectAll(".tick").data(values,scale).order(),tickExit=tick.exit(),tickEnter=tick.enter().append("g").attr("class","tick"),line=tick.select("line"),text=tick.select("text");path=path.merge(path.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),tick=tick.merge(tickEnter),line=line.merge(tickEnter.append("line").attr("stroke","#000").attr(x+"2",k*tickSizeInner)),text=text.merge(tickEnter.append("text").attr("fill","#000").attr(x,k*spacing).attr("dy",orient===axis_top?"0em":orient===axis_bottom?"0.71em":"0.32em")).style("transform",tickTransform),context!==selection&&(path=path.transition(context),tick=tick.transition(context),line=line.transition(context),text=text.transition(context),tickExit=tickExit.transition(context).attr("opacity",epsilon).attr("transform",function(d){return isFinite(d=position(d))?transform(d):this.getAttribute("transform")}),tickEnter.attr("opacity",epsilon).attr("transform",function(d){var p=this.parentNode.__axis;return transform(p&&isFinite(p=p(d))?p:position(d))})),tickExit.remove(),path.attr("d",orient===axis_left||orient==axis_right?"M"+k*tickSizeOuter+","+range0+"H0.5V"+range1+"H"+k*tickSizeOuter:"M"+range0+","+k*tickSizeOuter+"V0.5H"+range1+"V"+k*tickSizeOuter),tick.attr("opacity",1).attr("transform",function(d){return transform(position(d))}),line.attr(x+"2",k*tickSizeInner),text.attr(x,k*spacing).text(format),selection.filter(entering).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",orient===axis_right?"start":orient===axis_left?"end":"middle"),selection.each(function(){this.__axis=position})}return axis.scale=function(_){return arguments.length?(scale=_,axis):scale},axis.tickTransform=function(_){return arguments.length?(tickTransform=_,axis):tickTransform},axis.ticks=function(){return tickArguments=src_array_slice.call(arguments),axis},axis.tickArguments=function(_){return arguments.length?(tickArguments=null==_?[]:src_array_slice.call(_),axis):tickArguments.slice()},axis.tickValues=function(_){return arguments.length?(tickValues=null==_?null:src_array_slice.call(_),axis):tickValues&&tickValues.slice()},axis.tickFormat=function(_){return arguments.length?(tickFormat=_,axis):tickFormat},axis.tickSize=function(_){return arguments.length?(tickSizeInner=tickSizeOuter=+_,axis):tickSizeInner},axis.tickSizeInner=function(_){return arguments.length?(tickSizeInner=+_,axis):tickSizeInner},axis.tickSizeOuter=function(_){return arguments.length?(tickSizeOuter=+_,axis):tickSizeOuter},axis.tickPadding=function(_){return arguments.length?(tickPadding=+_,axis):tickPadding},axis}var pi=Math.PI,tau=2*pi,tauEpsilon=tau-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(x,y){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)},closePath:function closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function lineTo(x,y){this._+="L"+(this._x1=+x)+","+(this._y1=+y)},quadraticCurveTo:function quadraticCurveTo(x1,y1,x,y){this._+="Q"+ +x1+","+ +y1+","+(this._x1=+x)+","+(this._y1=+y)},bezierCurveTo:function bezierCurveTo(x1,y1,x2,y2,x,y){this._+="C"+ +x1+","+ +y1+","+ +x2+","+ +y2+","+(this._x1=+x)+","+(this._y1=+y)},arcTo:function arcTo(x1,y1,x2,y2,r){x1=+x1,y1=+y1,x2=+x2,y2=+y2,r=+r;var x0=this._x1,y0=this._y1,x21=x2-x1,y21=y2-y1,x01=x0-x1,y01=y0-y1,l01_2=x01*x01+y01*y01;if(r<0)throw new Error("negative radius: "+r);if(null===this._x1)this._+="M"+(this._x1=x1)+","+(this._y1=y1);else if(l01_2>1e-6)if(Math.abs(y01*x21-y21*x01)>1e-6&&r){var x20=x2-x0,y20=y2-y0,l21_2=x21*x21+y21*y21,l20_2=x20*x20+y20*y20,l21=Math.sqrt(l21_2),l01=Math.sqrt(l01_2),l=r*Math.tan((pi-Math.acos((l21_2+l01_2-l20_2)/(2*l21*l01)))/2),t01=l/l01,t21=l/l21;Math.abs(t01-1)>1e-6&&(this._+="L"+(x1+t01*x01)+","+(y1+t01*y01)),this._+="A"+r+","+r+",0,0,"+ +(y01*x20>x01*y20)+","+(this._x1=x1+t21*x21)+","+(this._y1=y1+t21*y21)}else this._+="L"+(this._x1=x1)+","+(this._y1=y1);else;},arc:function arc(x,y,r,a0,a1,ccw){x=+x,y=+y;var dx=(r=+r)*Math.cos(a0),dy=r*Math.sin(a0),x0=x+dx,y0=y+dy,cw=1^ccw,da=ccw?a0-a1:a1-a0;if(r<0)throw new Error("negative radius: "+r);null===this._x1?this._+="M"+x0+","+y0:(Math.abs(this._x1-x0)>1e-6||Math.abs(this._y1-y0)>1e-6)&&(this._+="L"+x0+","+y0),r&&(da<0&&(da=da%tau+tau),da>tauEpsilon?this._+="A"+r+","+r+",0,1,"+cw+","+(x-dx)+","+(y-dy)+"A"+r+","+r+",0,1,"+cw+","+(this._x1=x0)+","+(this._y1=y0):da>1e-6&&(this._+="A"+r+","+r+",0,"+ +(da>=pi)+","+cw+","+(this._x1=x+r*Math.cos(a1))+","+(this._y1=y+r*Math.sin(a1))))},rect:function rect(x,y,w,h){this._+="M"+(this._x0=this._x1=+x)+","+(this._y0=this._y1=+y)+"h"+ +w+"v"+ +h+"h"+-w+"Z"},toString:function toString(){return this._}};var src_path=path_path,d3_shape_src_constant=function(x){return function constant(){return x}},abs=Math.abs,atan2=Math.atan2,cos=Math.cos,math_max=Math.max,math_min=Math.min,sin=Math.sin,math_sqrt=Math.sqrt,math_epsilon=1e-12,math_pi=Math.PI,halfPi=math_pi/2,math_tau=2*math_pi;function asin(x){return x>=1?halfPi:x<=-1?-halfPi:Math.asin(x)}function arcInnerRadius(d){return d.innerRadius}function arcOuterRadius(d){return d.outerRadius}function arcStartAngle(d){return d.startAngle}function arcEndAngle(d){return d.endAngle}function arcPadAngle(d){return d&&d.padAngle}function cornerTangents(x0,y0,x1,y1,r1,rc,cw){var x01=x0-x1,y01=y0-y1,lo=(cw?rc:-rc)/math_sqrt(x01*x01+y01*y01),ox=lo*y01,oy=-lo*x01,x11=x0+ox,y11=y0+oy,x10=x1+ox,y10=y1+oy,x00=(x11+x10)/2,y00=(y11+y10)/2,dx=x10-x11,dy=y10-y11,d2=dx*dx+dy*dy,r=r1-rc,D=x11*y10-x10*y11,d=(dy<0?-1:1)*math_sqrt(math_max(0,r*r*d2-D*D)),cx0=(D*dy-dx*d)/d2,cy0=(-D*dx-dy*d)/d2,cx1=(D*dy+dx*d)/d2,cy1=(-D*dx+dy*d)/d2,dx0=cx0-x00,dy0=cy0-y00,dx1=cx1-x00,dy1=cy1-y00;return dx0*dx0+dy0*dy0>dx1*dx1+dy1*dy1&&(cx0=cx1,cy0=cy1),{cx:cx0,cy:cy0,x01:-ox,y01:-oy,x11:cx0*(r1/r-1),y11:cy0*(r1/r-1)}}function Linear(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:this._context.lineTo(x,y)}}};var curve_linear=function(context){return new Linear(context)};function point_x(p){return p[0]}function point_y(p){return p[1]}var src_line=function(){var x=point_x,y=point_y,defined=d3_shape_src_constant(!0),context=null,curve=curve_linear,output=null;function line(data){var i,d,buffer,n=data.length,defined0=!1;for(null==context&&(output=curve(buffer=src_path())),i=0;i<=n;++i)!(i=j;--k)output.point(x0z[k],y0z[k]);output.lineEnd(),output.areaEnd()}defined0&&(x0z[i]=+x0(d,i,data),y0z[i]=+y0(d,i,data),output.point(x1?+x1(d,i,data):x0z[i],y1?+y1(d,i,data):y0z[i]))}if(buffer)return output=null,buffer+""||null}function arealine(){return src_line().defined(defined).curve(curve).context(context)}return area.x=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),x1=null,area):x0},area.x0=function(_){return arguments.length?(x0="function"==typeof _?_:d3_shape_src_constant(+_),area):x0},area.x1=function(_){return arguments.length?(x1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):x1},area.y=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),y1=null,area):y0},area.y0=function(_){return arguments.length?(y0="function"==typeof _?_:d3_shape_src_constant(+_),area):y0},area.y1=function(_){return arguments.length?(y1=null==_?null:"function"==typeof _?_:d3_shape_src_constant(+_),area):y1},area.lineX0=area.lineY0=function(){return arealine().x(x0).y(y0)},area.lineY1=function(){return arealine().x(x0).y(y1)},area.lineX1=function(){return arealine().x(x1).y(y0)},area.defined=function(_){return arguments.length?(defined="function"==typeof _?_:d3_shape_src_constant(!!_),area):defined},area.curve=function(_){return arguments.length?(curve=_,null!=context&&(output=curve(context)),area):curve},area.context=function(_){return arguments.length?(null==_?context=output=null:output=curve(context=_),area):context},area},src_descending=function(a,b){return ba?1:b>=a?0:NaN},d3_shape_src_identity=function(d){return d};curveRadial(curve_linear);function Radial(curve){this._curve=curve}function curveRadial(curve){function radial(context){return new Radial(curve(context))}return radial._curve=curve,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(a,r){this._curve.point(r*Math.sin(a),r*-Math.cos(a))}};var d3_shape_src_array_slice=Array.prototype.slice;var symbol_circle={draw:function draw(context,size){var r=Math.sqrt(size/math_pi);context.moveTo(r,0),context.arc(0,0,r,0,math_tau)}},symbol_cross={draw:function draw(context,size){var r=Math.sqrt(size/5)/2;context.moveTo(-3*r,-r),context.lineTo(-r,-r),context.lineTo(-r,-3*r),context.lineTo(r,-3*r),context.lineTo(r,-r),context.lineTo(3*r,-r),context.lineTo(3*r,r),context.lineTo(r,r),context.lineTo(r,3*r),context.lineTo(-r,3*r),context.lineTo(-r,r),context.lineTo(-3*r,r),context.closePath()}},tan30=Math.sqrt(1/3),tan30_2=2*tan30,diamond={draw:function draw(context,size){var y=Math.sqrt(size/tan30_2),x=y*tan30;context.moveTo(0,-y),context.lineTo(x,0),context.lineTo(0,y),context.lineTo(-x,0),context.closePath()}},kr=Math.sin(math_pi/10)/Math.sin(7*math_pi/10),kx=Math.sin(math_tau/10)*kr,ky=-Math.cos(math_tau/10)*kr,star={draw:function draw(context,size){var r=Math.sqrt(.8908130915292852*size),x=kx*r,y=ky*r;context.moveTo(0,-r),context.lineTo(x,y);for(var i=1;i<5;++i){var a=math_tau*i/5,c=Math.cos(a),s=Math.sin(a);context.lineTo(s*r,-c*r),context.lineTo(c*x-s*y,s*x+c*y)}context.closePath()}},square={draw:function draw(context,size){var w=Math.sqrt(size),x=-w/2;context.rect(x,x,w,w)}},sqrt3=Math.sqrt(3),triangle={draw:function draw(context,size){var y=-Math.sqrt(size/(3*sqrt3));context.moveTo(0,2*y),context.lineTo(-sqrt3*y,-y),context.lineTo(sqrt3*y,-y),context.closePath()}},wye_s=Math.sqrt(3)/2,wye_k=1/Math.sqrt(12),wye_a=3*(wye_k/2+1),wye={draw:function draw(context,size){var r=Math.sqrt(size/wye_a),x0=r/2,y0=r*wye_k,x1=x0,y1=r*wye_k+r,x2=-x1,y2=y1;context.moveTo(x0,y0),context.lineTo(x1,y1),context.lineTo(x2,y2),context.lineTo(-.5*x0-wye_s*y0,wye_s*x0+-.5*y0),context.lineTo(-.5*x1-wye_s*y1,wye_s*x1+-.5*y1),context.lineTo(-.5*x2-wye_s*y2,wye_s*x2+-.5*y2),context.lineTo(-.5*x0+wye_s*y0,-.5*y0-wye_s*x0),context.lineTo(-.5*x1+wye_s*y1,-.5*y1-wye_s*x1),context.lineTo(-.5*x2+wye_s*y2,-.5*y2-wye_s*x2),context.closePath()}},noop=function(){};function _point(that,x,y){that._context.bezierCurveTo((2*that._x0+that._x1)/3,(2*that._y0+that._y1)/3,(that._x0+2*that._x1)/3,(that._y0+2*that._y1)/3,(that._x0+4*that._x1+x)/6,(that._y0+4*that._y1+y)/6)}function Basis(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);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,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisClosed(context){this._context=context}BasisClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x2=x,this._y2=y;break;case 1:this._point=2,this._x3=x,this._y3=y;break;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;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function BasisOpen(context){this._context=context}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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1;break;case 1:this._point=2;break;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;case 3:this._point=4;default:_point(this,x,y)}this._x0=this._x1,this._x1=x,this._y0=this._y1,this._y1=y}};function Bundle(context,beta){this._basis=new Basis(context),this._beta=beta}Bundle.prototype={lineStart:function lineStart(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function lineEnd(){var x=this._x,y=this._y,j=x.length-1;if(j>0)for(var t,x0=x[0],y0=y[0],dx=x[j]-x0,dy=y[j]-y0,i=-1;++i<=j;)t=i/j,this._basis.point(this._beta*x[i]+(1-this._beta)*(x0+t*dx),this._beta*y[i]+(1-this._beta)*(y0+t*dy));this._x=this._y=null,this._basis.lineEnd()},point:function point(x,y){this._x.push(+x),this._y.push(+y)}};(function custom(beta){function bundle(context){return 1===beta?new Basis(context):new Bundle(context,beta)}return bundle.beta=function(beta){return custom(+beta)},bundle})(.85);function cardinal_point(that,x,y){that._context.bezierCurveTo(that._x1+that._k*(that._x2-that._x0),that._y1+that._k*(that._y2-that._y0),that._x2+that._k*(that._x1-x),that._y2+that._k*(that._y1-y),that._x2,that._y2)}function Cardinal(context,tension){this._context=context,this._k=(1-tension)/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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2,this._x1=x,this._y1=y;break;case 2:this._point=3;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new Cardinal(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalClosed(context,tension){this._context=context,this._k=(1-tension)/6}CardinalClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:cardinal_point(this,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalClosed(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function CardinalOpen(context,tension){this._context=context,this._k=(1-tension)/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(x,y){switch(x=+x,y=+y,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,x,y)}this._x0=this._x1,this._x1=this._x2,this._x2=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(tension){function cardinal(context){return new CardinalOpen(context,tension)}return cardinal.tension=function(tension){return custom(+tension)},cardinal})(0);function catmullRom_point(that,x,y){var x1=that._x1,y1=that._y1,x2=that._x2,y2=that._y2;if(that._l01_a>math_epsilon){var a=2*that._l01_2a+3*that._l01_a*that._l12_a+that._l12_2a,n=3*that._l01_a*(that._l01_a+that._l12_a);x1=(x1*a-that._x0*that._l12_2a+that._x2*that._l01_2a)/n,y1=(y1*a-that._y0*that._l12_2a+that._y2*that._l01_2a)/n}if(that._l23_a>math_epsilon){var b=2*that._l23_2a+3*that._l23_a*that._l12_a+that._l12_2a,m=3*that._l23_a*(that._l23_a+that._l12_a);x2=(x2*b+that._x1*that._l23_2a-x*that._l12_2a)/m,y2=(y2*b+that._y1*that._l23_2a-y*that._l12_2a)/m}that._context.bezierCurveTo(x1,y1,x2,y2,that._x2,that._y2)}function CatmullRom(context,alpha){this._context=context,this._alpha=alpha}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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;break;case 2:this._point=3;default:catmullRom_point(this,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};var curve_catmullRom=function custom(alpha){function catmullRom(context){return alpha?new CatmullRom(context,alpha):new Cardinal(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom}(.5);function CatmullRomClosed(context,alpha){this._context=context,this._alpha=alpha}CatmullRomClosed.prototype={areaStart:noop,areaEnd:noop,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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=x,this._y3=y;break;case 1:this._point=2,this._context.moveTo(this._x4=x,this._y4=y);break;case 2:this._point=3,this._x5=x,this._y5=y;break;default:catmullRom_point(this,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomClosed(context,alpha):new CardinalClosed(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function CatmullRomOpen(context,alpha){this._context=context,this._alpha=alpha}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(x,y){if(x=+x,y=+y,this._point){var x23=this._x2-x,y23=this._y2-y;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(x23*x23+y23*y23,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,x,y)}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=x,this._y0=this._y1,this._y1=this._y2,this._y2=y}};(function custom(alpha){function catmullRom(context){return alpha?new CatmullRomOpen(context,alpha):new CardinalOpen(context,0)}return catmullRom.alpha=function(alpha){return custom(+alpha)},catmullRom})(.5);function LinearClosed(context){this._context=context}LinearClosed.prototype={areaStart:noop,areaEnd:noop,lineStart:function lineStart(){this._point=0},lineEnd:function lineEnd(){this._point&&this._context.closePath()},point:function point(x,y){x=+x,y=+y,this._point?this._context.lineTo(x,y):(this._point=1,this._context.moveTo(x,y))}};function monotone_sign(x){return x<0?-1:1}function slope3(that,x2,y2){var h0=that._x1-that._x0,h1=x2-that._x1,s0=(that._y1-that._y0)/(h0||h1<0&&-0),s1=(y2-that._y1)/(h1||h0<0&&-0),p=(s0*h1+s1*h0)/(h0+h1);return(monotone_sign(s0)+monotone_sign(s1))*Math.min(Math.abs(s0),Math.abs(s1),.5*Math.abs(p))||0}function slope2(that,t){var h=that._x1-that._x0;return h?(3*(that._y1-that._y0)/h-t)/2:t}function monotone_point(that,t0,t1){var x0=that._x0,y0=that._y0,x1=that._x1,y1=that._y1,dx=(x1-x0)/3;that._context.bezierCurveTo(x0+dx,y0+dx*t0,x1-dx,y1-dx*t1,x1,y1)}function MonotoneX(context){this._context=context}function MonotoneY(context){this._context=new ReflectContext(context)}function ReflectContext(context){this._context=context}function Natural(context){this._context=context}function controlPoints(x){var i,m,n=x.length-1,a=new Array(n),b=new Array(n),r=new Array(n);for(a[0]=0,b[0]=2,r[0]=x[0]+2*x[1],i=1;i=0;--i)a[i]=(r[i]-a[i+1])/b[i];for(b[n-1]=(x[n]+a[n-1])/2,i=0;i=0&&(this._t=1-this._t,this._line=1-this._line)},point:function point(x,y){switch(x=+x,y=+y,this._point){case 0:this._point=1,this._line?this._context.lineTo(x,y):this._context.moveTo(x,y);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,y),this._context.lineTo(x,y);else{var x1=this._x*(1-this._t)+x*this._t;this._context.lineTo(x1,this._y),this._context.lineTo(x1,y)}}this._x=x,this._y=y}};var curve_step=function(context){return new Step(context,.5)};function stepBefore(context){return new Step(context,0)}function stepAfter(context){return new Step(context,1)}var none=function(series,order){if((n=series.length)>1)for(var j,s0,n,i=1,s1=series[order[0]],m=s1.length;i=0;)o[n]=n;return o};function stackValue(d,key){return d[key]}var order_ascending=function(series){var sums=series.map(ascending_sum);return order_none(series).sort(function(a,b){return sums[a]-sums[b]})};function ascending_sum(series){for(var v,s=0,i=-1,n=series.length;++i0)){if(r/=dx,dx<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=x1-ax,dx||!(r<0)){if(r/=dx,dx<0){if(r>t1)return;r>t0&&(t0=r)}else if(dx>0){if(r0)){if(r/=dy,dy<0){if(r0){if(r>t1)return;r>t0&&(t0=r)}if(r=y1-ay,dy||!(r<0)){if(r/=dy,dy<0){if(r>t1)return;r>t0&&(t0=r)}else if(dy>0){if(r0||t1<1)||(t0>0&&(edge[0]=[ax+t0*dx,ay+t0*dy]),t1<1&&(edge[1]=[ax+t1*dx,ay+t1*dy]),!0)}}}}}function connectEdge(edge,x0,y0,x1,y1){var v1=edge[1];if(v1)return!0;var fm,fb,v0=edge[0],left=edge.left,right=edge.right,lx=left[0],ly=left[1],rx=right[0],ry=right[1],fx=(lx+rx)/2,fy=(ly+ry)/2;if(ry===ly){if(fx=x1)return;if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[fx,y0];v1=[fx,y1]}else{if(v0){if(v0[1]1)if(lx>rx){if(v0){if(v0[1]>=y1)return}else v0=[(y0-fb)/fm,y0];v1=[(y1-fb)/fm,y1]}else{if(v0){if(v0[1]=x1)return}else v0=[x0,fm*x0+fb];v1=[x1,fm*x1+fb]}else{if(v0){if(v0[0]=-Diagram_epsilon2)){var ha=ax*ax+ay*ay,hc=cx*cx+cy*cy,x=(cy*ha-ay*hc)/d,y=(ax*hc-cx*ha)/d,circle=circlePool.pop()||new function Circle(){RedBlackNode(this),this.x=this.y=this.arc=this.site=this.cy=null};circle.arc=arc,circle.site=cSite,circle.x=x+bx,circle.y=(circle.cy=y+by)+Math.sqrt(x*x+y*y),arc.circle=circle;for(var before=null,node=circles._;node;)if(circle.yDiagram_epsilon)node=node.L;else{if(!((dxr=x-rightBreakPoint(node,directrix))>Diagram_epsilon)){dxl>-Diagram_epsilon?(lArc=node.P,rArc=node):dxr>-Diagram_epsilon?(lArc=node,rArc=node.N):lArc=rArc=node;break}if(!node.R){lArc=node;break}node=node.R}!function createCell(site){return Diagram_cells[site.index]={site:site,halfedges:[]}}(site);var newArc=createBeach(site);if(beaches.insert(lArc,newArc),lArc||rArc){if(lArc===rArc)return detachCircle(lArc),rArc=createBeach(lArc.site),beaches.insert(newArc,rArc),newArc.edge=rArc.edge=createEdge(lArc.site,newArc.site),attachCircle(lArc),void attachCircle(rArc);if(rArc){detachCircle(lArc),detachCircle(rArc);var lSite=lArc.site,ax=lSite[0],ay=lSite[1],bx=site[0]-ax,by=site[1]-ay,rSite=rArc.site,cx=rSite[0]-ax,cy=rSite[1]-ay,d=2*(bx*cy-by*cx),hb=bx*bx+by*by,hc=cx*cx+cy*cy,vertex=[(cy*hb-by*hc)/d+ax,(bx*hc-cx*hb)/d+ay];setEdgeEnd(rArc.edge,lSite,rSite,vertex),newArc.edge=createEdge(lSite,site,null,vertex),rArc.edge=createEdge(site,rSite,null,vertex),attachCircle(lArc),attachCircle(rArc)}else newArc.edge=createEdge(lArc.site,newArc.site)}}function leftBreakPoint(arc,directrix){var site=arc.site,rfocx=site[0],rfocy=site[1],pby2=rfocy-directrix;if(!pby2)return rfocx;var lArc=arc.P;if(!lArc)return-1/0;var lfocx=(site=lArc.site)[0],lfocy=site[1],plby2=lfocy-directrix;if(!plby2)return lfocx;var hl=lfocx-rfocx,aby2=1/pby2-1/plby2,b=hl/plby2;return aby2?(-b+Math.sqrt(b*b-2*aby2*(hl*hl/(-2*plby2)-lfocy+plby2/2+rfocy-pby2/2)))/aby2+rfocx:(rfocx+lfocx)/2}function rightBreakPoint(arc,directrix){var rArc=arc.N;if(rArc)return leftBreakPoint(rArc,directrix);var site=arc.site;return site[1]===directrix?site[0]:1/0}var beaches,Diagram_cells,circles,Diagram_edges,Diagram_epsilon=1e-6,Diagram_epsilon2=1e-12;function triangleArea(a,b,c){return(a[0]-c[0])*(b[1]-a[1])-(a[0]-b[0])*(c[1]-a[1])}function lexicographic(a,b){return b[1]-a[1]||b[0]-a[0]}function Diagram(sites,extent){var x,y,circle,site=sites.sort(lexicographic).pop();for(Diagram_edges=[],Diagram_cells=new Array(sites.length),beaches=new src_RedBlackTree,circles=new src_RedBlackTree;;)if(circle=firstCircle,site&&(!circle||site[1]Diagram_epsilon||Math.abs(edge[0][1]-edge[1][1])>Diagram_epsilon)||delete Diagram_edges[i]}(x0,y0,x1,y1),function clipCells(x0,y0,x1,y1){var iCell,cell,site,iHalfedge,halfedges,nHalfedges,start,startX,startY,end,endX,endY,nCells=Diagram_cells.length,cover=!0;for(iCell=0;iCellDiagram_epsilon||Math.abs(endY-startY)>Diagram_epsilon)&&(halfedges.splice(iHalfedge,0,Diagram_edges.push(createBorderEdge(site,end,Math.abs(endX-x0)Diagram_epsilon?[x0,Math.abs(startX-x0)Diagram_epsilon?[Math.abs(startY-y1)Diagram_epsilon?[x1,Math.abs(startX-x1)Diagram_epsilon?[Math.abs(startY-y0)=n)return null;var dx=x-cell.site[0],dy=y-cell.site[1],d2=dx*dx+dy*dy;do{cell=that.cells[i0=i1],i1=null,cell.halfedges.forEach(function(e){var edge=that.edges[e],v=edge.left;if(v!==cell.site&&v||(v=edge.right)){var vx=x-v[0],vy=y-v[1],v2=vx*vx+vy*vy;v20?0:domain[0],domain[1]=domain[1]>0?domain[1]:0),domain},unionDomain=function unionDomain(domains,fieldType){var _ref2,domain=[];(domains=domains.filter(function(dom){return dom&&dom.length})).length&&(domain=fieldType===CATEGORICAL?(_ref2=[]).concat.apply(_ref2,common_utils_toConsumableArray(domains)):[Math.min.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[0]}))),Math.max.apply(Math,common_utils_toConsumableArray(domains.map(function(d){return d[1]})))]);return domain},symbolFns={circle:symbol_circle,cross:symbol_cross,diamond:diamond,square:square,star:star,wye:wye,triangle:triangle},easeFns={cubic:cubicInOut,bounce:bounceOut,linear:function src_linear_linear(t){return+t},elastic:elasticOut,back:backInOut,poly:polyInOut,circle:function circleInOut(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}},common_utils_getClosestIndexOf=function getClosestIndexOf(arr,value,side){for(var mid,d1,low=0,high=arr.length-1;lowvalue?0===high?high:"left"===side?high-1:high:high===arr.length-1?high:"left"===side?high:high+1},getNearestValue=function getNearestValue(data,key){var filterData=data.filter(function(d){return"number"==typeof d});return filterData[common_utils_getClosestIndexOf(filterData,key)]},getWindow=function getWindow(){return window},getQualifiedClassName=(requestAnimationFrame,cancelAnimationFrame,function getQualifiedClassName(cls,id,prefix){return cls=cls.replace(/^\.*/,""),["".concat(prefix,"-").concat(cls),"".concat(prefix,"-").concat(cls,"-").concat(id)]}),defaultValue=function defaultValue(param,value){return void 0===param||"object"===common_utils_typeof(param)&&!param?value:param},objectIterator=function objectIterator(obj,fn){for(var key in obj)Object.hasOwnProperty.call(obj,key)&&fn(key,obj)},common_utils_Voronoi=function(){function Voronoi(){var data=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];!function common_utils_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Voronoi),this._voronoi=src_voronoi().x(function(d){return d.x}).y(function(d){return d.y}),this.data(data)}return function common_utils_createClass(Constructor,protoProps,staticProps){return protoProps&&common_utils_defineProperties(Constructor.prototype,protoProps),staticProps&&common_utils_defineProperties(Constructor,staticProps),Constructor}(Voronoi,[{key:"data",value:function data(_data){return _data&&(this._voronoiFn=this._voronoi(_data)),this}},{key:"find",value:function find(x,y,radius){return this._voronoiFn.find(x,y,radius)}}]),Voronoi}(),getObjProp=function getObjProp(obj){if(void 0===obj||null===obj)return obj;for(var retObj=obj,_len=arguments.length,fields=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)fields[_key-1]=arguments[_key];for(var i=0,len=fields.length;i=0;i--)if(arr1[i]!==arr2[i])return!1;return!0}(oldVal,newVal):"Object"===type?Object.is(oldVal,newVal):oldVal===newVal}},ERROR_MSG={INTERFACE_IMPL:"Method not implemented"},mergeRecursive=function mergeRecursive(source,sink){for(var prop in sink)isSimpleObject(source[prop])&&isSimpleObject(sink[prop])?mergeRecursive(source[prop],sink[prop]):sink[prop]instanceof Object&&sink[prop].constructor===Object?(source[prop]={},mergeRecursive(source[prop],sink[prop])):source[prop]=sink[prop];return source},common_utils_createSelection=function createSelection(sel,appendObj,data,idFn){var selection=sel||function dataSelect(idFn){return new DataSystem_selection(idFn)}(idFn),mergedSelection=(selection=selection.data(data)).enter().append(appendObj).merge(selection),exitSelection=selection.exit();return exitSelection.getObjects().forEach(function(inst){return inst.remove()}),exitSelection.remove(),mergedSelection},common_utils_interpolator=function interpolator(){return src_value},common_utils_numberInterpolator=function numberInterpolator(){return src_number},common_utils_piecewiseInterpolator=function piecewiseInterpolator(){return piecewise_piecewise};var rgbToHsv=function rgbToHsv(r,g,b){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;r=+r,g=+g,b=+b,a=+a,r/=255,g/=255,b/=255;var h,s,max=Math.max(r,g,b),min=Math.min(r,g,b),l=(max+min)/2;if(max===min)h=s=0;else{var d=max-min;switch(s=l>.5?d/(2-max-min):d/(max+min),max){case r:h=(g-b)/d+(g=range[0]&&val<=range[1]})},{saveChild:!1,mode:mode})},common_utils_getDataModelFromIdentifiers=function getDataModelFromIdentifiers(dataModel,identifiers,mode){var filteredDataModel;if(identifiers instanceof Array){var fieldsConfig=dataModel.getFieldsConfig(),dataArr=identifiers.slice(1,identifiers.length);if(identifiers instanceof Function)filteredDataModel=identifiers(dataModel,{},!1);else if(identifiers instanceof Array&&identifiers[0].length){var filteredSchema=identifiers[0].filter(function(d){return d in fieldsConfig});filteredDataModel=dataModel.select(function(fields){var include=!0;return filteredSchema.forEach(function(propField,idx){var value=fields[propField].valueOf(),index=dataArr.findIndex(function(d){return d[idx]===value});include=include&&-1!==index}),include},{saveChild:!1,mode:mode})}else filteredDataModel=dataModel.select(function(){return!1},{saveChild:!1,mode:mode})}else filteredDataModel=getDataModelFromRange(dataModel,identifiers,mode);return filteredDataModel},isValidValue=function isValidValue(value){return!isNaN(value)&&value!==-1/0&&value!==1/0},toArray=function toArray(arr){return arr instanceof Array?arr:[arr]},common_utils_getSymbol=function getSymbol(type){return function(){var type=d3_shape_src_constant(symbol_circle),size=d3_shape_src_constant(64),context=null;function symbol(){var buffer;if(context||(context=buffer=src_path()),type.apply(this,arguments).draw(context,+size.apply(this,arguments)),buffer)return context=null,buffer+""||null}return symbol.type=function(_){return arguments.length?(type="function"==typeof _?_:d3_shape_src_constant(_),symbol):type},symbol.size=function(_){return arguments.length?(size="function"==typeof _?_:d3_shape_src_constant(+_),symbol):size},symbol.context=function(_){return arguments.length?(context=null==_?null:_,symbol):context},symbol}().type(symbolFns[type])},stackOrders=(_defineProperty(_stackOrders={},"none",order_none),_defineProperty(_stackOrders,"ascending",order_ascending),_defineProperty(_stackOrders,"descending",function(series){return order_ascending(series).reverse()}),_stackOrders),stackOffsets=(_defineProperty(_stackOffsets={},"diverging",function(series,order){if((n=series.length)>1)for(var i,d,dy,yp,yn,n,j=0,m=series[order[0]].length;j=0?(d[0]=yp,d[1]=yp+=dy):dy<0?(d[1]=yn,d[0]=yn+=dy):d[0]=yp}),_defineProperty(_stackOffsets,"none",none),_defineProperty(_stackOffsets,"expand",function(series,order){if((n=series.length)>0){for(var i,n,y,j=0,m=series[0].length;j0&&(m=(s0=series[order[0]]).length)>0){for(var s0,m,n,y=0,j=1;j0&&(sum+=v);for(null!=sortValues?index.sort(function(i,j){return sortValues(arcs[i],arcs[j])}):null!=sort&&index.sort(function(i,j){return sort(data[i],data[j])}),i=0,k=sum?(da-n*pa)/sum:0;i0?v*k:0)+pa,arcs[j]={data:data[j],index:i,value:v,startAngle:a0,endAngle:a1,padAngle:p};return arcs}return pie.value=function(_){return arguments.length?(value="function"==typeof _?_:d3_shape_src_constant(+_),pie):value},pie.sortValues=function(_){return arguments.length?(sortValues=_,sort=null,pie):sortValues},pie.sort=function(_){return arguments.length?(sort=_,sortValues=null,pie):sort},pie.startAngle=function(_){return arguments.length?(startAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):startAngle},pie.endAngle=function(_){return arguments.length?(endAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):endAngle},pie.padAngle=function(_){return arguments.length?(padAngle="function"==typeof _?_:d3_shape_src_constant(+_),pie):padAngle},pie},arc:function(){var innerRadius=arcInnerRadius,outerRadius=arcOuterRadius,cornerRadius=d3_shape_src_constant(0),padRadius=null,startAngle=arcStartAngle,endAngle=arcEndAngle,padAngle=arcPadAngle,context=null;function arc(){var buffer,r,r0=+innerRadius.apply(this,arguments),r1=+outerRadius.apply(this,arguments),a0=startAngle.apply(this,arguments)-halfPi,a1=endAngle.apply(this,arguments)-halfPi,da=abs(a1-a0),cw=a1>a0;if(context||(context=buffer=src_path()),r1math_epsilon)if(da>math_tau-math_epsilon)context.moveTo(r1*cos(a0),r1*sin(a0)),context.arc(0,0,r1,a0,a1,!cw),r0>math_epsilon&&(context.moveTo(r0*cos(a1),r0*sin(a1)),context.arc(0,0,r0,a1,a0,cw));else{var t0,t1,a01=a0,a11=a1,a00=a0,a10=a1,da0=da,da1=da,ap=padAngle.apply(this,arguments)/2,rp=ap>math_epsilon&&(padRadius?+padRadius.apply(this,arguments):math_sqrt(r0*r0+r1*r1)),rc=math_min(abs(r1-r0)/2,+cornerRadius.apply(this,arguments)),rc0=rc,rc1=rc;if(rp>math_epsilon){var p0=asin(rp/r0*sin(ap)),p1=asin(rp/r1*sin(ap));(da0-=2*p0)>math_epsilon?(a00+=p0*=cw?1:-1,a10-=p0):(da0=0,a00=a10=(a0+a1)/2),(da1-=2*p1)>math_epsilon?(a01+=p1*=cw?1:-1,a11-=p1):(da1=0,a01=a11=(a0+a1)/2)}var x01=r1*cos(a01),y01=r1*sin(a01),x10=r0*cos(a10),y10=r0*sin(a10);if(rc>math_epsilon){var x11=r1*cos(a11),y11=r1*sin(a11),x00=r0*cos(a00),y00=r0*sin(a00);if(damath_epsilon?function intersect(x0,y0,x1,y1,x2,y2,x3,y3){var x10=x1-x0,y10=y1-y0,x32=x3-x2,y32=y3-y2,t=(x32*(y0-y2)-y32*(x0-x2))/(y32*x10-x32*y10);return[x0+t*x10,y0+t*y10]}(x01,y01,x00,y00,x11,y11,x10,y10):[x10,y10],ax=x01-oc[0],ay=y01-oc[1],bx=x11-oc[0],by=y11-oc[1],kc=1/sin(function acos(x){return x>1?0:x<-1?math_pi:Math.acos(x)}((ax*bx+ay*by)/(math_sqrt(ax*ax+ay*ay)*math_sqrt(bx*bx+by*by)))/2),lc=math_sqrt(oc[0]*oc[0]+oc[1]*oc[1]);rc0=math_min(rc,(r0-lc)/(kc-1)),rc1=math_min(rc,(r1-lc)/(kc+1))}}da1>math_epsilon?rc1>math_epsilon?(t0=cornerTangents(x00,y00,x01,y01,r1,rc1,cw),t1=cornerTangents(x11,y11,x10,y10,r1,rc1,cw),context.moveTo(t0.cx+t0.x01,t0.cy+t0.y01),rc1math_epsilon&&da0>math_epsilon?rc0>math_epsilon?(t0=cornerTangents(x10,y10,x11,y11,r0,-rc0,cw),t1=cornerTangents(x01,y01,x00,y00,r0,-rc0,cw),context.lineTo(t0.cx+t0.x01,t0.cy+t0.y01),rc01?_len3-1:0),_key3=1;_key3<_len3;_key3++)measureFieldNames[_key3-1]=arguments[_key3];var filteredReducers={};if(dataModel instanceof datamodel_default.a){var derivations=[].concat(common_utils_toConsumableArray(dataModel.getDerivations().reverse()),common_utils_toConsumableArray(dataModel.getAncestorDerivations().reverse())),nearestReducers=defaultValue(getObjProp(derivations.find(function(derv){return derv.op===dist_datamodel.DM_DERIVATIVES.GROUPBY}),"criteria"),{}),measures=dataModel.getFieldspace().getMeasure();(measureFieldNames=measureFieldNames.length?measureFieldNames:Object.keys(measures)).forEach(function(measureName){if(nearestReducers[measureName])filteredReducers[measureName]=nearestReducers[measureName];else{var measureField=measures[measureName];measureField&&(filteredReducers[measureName]=measureField.defAggFn())}})}return filteredReducers},retrieveFieldDisplayName=function retrieveFieldDisplayName(dm,fieldName){return dm.getFieldspace().fieldsObj()[fieldName].displayName()},sortOrderMap=(_defineProperty(_sortOrderMap={},"asc",function(firstVal,secondVal){return firstVal.localeCompare(secondVal)}),_defineProperty(_sortOrderMap,"desc",function(firstVal,secondVal){return secondVal.localeCompare(firstVal)}),_sortOrderMap),common_utils_intersect=function intersect(arr1,arr2){var _accessors=_slicedToArray(arguments.length>2&&void 0!==arguments[2]?arguments[2]:[function(v){return v},function(v){return v}],2),fn1=_accessors[0],fn2=_accessors[1],set=new Set(arr2.map(function(v){return fn2(v)}));return arr1.filter(function(value){return set.has(fn1(value))})},xhtml="http://www.w3.org/1999/xhtml",src_namespaces={svg:"http://www.w3.org/2000/svg",xhtml:xhtml,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},src_namespace=function(name){var prefix=name+="",i=prefix.indexOf(":");return i>=0&&"xmlns"!==(prefix=name.slice(0,i))&&(name=name.slice(i+1)),src_namespaces.hasOwnProperty(prefix)?{space:src_namespaces[prefix],local:name}:name};var creator=function(name){var fullname=src_namespace(name);return(fullname.local?function creatorFixed(fullname){return function(){return this.ownerDocument.createElementNS(fullname.space,fullname.local)}}:function creatorInherit(name){return function(){var document=this.ownerDocument,uri=this.namespaceURI;return uri===xhtml&&document.documentElement.namespaceURI===xhtml?document.createElement(name):document.createElementNS(uri,name)}})(fullname)};function selector_none(){}var src_selector=function(selector){return null==selector?selector_none:function(){return this.querySelector(selector)}};function selectorAll_empty(){return[]}var selectorAll=function(selector){return null==selector?selectorAll_empty:function(){return this.querySelectorAll(selector)}},matcher=function matcher(selector){return function(){return this.matches(selector)}};if("undefined"!=typeof document){var matcher_element=document.documentElement;if(!matcher_element.matches){var vendorMatches=matcher_element.webkitMatchesSelector||matcher_element.msMatchesSelector||matcher_element.mozMatchesSelector||matcher_element.oMatchesSelector;matcher=function matcher(selector){return function(){return vendorMatches.call(this,selector)}}}}var src_matcher=matcher,sparse=function(update){return new Array(update.length)};function EnterNode(parent,datum){this.ownerDocument=parent.ownerDocument,this.namespaceURI=parent.namespaceURI,this._next=null,this._parent=parent,this.__data__=datum}EnterNode.prototype={constructor:EnterNode,appendChild:function appendChild(child){return this._parent.insertBefore(child,this._next)},insertBefore:function insertBefore(child,next){return this._parent.insertBefore(child,next)},querySelector:function querySelector(selector){return this._parent.querySelector(selector)},querySelectorAll:function querySelectorAll(selector){return this._parent.querySelectorAll(selector)}};var keyPrefix="$";function bindIndex(parent,group,enter,update,exit,data){for(var node,i=0,groupLength=group.length,dataLength=data.length;ib?1:a>=b?0:NaN}var src_window=function(node){return node.ownerDocument&&node.ownerDocument.defaultView||node.document&&node||node.defaultView};function styleValue(node,name){return node.style.getPropertyValue(name)||src_window(node).getComputedStyle(node,null).getPropertyValue(name)}function classArray(string){return string.trim().split(/^|\s+/)}function classList(node){return node.classList||new ClassList(node)}function ClassList(node){this._node=node,this._names=classArray(node.getAttribute("class")||"")}function classedAdd(node,names){for(var list=classList(node),i=-1,n=names.length;++i=0&&(this._names.splice(i,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function contains(name){return this._names.indexOf(name)>=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 parent=this.parentNode;parent&&parent.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 filterEvents={},on_event=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(filterEvents={mouseenter:"mouseover",mouseleave:"mouseout"}));function filterContextListener(listener,index,group){return listener=contextListener(listener,index,group),function(event){var related=event.relatedTarget;related&&(related===this||8&related.compareDocumentPosition(this))||listener.call(this,event)}}function contextListener(listener,index,group){return function(event1){var event0=on_event;on_event=event1;try{listener.call(this,this.__data__,index,group)}finally{on_event=event0}}}function onRemove(typename){return function(){var on=this.__on;if(on){for(var o,j=0,i=-1,m=on.length;j=i1&&(i1=i0+1);!(next=updateGroup[i1])&&++i1=0;)(node=group[i])&&(next&&next!==node.nextSibling&&next.parentNode.insertBefore(node,next),next=node);return this},sort:function(compare){function compareNode(a,b){return a&&b?compare(a.__data__,b.__data__):!a-!b}compare||(compare=sort_ascending);for(var groups=this._groups,m=groups.length,sortgroups=new Array(m),j=0;j1?this.each((null==value?function styleRemove(name){return function(){this.style.removeProperty(name)}}:"function"==typeof value?function styleFunction(name,value,priority){return function(){var v=value.apply(this,arguments);null==v?this.style.removeProperty(name):this.style.setProperty(name,v,priority)}}:function styleConstant(name,value,priority){return function(){this.style.setProperty(name,value,priority)}})(name,value,null==priority?"":priority)):styleValue(this.node(),name)},property:function(name,value){return arguments.length>1?this.each((null==value?function propertyRemove(name){return function(){delete this[name]}}:"function"==typeof value?function propertyFunction(name,value){return function(){var v=value.apply(this,arguments);null==v?delete this[name]:this[name]=v}}:function propertyConstant(name,value){return function(){this[name]=value}})(name,value)):this.node()[name]},classed:function(name,value){var names=classArray(name+"");if(arguments.length<2){for(var list=classList(this.node()),i=-1,n=names.length;++i=0&&(name=t.slice(i+1),t=t.slice(0,i)),{type:t,name:name}})}(typename+""),n=typenames.length;if(!(arguments.length<2)){for(on=value?onAdd:onRemove,null==capture&&(capture=!1),i=0;i=0&&(name=t.slice(i+1),t=t.slice(0,i)),t&&!types.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:name}})}(typename+"",_),i=-1,n=T.length;if(!(arguments.length<2)){if(null!=callback&&"function"!=typeof callback)throw new Error("invalid callback: "+callback);for(;++i0)for(var n,t,args=new Array(n),i=0;iclickDistance2}gestures.mouse("drag")}function mouseupped(){src_select(on_event.view).on("mousemove.drag mouseup.drag",null),function yesdrag(view,noclick){var root=view.document.documentElement,selection=src_select(view).on("dragstart.drag",null);noclick&&(selection.on("click.drag",noevent,!0),setTimeout(function(){selection.on("click.drag",null)},0)),"onselectstart"in root?selection.on("selectstart.drag",null):(root.style.MozUserSelect=root.__noselect,delete root.__noselect)}(on_event.view,mousemoving),noevent(),gestures.mouse("end")}function touchstarted(){if(filter.apply(this,arguments)){var i,gesture,touches=on_event.changedTouches,c=container.apply(this,arguments),n=touches.length;for(i=0;i=0&&t._call.call(null,e),t=t._next;--timer_frame}()}finally{timer_frame=0,function nap(){var t0,t2,t1=taskHead,time=1/0;for(;t1;)t1._call?(time>t1._time&&(time=t1._time),t0=t1,t1=t1._next):(t2=t1._next,t1._next=null,t1=t0?t0._next=t2:taskHead=t2);taskTail=t0,sleep(time)}(),clockNow=0}}function poke(){var now=clock.now(),delay=now-clockLast;delay>pokeDelay&&(clockSkew-=delay,clockLast=now)}function sleep(time){timer_frame||(timeout&&(timeout=clearTimeout(timeout)),time-clockNow>24?(time<1/0&&(timeout=setTimeout(wake,time-clock.now()-clockSkew)),timer_interval&&(timer_interval=clearInterval(timer_interval))):(timer_interval||(clockLast=clock.now(),timer_interval=setInterval(poke,pokeDelay)),timer_frame=1,setFrame(wake)))}Timer.prototype=timer_timer.prototype={constructor:Timer,restart:function restart(callback,delay,time){if("function"!=typeof callback)throw new TypeError("callback is not a function");time=(null==time?now():+time)+(null==delay?0:+delay),this._next||taskTail===this||(taskTail?taskTail._next=this:taskHead=this,taskTail=this),this._call=callback,this._time=time,sleep()},stop:function stop(){this._call&&(this._call=null,this._time=1/0,sleep())}};var src_timeout=function(callback,delay,time){var t=new Timer;return delay=null==delay?0:+delay,t.restart(function(elapsed){t.stop(),callback(elapsed+delay)},delay,time),t},emptyOn=src_dispatch("start","end","interrupt"),emptyTween=[],CREATED=0,SCHEDULED=1,STARTING=2,STARTED=3,RUNNING=4,ENDING=5,ENDED=6,transition_schedule=function(node,name,id,index,group,timing){var schedules=node.__transition;if(schedules){if(id in schedules)return}else node.__transition={};!function schedule_create(node,id,self){var tween,schedules=node.__transition;function start(elapsed){var i,j,n,o;if(self.state!==SCHEDULED)return stop();for(i in schedules)if((o=schedules[i]).name===self.name){if(o.state===STARTED)return src_timeout(start);o.state===RUNNING?(o.state=ENDED,o.timer.stop(),o.on.call("interrupt",node,node.__data__,o.index,o.group),delete schedules[i]):+iCREATED)throw new Error("too late; already scheduled");return schedule}function schedule_set(node,id){var schedule=schedule_get(node,id);if(schedule.state>STARTING)throw new Error("too late; already started");return schedule}function schedule_get(node,id){var schedule=node.__transition;if(!schedule||!(schedule=schedule[id]))throw new Error("transition not found");return schedule}function tweenValue(transition,name,value){var id=transition._id;return transition.each(function(){var schedule=schedule_set(this,id);(schedule.value||(schedule.value={}))[name]=value.apply(this,arguments)}),function(node){return schedule_get(node,id).value[name]}}var transition_interpolate=function(a,b){var c;return("number"==typeof b?src_number:b instanceof color_color?src_rgb:(c=color_color(b))?(b=c,src_rgb):src_string)(a,b)};var transition_selection_Selection=src_selection.prototype.constructor;var transition_id=0;function Transition(groups,parents,name,id){this._groups=groups,this._parents=parents,this._name=name,this._id=id}function newId(){return++transition_id}var selection_prototype=src_selection.prototype;Transition.prototype=function src_transition_transition(name){return src_selection().transition(name)}.prototype={constructor:Transition,select:function(select){var name=this._name,id=this._id;"function"!=typeof select&&(select=src_selector(select));for(var groups=this._groups,m=groups.length,subgroups=new Array(m),j=0;j=0&&(t=t.slice(0,i)),!t||"start"===t})}(name)?init:schedule_set;return function(){var schedule=sit(this,id),on=schedule.on;on!==on0&&(on1=(on0=on).copy()).on(name,listener),schedule.on=on1}}(id,name,listener))},attr:function(name,value){var fullname=src_namespace(name),i="transform"===fullname?interpolateTransformSvg:transition_interpolate;return this.attrTween(name,"function"==typeof value?(fullname.local?function attr_attrFunctionNS(fullname,interpolate,value){var value00,value10,interpolate0;return function(){var value0,value1=value(this);if(null!=value1)return(value0=this.getAttributeNS(fullname.space,fullname.local))===value1?null:value0===value00&&value1===value10?interpolate0:interpolate0=interpolate(value00=value0,value10=value1);this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrFunction(name,interpolate,value){var value00,value10,interpolate0;return function(){var value0,value1=value(this);if(null!=value1)return(value0=this.getAttribute(name))===value1?null:value0===value00&&value1===value10?interpolate0:interpolate0=interpolate(value00=value0,value10=value1);this.removeAttribute(name)}})(fullname,i,tweenValue(this,"attr."+name,value)):null==value?(fullname.local?function attr_attrRemoveNS(fullname){return function(){this.removeAttributeNS(fullname.space,fullname.local)}}:function attr_attrRemove(name){return function(){this.removeAttribute(name)}})(fullname):(fullname.local?function attr_attrConstantNS(fullname,interpolate,value1){var value00,interpolate0;return function(){var value0=this.getAttributeNS(fullname.space,fullname.local);return value0===value1?null:value0===value00?interpolate0:interpolate0=interpolate(value00=value0,value1)}}:function attr_attrConstant(name,interpolate,value1){var value00,interpolate0;return function(){var value0=this.getAttribute(name);return value0===value1?null:value0===value00?interpolate0:interpolate0=interpolate(value00=value0,value1)}})(fullname,i,value+""))},attrTween:function(name,value){var key="attr."+name;if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;var fullname=src_namespace(name);return this.tween(key,(fullname.local?function attrTweenNS(fullname,value){function tween(){var node=this,i=value.apply(node,arguments);return i&&function(t){node.setAttributeNS(fullname.space,fullname.local,i(t))}}return tween._value=value,tween}:function attrTween(name,value){function tween(){var node=this,i=value.apply(node,arguments);return i&&function(t){node.setAttribute(name,i(t))}}return tween._value=value,tween})(fullname,value))},style:function(name,value,priority){var i="transform"==(name+="")?interpolateTransformCss:transition_interpolate;return null==value?this.styleTween(name,function style_styleRemove(name,interpolate){var value00,value10,interpolate0;return function(){var value0=styleValue(this,name),value1=(this.style.removeProperty(name),styleValue(this,name));return value0===value1?null:value0===value00&&value1===value10?interpolate0:interpolate0=interpolate(value00=value0,value10=value1)}}(name,i)).on("end.style."+name,function styleRemoveEnd(name){return function(){this.style.removeProperty(name)}}(name)):this.styleTween(name,"function"==typeof value?function style_styleFunction(name,interpolate,value){var value00,value10,interpolate0;return function(){var value0=styleValue(this,name),value1=value(this);return null==value1&&(this.style.removeProperty(name),value1=styleValue(this,name)),value0===value1?null:value0===value00&&value1===value10?interpolate0:interpolate0=interpolate(value00=value0,value10=value1)}}(name,i,tweenValue(this,"style."+name,value)):function style_styleConstant(name,interpolate,value1){var value00,interpolate0;return function(){var value0=styleValue(this,name);return value0===value1?null:value0===value00?interpolate0:interpolate0=interpolate(value00=value0,value1)}}(name,i,value+""),priority)},styleTween:function(name,value,priority){var key="style."+(name+="");if(arguments.length<2)return(key=this.tween(key))&&key._value;if(null==value)return this.tween(key,null);if("function"!=typeof value)throw new Error;return this.tween(key,function styleTween(name,value,priority){function tween(){var node=this,i=value.apply(node,arguments);return i&&function(t){node.style.setProperty(name,i(t),priority)}}return tween._value=value,tween}(name,value,null==priority?"":priority))},text:function(value){return this.tween("text","function"==typeof value?function text_textFunction(value){return function(){var value1=value(this);this.textContent=null==value1?"":value1}}(tweenValue(this,"text",value)):function text_textConstant(value){return function(){this.textContent=value}}(null==value?"":value+""))},remove:function(){return this.on("end.remove",function removeFunction(id){return function(){var parent=this.parentNode;for(var i in this.__transition)if(+i!==id)return;parent&&parent.removeChild(this)}}(this._id))},tween:function(name,value){var id=this._id;if(name+="",arguments.length<2){for(var t,tween=schedule_get(this.node(),id).tween,i=0,n=tween.length;iSTARTING&&schedule.state4&&void 0!==arguments[4]?arguments[4]:{},keyFn=arguments.length>5?arguments[5]:void 0;(parent instanceof HTMLElement||parent instanceof SVGElement)&&(parent=renderer_utils_selectElement(parent));var filter,selectorVal=selector?selector[0]:null,selectorType=null,actualSelector=null,element=null,enterSel=null,mergeSel=null;selectorVal?"#"===selectorVal?(selectorType="id",actualSelector=selector):(selectorType="class",actualSelector="."===selector[0]?selector:".".concat(selector)):(actualSelector=elemType,filter=!0),element=parent.selectAll(actualSelector),filter&&(element=element.filter(function(){return this.parentNode===parent.node()})),enterSel=(element=element.data(data,keyFn)).enter().append(elemType||"div"),callbacks.enter&&enterSel.each(function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];callbacks.enter.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),mergeSel=enterSel.merge(element),callbacks.update&&mergeSel.each(function(){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];callbacks.update.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}),"class"===selectorType?mergeSel.classed("."===selectorVal?selector.substring(1,selector.length):selector,!0):"id"===selectorType&&mergeSel.attr("id",selector.substring(1,selector.length));var exitSel=element.exit();return callbacks.exit?exitSel.each(function(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];callbacks.exit.apply(callbacks,[renderer_utils_selectElement(this)].concat(params))}):exitSel.remove(),mergeSel},applyStyle=function applyStyle(elem,styleObj){return Object.entries(styleObj).forEach(function(d){elem.style(d[0],d[1])},void 0),elem},setElementAttrs=function setElementAttrs(element,attrs){for(var key in attrs)({}).hasOwnProperty.call(attrs,key)&&element.attr(key,attrs[key])},renderer_utils_setAttrs=function setAttrs(element,attrs,className){return element instanceof src_selection||(element=renderer_utils_selectElement(element)),void 0!==className?element.selectAll(".".concat(className)).each(function(){setElementAttrs(src_select(this),attrs)}):setElementAttrs(element,attrs),element},renderer_utils_setStyles=function setStyles(element,styles){for(var key in element instanceof src_selection||(element=renderer_utils_selectElement(element)),styles)({}).hasOwnProperty.call(styles,key)&&element.style(key,styles[key]);return element},renderer_utils_createElements=function createElements(params){var data,sel,container=src_select(params.container);"number"==typeof(data=params.data)&&(data=Array(data).fill().map(function(d,i){return i})),sel=container.selectAll(params.selector).data(data),(sel=container.selectAll(params.selector).filter(function(){return this.parentNode===container.node()}).data(params.data)).enter().append(params.append).merge(sel).each(function(d,i){params.each(d,src_select(this),i)}).attr("class",params.className||""),sel.exit().remove()},renderer_utils_getClientPoint=function getClientPoint(){var pos=src_point.apply(void 0,arguments);return{x:pos[0],y:pos[1]}},renderer_utils_getEvent=function getEvent(){return on_event},renderer_utils_getD3Drag=function getD3Drag(){return src_drag},renderer_utils_getSmartComputedStyle=function getSmartComputedStyle(group,css){var textEl,mandatoryStyle={"fill-opacity":0},className="string"==typeof css?css:css instanceof Array?css.join(" "):void 0;textEl=group.node()instanceof HTMLElement?group.append("div").html("W"):group.append("text").text("W"),className?textEl.attr("class",className):"object"===renderer_utils_typeof(css)&&(delete css["fill-opacity"],mergeRecursive(mandatoryStyle,css)),textEl.style(mandatoryStyle);var computedStyle=window.getComputedStyle(textEl.node()),styleForSmartLabel={fontSize:computedStyle.fontSize,fontFamily:computedStyle.fontFamily,fontWeight:computedStyle.fontWeight,fontStyle:computedStyle.fontStyle};return textEl.remove(),styleForSmartLabel},hasTouch=function hasTouch(){return"ontouchstart"in document.documentElement},hyperdis=__webpack_require__(3),hyperdis_default=__webpack_require__.n(hyperdis);function store_slicedToArray(arr,i){return function store_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function store_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function store_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function store_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:function(){return{}};return props.forEach(function(prop){obj[prop]||(obj[prop]=val()),obj=obj[prop]}),obj},fetchPropValues=function fetchPropValues(propNames,params,deps){return params.map(function(param,i){var prop=propNames[i];return param.map(function(val){return void 0===val||null===val?val:val[deps[prop]]})})},setContexts=function setContexts(contexts,propObj,contextMap){var _iteratorNormalCompletion=!0,_didIteratorError=!1,_iteratorError=void 0;try{for(var _step,_iterator=propObj.keys()[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=!0){var key=_step.value;contexts[key]={context:contextMap[key],deps:propObj.get(key).depProps}}}catch(err){_didIteratorError=!0,_iteratorError=err}finally{try{_iteratorNormalCompletion||null==_iterator.return||_iterator.return()}finally{if(_didIteratorError)throw _iteratorError}}return contexts},store_registerListener=function registerListener(context,type){for(var _len=arguments.length,options=new Array(_len>2?_len-2:0),_key=2;_key<_len;_key++)options[_key-2]=arguments[_key];var propList=options[0],callBack=options[1],instantCall=options[2],_options$=options[3],namespaceInf=void 0===_options$?{}:_options$,props=propList;Array.isArray(propList)||(props=[propList]);var ns=namespaceInf.namespace,callbackFn=function(propNames,namespaceVal){return function(){var commits=context._savedCommits,propListenerMap=context._propListenerMap;if(!propNames.some(function(prop){return getObjProp(propListenerMap,prop,"disabled")})){for(var _len2=arguments.length,params=new Array(_len2),_key2=0;_key2<_len2;_key2++)params[_key2]=arguments[_key2];if(namespaceVal){var listenersObj=context._registeredListeners[namespaceVal],contextMap=context._contextMap[namespaceVal],contextsObj={};for(var key in propNames.forEach(function(prop){var commitsObj=defaultValue(getObjProp(commits,prop,type),{}),listeners=listenersObj[prop].subNamespaces,propDeps=propListenerMap[prop][type];for(var nm in commitsObj){var fnInf=defaultValue(propDeps[nm],{fns:0}),fns=fnInf.fns;fns>0&&(setContexts(contextsObj,listeners[nm],contextMap),fns--),fns<=0&&delete commitsObj[nm],fnInf.fns=fns}}),contextsObj){var obj=contextsObj[key];callBack.apply(void 0,[obj.context].concat(store_toConsumableArray(fetchPropValues(propNames,params,obj.deps))))}}else callBack.apply(void 0,params)}}}(props,ns),fn=context.model[type](props,callbackFn,instantCall);ns&&function registerPropInMaps(store,props,namespaceInf,type){var registeredListeners=store._registeredListeners,propListenerMap=store._propListenerMap,subNamespace=namespaceInf.subNamespace,ns=namespaceInf.namespace;initProp(registeredListeners,[ns]),props.forEach(function(prop){var subNamespaces=defaultValue(getObjProp(registeredListeners,ns,prop,"subNamespace"),[]),fns=defaultValue(getObjProp(propListenerMap,prop,type,"fns"),0);fns++,subNamespace&&subNamespaces.push(subNamespace),registeredListeners[ns][prop]={subNamespace:subNamespaces,allProps:props,subNamespaces:{}},initProp(propListenerMap,[prop,type]),propListenerMap[prop][type]={fns:fns,_fnCount:fns}})}(context,props,namespaceInf,type),function addListenerToNamespace(namespaceInf,fn,context){var key=namespaceInf.key,namespace=namespaceInf.id,listeners=context._listeners;if(namespace){!listeners.get(namespace)&&listeners.set(namespace,new Map);var namespaceListeners=listeners.get(namespace);key||(key=namespaceListeners.size),namespaceListeners.set(key,fn)}else key=key||listeners.size,listeners.set(key,fn)}(namespaceInf,fn,context)},store_createMap=function createMap(){return new Map},listenerTypes=["next","on"],removePropValue=function removePropValue(context,map,propInf){var sns=propInf.subNamespace,prop=propInf.prop,propObj=propInf.propListenerMap[prop];if(listenerTypes.forEach(function(type){type in propObj&&delete propObj[type][sns]}),map.has(sns)){var value=context.get(prop);value instanceof Object&&sns in value&&delete value[sns],map.delete(sns)}},store_Store=function(){function Store(config){!function store_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Store),this.model=hyperdis_default.a.create(config),this._listeners=new Map,this._registeredListeners={},this._contextMap={},this._commits={},this._savedCommits={},this._queuedProps={},this._propListenerMap={},this._locked=!1}return function store_createClass(Constructor,protoProps,staticProps){return protoProps&&store_defineProperties(Constructor.prototype,protoProps),staticProps&&store_defineProperties(Constructor,staticProps),Constructor}(Store,[{key:"lockModel",value:function lockModel(){return this.model.lock(),this._locked=!0,this}},{key:"unlockModel",value:function unlockModel(){return this._locked=!1,this.model.unlock(),this}},{key:"serialize",value:function serialize(){return this.model.serialize()}},{key:"lockCommits",value:function lockCommits(props){var _this=this;return props.forEach(function(prop){_this._commits[prop]={locked:!0,queue:[]}}),this}},{key:"unlockCommits",value:function unlockCommits(props){var _this2=this,commitsObj=this._commits;return this.lockModel(),props.forEach(function(prop){commitsObj[prop].locked=!1;var queuedProps={},queue=commitsObj[prop].queue;queue.forEach(function(params){var _params=store_slicedToArray(params,3),propName=_params[0],value=_params[1],namespace=_params[2];if(namespace){var propObj=initProp(queuedProps,[propName,namespace]);Object.assign(propObj,value)}}),queue.forEach(function(params){var _params2=store_slicedToArray(params,3),propName=_params2[0],value=_params2[1],namespace=_params2[2];_this2.commit(propName,propName in queuedProps?queuedProps[propName][namespace]:value,namespace)}),delete commitsObj[prop]}),this.unlockModel(),this}},{key:"addSubNamespace",value:function addSubNamespace(sns,namespace,context){var listeners=this._registeredListeners[namespace],propListenerMap=this._propListenerMap;initProp(this._contextMap,[namespace]),this._contextMap[namespace][sns]=context;var _loop=function _loop(key){var obj=listeners[key],propObj=propListenerMap[key],propFns=listenerTypes.reduce(function(acc,type){var val=defaultValue(getObjProp(propObj,type,"fns"),0);return val&&(acc[type]=val),acc},{}),allProps=obj.allProps,subNamespaces=obj.subNamespaces,subNamespace=obj.subNamespace;(subNamespace.length?subNamespace:[sns]).forEach(function(ns){var nsObj=ns instanceof Function?ns(context):ns,names=function retrieveNamespaces(names,key){return names instanceof Object?[names[key]]:names instanceof Array?names:[names]}(nsObj,key),depProps=allProps.reduce(function(acc,prop){return acc[prop]=ns instanceof Function?nsObj[prop]:ns,acc},{});names.forEach(function(nm){for(var type in initProp(subNamespaces,[nm],store_createMap).set(sns,{depProps:depProps}),propFns){initProp(propObj,[type,nm]);var fns=propFns[type];propObj[type][nm]={fns:fns,_fnCount:fns}}})})};for(var key in listeners)_loop(key);return this}},{key:"commit",value:function commit(propName,value,namespace){var disableListener=arguments.length>3&&void 0!==arguments[3]&&arguments[3],sanitizedVal=value,commits=this._commits,savedCommits=this._savedCommits,locked=getObjProp(commits,propName,"locked"),propListenerMap=this._propListenerMap[propName]||{};if(propListenerMap.disabled=disableListener,locked)return commits[propName].queue.push([propName,value,namespace]),this;if(namespace){if(this._locked){var queuedProps=initProp(this._queuedProps,[propName]);queuedProps[namespace]=value,sanitizedVal=queuedProps}else(sanitizedVal=defaultValue(this.get(propName),{}))[namespace]=value;listenerTypes.forEach(function(type){initProp(savedCommits,[propName,type]),savedCommits[propName][type][namespace]=!0,getObjProp(propListenerMap,type,namespace)&&(propListenerMap[type][namespace].fns=propListenerMap[type][namespace]._fnCount)})}return this.model.prop(propName,sanitizedVal),this}},{key:"registerChangeListener",value:function registerChangeListener(){for(var _len3=arguments.length,params=new Array(_len3),_key3=0;_key3<_len3;_key3++)params[_key3]=arguments[_key3];return store_registerListener.apply(void 0,[this,"next"].concat(params)),this}},{key:"registerImmediateListener",value:function registerImmediateListener(){for(var _len4=arguments.length,params=new Array(_len4),_key4=0;_key4<_len4;_key4++)params[_key4]=arguments[_key4];store_registerListener.apply(void 0,[this,"on"].concat(params))}},{key:"get",value:function get(propName,subNamespace){var value=this.model.prop(propName);return subNamespace?value&&value[subNamespace]:value}},{key:"computed",value:function computed(propName,callBack){return this.model.calculatedProp(propName,callBack)}},{key:"append",value:function append(){var _this$model;return(_this$model=this.model).append.apply(_this$model,arguments),this}},{key:"unsubscribeAll",value:function unsubscribeAll(){return Object.values(this._listeners).forEach(function(fn){return fn()}),this}},{key:"unsubscribe",value:function unsubscribe(){var namespaceInf=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},id=namespaceInf.id,key=namespaceInf.key,listenersMap=this._listeners,listeners=listenersMap.get(id);if(key){var fn=listenersMap.get(key);fn&&fn()}else{var _iteratorNormalCompletion2=!0,_didIteratorError2=!1,_iteratorError2=void 0;try{for(var _step2,_iterator2=listeners.values()[Symbol.iterator]();!(_iteratorNormalCompletion2=(_step2=_iterator2.next()).done);_iteratorNormalCompletion2=!0){(0,_step2.value)()}}catch(err){_didIteratorError2=!0,_iteratorError2=err}finally{try{_iteratorNormalCompletion2||null==_iterator2.return||_iterator2.return()}finally{if(_didIteratorError2)throw _iteratorError2}}listenersMap.set(id,[])}return this}},{key:"removeSubNamespace",value:function removeSubNamespace(subNamespace,namespace){var listenerMap=this._registeredListeners,contextMap=this._contextMap,propListenerMap=this._propListenerMap,listenersObj=listenerMap[namespace];for(var prop in listenersObj){var subNamespaces=listenersObj[prop].subNamespaces,propInf={subNamespace:subNamespace,prop:prop,propListenerMap:propListenerMap};if(subNamespaces[subNamespace])removePropValue(this,subNamespaces[subNamespace],propInf),delete subNamespaces[subNamespace];else for(var ns in subNamespaces){var snsMap=subNamespaces[ns];removePropValue(this,snsMap,propInf),snsMap.size||delete subNamespaces[ns]}}return delete contextMap[namespace][subNamespace],this}}]),Store}(),store_transactor=function transactor(holder,options,model){var conf,namespaceInf=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},store=model instanceof store_Store?model:new store_Store({}),stateProps={},namespace=namespaceInf.namespace,subNamespace=namespaceInf.subNamespace;for(var prop in options)if({}.hasOwnProperty.call(options,prop)){conf=options[prop];var nameSpaceProp=namespace?"".concat(namespace,".").concat(prop):prop;if(subNamespace){var value=defaultValue(store.get(nameSpaceProp),{});value[subNamespace]=conf.value,stateProps[nameSpaceProp]=value}else stateProps[prop]=conf.value;holder[prop]=function(context,meta,nsProp){return function(){for(var val,compareTo,_len5=arguments.length,params=new Array(_len5),_key5=0;_key5<_len5;_key5++)params[_key5]=arguments[_key5];var paramsLen=params.length,prevVal=context.get(nsProp,subNamespace);if(paramsLen){var spreadParams=meta&&meta.spreadParams;val=params;var values=[];if(meta){for(var i=0;i]+?\>)|(&(?:[a-z]+|#[0-9]+);|.)/gi,spanAdditionReplacer:'$1$2',spanRemovalRegx:new RegExp("\\]+?"+classNameWithTag+"[^\\>]{0,}\\>(.*?)\\<\\/span\\>","ig"),xmlTagRegEx:new RegExp("<[^>][^<]*[^>]+>","i"),brRegex:new RegExp("({br[ ]*})|()|()|()|()","g"),ltgtRegex:/<|>/g,htmlSpecialEntityRegex:/&|"|<|>/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 childRetriverFn,childRetriverString,noClassTesting;return doc.getElementsByClassName?(childRetriverFn="getElementsByClassName",childRetriverString=classNameWithTag,noClassTesting=!0):(childRetriverFn="getElementsByTagName",childRetriverString="span",noClassTesting=!1),{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")),isHeadLess:new RegExp(" HtmlUnit").test(userAgent),isWebKit:new RegExp(" AppleWebKit/").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild)return containerParent.appendChild(container=doc.createElement("DIV")),container.className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),container}else if((body=doc.getElementsByTagName("body")[0])&&body.appendChild)return(container=doc.createElement("DIV")).className=containerClass,container.setAttribute("aria-hidden","true"),container.setAttribute("role","presentation"),body.appendChild(container),container},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length)return 0;var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;if(difference=maxWidth,charLen=ceil(maxWidth/avgWidth),oriWidthtext.length&&(difference=maxWidth-oriWidth,charLen=text.length);difference>0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}for(;difference<0;){if(difference=maxWidth-getWidth(text.substr(0,charLen)),!(increment=floor(difference/avgWidth)))return charLen;charLen+=increment}return charLen},parseStyle:function parseStyle(){var style=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},parsedStyle={};return parsedStyle.fontSize=(style.fontSize||style["font-size"]||"12px")+"",parsedStyle.fontVariant=style.fontVariant||style["font-variant"]||"normal",parsedStyle.fontWeight=style.fontWeight||style["font-weight"]||"normal",parsedStyle.fontStyle=style.fontStyle||style["font-style"]||"normal",parsedStyle.fontFamily=style.fontFamily||style["font-family"]||"Verdana,sans",parsedStyle},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize;return styleObj.lineHeight=styleObj.lineHeight||styleObj["line-height"]||1.2*parseInt(fSize,10)+"px",styleObj},_getCleanHeight:function _getCleanHeight(height){return height=height.replace(/px/g,""),Number(height)},_getDimentionUsingDiv:function _getDimentionUsingDiv(){var text=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",container=(arguments.length>1?arguments[1]:void 0)._container;return text instanceof Array&&(text=text.join("")),container.innerHTML=text,{width:container.offsetWidth,height:container.offsetHeight}},_getDimentionUsingCanvas:function _getDimentionUsingCanvas(){var text=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",sl=arguments.length>1?arguments[1]:void 0,ctx=sl.ctx,style=sl.style,height=lib._getCleanHeight(style.lineHeight);return text=text instanceof Array?(text=text.join("")).replace(/
/g,""):text.replace(/
/g,""),{width:ctx.measureText(text).width,height:height}},_hasOnlyBRTag:function _hasOnlyBRTag(){var input=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return!lib.xmlTagRegEx.test(input)&&lib.brRegex.test(input)},_getDimentionOfMultiLineText:function _getDimentionOfMultiLineText(){var i,len,textWidth,rawText=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",sl=arguments.length>1?arguments[1]:void 0,text=rawText.replace(lib.brRegex,"
"),textAr=lib._getTextArray(text),width=0,maxWidth=0,getWidth=sl._getWidthFn(),height=lib._getCleanHeight(sl.style.lineHeight),textHeight=height,indiSizeStore={};for(i=0,len=textAr.length;i"===textAr[i]?(maxWidth=Math.max(maxWidth,width),width=0,textHeight+=height):(width+=textWidth=getWidth(textAr[i]),indiSizeStore[textAr[i]]=textWidth);return{height:textHeight,width:maxWidth=Math.max(maxWidth,width),detailObj:indiSizeStore}},_getTextArray:function _getTextArray(){var i,j,len,tempLen,brText,tempText,finaltextAr=[];for(len=(brText=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"").split("
")).length,i=0;i")}return finaltextAr},_findLastIndex:function _findLastIndex(){var i,array=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],item=arguments.length>1?arguments[1]:void 0;for(i=array.length-1;i>=0;i--)if(array[i]===item)return i;return-1}}}},es_lib=lib,slLib=es_lib.init(window),doc=slLib.win.document,documentSupport=slLib.getDocumentSupport(),SVG_BBOX_CORRECTION=documentSupport.isWebKit?0:4.5;function ContainerManager(parentContainer,isBrowserLess,maxContainers){var svg;maxContainers=(maxContainers=maxContainers>5?maxContainers:5)<20?maxContainers:20,this.maxContainers=maxContainers,this.first=null,this.last=null,this.containers={},this.length=0,this.rootNode=parentContainer,isBrowserLess&&((svg=doc.createElementNS("http://www.w3.org/2000/svg","svg")).setAttributeNS("http://www.w3.org/2000/svg","xlink","http://www.w3.org/1999/xlink"),svg.setAttributeNS("http://www.w3.org/2000/svg","height","0"),svg.setAttributeNS("http://www.w3.org/2000/svg","width","0"),this.svgRoot=svg,this.rootNode.appendChild(svg))}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr="";for(key in slLib.supportedStyle)void 0!==style[key]&&(keyStr+=slLib.supportedStyle[key]+":"+style[key]+";");if(!keyStr)return!1;if(containerObj=containers[keyStr])this.first!==containerObj&&(containerObj.prev&&(containerObj.prev.next=containerObj.next),containerObj.next&&(containerObj.next.prev=containerObj.prev),containerObj.next=this.first,containerObj.next.prev=containerObj,this.last===containerObj&&(this.last=containerObj.prev),containerObj.prev=null,this.first=containerObj);else{if(len>=max)for(diff=len-max+1;diff--;)this.removeContainer(this.last);containerObj=this.addContainer(keyStr)}return containerObj},ContainerManager.prototype._makeDivNode=function(container){var node,keyStr=container.keyStr;container.node||(container.node=doc.createElement("div"),container.node.className="fusioncharts-div",this.rootNode.appendChild(container.node)),node=container.node,documentSupport.isIE&&!documentSupport.hasSVG?node.style.setAttribute("cssText",keyStr):node.setAttribute("style",keyStr),node.setAttribute("aria-hidden","true"),node.setAttribute("role","presentation"),node.style.display="inline-block",node.innerHTML=slLib.testStrAvg,container.lineHeight=node.offsetHeight,container.avgCharWidth=node.offsetWidth/3,documentSupport.isBrowserLess?(container.svgText||(container.svgText=doc.createElementNS("http://www.w3.org/2000/svg","text"),this.svgRoot.appendChild(node)),(node=container.svgText).setAttribute("style",keyStr),node.textContent=slLib.testStrAvg,container.lineHeight=node.getBBox().height,container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3,node.textContent="...",container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION,node.textContent=".",container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION):(node.innerHTML="...",container.ellipsesWidth=node.offsetWidth,node.innerHTML=".",container.dotWidth=node.offsetWidth,node.innerHTML="")},ContainerManager.prototype.addContainer=function(keyStr){var container;return this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}},container.next=this.first,container.next&&(container.next.prev=container),this.first=container,this.last||(this.last=container),this.length+=1,container},ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;keyStr&&this.length&&cObj&&(this.length-=1,cObj.prev&&(cObj.prev.next=cObj.next),cObj.next&&(cObj.next.prev=cObj.prev),this.first===cObj&&(this.first=cObj.next),this.last===cObj&&(this.last=cObj.prev),cObj.node&&cObj.node.parentNode.removeChild(cObj.node),delete this.containers[keyStr])},ContainerManager.prototype.dispose=function(){var key,containers=this.containers;for(key in this.maxContainers=null,containers)this.removeContainer(containers[key]);this.rootNode.parentNode.removeChild(this.rootNode),this.rootNode=null,this.first=null,this.last=null};var container_manager=ContainerManager,SmartlabelManager_slLib=es_lib.init(window),SmartlabelManager_doc=SmartlabelManager_slLib.win.document,M=SmartlabelManager_slLib.win.Math,SmartlabelManager_max=M.max,SmartlabelManager_round=M.round,htmlSplCharSpace={" ":" "},SmartlabelManager_documentSupport=SmartlabelManager_slLib.getDocumentSupport(),SmartlabelManager_SVG_BBOX_CORRECTION=SmartlabelManager_documentSupport.isWebKit?0:4.5;function SmartLabelManager(container,useEllipses,options){var wrapper,prop,max,isBrowserLess=!1,canvas=window.document.createElement("canvas");for(prop in(options=options||{}).maxCacheLimit=isFinite(max=options.maxCacheLimit)?max:SmartlabelManager_slLib.maxDefaultCacheLimit,"string"==typeof container&&(container=SmartlabelManager_doc.getElementById(container)),(wrapper=SmartlabelManager_slLib.createContainer(container)).innerHTML=SmartlabelManager_slLib.testStrAvg,!SmartlabelManager_documentSupport.isHeadLess&&(SmartlabelManager_documentSupport.isIE||wrapper.offsetHeight||wrapper.offsetWidth)||(isBrowserLess=!0),wrapper.innerHTML="",SmartlabelManager_slLib.parentContainerStyle)wrapper.style[prop]=SmartlabelManager_slLib.parentContainerStyle[prop];this.parentContainer=wrapper,this.ctx=canvas&&canvas.getContext&&canvas.getContext("2d"),this._containerManager=new container_manager(wrapper,isBrowserLess,10),this._showNoEllipses=!useEllipses,this._init=!0,this.style={},this.oldStyle={},this.options=options,this.setStyle()}SmartLabelManager.textToLines=function(smartlabel){return(smartlabel=smartlabel||{}).text?"string"!=typeof smartlabel.text&&(smartlabel.text=smartlabel.text.toString()):smartlabel.text="",smartlabel.lines=smartlabel.text.split(/\n|/gi),smartlabel},SmartLabelManager.prototype._calCharDimWithCache=function(){var text=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",calculateDifference=arguments.length>1?arguments[1]:void 0,length=arguments.length>2?arguments[2]:void 0;if(!this._init)return!1;var size,tw,twi,cachedStyle,asymmetricDifference,cache,advancedCacheKey,cacheName,cacheInitName,maxAdvancedCacheLimit=this.options.maxCacheLimit,style=this.style||{};return cache=this._advancedCache=this._advancedCache||(this._advancedCache={}),advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]),cacheName=text+style.fontSize+style.fontFamily+style.fontWeight+style.fontStyle,cacheInitName=text+"init"+style.fontSize+style.fontFamily+style.fontWeight+style.fontStyle,!this.ctx&&htmlSplCharSpace[text]&&(text=htmlSplCharSpace[text]),calculateDifference?void 0===(asymmetricDifference=cache[cacheInitName])&&(tw=this._getDimention(text.repeat?text.repeat(length):Array(length+1).join(text)).width,twi=this._getDimention(text).width,asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1),advancedCacheKey.push(cacheInitName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()]):asymmetricDifference=0,(cachedStyle=cache[cacheName])?{width:cachedStyle.width,height:cachedStyle.height}:((size=this._getDimention(text)).width+=asymmetricDifference,cache[cacheName]={width:size.width,height:size.height},advancedCacheKey.push(cacheName),advancedCacheKey.length>maxAdvancedCacheLimit&&delete cache[advancedCacheKey.shift()],size)},SmartLabelManager.prototype._getDimention=function(text){return this.requireDiv||!this.ctx?SmartlabelManager_slLib._getDimentionUsingDiv(text,this):SmartlabelManager_slLib._getDimentionUsingCanvas(text,this)},SmartLabelManager.prototype._getWidthFn=function(){var sl=this,svgText=sl._containerObj.svgText;return svgText?function(str){var bbox,width;return svgText.textContent=str,(width=(bbox=svgText.getBBox()).width-SmartlabelManager_SVG_BBOX_CORRECTION)<1&&(width=bbox.width),width}:function(str){return sl.requireDiv||!sl.ctx?SmartlabelManager_slLib._getDimentionUsingDiv(str,sl).width:SmartlabelManager_slLib._getDimentionUsingCanvas(str,sl).width}},SmartLabelManager.prototype._isSameStyle=function(){var oldStyle=this.oldStyle||{},style=this.style;return style.fontSize===oldStyle.fontSize&&style.fontFamily===oldStyle.fontFamily&&style.fontStyle===oldStyle.fontStyle&&style.fontWeight===oldStyle.fontWeight&&style.fontVariant===oldStyle.fontVariant},SmartLabelManager.prototype._setStyleOfCanvas=function(){if(!this._isSameStyle()){var hashString,sCont,style=this.style,fontStyle=style.fontStyle,fontVariant=style.fontVariant,fontWeight=style.fontWeight,fontSize=style.fontSize,fontFamily=style.fontFamily;hashString=fontStyle+" "+fontVariant+" "+fontWeight+" "+(fontSize+=-1===fontSize.indexOf("px")?"px":"")+" "+fontFamily,this.ctx.font=hashString,sCont=this._containerObj=this._containerManager.get(style),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0,sCont.ellipsesWidth=this._calCharDimWithCache("...",!1).width,sCont.dotWidth=this._calCharDimWithCache(".",!1).width,sCont.lineHeight=this._lineHeight=sCont.lineHeight||SmartlabelManager_slLib._getCleanHeight(style.lineHeight),this.oldStyle=style}},SmartLabelManager.prototype._setStyleOfDiv=function(){var sCont,style=this.style;this._containerObj=sCont=this._containerManager.get(style),sCont.node||this._containerManager._makeDivNode(this._containerObj),this._containerObj?(this._container=sCont.node,this._context=sCont.context,this._cache=sCont.charCache,this._lineHeight=sCont.lineHeight,this._styleNotSet=!1):this._styleNotSet=!0},SmartLabelManager.prototype._updateStyle=function(){return this.requireDiv||!this.ctx?this._setStyleOfDiv():this._setStyleOfCanvas()},SmartLabelManager.prototype.setStyle=function(style){return this.style=SmartlabelManager_slLib.parseStyle(style),SmartlabelManager_slLib.setLineHeight(this.style),this},SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){return this._init?(this._showNoEllipses=!useEllipses,this):this},SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag,lineHeight,context,container,sCont,ellipsesWidth,dotWidth,hasOnlyBrTag,dimentionObj,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?"":"...",canvas=this.ctx,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,fastTrim=function fastTrim(str){for(var ws=/\s/,i=(str=str.replace(/^\s\s*/,"")).length;ws.test(str.charAt(i-=1)););return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:!1};if(hasHTMLTag=SmartlabelManager_slLib.xmlTagRegEx.test(text),hasOnlyBrTag=SmartlabelManager_slLib._hasOnlyBRTag(text),this.requireDiv=hasHTMLTag&&!hasOnlyBrTag,this._updateStyle(),lineHeight=this._lineHeight,context=this._context,container=this._container,ellipsesWidth=(sCont=this._containerObj).ellipsesWidth,dotWidth=sCont.dotWidth,toolText=text.replace(SmartlabelManager_slLib.spanAdditionRegx,"$2"),getWidth=this._getWidthFn(),lineHeight-maxHeight<=1&&lineHeight-maxHeight>=0&&(maxHeight*=1.2),canvas||container){if(!SmartlabelManager_documentSupport.isBrowserLess){if(hasHTMLTag?hasOnlyBrTag?(text=text.replace(SmartlabelManager_slLib.brRegex,"
"),dimentionObj=SmartlabelManager_slLib._getDimentionOfMultiLineText(text,this),smartLabel.oriTextWidth=oriWidth=dimentionObj.width,smartLabel.oriTextHeight=oriHeight=dimentionObj.height):(container.innerHTML=text,smartLabel.oriTextWidth=oriWidth=container.offsetWidth,smartLabel.oriTextHeight=oriHeight=container.offsetHeight):(tmpText=text=text.replace(SmartlabelManager_slLib.ltgtRegex,function(match){return"<"===match?"<":">"}),getOriSizeImproveObj=this.getOriSize(tmpText,!0,{hasHTMLTag:hasHTMLTag,hasOnlyBrTag:hasOnlyBrTag,cleanText:!0}),smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width,smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height),oriHeight<=maxHeight&&oriWidth<=maxWidth)return smartLabel.width=smartLabel.oriTextWidth=oriWidth,smartLabel.height=smartLabel.oriTextHeight=oriHeight,smartLabel;if(lineHeight>maxHeight)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=0,smartLabel.height=smartLabel.oriTextHeight=0,smartLabel}if(text=fastTrim(text).replace(/(\s+)/g," "),maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth,!hasHTMLTag||hasOnlyBrTag){if(len=(oriTextArr=SmartlabelManager_slLib._getTextArray(text)).length,trimStr="",tempArr=[],tempChar=oriTextArr[0],this._cache[tempChar]?minWidth=this._cache[tempChar].width:(minWidth=getWidth(tempChar),this._cache[tempChar]={width:minWidth}),maxWidthWithEll>minWidth&&!hasOnlyBrTag)tempArr=text.substr(0,SmartlabelManager_slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split("");else{if(minWidth>maxWidth)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;ellipsesStr&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr=""))}if(i=tempArr.length,strWidth=getWidth(tempArr.join("")),strHeight=this._lineHeight,noWrap){for(;i"!==tempArr[i]){if(this._cache[tempChar]?minWidth=this._cache[tempChar].width:(getOriSizeImproveObj&&(minWidth=getOriSizeImproveObj.detailObj[tempChar])||(minWidth=getWidth(tempChar)),this._cache[tempChar]={width:minWidth}),(strWidth+=minWidth)>maxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth))return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=SmartlabelManager_max(maxStrWidth,strWidth),smartLabel.height=strHeight,smartLabel}else strHeight+=this._lineHeight,lastIndexBroken=i,maxStrWidth=SmartlabelManager_max(maxStrWidth,strWidth),strWidth=0,trimStr=null;return smartLabel.text=tempArr.join(""),smartLabel.width=SmartlabelManager_max(maxStrWidth,strWidth),smartLabel.height=strHeight,smartLabel}for(;i"===tempArr[i]){if(maxStrWidth=SmartlabelManager_max(maxStrWidth,strWidth),(strHeight+=this._lineHeight)<=maxHeight){lastIndexBroken=i,strWidth=0,trimStr=null;continue}if(strHeight>maxHeight)return trimStr=tempArr.slice(0,-1).join(""),smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=toolText,smartLabel.width=maxStrWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel}if(this._cache[tempChar]?minWidth=this._cache[tempChar].width:(getOriSizeImproveObj&&(minWidth=getOriSizeImproveObj.detailObj[tempChar])||(minWidth=getWidth(tempChar)),this._cache[tempChar]={width:minWidth}),(strWidth+=minWidth)>maxWidthWithEll&&(trimStr||(trimStr=tempArr.slice(0,-1).join("")),strWidth>maxWidth)){if("
"===oriTextArr[i+1])continue;if(lastSpace=SmartlabelManager_slLib._findLastIndex(oriTextArr.slice(0,tempArr.length)," "),lastDash=SmartlabelManager_slLib._findLastIndex(oriTextArr.slice(0,tempArr.length),"-"),lastSpace>lastIndexBroken?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastSpace,1,"
"),lastIndexBroken=lastSpace,newCharIndex=lastSpace+1):lastDash>lastIndexBroken?(lastDash===tempArr.length-1?(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"
-")):(strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join("")),tempArr.splice(lastDash,1,"-
")),lastIndexBroken=lastDash,newCharIndex=lastDash+1):(tempArr.splice(tempArr.length-1,1,"
"+oriTextArr[i]),lastLineBreak=tempArr.length-2,strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join("")),lastIndexBroken=lastLineBreak,newCharIndex=i),(strHeight+=this._lineHeight)>maxHeight)return smartLabel.text=fastTrim(trimStr)+ellipsesStr,smartLabel.tooltext=smartLabel.oriText,smartLabel.width=maxWidth,smartLabel.height=strHeight-this._lineHeight,smartLabel;maxStrWidth=SmartlabelManager_max(maxStrWidth,strWidth),trimStr=null,hasOnlyBrTag?strWidth=SmartlabelManager_slLib._getDimentionOfMultiLineText(tempArr.slice(lastIndexBroken+1).join(""),this).width:(nearestChar=SmartlabelManager_slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this),strWidth=getWidth(text.substr(newCharIndex,nearestChar||1)),tempArr.length)/g,'$1'),container.innerHTML=text,x=0,y=(spanArr=container[SmartlabelManager_documentSupport.childRetriverFn](SmartlabelManager_documentSupport.childRetriverString)).length;xmaxWidth||!len)return smartLabel.text="",smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0,smartLabel;if(minWidth>maxWidthWithEll&&!this._showNoEllipses&&((maxWidthWithEll=maxWidth-2*dotWidth)>minWidth?ellipsesStr="..":(maxWidthWithEll=maxWidth-dotWidth)>minWidth?ellipsesStr=".":(maxWidthWithEll=0,ellipsesStr="")),initialLeft=characterArr[0].elem.offsetLeft,initialTop=characterArr[0].elem.offsetTop,noWrap)for(;imaxWidthWithEll&&(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),container.offsetWidth>maxWidth&&(removeFromIndex=i,i=len));else for(;imaxWidthWithEll?(removeFromIndexForEllipses||(removeFromIndexForEllipses=i),elemRightMostPoint>maxWidth&&(lastSpace=characterArr[i].spaceIdx,lastDash=characterArr[i].dashIdx,lastSpace>lastIndexBroken?(characterArr[lastSpace].elem.innerHTML="
",lastIndexBroken=lastSpace):lastDash>lastIndexBroken?(characterArr[lastDash].elem.innerHTML=lastDash===i?"
-":"-
",lastIndexBroken=lastDash):elem.parentNode.insertBefore(lastBR=SmartlabelManager_doc.createElement("br"),elem),elem.offsetHeight+elem.offsetTop>maxHeight?(lastBR?lastBR.parentNode.removeChild(lastBR):lastIndexBroken===lastDash?characterArr[lastDash].elem.innerHTML="-":characterArr[lastSpace].elem.innerHTML=" ",removeFromIndex=i,i=len):removeFromIndexForEllipses=null)):elemLowestPoint>maxHeight&&(removeFromIndex=i,i=len);if(removeFromIndex=removeFromIndexForEllipses;i-=1)(elem=characterArr[i].elem).parentNode.removeChild(elem);for(;i>=0;i-=1)elem=characterArr[i].elem,SmartlabelManager_slLib.classNameBrReg.test(elem.className)?elem.parentNode.removeChild(elem):i=0}return smartLabel.text=container.innerHTML.replace(SmartlabelManager_slLib.spanRemovalRegx,"$1").replace(/\&\;/g,"&"),smartLabel.isTruncated&&(smartLabel.text+=ellipsesStr,smartLabel.tooltext=toolText),smartLabel.height=container.offsetHeight,smartLabel.width=container.offsetWidth,smartLabel}return smartLabel.error=new Error("Body Tag Missing!"),smartLabel},SmartLabelManager.prototype.getOriSize=function(){var text=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",detailedCalculationFlag=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],config=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!this._init)return!1;void 0===text||null===text?text="":"string"!=typeof text&&(text=text.toString());var textArr,letter,lSize,i,l,container,cumulativeSize=0,height=0,indiSizeStore={},hasHTMLTag=config.hasHTMLTag,hasOnlyBrTag=config.hasOnlyBrTag;if(void 0===hasHTMLTag&&(hasHTMLTag=SmartlabelManager_slLib.xmlTagRegEx.test(text)),void 0===hasOnlyBrTag&&(hasOnlyBrTag=SmartlabelManager_slLib._hasOnlyBRTag(text)),this.requireDiv=hasHTMLTag&&!hasOnlyBrTag,config.cleanText||(text=text.replace(SmartlabelManager_slLib.ltgtRegex,function(match){return"<"===match?"<":">"})),this._updateStyle(),container=this._container,hasOnlyBrTag)return SmartlabelManager_slLib._getDimentionOfMultiLineText(text,this);if(!detailedCalculationFlag)return this._calCharDimWithCache(text);if(hasHTMLTag)return container.innerHTML=text,{width:container.offsetWidth,height:container.offsetHeight};for(i=0,l=(textArr=text.split("")).length;i0&&void 0!==arguments[0]?arguments[0]:{};this._lifeCycles=lifeCycles,this._releasePromisesFromCache()}},{key:"_resetTargetPromise",value:function _resetTargetPromise(eventName){var _this4=this;setTimeout(function(){_this4._notifiers[eventName]=lifecycle_manager_resolver,_this4._promises.set(eventName,_this4._makeNotifierPromise(eventName))},0)}}]),LifeCycleManager}(),src_InvalidAwareTypes=datamodel_default.a.InvalidAwareTypes,DRAG="drag",HOVER="hover",SELECTIONDRAG="selectiondrag",CLICK="click",LONGTOUCH="longtouch",TOUCHDRAG="touchdrag",ALL_ACTIONS="*",SELECTION_NEW_ENTRY=1,SELECTION_NEW_EXIT=-1,SELECTION_NULL=0,SELECTION_OLD_ENTRY=2,SELECTION_OLD_EXIT=-2;function selection_set_defineProperties(target,props){for(var i=0;i0?(set[key]===SELECTION_OLD_ENTRY&&retObj.entrySet[0].push(key),set[key]===SELECTION_NEW_ENTRY&&retObj.entrySet[1].push(key)):set[key]<0&&(set[key]===SELECTION_OLD_EXIT&&retObj.exitSet[0].push(key),set[key]===SELECTION_NEW_EXIT&&retObj.exitSet[1].push(key)),retObj.completeSet.push(key);return["entrySet","exitSet"].forEach(function(type){retObj[type]=retObj[type].map(function(e){return e.map(Number)})}),retObj.completeSet=retObj.completeSet.map(Number),retObj}},{key:"reset",value:function reset(ids){var set=this._set;if(ids)ids.forEach(function(i){set[i]=SELECTION_NULL});else{var lockedSel=this._lockedSelection;for(var key in set)key in lockedSel||(set[key]=SELECTION_NULL)}return this._resetted=!0,this}},{key:"getEntrySet",value:function getEntrySet(){var set=this._set,addSet=[];for(var key in set)set[key]===SELECTION_NEW_ENTRY&&addSet.push(key);return addSet}},{key:"getExistingEntrySet",value:function getExistingEntrySet(addSet){var set=this._set;return addSet.filter(function(d){return set[d]===SELECTION_NEW_ENTRY||set[d]===SELECTION_OLD_ENTRY})}},{key:"getExistingExitSet",value:function getExistingExitSet(removeSet){var set=this._set;return removeSet.filter(function(d){return set[d]===SELECTION_NEW_EXIT||set[d]===SELECTION_OLD_EXIT})}},{key:"getOldEntry",value:function getOldEntry(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_ENTRY&&updateSet.push(key);return updateSet}},{key:"getOldExit",value:function getOldExit(){var set=this._set,updateSet=[];for(var key in set)set[key]===SELECTION_OLD_EXIT&&updateSet.push(key);return updateSet}},{key:"getExitSet",value:function getExitSet(){var set=this._set,removeSet=[];for(var key in set)set[key]===SELECTION_NEW_EXIT&&removeSet.push(key);return removeSet}},{key:"getCompleteSet",value:function getCompleteSet(){var set=this._set,completeSet=[];for(var key in set)completeSet.push(key);return completeSet}},{key:"getCompleteSetCount",value:function getCompleteSetCount(){return this._completeSetCount}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"toggle",value:function toggle(){var set=this._set;for(var key in set)set[key]===SELECTION_NEW_ENTRY?set[key]=SELECTION_NEW_EXIT:set[key]===SELECTION_NEW_EXIT?set[key]=SELECTION_NEW_ENTRY:set[key]===SELECTION_OLD_ENTRY?set[key]=SELECTION_OLD_EXIT:set[key]=SELECTION_OLD_ENTRY;return this}}]),SelectionSet}();function helper_toConsumableArray(arr){return function helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i3&&void 0!==arguments[3]?arguments[3]:{},sideEffectStore=this.sideEffects(),sideEffect=sideEffectStore[name],disable=!1;options.filter&&options.filter(sideEffect)&&(disable=!0),!disable&&sideEffectStore[name].apply(selectionSet,payload,options)}},{key:"registerPropagationBehaviourMap",value:function registerPropagationBehaviourMap(map){return this._propagationBehaviourMap=Object.assign(this._propagationBehaviourMap,map||{}),this}},{key:"dispatchBehaviour",value:function dispatchBehaviour(behaviour,payload){var propagationInfo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},propagate=void 0===propagationInfo.propagate||propagationInfo.propagate,action=this._actions.behavioural[behaviour],sideEffects=function getSideEffects(behaviour,behaviourEffectMap){var sideEffects=[];for(var key in behaviourEffectMap){var behaviours=key.split(",");behaviours.some(function(d){return d===behaviour})&&sideEffects.push({effects:behaviourEffectMap[key],behaviours:behaviours})}return sideEffects}(behaviour,this._behaviourEffectMap);if(this._propagationInf=propagationInfo,action){var selectionSet=action.dispatch(payload),propagationSelectionSet=this.getPropagationSelectionSet(selectionSet);this._entryExitSet[behaviour]=propagationSelectionSet;var shouldApplySideEffects=this.shouldApplySideEffects(propagate);if(propagate&&this.propagate(behaviour,payload,selectionSet.find(function(d){return d.sourceSelectionSet}),sideEffects),shouldApplySideEffects){var applicableSideEffects=this.getApplicableSideEffects(sideEffects,payload,propagationInfo);this.applySideEffects(applicableSideEffects,propagationSelectionSet,payload)}}return this}},{key:"getPropagationSelectionSet",value:function getPropagationSelectionSet(selectionSet){return selectionSet.find(function(d){return!d.sourceSelectionSet})}},{key:"shouldApplySideEffects",value:function shouldApplySideEffects(){return!0}},{key:"changeBehaviourStateOnPropagation",value:function changeBehaviourStateOnPropagation(behaviour,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",behaviourConditions=this._sourceBehaviours[behaviour]||(this._sourceBehaviours[behaviour]={});return value instanceof Function?behaviourConditions[key]=value:behaviourConditions[key]=function(){return value},this}},{key:"changeSideEffectStateOnPropagation",value:function changeSideEffectStateOnPropagation(sideEffect,value){var key=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"default",sideEffectConditions=this._sourceSideEffects[sideEffect]||(this._sourceSideEffects[sideEffect]={});value instanceof Function?sideEffectConditions[key]=value:sideEffectConditions[key]=function(){return value}}},{key:"removeSideEffectPolicy",value:function removeSideEffectPolicy(sideEffect,key){return delete this._sourceSideEffects[sideEffect][key],this}},{key:"removeBehaviourPolicy",value:function removeBehaviourPolicy(behaviour,key){return delete this._sourceBehaviours[behaviour][key],this}},{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(fn){return changeSideEffectAvailability(this,fn,!0),this}},{key:"disableSideEffects",value:function disableSideEffects(fn){return changeSideEffectAvailability(this,fn,!1),this}},{key:"dissociateBehaviour",value:function dissociateBehaviour(behaviour,physicalAction){var actionBehaviourMap=this._actionBehaviourMap;for(var key in actionBehaviourMap)if(key===physicalAction){var behaviourMap=actionBehaviourMap[key];behaviourMap.behaviours=behaviourMap.behaviours.filter(function(d){return d!==behaviour}),this.mapActionsAndBehaviour(key)}return this}},{key:"dissociateSideEffect",value:function dissociateSideEffect(sideEffect,behaviour){var behaviourEffectMap=this._behaviourEffectMap;return behaviourEffectMap[behaviour]=behaviourEffectMap[behaviour].filter(function(d){return(d.name||d)!==sideEffect}),this}},{key:"getApplicableSideEffects",value:function getApplicableSideEffects(sideEffects){return sideEffects}},{key:"attachPropagationListener",value:function attachPropagationListener(dataModel){return dataModel.unsubscribe("propagation"),dataModel.on("propagation",this.onDataModelPropagation()),this}},{key:"onDataModelPropagation",value:function onDataModelPropagation(){var _this2=this;return function(propValue){var payload=propValue.payload,action=payload.action;_this2.dispatchBehaviour(action,payload,{propagate:!1})}}},{key:"createSelectionSet",value:function createSelectionSet(uniqueIds,behaviouralActions){var behaviours=behaviouralActions||this._actions.behavioural,selectionSet=this._selectionSet,volatileSelectionSet=this._volatileSelectionSet;for(var key in behaviours)({}).hasOwnProperty.call(behaviours,key)&&(selectionSet[key]=new src_selection_set(uniqueIds),volatileSelectionSet[key]=new src_selection_set(uniqueIds,!0),this._entryExitSet[key]=null);return this._volatileSelectionSet=volatileSelectionSet,this.selectionSet(selectionSet),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 sideEffectDefinitions=this._sideEffectDefinitions;return this.sideEffects(function initializeSideEffects(context,sideEffects){var sideEffectsMap=context._sideEffects;return(sideEffects=sideEffects instanceof Array?sideEffects:Object.values(sideEffects)).forEach(function(SideEffect){var formalName=SideEffect.formalName(),sideEffectInstance=sideEffectsMap[formalName];sideEffectsMap[formalName]=sideEffectInstance||new SideEffect(context)}),sideEffectsMap}(this,sideEffectDefinitions)),this}},{key:"registerPhysicalActions",value:function registerPhysicalActions(actions){var initedActions=function initializePhysicalActions(context,actions){var physicalActions={};for(var name in actions)({}).hasOwnProperty.call(name,actions)||(physicalActions[name]=actions[name](context));return physicalActions}(this,actions);return Object.assign(this._actions.physical,initedActions),this}},{key:"propagateWith",value:function propagateWith(action,fields){var append=arguments.length>2&&void 0!==arguments[2]&&arguments[2],behaviouralActions=this._actions.behavioural;if(action===ALL_ACTIONS)for(var key in behaviouralActions)this._propagationFields[key]={fields:fields,append:append};else this._propagationFields[action]={fields:fields,append:append};return this}},{key:"mapActionsAndBehaviour",value:function mapActionsAndBehaviour(phyAction){var initedPhysicalActions=this._actions.physical,map=this._actionBehaviourMap;for(var action in map)if(!{}.hasOwnProperty.call(action,map)&&action===(phyAction||action)){var target=void 0,mapObj=map[action];target=mapObj.target;var touch=mapObj.touch;target||(target=this.context.getDefaultTargetContainer()),(hasTouch()?!0===touch||void 0===touch:!touch)&&this.bindActionWithBehaviour(initedPhysicalActions[action],target,mapObj.behaviours)}return this}},{key:"registerPhysicalBehaviouralMap",value:function registerPhysicalBehaviouralMap(map){return this._actionBehaviourMap=mergeRecursive(this._actionBehaviourMap,map),this}},{key:"bindActionWithBehaviour",value:function bindActionWithBehaviour(action,targets,behaviourList){var _this3=this;return"string"==typeof targets&&(targets=[targets]),targets.forEach(function(target){var mount=_this3.context.mount(),nodes=target.node instanceof Function?target:renderer_utils_selectElement(mount).selectAll(target);nodes.empty()||(nodes instanceof Array?nodes.forEach(function(node){action(renderer_utils_selectElement(node),behaviourList)}):action(nodes,behaviourList))}),this}},{key:"getPropagationInf",value:function getPropagationInf(){return this._propagationInf}},{key:"getAddSetFromCriteria",value:function getAddSetFromCriteria(criteria){var propagationInf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=this.context,filteredDataModel=propagationInf.data?propagationInf.data:context.getDataModelFromIdentifiers(criteria,"all");return{model:filteredDataModel,uids:null===criteria?null:propagationInf.data?propagationInf.entryRowIds:filteredDataModel[0].getUids()}}},{key:"getSelectionSets",value:function getSelectionSets(action){var sourceId=this.context.id(),propagationSource=(this._propagationInf||{}).sourceId,applicableSelectionSets=[];return propagationSource!==sourceId&&(applicableSelectionSets=[this._volatileSelectionSet[action]]),propagationSource&&applicableSelectionSets.push(this.selectionSet()[action]),applicableSelectionSets}},{key:"getFullData",value:function getFullData(){return this.context.data()}},{key:"resetted",value:function resetted(){return this._resetted}},{key:"getEntryExitSet",value:function getEntryExitSet(behaviour){return this._entryExitSet[behaviour]}}]),Firebolt}();function generic_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},sourceIdentifiers=propagationInf.sourceIdentifiers;return sourceIdentifiers?sourceIdentifiers.getSchema().map(function(d){return d.name}):criteria instanceof Array?criteria[0]:Object.keys(criteria||{})}(propagationInf,payload.criteria),sourceSelectionSet:!0===selectionSet._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}();function volatile_typeof(obj){return(volatile_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function volatile_defineProperties(target,props){for(var i=0;iydom[0]?ydom:xdom,max=min===ydom?xdom:ydom;min[1]100&&Math.abs(startPos.x-endPos.x)<=5)){endPos.x=Math.max(0,Math.min(endPos.x,drawingInf.width)),endPos.y=Math.max(0,Math.min(endPos.y,drawingInf.height));var payload=drag_action_config(firebolt.context.getSourceInfo(),{startPos:startPos,endPos:endPos,snap:!0},firebolt.context.data().getFieldsConfig());payload.dragEnd=!0,behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)})}}))},physical_hover=function hover(firebolt){return function(targetEl,behaviours){var dispatchBehaviour=function dispatchBehaviour(args){var event=renderer_utils_getEvent(),context=firebolt.context,mode=context.config().interaction.tooltip.mode,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{getAllPoints:"consolidated"===mode||"fragmented"===mode,data:args,event:event}),payload={criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos,mode:mode};behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()};targetEl.on("mouseover",dispatchBehaviour).on("mousemove",dispatchBehaviour).on("mouseout",function(){behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})})})}},helpers_generatePayloadFromEvent=function generatePayloadFromEvent(args,event,firebolt){var context=firebolt.context,pos=renderer_utils_getClientPoint(context.getDrawingContext().svgContainer,event.touches?event.touches[0]:event),nearestPoint=context.getNearestPoint(pos.x,pos.y,{data:args,event:event});return{criteria:nearestPoint?nearestPoint.id:null,showInPosition:nearestPoint.showInPosition,target:nearestPoint.target,position:pos}},physical_click=function click(firebolt){return function(targetEl,behaviours){targetEl.on("click",function dispatchBehaviour(args){var event=renderer_utils_getEvent(),payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()})}};function physical_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var physicalActions=(physical_defineProperty(_physicalActions={},DRAG,function drag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt)}}),physical_defineProperty(_physicalActions,HOVER,physical_hover),physical_defineProperty(_physicalActions,CLICK,physical_click),physical_defineProperty(_physicalActions,LONGTOUCH,function longtouch(firebolt){return function(targetEl,behaviours){var event,touchEnd;touchEnd=!1,event=renderer_utils_getEvent(),targetEl.on("touchstart",function(args){event=renderer_utils_getEvent(),touchEnd=!1,setTimeout(function(){touchEnd?behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,{criteria:null})}):function dispatchBehaviour(args){var payload=helpers_generatePayloadFromEvent(args,event,firebolt);behaviours.forEach(function(beh){return firebolt.dispatchBehaviour(beh,payload)}),event.stopPropagation()}(args)},100)}).on("touchend",function(){touchEnd=!0})}}),physical_defineProperty(_physicalActions,TOUCHDRAG,function touchdrag(firebolt){return function(targetEl,behaviours){drag_event_attachDragEvent(targetEl,behaviours,firebolt,!0)}}),_physicalActions),ANCHORS="anchors",side_effects_TOOLTIP="tooltip",BRUSH_ANCHORS="brush-anchors",PERSISTENT_ANCHORS="persistent-anchors",side_effects_FILTER="filter",HIGHLIGHTER="highlighter",CROSSLINE="crossline",PROPS={valueParser:{defaultValue:function defaultValue(val){return val}}};function generic_sideeffect_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];var interactionType=arguments.length>2?arguments[2]:void 0,apply=arguments.length>3?arguments[3]:void 0;return this.firebolt.context.layers().forEach(function(layer){return!1!==layer.config().interactive&&layer.applyInteractionStyle(interactionType,set.uids,apply)}),this}}]),SurrogateSideEffect}();function spawnable_typeof(obj){return(spawnable_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function spawnable_defineProperties(target,props){for(var i=0;i=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2}},context.data().getFieldsConfig());onDrag(payload)}}).on("end",function(){var width=drawingInf.width,height=drawingInf.height,x=Math.min(width-subject.width,Math.max(subject.x,0)),y=Math.min(height-subject.height,Math.max(subject.y,0)),y2=y+subject.height,x2=x+subject.width;if(x>=0&&x2<=width&&y>=0&&y2<=height){var payload=drag_action_config(context.getSourceInfo(),{startPos:{x:x,y:y},endPos:{x:x2,y:y2},snap:!0},context.data().getFieldsConfig());payload.dragEnd=!0,onDrag(payload)}}))}}(firebolt)(renderer_utils_selectElement(this),["brush"],sideEffect)}).merge(selection).each(function(attrs){var element=renderer_utils_selectElement(this);for(var key in transition&&(element=element.transition().duration(transition.duration)),attrs)({}).hasOwnProperty.call(attrs,key)&&isValidValue(attrs[key])&&element.attr(key,attrs[key])}),boxClassName=getQualifiedClassName(boxConf.defClassName,this._id,classPrefix);return selectionBox.classed(boxClassName.join(" "),!0),selectionBox.classed(boxConf.className,!0),this}},{key:"hide",value:function hide(drawingInf){helper_changeVisibility(this,drawingInf.sideEffectGroup,!1)}},{key:"show",value:function show(drawingInf){helper_changeVisibility(this,drawingInf.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}(),INITIAL_STYLE={position:"absolute",width:0,height:0},default_config_defaultConfig={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)"}},helper_getArrowPos=function getArrowPos(orient,dim,measurement,config){var arrowPos,x=measurement.x,y=measurement.y,boxHeight=measurement.boxHeight,boxWidth=measurement.boxWidth,arrowWidth=config.arrow.disabled?0:config.arrow.size;if("left"===orient||"right"===orient){var start=0,diff=boxHeight/2,plotBottom=dim.y+dim.height,boxBottom=y+boxHeight;dim.y>y?(start=dim.y-y,diff=(plotBottom>=boxBottom?boxBottom-dim.y:dim.height)/2):boxBottom>plotBottom&&(diff=Math.abs(y-(dim.y+dim.height))/2),arrowPos=start+diff-arrowWidth/2}else{var _start=0,_diff=boxWidth/2,plotRight=dim.x+dim.width,boxRight=x+boxWidth;dim.x>x?(_start=dim.x-x,_diff=(plotRight>=boxRight?boxRight-dim.x:dim.width)/2):boxRight>plotRight&&(_diff=Math.abs(x-(dim.x+dim.width))/2),arrowPos=_start+_diff-arrowWidth/2}return arrowPos},helper_placeArrow=function placeArrow(context,position,arrowPos){var tooltipArrow=context._tooltipArrow,tooltipBackground=context._tooltipBackground,config=context._config,classPrefix=config.classPrefix,arrowConf=config.arrow,className=getQualifiedClassName(arrowConf.defClassName,context._id,config.classPrefix);tooltipArrow.style("display","block"),tooltipArrow.attr("class","".concat(className.join(" "))),"left"===position||"right"===position?(tooltipArrow.style("top","".concat(arrowPos,"px")),tooltipArrow.style("left",""),tooltipBackground.style("top","".concat(arrowPos,"px")),tooltipBackground.style("left","")):("bottom"===position?tooltipArrow.style("top","100%"):tooltipArrow.style("top","-".concat(arrowConf.size,"px")),tooltipArrow.style("left","".concat(arrowPos,"px")),"bottom"===position?tooltipBackground.style("top","100%"):tooltipBackground.style("top","-".concat(arrowConf.size+3,"px")),tooltipBackground.style("left","".concat(arrowPos,"px"))),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow"),!0),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(context._arrowOrientation),!1),tooltipArrow.classed("".concat(classPrefix,"-tooltip-arrow-").concat(position),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow"),!0),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(context._arrowOrientation),!1),tooltipBackground.classed("".concat(classPrefix,"-tooltip-background-arrow-").concat(position),!0)};__webpack_require__(7);function content_defineProperties(target,props){for(var i=0;i0?(this._config=mergeRecursive(this._config,arguments.length<=0?void 0:arguments[0]),this):this._config}},{key:"update",value:function update(item){return this._model=item.model,this._formatter=item.formatter,this}},{key:"context",value:function context(ctx){return this._context=ctx,this}},{key:"render",value:function render(mount){var data,config=this._config,iconContainerSize=config.iconContainerSize,formatter=this._formatter,rowMargin=config.rowMargin,model=this._model;if(this._mount=mount,(data=model instanceof Array?model:formatter(this._model,this.config(),this._context))instanceof Function)mount.html(data());else{var content=data,displayFormat="default";isSimpleObject(data)&&(content=data.content,displayFormat=data.displayFormat);var body=makeElement(mount,"div",[displayFormat],"".concat(config.classPrefix,"-tooltip-content"),{},function(d){return d});if("table"===displayFormat){var table=makeElement(body,"table",[1],"".concat(config.classPrefix,"-tooltip-table")),tbody=makeElement(table,"tbody",[1],"".concat(config.classPrefix,"-tooltip-table-tbody")),rows=makeElement(tbody,"tr",content,"".concat(config.classPrefix,"-tooltip-table-row"));rows.each(function(d,i){renderer_utils_selectElement(this).classed("".concat(config.classPrefix,"-tooltip-table-row-").concat(i),!0)}),makeElement(rows,"td",function(d){return d},"".concat(config.classPrefix,"-tooltip-table-cell")).each(function(d){renderer_utils_selectElement(this).html(d)})}else{var _rows=makeElement(body,"div",content,"".concat(config.classPrefix,"-tooltip-row")),_cells=makeElement(_rows,"span",function(d){return d},"".concat(config.classPrefix,"-tooltip-content"));_cells.attr("class","".concat(config.classPrefix,"-tooltip-content")),renderer_utils_setStyles(_rows,{margin:rowMargin}),renderer_utils_setStyles(_cells,{display:"inline-block","margin-right":"".concat(config.spacing,"px")}),_cells.each(function(d){var el=renderer_utils_selectElement(this);if(el.html(""),d instanceof Object)if("icon"===d.type){var svg=makeElement(el,"svg",[1]),path=makeElement(svg,"path",[1]),shape=d.shape instanceof Function?d.shape:common_utils_getSymbol(d.shape);renderer_utils_setAttrs(svg,{x:0,y:0,width:iconContainerSize,height:iconContainerSize}),renderer_utils_setAttrs(path,{d:shape.size(d.size)(),transform:"translate(".concat(iconContainerSize/2,", ").concat(iconContainerSize/2,")")}),renderer_utils_setStyles(path,{fill:d.color}),renderer_utils_setStyles(svg,{width:"".concat(iconContainerSize,"px"),height:"".concat(iconContainerSize,"px")})}else el.html(d.value),d.className&&el.classed(d.className,!0),renderer_utils_setStyles(el,d.style);else el.html(d)})}}return this}},{key:"clear",value:function clear(){return this._model=null,this}}],[{key:"defaultConfig",value:function defaultConfig(){var config=default_config_defaultConfig.content;return config.classPrefix=default_config_defaultConfig.classPrefix,config}}]),Content}();function tooltip_defineProperties(target,props){for(var i=0;i0){var defConf=mergeRecursive({},this.constructor.defaultConfig());return this._config=mergeRecursive(defConf,arguments.length<=0?void 0:arguments[0]),this}return this._config}},{key:"addClass",value:function addClass(className){return this._tooltipContainer.classed(className,!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(name,data){var contentConfig=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},config=this.config(),classPrefix=config.classPrefix,contentClass=config.content.className,formatter=config.formatter,className=contentConfig.className||"".concat(classPrefix,"-").concat(contentClass,"-").concat(name),content=this._contents[name]=this._contents[name]||new content_Content,container=makeElement(this._contentContainer,"div",[contentConfig.order],className);container.attr("class","".concat(classPrefix,"-").concat(contentClass," ").concat(className)),function reorderContainers(parentContainer,className){parentContainer.selectAll(className).sort(function(a,b){return a-b})}(this._contentContainer,".".concat(classPrefix,"-").concat(contentClass));var contentConf=config.content;return contentConfig.classPrefix=this._config.classPrefix,content.config(contentConf),null===data?(content.clear(),container.remove(),delete this._contents[name]):(content.update({model:data,formatter:contentConfig.formatter||formatter}),content.context(this._context),content.render(container)),Object.keys(this._contents).length||this.hide(),this}},{key:"getContents",value:function getContents(){return Object.values(this._contents)}},{key:"position",value:function position(x,y){var conf=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object.keys(this._contents).length)return this.hide(),this;this.show();var target=this._target,repositionArrow=conf.repositionArrow;if(target&&repositionArrow){var node=this._tooltipContainer.node(),config=this._config,arrowDisabled=config.arrow.disabled,arrowWidth=arrowDisabled?0:config.arrow.size,arrowOrient=this._arrowOrientation,outsidePlot="left"===arrowOrient||"right"===arrowOrient?y+node.offsetHeight-arrowWidthtarget.y+target.height:x+node.offsetWidth-arrowWidthtarget.x+target.width;if(!arrowDisabled)if(outsidePlot){var path;this._tooltipArrow.style("display","none"),this._tooltipBackground.style("display","none"),this._tooltipConnectorContainer.style("display","block");var connector=this._tooltipConnectorContainer.selectAll("path").data([1]),enter=connector.enter().append("path");"left"===arrowOrient?path="M ".concat(x," ").concat(y+node.offsetHeight/2," L ").concat(target.x+target.width)+" ".concat(target.y+target.height/2):"right"===arrowOrient?path="M ".concat(x+node.offsetWidth," ").concat(y+node.offsetHeight/2)+" L ".concat(target.x," ").concat(target.y+target.height/2):"bottom"===arrowOrient&&(path="M ".concat(x+node.offsetWidth/2," ").concat(y+node.offsetHeight)+" L ".concat(target.x+target.width/2," ").concat(target.y)),enter.merge(connector).attr("d",path).style("display","block")}else{var arrowPos=helper_getArrowPos(arrowOrient,target,{x:x,y:y,boxHeight:node.offsetHeight,boxWidth:node.offsetWidth},this._config);helper_placeArrow(this,this._arrowOrientation,arrowPos),this._tooltipConnectorContainer.style("display","none")}}var offset=this._offset||{x:0,y:0};return this._tooltipContainer.style("left","".concat(offset.x+x,"px")).style("top","".concat(offset.y+y,"px")),this}},{key:"positionRelativeTo",value:function positionRelativeTo(dim){var obj,_this=this,tooltipConf=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},orientation=tooltipConf.orientation;if(this.show(),!dim)return this.hide(),this;var extent=this._extent,node=this._tooltipContainer.node();this._tooltipContainer.style("top","0px").style("left","0px");var offsetWidth=node.offsetWidth+2,offsetHeight=node.offsetHeight+2,config=this._config,offset=this._offset,arrowDisabled=config.arrow.disabled,arrowSize=arrowDisabled?0:config.arrow.size,draw=void 0===tooltipConf.draw||tooltipConf.draw,topSpace=dim.y,dimX=dim.x+dim.width+offset.x,rightSpace=extent.width-dimX,leftSpace=dim.x+offset.x-extent.x,positionTop=topSpace>offsetHeight+arrowSize,positionRight=rightSpace>=offsetWidth+arrowSize,positionLeft=leftSpace>=offsetWidth+arrowSize;return this._target=dim,orientation||(orientation=positionTop?"vertical":positionRight||positionLeft?"horizontal":"vertical"),"horizontal"===orientation?obj=function positionHorizontal(){var position,x=dim.x+dim.width,y=dim.y;return positionRight?(position="left",x+=arrowSize):positionLeft?(x=dim.x-offsetWidth,position="right",x-=arrowSize):(position="left",x+=arrowSize),dim.height1;hasMultipleMeasures&&content.push([icon,formattedRetinalValue]),measuresArr.forEach(function(measure){var measureIndex=fieldsConfig[measure].index,_fieldInf$measure=fieldInf[measure],dName=_fieldInf$measure.displayName,value=(0,_fieldInf$measure.fn)(valueArr[measureIndex]);content.push(hasMultipleMeasures?getKeyValue("".concat(dName).concat(separator),value,classPrefix,margin):[icon].concat(strategies_toConsumableArray(getKeyValue(formattedRetinalValue,value,classPrefix))))})}};for(var retField in retinalFields)_loop(retField)},strategies_buildTooltipData=function buildTooltipData(dataModel){var nestedDataObj,displayFormat,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},context=arguments.length>2?arguments[2]:void 0,fieldValues=[],_dataModel$getData=dataModel.getData(),data=_dataModel$getData.data,schema=_dataModel$getData.schema,fieldspace=dataModel.getFieldspace(),fieldsConfig=dataModel.getFieldsConfig(),_context$firebolt$con=context.firebolt.context.retinalFields(),color=_context$firebolt$con.color,shape=_context$firebolt$con.shape,size=_context$firebolt$con.size,detailFields=context.detailFields||[],dimensions=schema.filter(function(d){return d.type===dist_datamodel.FieldType.DIMENSION}),measures=schema.filter(function(d){return d.type===dist_datamodel.FieldType.MEASURE}),containsDetailField=!!common_utils_intersect(schema,detailFields).length,dataLen=data.length,dimensionMeasureMap=context.dimensionMeasureMap,axes=context.axes,fieldInf=function getFieldInf(schema,dataModel,context){var valueParser=context.valueParser,timeDiffs=context.timeDiffs,fieldsObj=dataModel.getFieldspace().fieldsObj(),defFormatter=strategies_formatters(null,null,valueParser)[dist_datamodel.DimensionSubtype.CATEGORICAL];return schema.reduce(function(inf,field){var subtype=field.subtype,name=field.name,type=field.type,interval=subtype===dist_datamodel.DimensionSubtype.TEMPORAL?timeDiffs[name]:0,nf=type===dist_datamodel.FieldType.MEASURE?fieldsObj[name].numberFormat():function(val){return val};return inf[name]={fn:defaultValue(strategies_formatters(nf,interval,valueParser)[subtype],defFormatter),displayName:"".concat(retrieveFieldDisplayName(dataModel,name))},inf},{})}(schema,dataModel,context);if(dataLen>1&&containsDetailField)fieldValues=function getTabularData(dataObj,fieldInf){var rows=[],data=dataObj.data,schema=dataObj.schema;return rows.push(schema.map(function(d){return fieldInf[d.name].displayName})),data.forEach(function(d){var row=[];schema.forEach(function(fieldObj,i){var value=fieldInf[fieldObj.name].fn(d[i]);row.push(value)}),rows.push(row)}),rows}({data:data,schema:schema,fieldspace:fieldspace},fieldInf),displayFormat="table";else{var retinalFields=[color.field,shape.field,size.field].reduce(function(acc,field){return field&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION&&(acc[field]=1),acc},{}),indices=dimensions.filter(function(field){return!retinalFields[field.name]}).map(function(dim){return fieldsConfig[dim.name].index}),allMeasures=strategies_toConsumableArray(_construct(Set,strategies_toConsumableArray(Object.values(dimensionMeasureMap)))),filteredMeasures=dataLen>1?measures.filter(function(d){return-1===allMeasures.indexOf(d.name)}):measures;nestedDataObj=common_utils_nestCollection({data:data,keys:indices});!function generateTooltipContent(nestedData){for(var index=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,content=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],classPrefix=config.classPrefix,separator=config.separator,i=0,len=nestedData.length;i2&&void 0!==arguments[2]?arguments[2]:{},totalHeight=0,totalWidth=0,dataModel=selectionSet.mergedEnter.model,context=this.firebolt.context,drawingInf=this.drawingContext();if(dataModel.isEmpty()||null===payload.criteria)return this.hide(options,null),this;var tooltips=this._tooltips,config=this.config(),boundBox={width:drawingInf.width,height:drawingInf.height},showInPosition=payload.showInPosition,pad=config.padding,dataModels=[],fragmented="fragmented"===config.mode,sourceInf=context.getSourceInfo(),fields=sourceInf.fields,showVertically=!!(!!fields.x[0]&&fields.x[0].type()===dist_datamodel.FieldType.DIMENSION),tooltipPos=payload.position,boxes=[],enter={},uids=dataModel.getData().uids;fragmented?dataModels.push.apply(dataModels,tooltip_toConsumableArray(uids.map(function(d){return dataModel.select(function(fieldsArr,i){return i===d},{saveChild:!1})}))):dataModels.push(dataModel);var target=payload.target,targetFields=[];if(target){targetFields=target[0]||[];for(var sourceFields=payload.sourceFields,indices=[],i=0,len=targetFields.length;idrawingInf.height:totalWidth>drawingInf.width)break;boxes.push({x:position.x,y:position.y,width:tooltipBoundBox.width,height:tooltipBoundBox.height,tooltip:tooltipInst})}}for(var key in tooltips)if(!enter[key]){var tooltip=tooltips[key];tooltip.content(payload.action,null),tooltip.getContents().length||(tooltip.remove(),delete tooltips[key])}return fragmented&&(!function spaceOutBoxes(boxes,extent,showVertically){var y,height,x,width,i,len=boxes.length,spaceOutIfOverlap=function spaceOutIfOverlap(firstBox,secondBox,opposite){x=firstBox.x,width=firstBox.width,y=firstBox.y,height=firstBox.height;var bottom=y+height,right=x+width;showVertically?(opposite?ysecondBox.y)&&(secondBox.y=opposite?firstBox.y-secondBox.height-5:bottom+5):(opposite?xsecondBox.x)&&(secondBox.x=opposite?firstBox.x-secondBox.width-5:right+5)};for(boxes.sort(function(a,b){return showVertically?a.y-b.y:a.x-b.x}),i=0,i=0;iextent.height||boxes[i].x+boxes[i].width>extent.width)for(showVertically?boxes[i].y-=boxes[i].height+boxes[i].y-extent.height:boxes[i].x-=boxes[i].width+boxes[i].x-extent.width,i=len-1;i>0;i--)spaceOutIfOverlap(boxes[i],boxes[i-1],!0)}(boxes,boundBox,showVertically),boxes.forEach(function(box){return box.tooltip.position(box.x,box.y,{repositionArrow:!0})})),this}},{key:"hide",value:function hide(options){var tooltips=this._tooltips;for(var key in tooltips)if({}.hasOwnProperty.call(tooltips,key)){var strategy=options.strategy||this._strategy;tooltips[key].content(strategy,null),tooltips[key].hide()}}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:5,offset:{x:0,y:0},highlightSummary:{dataTransform:function dataTransform(dt,fields){return fields?dt.project(fields,{saveChild:!1}):dt}},selectionSummary:{dataTransform:function dataTransform(dt,fields){var fieldspace=dt.getFieldspace(),dimensions=Object.keys(fieldspace.getDimension()),measures=Object.keys(fieldspace.getMeasure()),projectedFields=defaultValue(fields,measures.length?[measures[0]]:[]);return dt.project([].concat(tooltip_toConsumableArray(dimensions),tooltip_toConsumableArray(projectedFields)),{saveChild:!1})}}}}},{key:"formalName",value:function formalName(){return side_effects_TOOLTIP}}]),Tooltip}();__webpack_require__(9);function crossline_typeof(obj){return(crossline_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function crossline_toConsumableArray(arr){return function crossline_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{};return(0,this._strategies[options.strategy||this._strategy])(selectionSet,this,options.strategy||this._strategy),this}}],[{key:"formalName",value:function formalName(){return HIGHLIGHTER}},{key:"target",value:function target(){return"visual-unit"}}]),PlotHighlighter}();function side_effects_filter_typeof(obj){return(side_effects_filter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function side_effects_filter_defineProperties(target,props){for(var i=0;i67.5&&rotationNormalizer<=90||(yShift+=2*height),xShift=width,xShift=90===rotation?height:270===rotation?-height:0,orientation===axis_orientation_TOP?(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift+xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(-xShift+tickSize,"\n ").concat(-yShift-tickSize,") rotate(").concat(rotation,")"))):(xShift=fixedBaseline&&ticks[0]===d&&type===constants_LINEAR?xShift-xShift/2:xShift,renderer_utils_selectElement(this).attr("transform","translate(".concat(xShift-tickSize,"\n ").concat(yShift+tickSize,") rotate(").concat(rotation,")"))),renderer_utils_selectElement(this).transition().duration(1e3).text(datum)}),tickText},axis_renderer_changeTickOrientation=function changeTickOrientation(selectContainer,axisInstance,tickSize){var _smartTicks=axisInstance._smartTicks,config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,orientation=config.orientation,classPrefix=config.classPrefix,labels=renderConfig.labels,rotation=labels.rotation,isSmartTicks=labels.smartTicks,tickText=selectContainer.selectAll(".tick text");if(tickText.selectAll("tspan").remove(),!rotation||"top"!==orientation&&"bottom"!==orientation)if(rotation||isSmartTicks){if(tickText.text(""),"top"===orientation||"bottom"===orientation)tickText.attr("y",0).attr("x",0).attr("transform","").text(""),makeElement(tickText,"tspan",function(d,i){return _smartTicks[i]?_smartTicks[i].lines:[]},"".concat(classPrefix,"-smart-text")).attr("dy","0").style("opacity","0").transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).attr("dy",function(d,i){return"bottom"===orientation||0!==i?_smartTicks[0].oriTextHeight:-_smartTicks[0].oriTextHeight*(_smartTicks[0].lines.length-1)-tickSize}).style("opacity",1).text(function(e){return e}).attr("x",0);else makeElement(tickText,"tspan",function(d,i){return _smartTicks[i].lines},"".concat(classPrefix,"-smart-text")).text(function(e){return e})}else tickText.attr("transform","");else axis_renderer_rotateAxis(axisInstance,tickText,labelManager);return tickText},axis_renderer_setFixedBaseline=function setFixedBaseline(axisInstance){var fixedBaseline=axisInstance.config().fixedBaseline,showInnerTicks=axisInstance.renderConfig().showInnerTicks,domain=axisInstance.domain();fixedBaseline&&domain.length&&showInnerTicks&&axisInstance.setFixedBaseline()},axis_renderer_setAxisNamePos=function setAxisNamePos(textNode,orientation,measures){var axisNameHeight=measures.axisNameHeight,availableSpace=measures.availableSpace;switch(orientation){case axis_orientation_LEFT:textNode.attr("transform","translate(".concat(-(availableSpace.width-axisNameHeight),",").concat(availableSpace.height/2,")rotate(-90)"));break;case axis_orientation_RIGHT:textNode.attr("transform","translate(".concat(availableSpace.width-axisNameHeight,",").concat(availableSpace.height/2,")rotate(90)"));break;case axis_orientation_TOP:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(-availableSpace.height+axisNameHeight,")"));break;case axis_orientation_BOTTOM:textNode.attr("transform","translate(".concat(availableSpace.width/2,",").concat(availableSpace.height-axisNameHeight/2,")"))}return textNode};var _rangeAdjustmentMap,longestWord={month:"September",quarter:"October",halfYearly:"July",year:9999,day:"September",hour:"24 AM",mintues:"60:60",seconds:":60",week:"Wed 31"},skip_ticks_tickIntervals=[[1,1,"milliseconds",src_millisecond.every(1),"seconds"],[1,1e3,"seconds",src_second.every(1),"seconds"],[5,5e3,"five seconds",src_second.every(5),"seconds"],[10,1e4,"ten seconds",src_second.every(10),"seconds"],[15,15e3,"fifteen seconds",src_second.every(15),"seconds"],[30,3e4,"thirty seconds",src_second.every(30),"seconds"],[1,6e4,"minute",src_minute.every(1),"minutes"],[5,3e5,"five minutes",src_minute.every(5),"minutes"],[10,6e5,"ten minutes",src_minute.every(10),"minutes"],[15,9e5,"fifteen minutes",src_minute.every(15),"minutes"],[30,18e5,"thirty minutes",src_minute.every(30),"minutes"],[1,36e5,"hour",src_hour.every(1),"hour"],[3,108e5,"three hours",src_hour.every(3),"hour"],[6,216e5,"six hours",src_hour.every(6),"hour"],[12,432e5,"twelve hours",src_hour.every(12),"hour"],[1,864e5,"daily",src_day.every(1),"day"],[1,6048e5,"weekly",sunday.every(1),"week"],[1,2592e6,"monthly",src_month.every(1),"week"],[3,7776e6,"quaterly",src_month.every(3),"quarter"],[6,15552e6,"half yearly",src_month.every(6),"halfYearly"],[1,31536e6,"yearly",src_year.every(1),"year"],[2,63072e6,"2 year",src_year.every(2),"year"],[3,94608e6,"3 year",src_year.every(3),"year"],[5,15768e7,"5 year",src_year.every(5),"year"],[10,31536e7,"decade",src_year.every(10),"year"],[100,31536e8,"century",src_year.every(100),"year"],[1e3,31536e9,"millenium",src_year.every(1e3),"year"]],getTickIntervalFnBasedOnNumberOfTicks=function getTickIntervalFnBasedOnNumberOfTicks(interval,count,context){for(var possibleTickLevelIndex=skip_ticks_tickIntervals.length-1,maxPossibleTicks=1,tickIntervalLevelInfo=null,i=skip_ticks_tickIntervals.length-1;i>=0;i--){var tickIntervalInfo=skip_ticks_tickIntervals[i],numOfPossibleTicks=Math.floor(interval/tickIntervalInfo[1]);numOfPossibleTicks<=count&&(possibleTickLevelIndex=i,maxPossibleTicks=numOfPossibleTicks)}return tickIntervalLevelInfo=skip_ticks_tickIntervals[possibleTickLevelIndex],function getActualTickInterval(context,noOfTicks){var minWidthBetweenTicks=context._minTickDistance.width,width=context.availableSpace().width;return Math.floor((width-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)}(context,maxPossibleTicks)=numOfTicksAccordingToMinDiff&&(actualNumberOfTicks=numOfTicksAccordingToMinDiff),getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval,actualNumberOfTicks,context)}(context,maxTicks));context.renderConfig({tickValues:ticks})},adjustHorizontalRange=function adjustHorizontalRange(range,diff){return range[0]+=diff,range[1]-=diff,range},adjustVerticalRange=function adjustVerticalRange(range,diff){return range[0]-=diff,range[1]+=diff,range},rangeAdjustmentMap=(space_setter_defineProperty(_rangeAdjustmentMap={},axis_orientation_TOP,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_BOTTOM,adjustHorizontalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_LEFT,adjustVerticalRange),space_setter_defineProperty(_rangeAdjustmentMap,axis_orientation_RIGHT,adjustVerticalRange),_rangeAdjustmentMap),setAxisRange=function setAxisRange(context,type,rangeBounds,offset){context.range(rangeBounds),offset&&context.renderConfig(space_setter_defineProperty({},"".concat(type,"Offset"),offset))},getAdjustedRange=function getAdjustedRange(minDiff,range,domain,config){var orientation=config.orientation,adjustRange=config.adjustRange,diff=function getAxisOffset(timeDiff,range,domain){var avWidth=Math.abs(range[1]-range[0]),bars=avWidth/(avWidth/(domain[1]-domain[0])*timeDiff);return(avWidth-avWidth/(bars+1)*bars)/2}(minDiff,range,domain);return adjustRange?rangeAdjustmentMap[orientation](range,diff):range},space_setter_spaceSetter=function spaceSetter(context,spaceConfig){var _ref,tickInterval,heightForTicks,config=context.config(),_context$availableSpa2=context.availableSpace(),availWidth=_context$availableSpa2.width,availHeight=_context$availableSpa2.height,padding=_context$availableSpa2.padding,top=padding.top,left=padding.left,bottom=padding.bottom,right=padding.right,isOffset=spaceConfig.isOffset,_context$renderConfig2=context.renderConfig(),showAxisName=_context$renderConfig2.showAxisName,labels=_context$renderConfig2.labels,rotation=labels.rotation,fixedBaseline=config.fixedBaseline,axisNamePadding=config.axisNamePadding,tickValues=config.tickValues,_context$getAxisDimen=context.getAxisDimensions(),tickDimensions=_context$getAxisDimen.tickDimensions,allTickDimensions=_context$getAxisDimen.allTickDimensions,axisNameDimensions=_context$getAxisDimen.axisNameDimensions,tickSize=_context$getAxisDimen.tickSize,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width,namePadding=showAxisName?axisNamePadding:0,labelConfig={smartTicks:!0,rotation:labels.rotation},minTickDistance=context._minTickDistance,minTickSpace=context._minTickSpace,minDiff=context._minDiff,domain=context.domain(),axisNameHeight=axisNameDimensions.height,minWidthBetweenTicks=minTickDistance.width,minTickWidth=minTickSpace.width,minTickHeight=minTickSpace.height;return space_setter_defineProperty(_ref={},TIME,{x:function x(){!tickValues&&context.applyTickSkipping();var noOfTicks=context.getTickValues().length;heightForTicks=availHeight-axisNameHeight-tickSize-namePadding,(tickInterval=(availWidth-(noOfTicks-1)*minWidthBetweenTicks)/noOfTicks)axisNameHeight?(labelConfig.rotation=null,context.renderConfig({showInnerTicks:!0,showAxisName:!0})):(labelConfig.rotation=-90,context.renderConfig({showInnerTicks:!0,showAxisName:!1}))),availHeight0&&void 0!==arguments[0]?arguments[0]:0,width=arguments.length>1?arguments[1]:void 0,height=arguments.length>2?arguments[2]:void 0,rotatedHeight=height,rotatedWidth=width;if(rotation){var angle=(rotation||0)*Math.PI/180;rotatedWidth=Math.abs(height*Math.sin(angle))+Math.abs(width*Math.cos(angle)),rotatedHeight=Math.abs(width*Math.sin(angle))+Math.abs(height*Math.cos(angle))}return{width:rotatedWidth,height:rotatedHeight}},helper_setOffset=function setOffset(context){var x=0,y=0,logicalSpace=context.logicalSpace(),config=context.config(),orientation=config.orientation,xOffset=config.xOffset,yOffset=config.yOffset;orientation===axis_orientation_LEFT&&(x=void 0===xOffset?logicalSpace.width:xOffset),orientation===axis_orientation_TOP&&(y=void 0===yOffset?logicalSpace.height:yOffset),context.renderConfig({xOffset:x,yOffset:y})},getAxisComponentDimensions=function getAxisComponentDimensions(context){var axisTicks,largestTick="",largestTickDimensions={width:0,height:0},smartTick={},allTickDimensions=[],scale=context.scale(),_context$renderConfig=context.renderConfig(),tickValues=_context$renderConfig.tickValues,showAxisName=_context$renderConfig.showAxisName,name=context.config().name,labelManager=context.dependencies().labelManager,labelFunc=scale.ticks||scale.quantile||scale.domain;return labelManager.setStyle(context._tickLabelStyle),axisTicks=(axisTicks=tickValues||labelFunc()).map(function(originalLabel,i){var label=context.getFormattedText(originalLabel,i,axisTicks),tickDimensions=labelManager.getOriSize(label);return allTickDimensions.push(tickDimensions),tickDimensions.width>largestTickDimensions.width&&(largestTick=label,smartTick=context.smartTicks()?context.smartTicks()[i]:{},largestTickDimensions=tickDimensions,smartTick=smartTick||tickDimensions),label}),labelManager.setStyle(context._axisNameStyle),{axisNameDimensions:showAxisName?labelManager.getOriSize(name):{width:0,height:0},largestTick:largestTick,largestTickDimensions:largestTickDimensions,allTickDimensions:allTickDimensions,axisTicks:axisTicks,smartTick:smartTick,tickSize:context.getTickSize()}},getHorizontalAxisSpace=function getHorizontalAxisSpace(context,axisDimensions,range){var width,height,domain=context.domain(),minTickDistance=context._minTickDistance.width,tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config2=context.config(),axisNamePadding=_context$config2.axisNamePadding,tickValues=_context$config2.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height,tickDimWidth=tickDimensions.width;if(width=range&&range.length?range[1]-range[0]:3*(tickDimWidth+minTickDistance),height=0,tickValues){var minTickDiff=context.getMinTickDifference(),_ref=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];width=(_ref[1]-_ref[0])/Math.abs(minTickDiff)*(tickDimWidth+context._minTickDistance.width)}return height=range&&range.length?tickDimHeight:Math.max(tickDimWidth,tickDimHeight),{width:width,height:height+=(showAxisName?axisDimHeight+axisNamePadding:0)+tickSize}},getVerticalAxisSpace=function getVerticalAxisSpace(context,axisDimensions){var height,width,domain=context.domain(),tickSize=axisDimensions.tickSize,tickDimensions=axisDimensions.tickDimensions,axisNameDimensions=axisDimensions.axisNameDimensions,_context$config3=context.config(),axisNamePadding=_context$config3.axisNamePadding,tickValues=_context$config3.tickValues,showAxisName=context.renderConfig().showAxisName,axisDimHeight=axisNameDimensions.height,tickDimHeight=tickDimensions.height;if(height=0,width=tickDimensions.width,tickValues){var minTickDiff=context.getMinTickDifference(),_ref2=[Math.min.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain))),Math.max.apply(Math,cartesian_axis_helper_toConsumableArray(tickValues).concat(cartesian_axis_helper_toConsumableArray(domain)))];height=(_ref2[1]-_ref2[0])/Math.abs(minTickDiff)*tickDimHeight}return{height:height,width:width+=(showAxisName?axisDimHeight:0)+tickSize+axisNamePadding}},helper_calculateBandSpace=function calculateBandSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,show=context.renderConfig().show,largestTickDimensions=axisDimensions.largestTickDimensions,axisTicks=axisDimensions.axisTicks,allTickDimensions=axisDimensions.allTickDimensions,largestDimHeight=largestTickDimensions.height,minTickWidth=context._minTickDistance.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa=getHorizontalAxisSpace(context,axisDimensions,range),_width=_getHorizontalAxisSpa.width,_height=_getHorizontalAxisSpa.height;return range&&range.length||(_width=allTickDimensions.reduce(function(t,n){return t+Math.min(n.width,n.height)+minTickWidth},0)),!1===show&&(_height=0,_width=0),{width:_width,height:_height}}var _getVerticalAxisSpace=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace.width,height=_getVerticalAxisSpace.height;return height&&0!==height||(height=axisTicks.length*(largestDimHeight+context._minTickDistance.height)),!1===show&&(width=0),{width:width,height:height}},helper_getValidDomain=function getValidDomain(context,domain){var userDom=context.config().domain;return userDom&&(domain=userDom),defaultValue(domain,[])},setContinousAxisDomain=function setContinousAxisDomain(context,domain){var nice=context.config().nice,scale=context.scale.bind(context);scale().domain(domain),nice&&scale().nice(),context._domain=scale().domain()},props_PROPS={availableSpace:{},axisDimensions:{},axisComponentDimensions:{},config:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._config||{}),mockedOldConfig=mergeRecursive({},oldConfig);(value=mergeRecursive(mockedOldConfig,value)).axisNamePadding=Math.max(value.axisNamePadding,0);var shouldAxesScaleUpdate=function hasAxesConfigChanged(){var obj=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},obj1=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},properties=arguments.length>2?arguments[2]:void 0;return!(!Object.keys(obj).length||!Object.keys(obj1).length)&&properties.some(function(key){return obj[key]!==obj1[key]})}(value,oldConfig,["interpolator","exponent","base","orientation"]),tickFormatter=context.sanitizeTickFormatter(value);return shouldAxesScaleUpdate&&(context._scale=context.createScale(value),context._axis=context.createAxis(value)),context._tickFormatter=function(ticks){return tickFormatter(ticks)},context.resetRenderConfig(value),value}},renderConfig:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._renderConfig||{});return value=mergeRecursive(oldConfig,value)}},logicalSpace:{},mount:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.logicalSpace(null),value}},smartTicks:{},tickSize:{},maxTickSpaces:{sanitization:function sanitization(context,value){var oldConfig=Object.assign({},context._maxTickSpaces||{});return value=mergeRecursive(oldConfig,value)}},valueParser:{defaultValue:function defaultValue(val){return val}}};function simple_axis_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function simple_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:0,height=arguments.length>1?arguments[1]:void 0,padding=arguments.length>2?arguments[2]:void 0,isOffset=arguments.length>3?arguments[3]:void 0,labelConfig={},orientation=this.config().orientation;this.availableSpace({width:width,height:height,padding:padding});var type=this.constructor.type();return labelConfig=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?space_setter_spaceSetter(this,{isOffset:isOffset})[type].x():space_setter_spaceSetter(this,{isOffset:isOffset})[type].y(),this.renderConfig({labels:labelConfig}),this.setTickConfig(),this.setSmartAxisName(),this}},{key:"setSmartAxisName",value:function setSmartAxisName(){var _this$config2=this.config(),orientation=_this$config2.orientation,name=_this$config2.name,dimType=orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM?"width":"height",widthDim=this.availableSpace()[dimType],labelManager=this.dependencies().labelManager;return labelManager.setStyle(this._axisNameStyle),this.renderConfig({smartAxisName:function getSmartAxisName(name,width,labelManager){var oriSize=labelManager.getOriSize(name);return labelManager.useEllipsesOnOverflow(!0),labelManager.getSmartText(name,width,oriSize.height,!0)}(name,widthDim,labelManager)}),this}},{key:"setTickConfig",value:function setTickConfig(){return this}},{key:"getScaleValue",value:function getScaleValue(domainVal){if(null!==domainVal&&void 0!==domainVal)return this.scale()(domainVal)}},{key:"getTickSize",value:function getTickSize(){return this.axis().tickSize()}},{key:"getAxisDimensions",value:function getAxisDimensions(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return this.axisDimensions(function computeAxisDimensions(context){var tickDimensions={},labels=context.renderConfig().labels,smartTicks=labels.smartTicks,rotation=labels.rotation,_getAxisComponentDime=getAxisComponentDimensions(context),largestTickDimensions=_getAxisComponentDime.largestTickDimensions,axisTicks=_getAxisComponentDime.axisTicks,smartTick=_getAxisComponentDime.smartTick,axisNameDimensions=_getAxisComponentDime.axisNameDimensions,allTickDimensions=_getAxisComponentDime.allTickDimensions,tickSize=_getAxisComponentDime.tickSize,labelHeight=largestTickDimensions.height,labelWidth=largestTickDimensions.width;return 0===context.domain().length?null:(tickDimensions=getRotatedSpaces(rotation,(tickDimensions=smartTicks?smartTick:{width:labelWidth,height:labelHeight}).width,tickDimensions.height),0===tickSize&&(tickDimensions={width:0,height:0}),{allTickDimensions:allTickDimensions,tickSize:tickSize,tickDimensions:tickDimensions,axisNameDimensions:axisNameDimensions,largestTickDimensions:largestTickDimensions,axisTicks:axisTicks})}.apply(void 0,[this].concat(params))),this.axisDimensions()}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()||this.logicalSpace(function calculateContinousSpace(context){var range=context.range(),axisDimensions=context.getAxisDimensions(),orientation=context.config().orientation,_context$renderConfig6=context.renderConfig(),show=_context$renderConfig6.show,showAxisName=_context$renderConfig6.showAxisName,axisNameDimensions=axisDimensions.axisNameDimensions;if(!1===show)return{width:0,height:0};var axisNameWidth=axisNameDimensions.width;if(orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM){var _getHorizontalAxisSpa2=getHorizontalAxisSpace(context,axisDimensions,range),_width2=_getHorizontalAxisSpa2.width,_height2=_getHorizontalAxisSpa2.height;return{width:Math.max(_width2,axisNameWidth),height:_height2}}var _getVerticalAxisSpace2=getVerticalAxisSpace(context,axisDimensions),width=_getVerticalAxisSpace2.width,height=_getVerticalAxisSpace2.height;return{width:width,height:Math.max(height,showAxisName?axisNameWidth:0)}}(this)),helper_setOffset(this),this.logicalSpace()}},{key:"invert",value:function invert(value){return this.scale().invert(value)}},{key:"getNearestRange",value:function getNearestRange(v1,v2){return[v1,v2]}},{key:"invertExtent",value:function invertExtent(v1,v2){return[this.invert(v1),this.invert(v2)]}},{key:"getMinTickDifference",value:function getMinTickDifference(){return this.domain()}},{key:"getFormattedTickValues",value:function getFormattedTickValues(tickValues){return tickValues}},{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:"render",value:function render(){return this.mount()&&(this.setTickConfig(),function renderAxis(axisInstance){var config=axisInstance.config(),renderConfig=axisInstance.renderConfig(),labelManager=axisInstance.dependencies().labelManager,mount=axisInstance.mount(),range=axisInstance.range(),axis=axisInstance.axis(),scale=axisInstance.scale(),tickLabelStyle=axisInstance._tickLabelStyle,axisTickFormatter=axisInstance._tickFormatter,orientation=config.orientation,axisNamePadding=config.axisNamePadding,className=config.className,id=config.id,classPrefix=config.classPrefix,show=renderConfig.show,xOffset=renderConfig.xOffset,yOffset=renderConfig.yOffset,showAxisName=renderConfig.showAxisName,labels=renderConfig.labels,smartAxisName=renderConfig.smartAxisName;if(show){var tickSize=axisInstance.getTickSize(),selectContainer=makeElement(renderer_utils_selectElement(mount),"g",[axisInstance],"".concat(className),{},function(key){return key.config().id});labelManager.setStyle(tickLabelStyle);var labelFunc=scale.ticks||scale.quantile||scale.domain,ticks=axis.tickValues()||labelFunc();axis.tickFormat(axisTickFormatter(ticks));var availableSpace=Math.abs(range[0]-range[1]),labelProps=axisInstance.axisComponentDimensions().largestTickDimensions;selectContainer.attr("transform","translate(".concat(xOffset,",").concat(yOffset,")")),axis_renderer_setFixedBaseline(axisInstance),!1===labels.smartTicks||0===tickSize?selectContainer.transition().duration(1e3).on("end",axisInstance.registerAnimationDoneHook()).call(axis):selectContainer.call(axis),selectContainer.selectAll(".tick").classed("".concat(classPrefix,"-ticks"),!0),selectContainer.selectAll(".tick line").classed("".concat(classPrefix,"-tick-lines"),!0),selectContainer.selectAll(".tick text").classed("".concat(classPrefix,"-ticks"),!0).classed("".concat(classPrefix,"-ticks-").concat(id),!0),axis_renderer_changeTickOrientation(selectContainer,axisInstance,tickSize);var textNode=makeElement(selectContainer,"text",[smartAxisName],"".concat(classPrefix,"-axis-name")).attr("text-anchor","middle").classed("".concat(classPrefix,"-axis-name-").concat(id),!0).text(function(d){return d.text});textNode.classed(HIDDEN,!showAxisName);var labelOffset=availableSpace/2,measures={labelProps:labelProps,tickSize:tickSize,axisNamePadding:axisNamePadding,axisNameHeight:smartAxisName.height,yOffset:yOffset,xOffset:xOffset,labelOffset:labelOffset,availableSpace:axisInstance.availableSpace()};axis_renderer_setAxisNamePos(textNode,orientation,measures)}}(this)),this}},{key:"remove",value:function remove(){return renderer_utils_selectElement(this.mount()).remove(),this}},{key:"unsubscribe",value:function unsubscribe(){return this}},{key:"isReverse",value:function isReverse(){var range=this.range();return range[0]>range[1]}},{key:"getPixelToValueRatio",value:function getPixelToValueRatio(){var scale=this.scale(),range=scale.range(),domain=scale.domain();return Math.abs(range[1]-range[0])/(domain[1]-domain[0])}},{key:"animationDone",value:function animationDone(){return Promise.all(this._animationDonePromises)}},{key:"registerAnimationDoneHook",value:function registerAnimationDoneHook(){var resolveFn,promise=new Promise(function(resolve){resolveFn=resolve});return this._animationDonePromises.push(promise),function(){resolveFn()}}},{key:"id",get:function get(){return this._id}}],[{key:"defaultConfig",value:function defaultConfig(){return cartesian_axis_default_config_defaultConfig}}]),SimpleAxis}();function linear_defineProperties(target,props){for(var i=0;iavailableSpace&&(numberOfValues=Math.floor(availableSpace/(labelDim+minTickDistance))),numberOfTicks=numberOfTicks||numberOfValues,numberOfValues=Math.min(numberOfTicks,Math.max(2,numberOfValues)),(tickValues=axis.scale().ticks(numberOfValues)).length>numberOfValues&&(tickValues=tickValues.filter(function(e,i){return i%2==0})),2===numberOfValues&&(tickValues=[(tickValues=axis.scale().ticks(10))[0],tickValues[tickValues.length-1]]),tickValues}(availableSpace,labelProps[orientation===axis_orientation_BOTTOM||orientation===axis_orientation_TOP?"width":"height"],axis,this)}},{key:"getMinTickDifference",value:function getMinTickDifference(){return getSmallestDiff(this.renderConfig().tickValues)}},{key:"setFixedBaseline",value:function setFixedBaseline(tickText){var orientation=this.config().orientation,rotation=this.renderConfig().labels.rotation,axis=this.axis(),ticks=axis.tickValues(),smartTicks=this.smartTicks();if(smartTicks&&smartTicks.length){var _this$smartTicks$=this.smartTicks()[0],width=_this$smartTicks$.width,height=_this$smartTicks$.height;axis.tickTransform(function(d){if(d===ticks[0]){if(orientation===axis_orientation_LEFT||orientation===axis_orientation_RIGHT)return"translate(0, -".concat(height/3,"px)");if((orientation===axis_orientation_TOP||orientation===axis_orientation_BOTTOM)&&!rotation)return"translate(".concat(width/2,"px, ",0,"px)")}return""})}return tickText}}],[{key:"type",value:function type(){return LINEAR}}]),ContinousAxis}();function band_axis_typeof(obj){return(band_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function band_axis_defineProperties(target,props){for(var i=0;irange[1],extent=this.invertExtent(v1,v2);return[scale(reverse?extent[extent.length-1]:extent[0]),scale(reverse?extent[0]:extent[extent.length-1])+scale.bandwidth()]}}],[{key:"type",value:function type(){return BAND}}]),BandAxis}();function time_axis_typeof(obj){return(time_axis_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function time_axis_defineProperties(target,props){for(var i=0;i1?config.range:[DEFAULT_GRADIENT_COLOR].concat(props_toConsumableArray(config.range)));var oldConfig=mergeRecursive(defCon,context.config()),newConfig=mergeRecursive(oldConfig,config);return newConfig.range instanceof Array&&(newConfig.range=newConfig.range.map(function(e,i){return props_getActualHslColor(e,palette[i])}),newConfig.stops=config.stops||newConfig.range.length),newConfig.value=props_getActualHslColor(newConfig.value,newConfig.value),newConfig}},domain:{},scale:{},uniqueValues:{}},helper_treatNullMeasures=function treatNullMeasures(domainVal,scaledVal,minDomainScaledVal){return domainVal instanceof src_InvalidAwareTypes?minDomainScaledVal:scaledVal},helper_resolveAxisConfig=function resolveAxisConfig(propVal,defaultVal,context){switch(getObjProp(propVal,"constructor")){case Function:return propVal(defaultVal,context);case Array:return propVal;default:return defaultVal}};function color_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function color_strategy_toConsumableArray(arr){return function color_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);iMath.min(range.length,18))for(var interpolator=common_utils_piecewiseInterpolator()(function hslInterpolator(){return hslLong}(),range.map(function(e){return props_getHslString(e)})),i=0;i0&&void 0!==arguments[0]?arguments[0]:[];if(domain.length){var scale=this.scale(),range=scale.range?scale.range():null,scaleInfo=this._colorStrategy.domainRange()(domain,this.config().stops,range);this.domain(scaleInfo.domain),scaleInfo.range&&this.scale().range(scaleInfo.range),this.uniqueValues(scaleInfo.uniqueVals),this.scale().domain(scaleInfo.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(color,transformationArr){var h=360*color[0],s=100*color[1],l=100*color[2],a=color[3]||1,newH=h+transformationArr[0],newS=s+transformationArr[1],newL=l+transformationArr[2],newA=a+transformationArr[3]||0;return{color:"hsla(".concat(newH,",").concat(newS,"%,").concat(newL,"%,").concat(newA,")"),hsla:[newH/360,newS/100,newL/100,newA]}}},{key:"id",value:function id(){return this._id}},{key:"getHslArray",value:function getHslArray(color){return props_getActualHslColor(color)}}],[{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIG}},{key:"type",value:function type(){return"color"}}]),ColorAxis}(),defaults_DEFAULT_CONFIG={value:36,range:[36,1e3]};function size_strategy_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function size_strategy_toConsumableArray(arr){return function size_strategy_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0&&void 0!==arguments[0]?arguments[0]:0,value=this.config().value,scale=this.scale(),domain=this.domain()||[1,1];return scale&&domain[0]!==domain[1]?this._sizeStrategy.range(domainVal,scale,this.domain(),this.uniqueValues()):value}},{key:"updateDomain",value:function updateDomain(domain){if(domain){var domainInfo=(0,this._sizeStrategy.domain)(domain,this.config().intervals);this.domain(domainInfo.domain),this.uniqueValues(domainInfo.uniqueVals),this.scale().domain(domainInfo.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 defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"size"}}]),SizeAxis}(),shape_axis_defaults_DEFAULT_CONFIG={generator:null,value:"circle",range:["circle","diamond","star","cross","square","wye","triangle"]},shape_axis_props_PROPS={config:{},domain:{},scale:{},uniqueValues:{},generator:{}};function shape_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:[];return domain.length&&(this.uniqueValues(domain),this.domain(domain),this.scale().domain(domain),this.config().generator&&(this._generatedShapes=function shapeGenerator(domain,generatorFn){var generatedShapes={};return domain.forEach(function(value){generatedShapes[value]=generatorFn(value)}),generatedShapes}(domain,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 shape_axis_defaults_DEFAULT_CONFIG}},{key:"type",value:function type(){return"shape"}}]),ShapeAxis}(),polar_axis_props_PROPS={config:{sanitization:function sanitization(context,config){return mergeRecursive(context.config(),config)},preset:function preset(context,config){var range=config.range,domain=config.domain;range&&context.range(range),domain&&context.domain(domain)}},domain:{},range:{}};function angle_axis_slicedToArray(arr,i){return function angle_axis_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function angle_axis_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function angle_axis_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function angle_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function angle_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,AngleAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._range=[0,360],this._angleFn=angle_axis_pie().value(function(d){return"string"==typeof d?1:d}).sortValues(null),this._angleValues={}}return function angle_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&angle_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&angle_axis_defineProperties(Constructor,staticProps),Constructor}(AngleAxis,[{key:"createScale",value:function createScale(strategy){var range=this.config().range;return scale_creator_createScale({type:strategy.scale,range:range})}},{key:"getScaleValue",value:function getScaleValue(domainVal){return this._angleValues[domainVal]}},{key:"padAngle",value:function padAngle(angle){this._angleFn=this._angleFn.padAngle(angle)}},{key:"domain",value:function domain(){for(var _len=arguments.length,domainVal=new Array(_len),_key=0;_key<_len;_key++)domainVal[_key]=arguments[_key];if(domainVal.length){var customDomain=this.config().domain,domain=domainVal[0].length?domainVal[0]:DEFAULT_ANGLE_DOMAIN;return this._domain=helper_resolveAxisConfig(customDomain,domain,this),createAngleValues(this),this}return this._domain}},{key:"range",value:function range(){if(arguments.length){var customRange=this.config().range;this._range=helper_resolveAxisConfig(customRange,arguments.length<=0?void 0:arguments[0],this);var domain=this.domain(),_this$_range=angle_axis_slicedToArray(this._range,2),startAngle=_this$_range[0],endAngle=_this$_range[1];return this._angleFn.startAngle(startAngle/180*Math.PI).endAngle(Math.PI*endAngle/180),domain&&domain.length&&createAngleValues(this),this}return this._range}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),AngleAxis}(),X="x",Y="y",MEASURE="measure",ROWS="rows",COLUMNS="columns",COL="col",ROW="row",enums_constants_COLOR="color",enums_constants_SHAPE="shape",enums_constants_SIZE="size",enums_constants_LINEAR="linear",constants_LEFT="left",constants_RIGHT="right",CELL="cell",X_AXES="xAxes",Y_AXES="yAxes",ENTRY_CELLS="entryCell",EXIT_CELLS="exitCell",enums_constants_RADIUS="radius",enums_constants_ANGLE="angle",ANGLE0="angle0",PRIMARY="Primary",SECONDARY="Secondary";function radius_axis_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{};!function radius_axis_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RadiusAxis),this._id=getUniqueId(),generateGetterSetters(this,polar_axis_props_PROPS),this._range=[],this._radiusFactor=1,this._config=mergeRecursive({},this.constructor.defaultConfig()),this.config(config),this._scale=this.createScale({scale:enums_constants_LINEAR})}return function radius_axis_createClass(Constructor,protoProps,staticProps){return protoProps&&radius_axis_defineProperties(Constructor.prototype,protoProps),staticProps&&radius_axis_defineProperties(Constructor,staticProps),Constructor}(RadiusAxis,[{key:"config",value:function config(){if(arguments.length){var config=mergeRecursive(this.config(),arguments.length<=0?void 0:arguments[0]);return this._config=config,this}return this._config}},{key:"createScale",value:function createScale(strategy){return scale_creator_createScale({type:strategy.scale,range:this.range()})}},{key:"domain",value:function domain(){if(arguments.length){var customDomain=this.config().domain,domain=helper_resolveAxisConfig(customDomain,arguments.length<=0?void 0:arguments[0],this);domain=sanitizeDomainWhenEqual(domain),this._scale.domain(domain),this._domain=domain,adjustDomain(this)}return this._domain}},{key:"getInnerRadius",value:function getInnerRadius(domainVal){return void 0===domainVal?this.range()[0]:this._scale(domainVal)}},{key:"getOuterRadius",value:function getOuterRadius(domainVal){return void 0===domainVal?this.range()[1]:this._scale(domainVal)*this._radiusFactor}},{key:"range",value:function range(){for(var _len=arguments.length,_range=new Array(_len),_key=0;_key<_len;_key++)_range[_key]=arguments[_key];if(_range.length){var _this$config2=this.config(),padding=_this$config2.padding,customRange=_this$config2.range,sanitizedRange=_range[0].map(function(v,i){return v+(i?-padding[i]:padding[i])}),rangeVal=helper_resolveAxisConfig(customRange,sanitizedRange,this);this._range=rangeVal,this._scale.range(rangeVal),adjustDomain(this)}return this._range}},{key:"setRadiusFactor",value:function setRadiusFactor(val){return this._radiusFactor=val,this}}],[{key:"defaultConfig",value:function defaultConfig(){return{padding:[0,1],minOuterRadius:10}}}]),RadiusAxis}();function data_type_scale_map_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DATA_TYPES_MEASURE="measure",DATA_TYPES_TEMPORAL="temporal",group_transform=(data_type_scale_map_defineProperty(_dataTypeScaleMap={},"dimension",BAND),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_MEASURE,LINEAR),data_type_scale_map_defineProperty(_dataTypeScaleMap,DATA_TYPES_TEMPORAL,TIME),function(schema,data,config){var groupBy=config.groupBy instanceof Array?config.groupBy:[config.groupBy],groupByIndices=groupBy.map(function(fieldName){return schema.findIndex(function(d){return d.name===fieldName})});if(void 0!==groupByIndices.find(function(d){return-1===d}))throw new Error("Groupby field ".concat(groupBy," not found in schema"));var groupedData=common_utils_nestCollection({keys:groupByIndices,data:data});return groupedData.forEach(function(d){var key=d.key;src_InvalidAwareTypes.isInvalid(key)&&(d.key=src_InvalidAwareTypes.getInvalidType(key))}),groupedData});var _transformMap;function transform_factory_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var transformMap=(transform_factory_defineProperty(_transformMap={},"identity",function identityTransform(schema,data,config){return data}),transform_factory_defineProperty(_transformMap,"group",group_transform),transform_factory_defineProperty(_transformMap,"stack",function(schema,data,config){var uniqueField=config.uniqueField,valueField=config.value,groupBy=config.groupBy,sort=config.sort||"descending",normalizedData=function normalizeData(data,schema,valueField,uniqueField,groupBy){var groupedData=group_transform(schema,data,{groupBy:uniqueField}),uniqueFieldIndex=schema.findIndex(function(d){return d.name===uniqueField}),valueFieldIndex=schema.findIndex(function(d){return d.name===valueField}),seriesKeyIndex=schema.findIndex(function(d){return d.name===groupBy}),seriesKeys=data.map(function(d){return d[seriesKeyIndex]}).filter(function(item,pos,arr){return arr.indexOf(item)===pos}).sort(),fieldNames=schema.reduce(function(acc,obj,i){return acc[i]=obj.name,acc},{});return{data:groupedData.map(function(arr){var tuples={},rowObj=arr.values.reduce(function(acc,row){return acc=row.reduce(function(obj,value,i){return i===seriesKeyIndex?(obj[value]=row[valueFieldIndex],tuples[value]=row):i!==valueFieldIndex&&(obj[fieldNames[i]]=value),obj},acc)},{});return rowObj._tuple=tuples,seriesKeys.forEach(function(seriesKey){if(void 0===rowObj[seriesKey]){rowObj[seriesKey]=0;var newArr=new Array(arr.values[0].length);newArr[uniqueFieldIndex]=arr.key,newArr[seriesKeyIndex]=seriesKey,rowObj._tuple[seriesKey]=newArr}}),rowObj}),keys:seriesKeys}}(data,schema,valueField,uniqueField,groupBy),keys=normalizedData.keys,map={},orderBy=config.orderBy,orderIndex=schema.findIndex(function(d){return d.name===orderBy}),groupByIndex=schema.findIndex(function(d){return d.name===groupBy});-1!==orderIndex&&(keys.forEach(function(key){var name=data.find(function(d){return d[groupByIndex]===key});map[key]=name[orderIndex]}),normalizedData.keys.sort(function(a,b){return map[a].localeCompare(map[b])}));var stackData=common_utils_stack({keys:normalizedData.keys,offset:config.offset||"diverging",order:sort,data:normalizedData.data});return stackData.forEach(function(seriesData){seriesData.forEach(function(dataObj){dataObj.data=dataObj.data._tuple[seriesData.key]})}),stackData}),_transformMap);var _encodingFieldInfRetr,_dataNormalizers,_domainCalculator,transform_factory=function transformFactory(type){var transform=transformMap[type];if("function"!=typeof transform)throw new Error("Invalid transform type supplied.");return transform};function helpers_toConsumableArray(arr){return function helpers_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i=d[0]?(y=x0=d[1],x=y0=d[0]):(y=x0=d[0],x=y0=d[1]),(pointObj=xFieldType===dist_datamodel.FieldType.MEASURE?{x:x,x0:x0,y:tuple[yFieldIndex],y0:tuple[yFieldIndex]}:{x:tuple[xFieldIndex],x0:tuple[xFieldIndex],y:y,y0:y0}).source=tuple,pointObj.rowId=tuple[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=tuple[encodingFieldInf["".concat(enc,"FieldIndex")]]})):((pointObj={x:d[xFieldIndex],y:d[yFieldIndex],x0:d[x0FieldIndex],y0:d[y0FieldIndex]}).source=d,pointObj.rowId=d[fieldsLen],[COLOR,SHAPE,SIZE,TEXT].forEach(function(enc){pointObj[enc]=d[encodingFieldInf["".concat(enc,"FieldIndex")]]}));return pointObj})}).filter(function(d){return d.length})}),_dataNormalizers),domainCalculator=(helpers_defineProperty(_domainCalculator={},POLAR,function(data,layerInst){var config=layerInst.config(),sort=config.sort,angleValues=data[0],radius0Field=getObjProp(config.encoding.radius0,"field");return sort&&(angleValues=angleValues.sort(function(a,b){return"asc"===sort?a.radius-b.radius:b.radius-a.radius})),{radius:getDomainFromData(data,[ENCODING.RADIUS,radius0Field?ENCODING.RADIUS0:ENCODING.RADIUS]),angle:angleValues.map(function(d){return d.angle}),angle0:angleValues.map(function(d){return d.angle0})}}),helpers_defineProperty(_domainCalculator,helpers_CARTESIAN,function(data,layerInst){var transformType=layerInst.transformType(),encodingFieldInf=layerInst.encodingFieldsInf(),xFieldSubType=encodingFieldInf.xFieldSubType,yFieldSubType=encodingFieldInf.yFieldSubType,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,x0Field=encodingFieldInf.x0Field,y0Field=encodingFieldInf.y0Field,domains={},yEnc=ENCODING.Y,xEnc=ENCODING.X;return xField&&(domains.x=getDomainFromData(data,x0Field||"stack"===transformType?[xEnc,ENCODING.X0]:[xEnc,xEnc],xFieldSubType)),yField&&(domains.y=getDomainFromData(data,y0Field||"stack"===transformType?[ENCODING.Y0,ENCODING.Y]:[yEnc,yEnc],yFieldSubType)),domains}),_domainCalculator),attachDataToVoronoi=function attachDataToVoronoi(voronoi,points){var _ref3;voronoi.data((_ref3=[]).concat.apply(_ref3,helpers_toConsumableArray(points)).filter(function(d){return void 0!==d.rowId}).map(function(d){var point=d.update;return{x:point.x,y:point.y,data:d}}))},helpers_updateStyle=function updateStyle(target,styles,remove){for(var key in styles)({}).hasOwnProperty.call(styles,key)&&target.style(key,remove?null:styles[key])},positionPoints=function positionPoints(context,points){var positioner=context.encodingTransform();return positioner?positioner(points,context,{smartLabel:context._dependencies.smartLabel}):points},helpers_getPlotMeasurement=function getPlotMeasurement(context,dimensionalValues){var fieldInfo=context.encodingFieldsInf(),axes=context.axes(),transformType=context.transformType(),config=context.config(),bandScale=context._bandScale;return["x","y"].map(function(type){var span=0,groupSpan=0,padding=0,offsetValues=[];if(fieldInfo["".concat(type,"FieldType")]===dist_datamodel.FieldType.DIMENSION){var actualGroupWidth,timeDiff=fieldInfo["".concat(type,"FieldSubType")]===dist_datamodel.DimensionSubtype.TEMPORAL?context.dataProps().timeDiffs[type]:0,axis=axes[type],pad=config["pad".concat(type.toUpperCase())],innerPadding=config.innerPadding,keys=dimensionalValues,scale=axis.scale();groupSpan=function getGroupSpan(axis,minDiff){var width=axis.getUnitWidth(),scale=axis.scale(),range=scale.range(),domain=scale.domain();return width||Math.abs(range[1]-range[0])/Math.abs(domain[1]-domain[0])*minDiff}(axis,timeDiff);var isAxisBandScale=axis.constructor.type()===helpers_BAND,axisPadding=axis.config().padding;if("group"===transformType){var groupPadding=isAxisBandScale?0:axisPadding*groupSpan/2;bandScale.range([groupPadding,groupSpan-groupPadding]).domain(keys).paddingInner(innerPadding),span=bandScale.bandwidth(),actualGroupWidth=groupSpan-(isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(key){return bandScale(key)-(isAxisBandScale?0:groupSpan/2)})}else if(void 0!==pad){var offset;if(isAxisBandScale){var step=scale.step();offset=scale.padding()*step,span=scale.bandwidth()+offset}else span=groupSpan;offsetValues=keys.map(function(){return isAxisBandScale?-offset/2:-span/2})}else actualGroupWidth=span=groupSpan-(padding=isAxisBandScale?0:axisPadding*groupSpan),offsetValues=keys.map(function(){return isAxisBandScale?0:-span/2});groupSpan=actualGroupWidth,padding=isAxisBandScale?axisPadding*axis.scale().step():axisPadding*groupSpan}return{span:span,offsetValues:offsetValues,groupSpan:groupSpan,padding:padding}})},transformResolverPredicates=[function(encodingFieldInf){return!encodingFieldInf.xField||!encodingFieldInf.yField},function(encodingFieldInf,context,groupByField){var fieldsConfig=context.data().getFieldsConfig();return!groupByField||getObjProp(fieldsConfig[groupByField],"def","type")===dist_datamodel.FieldType.MEASURE},function(encodingFieldInf){return encodingFieldInf.xFieldType===dist_datamodel.FieldType.DIMENSION&&encodingFieldInf.yFieldType===dist_datamodel.FieldType.DIMENSION},function(encodingFieldInf,context,groupByField){var dimensionField=["xField","yField"].find(function(type){return encodingFieldInf["".concat(type,"Type")]===dist_datamodel.FieldType.DIMENSION});return dimensionField&&encodingFieldInf[dimensionField]===groupByField}],helpers_resolveInvalidTransformType=function resolveInvalidTransformType(context){var encodingFieldInf=context.encodingFieldsInf(),groupByField=context.config().transform.groupBy;return transformResolverPredicates.some(function(fn){return fn(encodingFieldInf,context,groupByField)})?"identity":null},helpers_getValidTransformForAggFn=function getValidTransformForAggFn(context){var resolvedInvalidTransformType=helpers_resolveInvalidTransformType(context);if(resolvedInvalidTransformType)return resolvedInvalidTransformType;var _context$encodingFiel=context.encodingFieldsInf(),xField=_context$encodingFiel.xField,yField=_context$encodingFiel.yField,xFieldType=_context$encodingFiel.xFieldType,yFieldType=_context$encodingFiel.yFieldType,groupByField=context.config().transform.groupBy,isCustomTransformTypeProvided=!!getObjProp(context._customConfig,"transform","type"),transformType=context.config().transform.type;if(!isCustomTransformTypeProvided&&groupByField&&xFieldType!==yFieldType){var measureField=xFieldType===dist_datamodel.FieldType.MEASURE?xField:yField;transformType="sum"===common_utils_retrieveNearestGroupByReducers(context.data(),measureField)[measureField]?"stack":"group"}return transformType},helpers_resolveEncodingValues=function resolveEncodingValues(data,i,dataArr,layerInst){var transformedValues={},values=data.values,encoding=layerInst.config().encoding;for(var key in values){var value=getObjProp(encoding[key],"value");value instanceof Function?transformedValues[key]=value(values,i,dataArr,layerInst):transformedValues[key]=values[key]}return transformedValues},getColorMetaInf=function getColorMetaInf(color,colorAxis){return{originalColor:colorAxis.getHslArray(color),stateColor:{},colorTransform:{}}},getCoordValue=function getCoordValue(radius,trig,angle,offset){return radius*Math[trig](angle)+offset},coordValueGetter=function coordValueGetter(radius,angle,xOffset,yOffset){return{x:getCoordValue(radius,"cos",angle,xOffset),y:getCoordValue(radius,"sin",angle,yOffset)}},toCartesianCoordinates=function toCartesianCoordinates(points,measurement){for(var rangePlot=arguments.length>2&&void 0!==arguments[2]&&arguments[2],xOffset=measurement.width/2,yOffset=measurement.height/2,i=0,len=points.length;i3&&void 0!==arguments[3]?arguments[3]:{};return function base_layer_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,BaseLayer),_this=function base_layer_possibleConstructorReturn(self,call){return!call||"object"!==base_layer_typeof(call)&&"function"!=typeof call?base_layer_assertThisInitialized(self):call}(this,base_layer_getPrototypeOf(BaseLayer).call(this)),generateGetterSetters(base_layer_assertThisInitialized(_this),props_props),_this.axes(axes),_this.alias(_this.constructor.formalName()+getUniqueId()),_this.dependencies(dependencies),_this._points=[],_this._cachedData=[],_this._id=getUniqueId(),_this._measurement={},_this._animationDonePromises=[],_this._graphicElems={},_this._customConfig=null,_this}return function base_layer_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&base_layer_setPrototypeOf(subClass,superClass)}(BaseLayer,simple_layer_SimpleLayer),function base_layer_createClass(Constructor,protoProps,staticProps){return protoProps&&base_layer_defineProperties(Constructor.prototype,protoProps),staticProps&&base_layer_defineProperties(Constructor,staticProps),Constructor}(BaseLayer,[{key:"store",value:function store(){if(arguments.length){var store=this._store=arguments.length<=0?void 0:arguments[0],namespace=this.metaInf().namespace;return store.addSubNamespace(namespace,BaseLayer.formalName(),this),store_transactor(this,localOptions,store,{subNamespace:namespace,namespace:"".concat(namespace_namespaceObject.LAYER_LOCAL_NAMESPACE)}),this}return this._store}},{key:"domain",value:function domain(){var prop="".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain"),store=this.store();if(arguments.length){var _this$metaInf2=this.metaInf(),parentNamespace=_this$metaInf2.parentNamespace,namespace=_this$metaInf2.namespace,domain=defaultValue(store.get(prop,parentNamespace),{});return domain[namespace]=arguments.length<=0?void 0:arguments[0],this.store().commit(prop,domain,parentNamespace),this}return this.store().get(prop,this.metaInf().namespace)}},{key:"encodingFieldsInf",value:function encodingFieldsInf(){return arguments.length?(this._encodingFieldsInf=arguments.length<=0?void 0:arguments[0],this):this._encodingFieldsInf}},{key:"encodingTransform",value:function encodingTransform(){return arguments.length?(this._encodingTransform=arguments.length<=0?void 0:arguments[0],this):this._encodingTransform}},{key:"alias",value:function alias(){return arguments.length?(this._alias=arguments.length<=0?void 0:arguments[0],this):this._alias||this.constructor.formalName()}},{key:"dependencies",value:function dependencies(){return arguments.length?(this._dependencies=arguments.length<=0?void 0:arguments[0],this):this._dependencies}},{key:"enableCaching",value:function enableCaching(){return this._cacheEnabled=!0,this}},{key:"clearCaching",value:function clearCaching(){return this._cacheEnabled=!1,this.data(this._cachedData[0])}},{key:"serialize",value:function serialize(){return this.config()}},{key:"id",value:function id(){return this._id}},{key:"getTransformedData",value:function getTransformedData(dataModel,config,transformType,encodingFieldsInf){return function transformData(dataModel,config,transformType,encodingFieldInf){var data=dataModel.getData({withUid:!0}),schema=data.schema,transform=config.transform,xField=encodingFieldInf.xField,yField=encodingFieldInf.yField,xFieldType=encodingFieldInf.xFieldType,yFieldType=encodingFieldInf.yFieldType,uniqueField=xFieldType===dist_datamodel.FieldType.MEASURE?yField:xField;return transform_factory(transformType)(schema,data.data,{groupBy:transform.groupBy,uniqueField:uniqueField,sort:transform.sort||"none",offset:transform.offset,orderBy:transform.orderBy,value:yFieldType===dist_datamodel.FieldType.MEASURE?yField:xField},data.uids)}(dataModel,config,transformType,encodingFieldsInf)}},{key:"calculateDomainFromData",value:function calculateDomainFromData(data){var domains={};return this.data().isEmpty()||(domains=domainCalculator[this.coord()](data,this)),domains}},{key:"getDataDomain",value:function getDataDomain(encodingType){var _this$metaInf3=this.metaInf(),parentNamespace=_this$metaInf3.parentNamespace,namespace=_this$metaInf3.namespace,domains=getObjProp(this.store().get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".").concat("domain"),parentNamespace),namespace);return void 0!==encodingType?domains[encodingType]||[]:domains}},{key:"getNormalizedData",value:function getNormalizedData(transformedData){return function getNormalizedData(transformedData,context){var transformType=context.transformType(),transformedDataArr="identity"===transformType?[transformedData]:transformedData,encodingFieldInf=context.encodingFieldsInf(),fieldsConfig=context.data().getFieldsConfig();return dataNormalizers[context.coord()](transformedDataArr,encodingFieldInf,fieldsConfig,transformType)}(transformedData,this)}},{key:"getNearestPoint",value:function getNearestPoint(){return null}},{key:"applyInteractionStyle",value:function applyInteractionStyle(interactionType,selectionSet,apply,styles){var interactionStyles=(this.config().interaction||{})[interactionType];(interactionStyles=styles||interactionStyles)&&helpers_applyInteractionStyle(this,selectionSet,interactionStyles,{apply:apply,interactionType:interactionType})}},{key:"disableUpdate",value:function disableUpdate(){return this._updateLock=!0,this}},{key:"enableUpdate",value:function enableUpdate(){return this._updateLock=!1,this}},{key:"resolveTransformType",value:function resolveTransformType(){this._transformType=function getValidTransform(context){return helpers_resolveInvalidTransformType(context)||context.config().transform.type}(this)}},{key:"transformType",value:function transformType(){return this._transformType}},{key:"render",value:function render(){return this}},{key:"elemType",value:function elemType(){return"g"}},{key:"remove",value:function remove(){var _this$metaInf4=this.metaInf(),namespace=_this$metaInf4.namespace,parentNamespace=_this$metaInf4.parentNamespace,store=this.store();store.removeSubNamespace(namespace,BaseLayer.formalName());var unitDom=store.get("".concat(namespace_namespaceObject.LAYER_GLOBAL_NAMESPACE,".domain"))[parentNamespace];return unitDom&&delete unitDom[namespace],renderer_utils_selectElement(this.mount()).remove(),this}},{key:"cachePoint",value:function cachePoint(key,data){if(null===key)return this;var pointMap=this._pointMap;return!pointMap[key]&&(pointMap[key]=[]),pointMap[key].push(data),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(data){var schema=this.data().getSchema(),fieldsConfig=this.data().getFieldsConfig(),identifiers=[[],[]],_this$encodingFieldsI=this.encodingFieldsInf(),xFieldType=_this$encodingFieldsI.xFieldType,yFieldType=_this$encodingFieldsI.yFieldType,xField=_this$encodingFieldsI.xField,yField=_this$encodingFieldsI.yField,_map2=base_layer_slicedToArray([xFieldType,yFieldType].map(function(type){return type===dist_datamodel.FieldType.MEASURE}),2),xMeasure=_map2[0],yMeasure=_map2[1];if(schema.forEach(function(d,i){var name=d.name;fieldsConfig[name].def.type===dist_datamodel.FieldType.DIMENSION&&(identifiers[0].push(name),identifiers[1].push(data[i]))}),xMeasure&&yMeasure){var _identifiers$,_identifiers$2,xMeasureIndex=fieldsConfig[xField].index,yMeasureIndex=fieldsConfig[yField].index;(_identifiers$=identifiers[0]).push.apply(_identifiers$,[xField,yField]),(_identifiers$2=identifiers[1]).push.apply(_identifiers$2,[data[xMeasureIndex],data[yMeasureIndex]])}return identifiers}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!1}},{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(identifiers){var _ref,fieldNames,values,config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},getAllAttrs=config.getAllAttrs,getBBox=config.getBBox;if(!this.data())return[];if(identifiers instanceof datamodel_default.a){var dataObj=identifiers.getData();fieldNames=dataObj.schema.map(function(d){return d.name}),values=dataObj.data}else fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length);var points=this._points,fieldsConfig=this.data().getFieldsConfig(),filteredPoints=(_ref=[]).concat.apply(_ref,base_layer_toConsumableArray(points)).filter(function(point){var source=point.source,rowId=point.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})});return getAllAttrs?filteredPoints:filteredPoints.map(function(d){var obj=clone(d);if(getBBox){var update=obj.update||obj;if(void 0!==obj.size){var sizeVal=2*Math.sqrt(obj.size/Math.PI);update.width=sizeVal,update.height=sizeVal,update.x-=sizeVal/2,update.y-=sizeVal/2}else void 0===update.width&&(update.width=2),void 0===update.height&&(update.height=2)}return obj.update||obj}).sort(function(a,b){return a.y-b.y})}},{key:"getTransformedDataFromIdentifiers",value:function getTransformedDataFromIdentifiers(identifiers){var measureIndex,enc,_identifiers$getData=identifiers.getData(),identifierData=_identifiers$getData.data,identifierSchema=_identifiers$getData.schema,normalizedData=this._normalizedData,fieldsConfig=this.data().getFieldsConfig(),_this$encodingFieldsI2=this.encodingFieldsInf(),yField=_this$encodingFieldsI2.yField,xField=_this$encodingFieldsI2.xField,yFieldType=_this$encodingFieldsI2.yFieldType;_this$encodingFieldsI2.xFieldType===dist_datamodel.FieldType.MEASURE?(measureIndex=fieldsConfig[xField].index,enc="x"):yFieldType===dist_datamodel.FieldType.MEASURE&&(measureIndex=fieldsConfig[yField].index,enc="y");var transformedData=[];return normalizedData.forEach(function(dataArr){dataArr.forEach(function(dataObj){var tupleArr=dataObj.source;if(identifierSchema.every(function(obj,i){return-1!==identifierData.findIndex(function(d){return tupleArr[fieldsConfig[obj.name].index]===d[i]})})){var transformedVal=dataObj[enc],row=dataObj.source,tuple={};for(var key in fieldsConfig){var index=fieldsConfig[key].index;tuple[key]=row[index],index===measureIndex&&(tuple[key]=transformedVal)}transformedData.push(tuple)}})}),[transformedData,this.data().getSchema()]}},{key:"getPlotElementsFromSet",value:function getPlotElementsFromSet(set){for(var graphicElems=this._graphicElems,elems=[],i=0,len=set.length;i2&&void 0!==arguments[2]?arguments[2]:{},dataPoint=renderer_utils_selectElement(config.event.target).data()[0];if(isSimpleObject(dataPoint)){var source=dataPoint.source,rowId=dataPoint.rowId;return{id:this.getIdentifiersFromData(source,rowId),layerId:this.id()}}return null}},{key:"translatePoints",value:function translatePoints(data){var _this2=this,_this$axes=this.axes(),angle=_this$axes.angle,colorAxis=_this$axes.color,radiusAxis=_this$axes.radius,pieIndex={},prevData=this._points[0]||[],points=[],angleV={};return this._prevPieData={},prevData.forEach(function(e,index){_this2._prevPieData[e.rowId]=[e,index],pieIndex[e.index]=e}),data.forEach(function(d,i){var angles=angle.getScaleValue(d.angle);if(angles){!angleV[d.angle]&&(angleV[d.angle]=0);var _angles=angles[angleV[d.angle]++],startAngle=_angles.startAngle,endAngle=_angles.endAngle,uid=d.rowId,resolvedEncodings=helpers_resolveEncodingValues({values:{radius:radiusAxis.getOuterRadius(d.radius),radius0:radiusAxis.getInnerRadius(d.radius0),color:colorAxis.getColor(d.color),angle0:startAngle,angle:endAngle,startAngle:startAngle,endAngle:endAngle,startAngle0:startAngle,endAngle0:endAngle},data:d},i,data,_this2),color=resolvedEncodings.color;points.push({source:d.source,index:i,enter:{},update:{angle0:resolvedEncodings.angle0,angle:resolvedEncodings.angle,radius0:resolvedEncodings.radius0,radius:resolvedEncodings.radius},color:color,meta:getColorMetaInf(color,colorAxis),rowId:uid,_previousInfo:_this2._prevPieData[uid]?_this2._prevPieData[uid][0]:function getPreviousPoint(prevData,currIndex,context){var prevArc=prevData[currIndex-1],nextArc=prevData[currIndex],_context$axes$angle$r2=arc_helper_slicedToArray(context.axes().angle.range(),2),startAngle=_context$axes$angle$r2[0],endAngle=_context$axes$angle$r2[1];return prevArc&&nextArc?{update:{angle0:getObjProp(prevArc,"update","angle"),angle:getObjProp(nextArc,"update","angle0")}}:nextArc?{update:{angle0:(startAngle-90)*Math.PI*2/360,angle:(startAngle-90)*Math.PI*2/360}}:{update:{angle0:(endAngle-90)*Math.PI*2/360,angle:(endAngle-90)*Math.PI*2/360}}}(pieIndex,i,_this2)})}}),points}},{key:"render",value:function render(container){var _this3=this,measurement=this.measurement(),_this$config=this.config(),classPrefix=_this$config.classPrefix,defClassName=_this$config.defClassName,cornerRadius=_this$config.cornerRadius,padAngle=_this$config.padAngle,padRadius=_this$config.padRadius,transition=_this$config.transition,qualClassName=getQualifiedClassName(defClassName,this.id(),classPrefix),path=this._arcFn=arc_arc().cornerRadius(cornerRadius).startAngle(function(d){return d.update.angle0+Math.PI/2}).endAngle(function(d){return d.update.angle+Math.PI/2}).padAngle(padAngle).padRadius(padRadius).outerRadius(function(d){return d.update.radius}).innerRadius(function(d){return d.update.radius0});this._points=this._normalizedData.map(function(arr){return _this3.translatePoints(arr)});var graphicElems=this._graphicElems={},g=makeElement(renderer_utils_selectElement(container),"g",this._points,"".concat(qualClassName[0],"-group")).classed("".concat(qualClassName[1],"-group"),!0).attr("transform","translate(".concat(measurement.width/2,",\n ").concat(measurement.height/2,")")),consecutiveExits=[],exitCounter=0;return makeElement(g,"g",function(d){return d},"".concat(qualClassName[0]),{update:function tween(elem){makeElement(elem,"path",function(d){return[d]},"".concat(qualClassName[0],"-path")).style("fill",function(d){return d.color}).each(function(d){graphicElems[d.rowId]=renderer_utils_selectElement(this)}).transition().duration(transition.duration).on("end",_this3.registerAnimationDoneHook()).attrTween("d",function(){for(var _len=arguments.length,params=new Array(_len),_key=0;_key<_len;_key++)params[_key]=arguments[_key];return function tweenPie(path,b){var datum=b[0];return function(t){return path(common_utils_interpolator()(datum._previousInfo,datum)(t))}}(path,params)}).attr("class",function(d,i){var individualClass=getIndividualClassName(d,i,_this3._points,_this3);return"".concat(qualClassName[0],"-path ").concat(qualClassName[1],"-path-").concat(d.index,"\n ").concat(individualClass)})},exit:function tweenExit(elem,d){var exitArr=consecutiveExits[exitCounter],oldExitCounter=exitCounter;exitArr?exitArr[exitArr.length-1].datum.index===d.index-1?exitArr.push({elem:elem,datum:d}):exitCounter++:exitArr=[{elem:elem,datum:d}],consecutiveExits[oldExitCounter]=exitArr}}).attr("class",function(d,i){return"".concat(qualClassName[0]," ").concat(qualClassName[1],"-").concat(i)}),function tweenExitPie(consecutiveExits,transition,path){consecutiveExits.length>0&&consecutiveExits.forEach(function(consecutiveExitArr){var startAngle=consecutiveExitArr[0].datum.update.angle0,endAngle=consecutiveExitArr[consecutiveExitArr.length-1].datum.update.angle,mid=2*Math.PI*startAngle/(2*Math.PI+startAngle-endAngle);consecutiveExitArr.forEach(function(e){var elem=e.elem,datum=e.datum;elem.each(function(){var gElem=renderer_utils_selectElement(this);gElem.selectAll("path").transition().duration(transition.duration).attrTween("d",function(){return function(t){return path(common_utils_interpolator()(datum,{update:{angle0:mid,angle:mid,radius:datum.radius,radius0:datum.radius0}})(t))}}).remove(),gElem.remove()})})})}(consecutiveExits,transition,path),this}},{key:"getPointsFromIdentifiers",value:function getPointsFromIdentifiers(identifiers){if(!this.data())return[];var fieldNames=identifiers[0],values=identifiers.slice(1,identifiers.length),pieSlices=renderer_utils_selectElement(this.mount()).selectAll("path").data(),fieldsConfig=this.data().getFieldsConfig(),pieSliceInf=pieSlices.filter(function(tData){var source=tData.source,rowId=tData.rowId;return fieldNames.every(function(field,idx){return field in fieldsConfig&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION?-1!==values.findIndex(function(d){return d[idx]===source[fieldsConfig[field].index]}):field!==reserved_fields.ROW_ID||-1!==values.findIndex(function(d){return d[idx]===rowId})})})[0];if(pieSliceInf){var measurement=this.measurement(),centroid=this._arcFn.centroid(pieSliceInf);return[{x:centroid[0]+measurement.width/2,y:centroid[1]+measurement.height/2,width:2,height:2}]}return[]}}],[{key:"defaultConfig",value:function defaultConfig(){return arc_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"arc"}}]),ArcLayer}(),text_renderer=function drawText(container,data,config,layerInst){var selection=renderer_utils_selectElement(container).selectAll("g").data(data),smartLabel=layerInst._dependencies.smartLabel,graphicElems=layerInst._graphicElems,selectionMerge=selection.enter().append("g").each(function(dataObj){renderer_utils_setAttrs(this,dataObj.enter)}).merge(selection),style=renderer_utils_getSmartComputedStyle(renderer_utils_selectElement(container),config.className),fontSize=parseInt(style.fontSize,10);return smartLabel.setStyle(style),selectionMerge.each(function(dataObj){var element=renderer_utils_selectElement(this);graphicElems[dataObj.rowId]=element;var backgroundVal,update=dataObj.update,text=dataObj.text,color=dataObj.color,textanchor=dataObj.textanchor,textStyle=dataObj.style,background=dataObj.background;if(backgroundVal=background.value){var diff,backgroundPadding=background.padding,_smartLabel$getOriSiz=smartLabel.getOriSize(dataObj.text),width=_smartLabel$getOriSiz.width,height=_smartLabel$getOriSiz.height,backgroundEl=makeElement(element,"rect",[1]);diff="end"===textanchor?width:"start"===textanchor?0:width/2,renderer_utils_setAttrs(backgroundEl.node(),{x:update.x-diff-backgroundPadding/2,y:update.y-fontSize-backgroundPadding/2,width:width+backgroundPadding,height:height+backgroundPadding}),background&&renderer_utils_setStyles(backgroundEl,{background:backgroundVal})}var textEl=makeElement(element,"text",function(d){return[d]}).text(text),textNode=textEl.node();textStyle&&renderer_utils_setStyles(textNode,textStyle),color&&renderer_utils_setStyles(textNode,{fill:color}),dataObj.className&&textEl.classed(dataObj.className,!0),renderer_utils_setAttrs(textNode,update),textEl.attr("text-anchor",textanchor),textEl.attr("alignment-baseline",dataObj["alignment-baseline"]),textEl.attr("transform","rotate(".concat(dataObj.rotation," ").concat(update.x," ").concat(update.y,")"))}),selection.exit().remove(),selection},text_default_config_defaultConfig={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:{},size:{},radius:{},angle:{},text:{value:"",formatter:function formatter(val,i,data,context){return context.valueParser()(val)},background:{padding:10}},rotation:{value:0},"alignment-baseline":{value:"middle"}},states:{highlight:{className:"".concat("muze","-layer-text-highlight")},fadeout:{className:"".concat("muze","-layer-text-fadeout")},selected:{className:"".concat("muze","-layer-text-selected")}}};__webpack_require__(15);function text_typeof(obj){return(text_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function text_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return pointTranslators[this.coord()](data,config,this)}},{key:"render",value:function render(container){var _this=this,config=this.config(),normalizedData=this._normalizedData,className=config.className,qualifiedClassName=getQualifiedClassName(config.defClassName,this.id(),config.classPrefix);return renderer_utils_selectElement(container).classed("".concat(qualifiedClassName.join(" ")," ").concat(className),!0),this._graphicElems={},renderer_utils_createElements({data:normalizedData,append:"g",selector:"g",container:container,each:function each(dataArr,group){var node=group.node(),points=_this.translatePoints(dataArr,{},_this);renderer_utils_setStyles(node,{"text-anchor":"middle"}),text_renderer(node,points,{className:qualifiedClassName[0]},_this)}}),this}}],[{key:"defaultConfig",value:function defaultConfig(){return text_default_config_defaultConfig}},{key:"formalName",value:function formalName(){return"text"}}]),TextLayer}(),point_renderer=function drawSymbols(params){var layer=params.layer,container=params.container,points=params.points,transition=params.transition,className=params.className,duration=transition.duration,effect=transition.effect,disabled=transition.disabled,mount=renderer_utils_selectElement(container),graphicElems=layer._graphicElems;return mount.attr("class",className),makeElement(mount,"g",points,null,{enter:function enter(group,d){var enter=d.enter;group.attr("transform","translate(".concat(enter.x,",").concat(enter.y,")"))},update:function update(group,d){!function createShape(d,groupElement){var shape=d.shape,size=d.size,update=d.update;if(shape instanceof Promise)shape.then(function(res){d.shape=res,createShape(d,groupElement)});else if(shape instanceof Element){var newShape=shape.cloneNode(!0);if("img"===newShape.nodeName.toLowerCase()){var src=newShape.src||newShape.href;(newShape=document.createElementNS("http://www.w3.org/2000/svg","image")).setAttribute("href",src)}var shapeElement=renderer_utils_selectElement(newShape);"path"===newShape.nodeName||"image"===newShape.nodeName?shapeElement.attr("transform","scale(".concat(size/100,")")):(shapeElement.attr("height",size),shapeElement.attr("width",size)),shapeElement.attr("x",-size/2),shapeElement.attr("y",-size/2),makeElement(groupElement,function(){return newShape},[1])}else if("string"==typeof shape){var pathStr;pathStr=function checkPath(str){return!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(str)&&/[\dz]$/i.test(str)&&str.length>4)}(shape)?shape:common_utils_getSymbol(shape).size(size)(update),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}else d.shape="circle",createShape(d,groupElement)}(d,group),graphicElems[d.rowId]=group;var update=d.update,style=d.style;objectIterator(style,function(key){return group.style(key,style[key])}),group.attr("class",className),group.classed(d.className,!0),disabled||(group=group.transition().duration(transition.duration).on("end",layer.registerAnimationDoneHook())),group.attr("transform","translate(".concat(update.x,",").concat(update.y,")"))},exit:function exit(exitGroup){disabled?exitGroup.remove():exitGroup.transition().ease(easeFns[effect]).duration(duration).on("end",function(){return exitGroup.remove()}).style("fill-opacity",0).style("stroke-opacity",0)}},params.keyFn)},point_default_config_defaultConfig={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]};__webpack_require__(16);function point_typeof(obj){return(point_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function point_toConsumableArray(arr){return function point_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1&&void 0!==arguments[1]?arguments[1]:{},points=[],encoding=this.config().encoding,axes=this.axes(),x=encoding.x,y=encoding.y,xField=x.field,yField=y.field,sizeAxis=axes.size,shapeAxis=axes.shape,fieldsConfig=this.data().getFieldsConfig(),isXDim=fieldsConfig[xField]&&fieldsConfig[xField].def.type===dist_datamodel.FieldType.DIMENSION,isYDim=fieldsConfig[yField]&&fieldsConfig[yField].def.type===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=this.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_loop=function _loop(i,len){var d=data[i],size=sizeAxis.getSize(d.size),shape=shapeAxis.getShape(d.shape),_map2=point_slicedToArray([ENCODING.X,ENCODING.Y].map(function(type){var value=null===d[type]?void 0:d[type],measure=type===ENCODING.X?measurement.width:measurement.height;return encoding[type].field?axes[type].getScaleValue(value):measure/2}),2),xPx=_map2[0],yPx=_map2[1];xPx+=offsetX,yPx+=offsetY;var color=colorAxis.getColor(d.color),resolvedEncodings=helpers_resolveEncodingValues({values:{x:xPx,y:yPx,color:color,shape:shape,size:size,data:d},data:d},i,data,_this2),style={fill:color=resolvedEncodings.color,stroke:color},pos={x:resolvedEncodings.x,y:resolvedEncodings.y};if(!isNaN(xPx)&&!isNaN(yPx)){var point={enter:pos,update:pos,shape:resolvedEncodings.shape,size:Math.abs(resolvedEncodings.size),meta:getColorMetaInf(color,colorAxis),style:style,source:d.source,rowId:d.rowId};point.className=getIndividualClassName(d,i,data,_this2),points.push(point),_this2.cachePoint(d[key],point)}},i=0,len=data.length;i=update.x&&x<=update.width+update.x&&y>=update.y&&y<=update.height+update.y){pointFound=point;break}pointFound=null}var values=pointFound&&pointFound.source;return values&&(identifiers=this.getIdentifiersFromData(values,pointFound.rowId)),pointFound?{dimensions:[pointFound.update],id:identifiers,layerId:this.id()}:pointFound}},{key:"getPlotSpan",value:function getPlotSpan(){return this._plotSpan}},{key:"hasPlotSpan",value:function hasPlotSpan(){return!0}}],[{key:"formalName",value:function formalName(){return"bar"}},{key:"defaultConfig",value:function defaultConfig(){return bar_default_config_defaultConfig}},{key:"defaultPolicy",value:function defaultPolicy(conf,userConf){var config=base_layer_BaseLayer.defaultPolicy(conf,userConf),colorField=config.encoding.color.field,transform=config.transform;return colorField&&(transform.groupBy=colorField),config}}]),BarLayer}(),tick_default_config_defaultConfig={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},interpolate:"linear",encoding:{color:{},x:{},y:{},x0:{},y0:{},radius:{},radius0:{},angle:{},angle0:{},strokeOpacity:{value:.5},fillOpacity:{value:.5}},states:{highlight:{className:"".concat("muze","-layer-tick-highlight")},fadeout:{className:"".concat("muze","-layer-tick-fadeout")},selected:{className:"".concat("muze","-layer-tick-selected")}}},tick_renderer_line=Symbols.line,tick_renderer=function(params){var points=params.points,container=params.container,keyFn=params.keyFn,className=params.className,interpolate=params.interpolate,layer=params.layer,mount=renderer_utils_selectElement(container),ticks=mount.selectAll("path").data(points,keyFn),ticksEnter=ticks.enter().append("path"),graphicElems=layer._graphicElems;return mount.attr("class",className||""),ticksEnter.each(function(d){var selection=renderer_utils_selectElement(this),enter=d.enter||{};Object.entries(enter).forEach(function(attr){return!isNaN(attr[1])&&selection.attr(attr[0],attr[1])})}),ticks.exit().remove(),ticks.merge(ticksEnter).each(function(d){var selection=renderer_utils_selectElement(this);graphicElems[d.rowId]=selection;var update=d.update,updateStyle=d.style||{},x0=void 0!==update.x0?update.x0:update.x,y0=void 0!==update.y0?update.y0:update.y,curveInterpolatorFn=pathInterpolators[interpolate],linepath=tick_renderer_line().curve(curveInterpolatorFn).x(function(e){return e[0]}).y(function(e){return e[1]});d.className&&selection.classed(d.className,!0),selection.attr("d",linepath([[update.x,update.y],[x0,y0]])),Object.entries(updateStyle).forEach(function(styleObj){return selection.style(styleObj[0],styleObj[1])})})};__webpack_require__(18);function tick_typeof(obj){return(tick_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function tick_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]&&arguments[1];for(var layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],radiusAxis=axes.radius,angleAxis=axes.angle,angle0Axis=axes.angle0,measurement=layerInst.measurement(),colorAxis=axes.color,angleV={},angle0V={},i=0,len=data.length;i1&&void 0!==arguments[1]?arguments[1]:{},layerInst=arguments.length>2?arguments[2]:void 0,axes=layerInst.axes(),points=[],_getAxesScales=helpers_getAxesScales(axes),xAxis=_getAxesScales.xAxis,yAxis=_getAxesScales.yAxis,_layerInst$encodingFi=layerInst.encodingFieldsInf(),xField=_layerInst$encodingFi.xField,yField=_layerInst$encodingFi.yField,x0Field=_layerInst$encodingFi.x0Field,y0Field=_layerInst$encodingFi.y0Field,xFieldType=_layerInst$encodingFi.xFieldType,yFieldType=_layerInst$encodingFi.yFieldType,isXDim=xFieldType===dist_datamodel.FieldType.DIMENSION,isYDim=yFieldType===dist_datamodel.FieldType.DIMENSION,key=isXDim?ENCODING.X:isYDim?ENCODING.Y:null,measurement=layerInst.measurement(),colorAxis=axes.color,_config$offset=config.offset,offsetX=_config$offset.x,offsetY=_config$offset.y,_config$span=config.span,xSpan=_config$span.x,ySpan=_config$span.y,i=0,len=data.length;i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];var layerRegistry=factoryObj._layerRegistry,instances=(layerDef=layerDef instanceof Array?layerDef:[layerDef]).map(function(layerObj){var layerConstructor=layerRegistry[layerObj.mark];return layerConstructor.create.apply(layerConstructor,params)});return 1===instances.length?instances[0]:instances},getLayerClass:function getLayerClass(mark){return factoryObj._layerRegistry[mark]},composeLayers:function composeLayers(layerType,layerDefs){compositeLayers[layerType]=layerDefs},sanitizeLayerConfig:function sanitizeLayerConfig(layerDef){var newConf=mergeRecursive({},layerDef);return sanitizeEncoding(newConf.encoding),newConf}};return factoryObj}();function defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _CONFIG$ROWS$COLUMNS$,DEFAULT_LAYERS=(defaults_defineProperty(_DEFAULT_LAYERS={},layer_types_AREA_LAYER,area_AreaLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_ARC_LAYER,arc_ArcLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_LINE_LAYER,line_LineLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TEXT_LAYER,text_TextLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_POINT_LAYER,point_PointLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_TICK_LAYER,tick_TickLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BAR_LAYER,bar_BarLayer),defaults_defineProperty(_DEFAULT_LAYERS,layer_types_BASE_LAYER,base_layer_BaseLayer),_DEFAULT_LAYERS),muze_package=__webpack_require__(4);function visual_group_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options=(visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$={},"config",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,ROWS,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,COLUMNS,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_COLOR,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SHAPE,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,enums_constants_SIZE,{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"detail",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"layers",{}),visual_group_local_options_defineProperty(_CONFIG$ROWS$COLUMNS$,"transform",{}),_CONFIG$ROWS$COLUMNS$);function simple_group_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{},innerRadius=config.innerRadius,outerRadius=config.outerRadius;return[innerRadius||0,outerRadius||Math.min(height,width)/2]}(context.width(),context.height()))})},helper_isXandYMeasures=function isXandYMeasures(context){var _context$fields=context.fields(),_map2=src_helper_slicedToArray([_context$fields.x,_context$fields.y].map(function(fields){return fields.every(function(field){return field.type()===dist_datamodel.FieldType.MEASURE})}),2),xMeasures=_map2[0],yMeasures=_map2[1];return xMeasures&&yMeasures},getKey=function getKey(arr,row){for(var key=row[arr[0]],i=1,len=arr.length;i=0?axisInf[key]:axisArr.length-1;axes[key]&&(axesObj[key]=defaultValue(axes[key][axisIndex]))}}),Object.keys(axesObj).length&&layer.axes(axesObj)})}(axesVal,layers,layerAxisIndexVal),context._lifeCycleManager.notify({client:layers,action:"updated",formalName:"layer"}))}}];function src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var src_props_PROPS=(src_props_defineProperty(_PROPS={},"facetByFields",{}),src_props_defineProperty(_PROPS,"retinalFields",{}),src_props_defineProperty(_PROPS,"parentAlias",{}),src_props_defineProperty(_PROPS,"cachedData",{}),src_props_defineProperty(_PROPS,"detailFields",{}),src_props_defineProperty(_PROPS,"axes",{defaultValue:{x:[],y:[]}}),src_props_defineProperty(_PROPS,"fields",{defaultValue:{x:[],y:[]},sanitization:function sanitization(context,value){return mergeRecursive({x:[],y:[]},value)}}),src_props_defineProperty(_PROPS,"metaInf",{}),src_props_defineProperty(_PROPS,"registry",{}),src_props_defineProperty(_PROPS,"parentContainerInf",{}),src_props_defineProperty(_PROPS,"valueParser",{defaultValue:function defaultValue(val){return val}}),src_props_defineProperty(_PROPS,"coord",{}),_PROPS);function payload_generator_toConsumableArray(arr){return function payload_generator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i2&&void 0!==arguments[2]?arguments[2]:{},payload=config.payload,selectionSet=config.selectionSet,propagationFieldInf=config.propagationFields[action]||{},propagationFields=propagationFieldInf.fields||[],append=propagationFieldInf.append,criteria=payload.criteria,context=instance.context,dataModel=context.cachedData()[0],sourceId=context.id(),sideEfffects=instance.sideEffects(),behaviourEffectMap=instance._behaviourEffectMap,mergedModel=selectionSet.mergedEnter.model,fieldsConfig=dataModel.getFieldsConfig();payload.sourceUnit=sourceId,payload.action=action,payload.sourceCanvas=context.parentAlias();var propagationBehaviour=instance._propagationBehaviourMap[action]||action,propFields=[];null===criteria?propagationData=null:isSimpleObject(criteria)?(propFields=Object.keys(criteria||{}),propagationData=mergedModel?mergedModel.project(propFields):null):(propFields=criteria[0],propagationData=mergedModel?mergedModel.project(propFields):null);var facetByFields=context.facetByFields();if(null!==propagationData&&propagationFields.length){var fields=propagationData.getData().schema.map(function(d){return d.name});propagationData=function getModelWithFacetData(dm,data){var dataObj=dm.getData(),schema1=dataObj.schema,data1=dataObj.data,jsonData=[],derivedSchema=data[0].map(function(d){return{name:"".concat(d),type:dist_datamodel.FieldType.DIMENSION,subtype:d.subtype()}}),dataAtFirstPos=data[1];return data1.forEach(function(d){var tuple={};schema1.forEach(function(obj,i){tuple[obj.name]=d[i]}),derivedSchema.forEach(function(obj,i){tuple[obj.name]=dataAtFirstPos[i]}),jsonData.push(tuple)}),new datamodel_default.a(jsonData,[].concat(data_propagator_toConsumableArray(schema1),data_propagator_toConsumableArray(derivedSchema)))}(propagationData,facetByFields),propFields=append?[].concat(data_propagator_toConsumableArray(fields),data_propagator_toConsumableArray(propagationFields)):propagationFields,propagationData=propagationData.project(propFields)}var propagateInterpolatedValues=!1;propFields.length&&propFields.every(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.MEASURE})&&(propagateInterpolatedValues=!0);var groupId=context.parentAlias();payload.action=action;var behaviourInstance=instance._actions.behavioural[propagationBehaviour],isMutableAction=!!behaviourInstance&&behaviourInstance.constructor.mutates(),filterFn=function filterFn(entry,propagationConf){var effects=behaviourEffectMap[entry.config.action],mutates=!entry.config.groupId||effects.some(function(d){return sideEfffects[d.name||d].constructor.mutates()});return entry.config.groupId!==propagationConf.groupId&&mutates},sourceBehaviour=instance._actions.behavioural[action],mutates=!!sourceBehaviour&&sourceBehaviour.constructor.mutates(),propConfig={payload:payload,action:action,criteria:propagationData,isMutableAction:mutates,propagateInterpolatedValues:propagateInterpolatedValues,groupId:groupId,sourceId:mutates?groupId:sourceId,filterFn:filterFn,enabled:function enabled(propConf,firebolt){return action===propagationBehaviour||propConf.payload.sourceCanvas===firebolt.context.parentAlias()}};dataModel.propagate(propagationData,propConfig,!0),action!==propagationBehaviour&&(propConfig={payload:payload,sourceId:isMutableAction?groupId:sourceId,criteria:propagationData,isMutableAction:isMutableAction,propagateInterpolatedValues:propagateInterpolatedValues,action:propagationBehaviour,groupId:groupId,applyOnSource:action===propagationBehaviour,enabled:function enabled(propConf,firebolt){return propConf.payload.sourceCanvas!==firebolt.context.parentAlias()},filterFn:filterFn},dataModel.propagate(propagationData,propConfig,!0,{filterImmutableAction:function filterImmutableAction(actionInf,propInf){return actionInf.groupId!==propInf.groupId}}))};function src_firebolt_typeof(obj){return(src_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function src_firebolt_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},points=[],parsedIdentifiers=identifiers;if(null===identifiers)return[];var layers=this.layers(),len=layers.length;isSimpleObject(identifiers)&&(parsedIdentifiers=[Object.keys(identifiers)],parsedIdentifiers=[].concat(visual_unit_toConsumableArray(parsedIdentifiers),visual_unit_toConsumableArray(function transposeArray(arr){return arr[0].map(function(col,i){return arr.map(function(row){return row[i]})})}(Object.values(identifiers)))));for(var i=0;i0&&(dimensionArr[0]=[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),dimensionArr[1]=[]),{fields:dimensionArr.map(function(list,i){return 1===i?measureArr[i].concat(dimensionArr[i]):dimensionArr[i].concat(measureArr[i])}),dimensions:[].concat(field_sanitizer_toConsumableArray(dimensionArr[0]),field_sanitizer_toConsumableArray(dimensionArr[1])),measures:[].concat(field_sanitizer_toConsumableArray(measureArr[0]),field_sanitizer_toConsumableArray(measureArr[1])),temporal:[].concat(field_sanitizer_toConsumableArray(temporalArr[0]),field_sanitizer_toConsumableArray(temporalArr[1])),categorical:[].concat(field_sanitizer_toConsumableArray(categoricalArr[0]),field_sanitizer_toConsumableArray(categoricalArr[1]))}}(norFields,fields)}),2),rowsInfo=_map2[0],columnsInfo=_map2[1],rows=rowsInfo.fields,rowDimensions=rowsInfo.dimensions,rowMeasures=rowsInfo.measures,rowTemporalFields=rowsInfo.temporal,rowCategoricalFields=rowsInfo.categorical,columns=columnsInfo.fields,columnDimensions=columnsInfo.dimensions,columnMeasures=columnsInfo.measures;return{rows:rows,rowDimensions:rowDimensions,rowMeasures:rowMeasures,rowTemporalFields:rowTemporalFields,rowCategoricalFields:rowCategoricalFields,columns:columns,columnTemporalFields:columnsInfo.temporal,columnCategoricalFields:columnsInfo.categorical,columnDimensions:columnDimensions,columnMeasures:columnMeasures}};function visual_encoder_slicedToArray(arr,i){return function visual_encoder_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function visual_encoder_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function visual_encoder_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function visual_encoder_defineProperties(target,props){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},fields=arguments.length>1?arguments[1]:void 0,_getHeaderAxisFrom2=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom(ROW,fields.rows,axisFrom),2),rowHeader=_getHeaderAxisFrom2[0],rowAxis=_getHeaderAxisFrom2[1],_getHeaderAxisFrom4=visual_encoder_slicedToArray(group_utils_getHeaderAxisFrom("column",fields.columns,axisFrom),2),colHeader=_getHeaderAxisFrom4[0],colAxis=_getHeaderAxisFrom4[1];return this.axisFrom({row:rowAxis,column:colAxis}),this.headerFrom({row:rowHeader,column:colHeader}),this}}]),VisualEncoder}(),scaleMaps={linear:continous_axis_ContinousAxis,band:band_axis_BandAxis,temporal:time_axis_TimeAxis,size:size_axis_SizeAxis,color:color_axis_ColorAxis,shape:shape_axis_ShapeAxis},data_type_scale_map_dataTypeScaleMap={dimension:scale_type_namespaceObject.BAND,categorical:scale_type_namespaceObject.BAND,temporal:scale_type_namespaceObject.TIME,measure:scale_type_namespaceObject.LINEAR,continuous:scale_type_namespaceObject.LINEAR};function encoder_helper_toConsumableArray(arr){return function encoder_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?axesCreators.position="both":axesCreators.position=_this.axisFrom()[type],geomCellAxes[axis]=encoder_helper_generateAxisFromMap(axis,axisFields[i],axesCreators,{groupAxes:axis===X?xAxes:yAxes,valueParser:resolver.valueParser()},indices,facetFields)}),geomCell.axes(geomCellAxes),geomCellAxes}},{key:"unionUnitDomains",value:function unionUnitDomains(context){for(var store=context.store(),resolver=context.resolver(),units=resolver.units(),domains={0:{},1:{}},config=context.config(),fieldsObj={0:{},1:{}},_loop=function _loop(rIdx,len){for(var unitsArr=units[rIdx],_loop2=function _loop2(cIdx,len2){var unit=unitsArr[cIdx],axisFields=unit.fields(),encodingDomains=unit.getDataDomain();["x","y"].forEach(function(axisType,axisTypeIndex){axisFields[axisType].forEach(function(field,axisIndex){var key=axisTypeIndex?"".concat(rIdx,"0").concat(axisIndex):"0".concat(cIdx).concat(axisIndex),dom=encodingDomains[axisType],typeOfField=field.subtype();fieldsObj[axisTypeIndex][key]=field,dom&&0!==Object.keys(dom).length&&(domains[axisTypeIndex][key]=unionDomain([domains[axisTypeIndex]&&domains[axisTypeIndex][key]||[],dom["".concat(field)]],typeOfField))})})},cIdx=0,len2=unitsArr.length;cIdx1&&typeOfAxis===scale_type_namespaceObject.LINEAR&&axes[0].config().alignZeroLine)axes.forEach(function(axis,i){key=axisType?"".concat(idx,"0").concat(i):"0".concat(idx).concat(i),domain=domains[axisType][key],min[i]=domain[0],max[i]=domain[1]}),adjustedDomain=function getAdjustedDomain(max,min){var y1ratio=max[0]/(max[0]-min[0]),y2ratio=max[1]/(max[1]-min[1]),allSameSign=!1;return min[0]>0&&min[1]>0&&min[1]>0&&max[1]>0&&(allSameSign=!0,min[0]=0,min[1]=0),min[0]<0&&min[1]<0&&min[1]<0&&max[1]<0&&(allSameSign=!0,max[0]=0,max[1]=0),allSameSign||y1ratio===y2ratio||(y1ratiocounter)for(var _i=counter;_i-1&&(projections=[[_facet,_facet]],primaryFacets.splice(_existIndex,1)),secondaryFacets.splice(0,1)}else{var axisFromIndex=primaryFacets.length-1,facet=primaryFacets[axisFromIndex];projections=[[facet]];var existIndex=getIndex(secondaryFacets,facet);existIndex>-1&&(projections=[[facet,facet]],secondaryFacets.splice(existIndex,1)),primaryFacets.splice(axisFromIndex,1)}return{facets:facets=(facets=[].concat(primaryFacets,secondaryFacets)).filter(function(el,index,self){return index===self.findIndex(function(t){return t.toString()===el.toString()})}),projections:projections}}},{key:"fieldSanitizer",value:function fieldSanitizer(datamodel,config){return cartesian_encoder_get(cartesian_encoder_getPrototypeOf(CartesianEncoder.prototype),"fieldSanitizer",this).call(this,datamodel,config)}},{key:"getRetinalFieldsDomain",value:function getRetinalFieldsDomain(dataModels,encoding){var groupedModel=dataModels.groupedModel,domains={};for(var key in encoding)if({}.hasOwnProperty.call(encoding,key)){var encodingObj=encoding[key],field=encodingObj.field;if(!encodingObj.domain&&field){var domain=retriveDomainFromData(groupedModel,field);domains[field]=domain}}return domains}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer,i){var def=src_layer_factory.sanitizeLayerConfig(layer);def.order=i,serializedLayers.push(def)}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),layerConfig.push(config)}),layerConfig}},{key:"getLayerConfig",value:function getLayerConfig(fields,userLayerConfig,retinalConfig){var layerConfig=[],columnFields=fields.columnFields,rowFields=fields.rowFields;return columnFields.forEach(function(colField){var colFieldName=colField.toString();rowFields.forEach(function(rowField){var configs=[],rowFieldName=rowField.toString(),encoding={x:{field:colFieldName},y:{field:rowFieldName}},rowFieldType=rowField.subtype(),mark=function getDefaultMark(colFieldType,rowFieldType){return"categorical"===colFieldType||"categorical"===rowFieldType?"bar":"temporal"===colFieldType||"temporal"===rowFieldType?"line":"point"}(colField.subtype(),rowFieldType),defConfigs=[{mark:mark,def:{mark:mark,encoding:encoding}}],layerConfigs=function getLayerConfFromFields(colFields,rowFields,userLayerConfig){return userLayerConfig.filter(function(conf){var _ref,_ref2,_ref3,userConf=conf instanceof Array?conf:[conf],encodingArr=(_ref=[]).concat.apply(_ref,encoder_helper_toConsumableArray(userConf.map(function(d){return d.encoding}).filter(function(d){return void 0!==d})));if(!encodingArr.length)return!0;var xFields=(_ref2=[]).concat.apply(_ref2,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.x&&d.x.field,d.x0&&d.x0.field]}))).filter(function(d){return void 0!==d&&null!==d}),yFields=(_ref3=[]).concat.apply(_ref3,encoder_helper_toConsumableArray(encodingArr.map(function(d){return[d.y&&d.y.field,d.y0&&d.y0.field]}))).filter(function(d){return void 0!==d&&null!==d});if(!xFields.length&&!yFields.length)return!0;var colFieldExist=!!xFields.length&&xFields.every(function(d){return-1!==colFields.indexOf(d)}),rowFieldExist=!!yFields.length&&yFields.every(function(d){return-1!==rowFields.indexOf(d)});return xFields.length&&yFields.length?colFieldExist&&rowFieldExist:colFieldExist||rowFieldExist})}(colField.getMembers(),rowField.getMembers(),userLayerConfig||[]);configs=layerConfigs.length?layerConfigs.map(function(layerConf){var mergedLayerConf=mergeRecursive(mergeRecursive({},defConfigs[0].def),layerConf),serializedLayerConfig=src_layer_factory.getSerializedConf(mergedLayerConf.mark,mergedLayerConf);return{mark:mergedLayerConf.mark,order:mergedLayerConf.order,def:serializedLayerConfig}}):defConfigs,layerConfig.push.apply(layerConfig,cartesian_encoder_toConsumableArray(configs))})}),this.sanitizeLayerConfig(retinalConfig,layerConfig)}}],[{key:"type",value:function type(){return cartesian_encoder_CARTESIAN}}]),CartesianEncoder}();function polar_encoder_typeof(obj){return(polar_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function polar_encoder_toConsumableArray(arr){return function polar_encoder_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);icounter)for(var _i=counter;_i0&&(config=mergeRecursive(config,userLayerConfig[0])),layerConfig.push(config)}),0===layerConfig.length&&(layerConfig=userLayerConfig);var sanitizedConfig=this.sanitizeLayerConfig(retinalConfig,layerConfig);return this.layers(sanitizedConfig),sanitizedConfig}},{key:"serializeLayerConfig",value:function serializeLayerConfig(layerArray){var serializedLayers=[];return layerArray.length&&layerArray.forEach(function(layer){var def=src_layer_factory.getSerializedConf(layer.mark,layer);serializedLayers.push({mark:layer.mark,def:def})}),serializedLayers}},{key:"sanitizeLayerConfig",value:function sanitizeLayerConfig(encodingConfigs,userLayerConfig){var layerConfig=[];return userLayerConfig.forEach(function(config){var def=toArray(config.def);encoder_helper_sanitizeIndividualLayerConfig(encodingConfigs,def),def.forEach(function(conf){var encoding=conf.encoding||(conf.encoding={});!encoding.angle&&(encoding.angle={});var angleField=getObjProp(encoding.angle,"field"),angle0Field=getObjProp(encoding.angle0,"field");angleField||Object.assign(encoding.angle,{field:encodingConfigs.color&&encodingConfigs.color.field}),angle0Field||(!encoding.angle0&&(encoding.angle0={}),Object.assign(encoding.angle0,{field:encoding.angle.field}))}),layerConfig.push(config)}),layerConfig}}],[{key:"type",value:function type(){return polar_encoder_POLAR}}]),PolarEncoder}();function retinal_encoder_typeof(obj){return(retinal_encoder_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function retinal_encoder_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{},axisType=axesCreators.axisType,fieldsConfig=axesCreators.fieldsConfig,field=fieldProps.field,axis=[],Cls=scaleMaps[axisType];return fieldProps.type=fieldProps.type?fieldProps.type:group_utils_getAxisType(fieldsConfig,field||null),axis.push(new Cls(fieldProps)),axis}({axisType:axisType,fieldsConfig:fieldsConfig},config[axisType])}),newAxes}},{key:"setCommonDomain",value:function setCommonDomain(context){var domains=context.domains,axes=context.axes,encoding=context.encoding;return Object.entries(encoding).forEach(function(enc){if(enc[1]&&enc[1].field){var encType=enc[0],field=enc[1].field;field&&axes[encType].forEach(function(axis){var domain=domains[field];!enc[1].domain&&axis.updateDomain(domain)})}}),axes}}],[{key:"type",value:function type(){return"retinal"}}]),RetinalEncoder}(),group_utils_this=void 0;function group_utils_slicedToArray(arr,i){return function group_utils_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function group_utils_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function group_utils_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function group_utils_toConsumableArray(arr){return function group_utils_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];return"".concat(axisName,"-axis-").concat(params.join("-"))},group_utils_headerCreator=function headerCreator(fields,fieldHeaders,TextCell,_ref2){var classPrefix=_ref2.classPrefix,labelManager=_ref2.labelManager;return fields.length>0?fields[0].map(function(cell,i){return new TextCell({type:"header",className:"".concat(classPrefix,"-grid-headers")},{labelManager:labelManager}).source(function getHeaderText(headers,index,rowLength){var header="";if(index===rowLength-1&&headers.length>rowLength){for(var i=index;i1||right.length>1)&&(borders.top=!0,borders.bottom=!0),borders}(leftRows,rightRows),showColBorders=function getColumnsBorders(top,bottom){var borders={left:!1,right:!1};return(top.length||bottom.length)&&(top[0]&&top[0].length>1||bottom[0]&&bottom[0].length>1)&&(borders.left=!0,borders.right=!0),borders}(topColumns,bottomColumns),showValueBorders=function getValueBorders(rows,columns){var borders={top:!0,left:!0,bottom:!0,right:!0},borderTypeRow=[constants_LEFT,constants_RIGHT],borderTypeCol=["top","bottom"];return rows.forEach(function(e,i){e[0]&&e[0].length?borders[borderTypeRow[i]]=!0:borders[borderTypeRow[i]]=!1}),columns.forEach(function(e,i){e.length?borders[borderTypeCol[i]]=!0:borders[borderTypeCol[i]]=!1}),borders}([leftRows,rightRows],[topColumns,bottomColumns]),valueMatrix.length>1&&(showValueBorders.top=!0,showValueBorders.bottom=!0),valueMatrix.length&&valueMatrix[0].length>1&&(showValueBorders.left=!0,showValueBorders.right=!0),{showRowBorders:showRowBorders,showColBorders:showColBorders,showValueBorders:showValueBorders}},group_utils_sortFacetFields=function sortFacetFields(facets,keys,config){var schema=[],sortInfo=[],sortConfig=config.sort;return facets.forEach(function(facet){var name="".concat(facet),facetSortConfig=sortConfig[name];facetSortConfig&&sortInfo.push([name,facetSortConfig]),schema.push(facet.getSchemaDef())}),new datamodel_default.a([[]].concat(group_utils_toConsumableArray(keys)),schema).sort(sortInfo,{saveChild:!1}).getData().data};function matrix_model_objectSpread(target){for(var i=1;i0?formattedColKeys[0].map(function(col,i){return formattedColKeys.map(function(row){return row[i]})}):formattedColKeys}};function cell_creator_slicedToArray(arr,i){return function cell_creator_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function cell_creator_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function cell_creator_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function cell_creator_toConsumableArray(arr){return function cell_creator_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?rowProjections.length:1):(keys=columnKeys,length=colProjections.length>0?colProjections.length:1),keys=keys.map(function(arr){return arr.map(function(val){return resolver.valueParser()(val)})}),section.length&&headerFrom===type&&axis&&keys.length){var hContext={axis:axis,length:length,type:type},headers=[];index<2?(hContext.keys=keys,hContext.facet=facet.rows,headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)):(hContext.facet=facet.columns,hContext.keys=keys[0].map(function(key,i){return keys.map(function(e){return e[i]})}),headers=cell_creator_headerPlaceholderGn(hContext,selectionObj,cells,labelManager)),selectionObj["".concat(type,"Headers")]=headers}else selectionObj["".concat(type,"Headers")]=null}),selectionObj},cell_creator_getAxisFields=function getAxisFields(projections){var fieldHolder=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return projections.reduce(function(acc,item){return[].concat(cell_creator_toConsumableArray(acc),cell_creator_toConsumableArray(item.reduce(function(ac,field){return field instanceof simple_var_SimpleVariable?[].concat(cell_creator_toConsumableArray(ac),[field.oneVar()]):ac},[])))},fieldHolder)},cell_creator_transformDataModel=function transformDataModel(dataModel,config,resolver){var groupedModel,fieldsConfig=dataModel.getFieldsConfig(),resolvedData=resolver.data(),groupBy=config.groupBy,suppliedLayers=config.suppliedLayers,facetsAndProjections=config.facetsAndProjections;if(resolvedData instanceof datamodel_default.a&&resolvedData.dispose(),groupedModel=dataModel.project(dataModel.getSchema().map(function(d){return d.name})),resolver.data(groupedModel),!groupBy.disabled){var allFields=function extractFields(facetsAndProjections,layerFields){var _ref6,fields=Object.values(facetsAndProjections).map(function(arr){var _ref4,_ref5,flattenArray=(_ref4=[]).concat.apply(_ref4,group_utils_toConsumableArray(arr));return(_ref5=[]).concat.apply(_ref5,group_utils_toConsumableArray(flattenArray.map(function(field){return field instanceof variable_Variable?field.getMembers():field})))});return(_ref6=[]).concat.apply(_ref6,group_utils_toConsumableArray(fields).concat(group_utils_toConsumableArray(layerFields)))}(facetsAndProjections,function getFieldsFromSuppliedLayers(suppliedLayerConfig,fieldsConfig){var _ref3,fields=[],encodingArr=suppliedLayerConfig.map(function(conf){return conf.encoding||{}});return fields=(fields=[].concat(group_utils_toConsumableArray(fields),[(_ref3=[]).concat.apply(_ref3,group_utils_toConsumableArray(encodingArr.map(function(enc){return Object.values(enc).map(function(d){return d.field})})))])).filter(function(field){return fieldsConfig[field]&&fieldsConfig[field].def.type===dist_datamodel.FieldType.DIMENSION})}(suppliedLayers,groupedModel.getFieldsConfig())),dimensions=allFields.filter(function(field){return getObjProp(fieldsConfig,field,"def","type")===dist_datamodel.FieldType.DIMENSION}),aggregationFns=groupBy.measures,measureNames=Object.keys(groupedModel.getFieldspace().getMeasure()),nearestAggFns=common_utils_retrieveNearestGroupByReducers.apply(void 0,[groupedModel].concat(cell_creator_toConsumableArray(measureNames))),resolvedAggFns=mergeRecursive(nearestAggFns,aggregationFns);groupedModel=groupedModel.groupBy(dimensions.length?dimensions:[""],resolvedAggFns).project(allFields)}return groupedModel=function sortDmTemporalFields(resolver,datamodel){var axisFields=[],projections=resolver.projections();axisFields=cell_creator_getAxisFields(projections.rowProjections,cell_creator_getAxisFields(projections.colProjections));var fieldConfig=datamodel.getFieldsConfig(),temporalFields=axisFields.reduce(function(acc,field){return"temporal"===fieldConfig[field].def.subtype?[].concat(cell_creator_toConsumableArray(acc),[[field]]):acc},[]);return temporalFields.length?datamodel.sort(temporalFields,{saveChild:!0}):datamodel}(resolver,groupedModel)},cell_creator_computeMatrices=function computeMatrices(context,config){var resolver=context.resolver,datamodel=context.datamodel,componentRegistry=context.componentRegistry,encoders=context.encoders,globalConfig=config.globalConfig,selection=config.selection,transform=config.transform,groupBy=globalConfig.autoGroupBy,labelManager=resolver.dependencies().smartlabel,fieldMap=datamodel.getFieldsConfig(),layerConfig=resolver.layerConfig(),registry=resolver.registry(),normalizedRows=resolver.horizontalAxis().fields,normalizedColumns=resolver.verticalAxis().fields,otherEncodings=resolver.optionalProjections(config,layerConfig),facetsAndProjections=resolver.getAllFields(),matrixGnContext={normalizedColumns:normalizedColumns,normalizedRows:normalizedRows,facetsAndProjections:facetsAndProjections,layers:layerConfig,fieldMap:fieldMap,otherEncodings:otherEncodings,encoders:encoders,facet:globalConfig.facet||{},axisFrom:globalConfig.axisFrom||{},selection:selection,resolver:resolver},cells={GeomCell:resolver.getCellDef(registry.GeomCell),AxisCell:resolver.getCellDef(registry.AxisCell),BlankCell:resolver.getCellDef(registry.BlankCell),TextCell:resolver.getCellDef(registry.TextCell)},isRowSizeEqual=group_utils_isDistributionEqual(normalizedRows),isColumnSizeEqual=group_utils_isDistributionEqual(normalizedColumns);resolver.colCells({}),resolver.rowCells({}),resolver.datamodelTransform(transform||{}),resolver.resetSimpleAxes();var newCacheMap={exitCellMap:resolver.cacheMaps().entryCellMap,entryCellMap:new Map};resolver.cacheMaps(newCacheMap);var valueCellContext={config:globalConfig,suppliedLayers:encoders.simpleEncoder.serializeLayerConfig(resolver.layerConfig()),resolver:resolver,cell:cells.GeomCell,encoder:encoders.simpleEncoder,newCacheMap:newCacheMap,detailFields:config.detail,retinalConfig:{color:config.color,size:config.size,shape:config.shape}},groupedModel=cell_creator_transformDataModel(datamodel,{facetsAndProjections:facetsAndProjections,suppliedLayers:valueCellContext.suppliedLayers,groupBy:groupBy},resolver),cellCreator=resolver.valueCellsCreator(valueCellContext),valueMatrixInfo=getMatrixModel(groupedModel,facetsAndProjections,cellCreator,globalConfig);!function removeExitCells(resolver){var _ref7,exitCells=resolver.cacheMaps().exitCellMap,store=resolver.store(),qualifiedStateProps=(_ref7=[]).concat.apply(_ref7,group_utils_toConsumableArray(visual_unit_VisualUnit.getQualifiedStateProps()).concat(group_utils_toConsumableArray(base_layer_BaseLayer.getQualifiedStateProps())));store.lockCommits(qualifiedStateProps),exitCells.forEach(function(placeholder){placeholder.remove()}),store.unlockCommits(qualifiedStateProps)}(resolver),resolver.cacheMaps().exitCellMap.clear(),resolver.valueMatrix(valueMatrixInfo.matrix);var _mutateAxesFromMap=function mutateAxesFromMap(cacheMaps,axes){var xAxes=null,yAxes=null,xAxesMap=cacheMaps.xAxesMap,yAxesMap=cacheMaps.yAxesMap,xAxisSet=axes.x,yAxisSet=axes.y;return xAxisSet&&xAxisSet.forEach(function(axisId){var xAxis=xAxesMap.get(axisId);(xAxes=xAxes||[]).push(xAxis)}),yAxisSet&&yAxisSet.forEach(function(axisId){var yAxis=yAxesMap.get(axisId);(yAxes=yAxes||[]).push(yAxis)}),{xAxes:xAxes,yAxes:yAxes}}(resolver.cacheMaps(),resolver.axes()),xAxes=_mutateAxesFromMap.xAxes,yAxes=_mutateAxesFromMap.yAxes;resolver.axes({x:xAxes,y:yAxes}),resolver.createUnits(componentRegistry,config);var _generateMatrices=function generateMatrices(context,matrices,cells,labelManager){var unitHeight=context.unitHeight,unitWidth=context.unitWidth,facetsAndProjections=context.facetsAndProjections,normalizedRows=context.normalizedRows,normalizedColumns=context.normalizedColumns,selection=context.selection,axisFrom=context.axisFrom,facet=context.facet,encoders=context.encoders,resolver=context.resolver,selectionObj=cell_creator_generatePlaceholders({fields:{rows:normalizedRows,columns:normalizedColumns},matrices:matrices,facetsAndProjections:facetsAndProjections,selection:selection,axisFrom:axisFrom,facet:facet,encoders:encoders,resolver:resolver},cells,labelManager),columnsPrimary=selectionObj.columnsPrimary,columnsSecondary=selectionObj.columnsSecondary,rowsPrimary=selectionObj.rowsPrimary,rowsSecondary=selectionObj.rowsSecondary,leftHeaders=selectionObj.leftHeaders,topHeaders=selectionObj.topHeaders,bottomHeaders=selectionObj.bottomHeaders,rightHeaders=selectionObj.rightHeaders,_map2=cell_creator_slicedToArray([rowsPrimary,rowsSecondary,columnsPrimary,columnsSecondary].map(function(d){return d?d.getObjects():[]}),4),rowPrime=_map2[0],rowSec=_map2[1],colPrime=_map2[2],colSec=_map2[3],_map4=cell_creator_slicedToArray([leftHeaders,rightHeaders].map(function(e){return e?e.getObjects().map(function(f){return f.getObjects()}):[]}),2),leftFacets=_map4[0],rightFacets=_map4[1],rowPriority=rowSec.length?1:-1;rowPrime.length&&rowPriority++;var colPriority=colSec.length?1:-1;colPrime.length&&colPriority++;var leftMatrix=leftFacets.length?leftFacets.map(function(d,i){return rowPrime[i]=rowPrime[i]?[rowPrime[i]]:[],[].concat(cell_creator_toConsumableArray(d),cell_creator_toConsumableArray(rowPrime[i]))}):rowPrime?rowPrime.map(function(d){return[d]}):[],rightMatrix=rowSec.length?rowSec.map(function(d,i){return[d].concat(cell_creator_toConsumableArray(rightFacets[i]||[]))}):rightFacets.length?rightFacets.map(function(d){return cell_creator_toConsumableArray(d)}):[],topMatrix=[];topHeaders&&topHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){topMatrix[i]=topMatrix[i]||[],topMatrix[i].push(x)})});colPrime.length&&topMatrix.push(colPrime);var bottomMatrix=[];colSec.length&&bottomMatrix.push(colSec);var currentBottomLength=bottomMatrix.length;bottomHeaders&&bottomHeaders.getObjects().forEach(function(e){e.getObjects().forEach(function(x,i){bottomMatrix[i+currentBottomLength]=bottomMatrix[i+currentBottomLength]||[],bottomMatrix[i+currentBottomLength].push(x)})});if(!leftMatrix.length&&!rightMatrix.length){var cell=new cells.BlankCell;cell.setAvailableSpace(unitWidth,unitHeight),leftMatrix=[[cell]]}if(!(topMatrix.length||bottomMatrix.length&&bottomMatrix[0].length)){var _cell=new cells.BlankCell;_cell.setAvailableSpace(unitWidth,unitHeight),bottomMatrix=[[_cell]]}return{rows:[leftMatrix,rightMatrix],columns:[topMatrix,bottomMatrix],selectionObj:selectionObj,colPriority:colPriority,rowPriority:rowPriority}}(matrixGnContext,{valuesMatrix:valueMatrixInfo,axesMatrix:resolver.axes()},cells,labelManager),rows=_generateMatrices.rows,columns=_generateMatrices.columns,selectionObj=_generateMatrices.selectionObj,rowPriority=_generateMatrices.rowPriority,colPriority=_generateMatrices.colPriority;return resolver.rowMatrix(rows),resolver.columnMatrix(columns),{rows:resolver.rowMatrix(),columns:resolver.columnMatrix(),values:resolver.valueMatrix(),isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,priority:{row:rowPriority,col:colPriority},selection:selectionObj,dataModels:{groupedModel:groupedModel,parentModel:datamodel}}},RESOLVER_PROPS={dependencies:{},units:{},datamodelTransform:{},layerConfig:{},matrixLayers:{},colCells:{},rowCells:{},rowMatrix:{},columnMatrix:{},valueMatrix:{},encoder:{},valueParser:{},data:{}};function matrix_resolver_slicedToArray(arr,i){return function matrix_resolver_arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function matrix_resolver_iterableToArrayLimit(arr,i){var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function matrix_resolver_nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function matrix_resolver_toConsumableArray(arr){return function matrix_resolver_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?leftRows[0].map(blankCellCreator):[],right:rightRows.length>0?rightRows[0].map(blankCellCreator):[]},_map2=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return topCols.map(function(col,i){return i===topCols.length-1?headers[type]:footers[type]})}),2),topLeft=_map2[0],topRight=_map2[1];if(0===topCols.length){var _map4=matrix_resolver_slicedToArray([constants_LEFT,constants_RIGHT].map(function(type){return bottomCols.map(function(col,i){return 0===i?headers[type]:footers[type]})}),2);bottomLeft=_map4[0],bottomRight=_map4[1]}else bottomLeft=bottomCols.map(function(){return leftRows.length>0?leftRows[0].map(blankCellCreator):[]}),bottomRight=bottomCols.map(function(){return rightRows.length>0?rightRows[0].map(blankCellCreator):[]});return lifeCycleManager.notify({client:[topLeft,topRight,bottomLeft,bottomRight],action:"initialized",formalName:"facet-headers"}),{topLeft:topLeft,topRight:topRight,bottomLeft:bottomLeft,bottomRight:bottomRight}}},{key:"getMatrices",value:function getMatrices(datamodel,config,componentRegistry,encoders){return cell_creator_computeMatrices({datamodel:datamodel,componentRegistry:componentRegistry,encoders:encoders,resolver:this},config)}},{key:"store",value:function store(){return arguments.length?(this._store=arguments.length<=0?void 0:arguments[0],this):this._store}},{key:"clear",value:function clear(){var cacheMaps=this._cacheMaps;for(var key in cacheMaps)cacheMaps[key].clear()}}]),MatrixResolver}();function value_matrix_defineProperties(target,props){for(var i=0;i3&&void 0!==arguments[3]?arguments[3]:{},context=firebolt.context,type=context.constructor.type(),payload=config.payload,data=context.data(),metaData=context.metaData(),fieldType=metaData.getData().schema[0].type,propPayload={},sourceId=context._id;propPayload.action=action_behaviour_map_propagationBehaviourMap[action]||action,propPayload.sideEffects=propagationSideEffects[action],propPayload.sourceCanvas=context.canvasAlias();var isMutableAction=firebolt._actions.behavioural[propPayload.action].constructor.mutates();if(null===payload.criteria)propagationData=null;else{var entrySet=selectionSet.mergedEnter,values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.rawVal});if("step"===type||"discrete"===type&&"measure"===fieldType){var field=Object.keys(payload.criteria||{})[0];propagationData=(values=data.filter(function(d){return-1!==entrySet.uids.indexOf(d.id)}).map(function(d){return d.range})).length?metaData.select(function(fields){for(var check=!1,i=0;i=values[i][0]&&fields[field].value<=values[i][1]);i++);return check},{saveChild:!1}):null}else"gradient"===type?propagationData=getDataModelFromRange(metaData,payload.criteria):values.length?propagationData=function assembleModelFromIdentifiers(model,identifiers){var data,schema=[],fieldMap=model.getFieldsConfig();return identifiers.length?function(){for(var fields=identifiers[0],len=fields.length,i=0;i=drawingInfMeasure+offset?[axisScale.invert(drawingInfMeasure+offset-selectionBoxMeasure),axisScale.invert(drawingInfMeasure+offset)]:subjectStartPoint-offset1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-fadeout"),!0),classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-fadeout"),!1)},brighten:function brighten(set){var config=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},classPrefix=context.config().classPrefix;set.mergedEnter.length||set.mergedExit.length?(classed(set.mergedEnter,config.className||"".concat(classPrefix,"-legend-brighten"),!0),classed(set.mergedExit,config.className||"".concat(classPrefix,"-legend-brighten"),!1)):classed(set.completeSet,config.className||"".concat(classPrefix,"-legend-brighten"),!1)}}};function legend_highlighter_typeof(obj){return(legend_highlighter_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function legend_highlighter_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]?arguments[2]:{};(0,this._strategies[options.strategy||this._strategy])(selectionSet,this)}}],[{key:"formalName",value:function formalName(){return"highlighter"}}]),LegendHighlighter}(),legend_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},data:{},fieldName:{},legendContainer:{},measurement:{sanitization:function sanitization(context,value){var measurement=mergeRecursive(context._measurement,value);return["padding","border","margin"].forEach(function(space){measurement[space]=Math.min(measurement[space]>0?measurement[space]:0,.1*measurement.maxWidth,.1*measurement.maxHeight)}),measurement}},logicalSpace:{},metaData:{},range:{sanitization:function sanitization(context,value){return context.scale().range(value),context.resetLogicalSpace(),context.store().commit("range",value),value}},scale:{},smartTicks:{},store:{},title:{sanitization:function sanitization(context,value){return mergeRecursive(context._title||{},value)}},labelManager:{},minTickDistance:{},valueParser:{defaultValue:function defaultValue(val){return val}}},ALIGN_HORIZONTAL="horizontal",ALIGN_VERTICAL="vertical",DEFAULT_MEASUREMENT={height:30,width:30,maxWidth:1/0,maxHeight:1/0,padding:2,margin:2,border:1},LEGEND_TITLE={text:"",orientation:function orientation(pos){return"left"===pos||"right"===pos?"left":"center"}},legend_defaults_DEFAULT_CONFIG={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(val,i,data,context){return context.valueParser()(val)}},icon:{className:"legend-icon",height:20,width:20,color:"rgba(0,0,0,.5)",type:"square"}}},defaults_ICON_MAP=function ICON_MAP(icon){return icon&&"string"==typeof icon?common_utils_getSymbol(icon):icon};function legend_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legend_helper_getScaleInfo=function getScaleInfo(scale){var scaleType=scale.constructor.type();return{scaleType:scaleType,domain:scale.uniqueValues(),steps:scale.config().stops||1,scaleFn:SCALE_FUNCTIONS[scaleType]}},legend_helper_getInterpolatedArrayData=function getInterpolatedArrayData(domainForLegend,scaleParams){var requiredWidth,requiredHeight,upperBound=domainForLegend[domainForLegend.length-1],minTickDiff=Math.ceil(domainForLegend[1]-domainForLegend[0]),maxTickDiff=Math.ceil(upperBound-domainForLegend[0]),alignment=scaleParams.alignment,smartLabelCalc=scaleParams.smartLabel,availableSpace=scaleParams.measures,minimumTickSize=scaleParams.minTickDistance,_smartLabelCalc$getOr=smartLabelCalc.getOriSize(upperBound),tickDimHeight=_smartLabelCalc$getOr.height,tickDimWidth=_smartLabelCalc$getOr.width;return Number.isInteger(upperBound)||(upperBound=upperBound.toFixed(2)),minTickDiff=minTickDiff<1?1:minTickDiff,requiredWidth=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*(tickDimWidth+minimumTickSize.width),requiredWidth-=Math.abs(maxTickDiff),requiredHeight=Math.abs(maxTickDiff)/Math.abs(minTickDiff)*tickDimHeight,requiredHeight-=Math.abs(maxTickDiff),domainForLegend=function getcomputedArray(computationhelper,requiredMeasure,availableMeasure,domainForLegend){var currentTickValue,nextTickValue,upperBound=domainForLegend[domainForLegend.length-1],param=computationhelper.measureParam,smartLabelCalc=computationhelper.smartLabelCalc,pixelPerTick=availableMeasure[param]/upperBound;if(availableMeasure[param]>=requiredMeasure[param])return domainForLegend;currentTickValue=smartLabelCalc.getOriSize(domainForLegend[0])[param];for(var i=1;i0?titleSpace.height+effPadding:0,titleWidth=titleSpace.width+effPadding,labelSpaces=this.getLabelSpaces(effPadding,align),_computeItemSpaces=function computeItemSpaces(config,measures,data){var totalHeight=0,totalWidth=0,maxItemSpaces={width:0,height:0},effPadding=measures.effPadding,titleWidth=measures.titleWidth,labelSpaces=measures.labelSpaces,titleHeight=measures.titleHeight,maxWidth=measures.maxWidth,item=config.item,align=config.align,icon=item.icon,textOrientation=item.text.orientation,itemSpaces=[],iconSpaces=[],maxIconWidth=0;return labelSpaces.forEach(function(labelSpace,i){var itemSpace={width:0,height:0},iconSpace={width:0,height:0},datum=data[i]||{};"left"===textOrientation||"right"===textOrientation?(labelSpace.width+=effPadding,iconSpace.width=(datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),itemSpace.width=labelSpace.width+maxIconWidth,labelSpace.height=Math.max(labelSpace.height,icon.height)+effPadding,iconSpace.height=labelSpace.height,itemSpace.height=labelSpace.height):(labelSpace.width=Math.max(labelSpace.width,datum.size?2*Math.sqrt(datum.size/Math.PI):icon.width)+effPadding,iconSpace.width=labelSpace.width,itemSpace.width=labelSpace.width,maxIconWidth=Math.max(iconSpace.width,maxIconWidth),labelSpace.height+=effPadding,iconSpace.height=icon.height+effPadding,itemSpace.height=labelSpace.height+iconSpace.height),"horizontal"===align?totalHeight=Math.max(totalHeight,itemSpace.height):(totalHeight+=itemSpace.height,totalWidth=Math.max(totalWidth,itemSpace.width,titleWidth)),maxItemSpaces={width:Math.max(itemSpace.width,maxItemSpaces.width),height:Math.max(itemSpace.height,maxItemSpaces.height)},itemSpaces.push(itemSpace),iconSpaces.push(iconSpace)}),itemSpaces.forEach(function(itemSpace,i){if("horizontal"===align)itemSpace.height=totalHeight,iconSpaces[i].width=maxIconWidth,"left"===textOrientation||"right"===textOrientation?(labelSpaces[i].height=totalHeight,iconSpaces[i].height=totalHeight,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth):(labelSpaces[i].width=maxIconWidth,itemSpaces[i].width=maxIconWidth,labelSpaces[i].width=maxIconWidth),totalWidth=Math.max(totalWidth+itemSpaces[i].width);else if(itemSpace.width=Math.max(totalWidth,maxWidth),"top"===textOrientation||"bottom"===textOrientation)labelSpaces[i].width=totalWidth,iconSpaces[i].width=totalWidth,maxIconWidth=totalWidth;else{var labelWidth=labelSpaces[i].width,newLabelWidth=maxItemSpaces.width-maxIconWidth;iconSpaces[i].width=maxIconWidth,itemSpaces[i].width=labelSpaces[i].width+maxIconWidth,labelSpaces[i].width=Math.max(labelWidth,newLabelWidth),totalWidth=Math.max(totalWidth,itemSpace.width)}}),totalWidth=Math.ceil(Math.max(totalWidth,titleWidth))+effPadding,totalHeight+=titleHeight+effPadding,{totalHeight:totalHeight=Math.ceil(totalHeight),totalWidth:totalWidth,itemSpaces:itemSpaces,iconSpaces:iconSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth}}(this.config(),{effPadding:effPadding,titleWidth:titleWidth,labelSpaces:labelSpaces,titleHeight:titleHeight,maxWidth:maxWidth,maxHeight:maxHeight},this.data()),totalHeight=_computeItemSpaces.totalHeight,totalWidth=_computeItemSpaces.totalWidth,itemSpaces=_computeItemSpaces.itemSpaces,iconSpaces=_computeItemSpaces.iconSpaces,maxItemSpaces=_computeItemSpaces.maxItemSpaces,maxIconWidth=_computeItemSpaces.maxIconWidth;return this.measurement({width:Math.max(totalWidth,width)+effMargin+effBorder,height:Math.max(totalHeight,height)+effMargin+effBorder,labelSpaces:labelSpaces,iconSpaces:iconSpaces,itemSpaces:itemSpaces,maxItemSpaces:maxItemSpaces,maxIconWidth:maxIconWidth,titleSpaces:{width:Math.min(maxWidth,this.measurement().width)-effMargin-effBorder,height:titleHeight}}),this}},{key:"getTitleSpace",value:function getTitleSpace(){return this._labelManager.setStyle(renderer_utils_getSmartComputedStyle(renderer_utils_selectElement("body"),"".concat(this.config().classPrefix,"-legend-title"))),this._labelManager.getOriSize(this.title().text?this.title().text:"")}},{key:"renderTitle",value:function renderTitle(container){var _this$measurement2=this.measurement(),titleSpaces=_this$measurement2.titleSpaces,border=_this$measurement2.border,padding=_this$measurement2.padding,width=_this$measurement2.width,maxWidth=_this$measurement2.maxWidth,_this$config3=this.config(),borderStyle=_this$config3.borderStyle,borderColor=_this$config3.borderColor;return function titleCreator(container,title,measurement,config){var titleWidth=Math.min(measurement.maxWidth,measurement.width),titleContainer=makeElement(container,"table",[1],"".concat(config.classPrefix,"-legend-title")).style("width","".concat(titleWidth,"px")).style("height","".concat(measurement.height,"px")).style("border-bottom","".concat(measurement.border,"px ").concat(config.borderStyle," ").concat(config.borderColor)).style("text-align",title.orientation instanceof Function?title.orientation(config.position):title.orientation);return makeElement(titleContainer,"td",[1],"".concat(config.classPrefix,"-legend-title-text")).style("width","".concat(titleWidth,"px")).style("max-width","".concat(titleWidth,"px")).style("height","100%").style("line-height",1).style("padding","".concat(measurement.padding,"px")).text(title.text).style("overflow-x","scroll").node()}(container,this.title(),{height:titleSpaces.height,width:width,maxWidth:maxWidth,border:border,padding:padding,borderStyle:borderStyle,borderColor:borderColor},this.config())}},{key:"render",value:function render(){var marginPosition,firebolt=this.firebolt(),_this$config4=this.config(),classPrefix=_this$config4.classPrefix,borderStyle=_this$config4.borderStyle,borderColor=_this$config4.borderColor,position=_this$config4.position,_this$measurement3=this.measurement(),maxWidth=_this$measurement3.maxWidth,maxHeight=_this$measurement3.maxHeight,width=_this$measurement3.width,height=_this$measurement3.height,margin=_this$measurement3.margin,border=_this$measurement3.border,legendContainer=makeElement(renderer_utils_selectElement(this.mount()),"div",[1],"".concat(classPrefix,"-legend-box"));switch(position){case"top":marginPosition="margin-".concat("bottom");break;case"left":marginPosition="margin-".concat("right");break;case"bottom":marginPosition="margin-".concat("top");break;default:marginPosition="margin-".concat("left")}return legendContainer.classed("".concat(classPrefix,"-legend-box-").concat(this._id),!0),legendContainer.style("float","left"),legendContainer.style("width","".concat(Math.min(maxWidth,width)-2*margin,"px")).style("height","".concat(Math.min(maxHeight,height)-2*margin,"px")).style("".concat(marginPosition),"".concat(margin,"px")).style("border","".concat(border,"px ").concat(borderStyle," ").concat(borderColor)),this.legendContainer(legendContainer.node()),this.renderTitle(legendContainer),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){var fieldName=this.fieldName();return"measure"===this.metaData().getData().schema[0].type?function simple_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},fieldName,data.range):[[fieldName],[data.rawVal]]}}],[{key:"create",value:function create(dependencies){return new SimpleLegend(dependencies)}},{key:"defaultConfig",value:function defaultConfig(){return legend_defaults_DEFAULT_CONFIG}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENT}}]),SimpleLegend}();function position_config_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var legendOrientation=(position_config_defineProperty(_legendOrientation={},"horizontal",{datasets:function datasets(data){return{row:[1],column:data}},itemContainerMeasures:function itemContainerMeasures(measurement){var itemSpaces=measurement.itemSpaces,width=measurement.width;return{row:{width:"".concat(width,"px"),padding:"".concat(0,"px")},column:{width:function width(d,i){return"".concat(itemSpaces[i].width,"px")},padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces;return{iconHeight:measurement.height,iconWidth:maxItemSpaces.width,stepPadding:{horizontal:!0,vertical:!1}}}}),position_config_defineProperty(_legendOrientation,"vertical",{datasets:function datasets(data){return{row:data,column:function column(d){return[d]}}},itemContainerMeasures:function itemContainerMeasures(measurement,config){var width=measurement.width,padding=config.padding;return{row:{width:"".concat(width,"px"),padding:"".concat(padding,"px")},column:{width:"".concat(width,"px"),padding:"".concat(0,"px")}}},getStepSpacesInfo:function getStepSpacesInfo(measurement){var maxItemSpaces=measurement.maxItemSpaces,width=measurement.width;return{iconHeight:maxItemSpaces.height,iconWidth:width,stepPadding:{horizontal:!1,vertical:!0}}}}),_legendOrientation),positionConfig=(position_config_defineProperty(_positionConfig={},"left",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"right",legendOrientation.vertical),position_config_defineProperty(_positionConfig,"top",legendOrientation.horizontal),position_config_defineProperty(_positionConfig,"bottom",legendOrientation.horizontal),_positionConfig),alignmentMap=(position_config_defineProperty(_alignmentMap={},"left","end"),position_config_defineProperty(_alignmentMap,"right","start"),position_config_defineProperty(_alignmentMap,"top","center"),position_config_defineProperty(_alignmentMap,"bottom","center"),_alignmentMap),itemStack=(position_config_defineProperty(_itemStack={},"left",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"right",["shape",VALUE]),position_config_defineProperty(_itemStack,"top",[VALUE,"shape"]),position_config_defineProperty(_itemStack,"bottom",["shape",VALUE]),_itemStack),renderer_createLegendSkeleton=function createLegendSkeleton(context,container,classPrefix,data){var gradWidth,gradHeight,maxGradHeight,maxGradWidth,measurement=context.measurement(),margin=measurement.margin,border=measurement.border,titleSpaces=measurement.titleSpaces,width=measurement.width,height=measurement.height,maxWidth=measurement.maxWidth,maxHeight=measurement.maxHeight;gradHeight=height-(titleSpaces.height+2*margin+2*border),gradWidth=width-(2*margin+2*border),maxGradHeight=maxHeight-(titleSpaces.height+2*margin+2*border),maxGradWidth=maxWidth-(2*margin+2*border);var legendBody=makeElement(container,"div",[1],"".concat(classPrefix,"-legend-body"));return legendBody.select(".".concat(classPrefix,"-legend-overflow")).remove(),maxGradWidth&&maxGradWidth4)}(shape)?shape:defaults_ICON_MAP(shape).size(size)(),makeElement(groupElement,"path",function(data){return[data]}).attr("d",pathStr)}return d[1]="circle",createShape(d,elem,"circle")}(datum,makeElement(svg,"g",[datum[1]],"".concat(classPrefix,"-legend-icon")),datum[3]?"circle":"square",iconWidth,iconHeight).attr("transform","translate(".concat(maxIconWidth/2-padding," ").concat(iconHeight/2,")")).attr("fill",datum[2]||color):makeElement(svg,"rect",[datum[1]],"".concat(classPrefix,"-legend-icon")).attr("x",0).attr("y",0).attr("width",maxIconWidth).attr("height",iconHeight).attr("fill",datum[2]||color)};function discrete_legend_typeof(obj){return(discrete_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function discrete_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function discrete_legend_toConsumableArray(arr){return function discrete_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&domainForLegend.push(domain[1]),domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b}),domainForLegend=legend_helper_getInterpolatedArrayData(domainForLegend,scaleParams)):domainForLegend=legend_helper_getInterpolatedData(domain,steps-1,scaleParams),(domainForLegend=gradient_legend_toConsumableArray(new Set(domainForLegend)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=domainForLegend[i];return gradient_legend_defineProperty(_ref={},scaleType,"size"===scaleType?scale[scaleFn](ele)*scale.getScaleFactor():scale[scaleFn](Math.floor(ele))),gradient_legend_defineProperty(_ref,"value",+value.toFixed(2)),gradient_legend_defineProperty(_ref,"id",i),_ref}).filter(function(d){return null!==d.value})}},{key:"getLabelSpaces",value:function getLabelSpaces(effPadding){this.config({item:{text:{orientation:this.config().position}}});var axis=function createAxis(context){var data=context.data(),align=context.config().align,AxisCell=context._cells.AxisCell,newAxis=new continous_axis_ContinousAxis({id:"legend-".concat(context._id),orientation:align===ALIGN_VERTICAL?"right":"bottom",style:context._computedStyle,nice:!1,showAxisName:!1,tickValues:data.map(function(d){return d.value}),fixedBaseline:!1,labels:{rotation:null}},{labelManager:context._labelManager});return newAxis.domain(getGradientDomain(data)),newAxis.range([1,1]),(new AxisCell).source(newAxis).config({margin:{left:0,bottom:0,top:0,right:0}})}(this),axisSpace=axis.getLogicalSpace(),space={width:axisSpace.width-effPadding,height:axisSpace.height-effPadding},axisDomainLength=axis.source().domain().length,labelSpaces=new Array(axisDomainLength).fill(space);return this.axis(axis),labelSpaces}},{key:"getDrawingContext",value:function getDrawingContext(){return{svgContainer:this._legendGradientSvg}}},{key:"render",value:function render(){var firebolt=this.firebolt(),legendContainer=gradient_legend_get(gradient_legend_getPrototypeOf(GradientLegend.prototype),"render",this).call(this,this.mount());return function renderGradient(context,container){var gradHeight,gradWidth,_context$config2=context.config(),align=_context$config2.align,classPrefix=_context$config2.classPrefix,item=_context$config2.item,data=context.data(),_createLegendSkeleton=gradient_helper_createLegendSkeleton(container,classPrefix,data),legendContainer=_createLegendSkeleton.legendContainer,legendGradSvg=_createLegendSkeleton.legendGradSvg,legendGradCont=_createLegendSkeleton.legendGradCont,linearGradient=_createLegendSkeleton.linearGradient,legendRect=_createLegendSkeleton.legendRect,labelDim=context.axis().source().getAxisDimensions().tickDimensions,_context$measurement=context.measurement(),padding=_context$measurement.padding,margin=_context$measurement.margin,border=_context$measurement.border,titleSpaces=_context$measurement.titleSpaces,maxItemSpaces=_context$measurement.maxItemSpaces,maxHeight=_context$measurement.maxHeight,maxWidth=_context$measurement.maxWidth,height=_context$measurement.height,width=_context$measurement.width,gradientDimensions={};gradHeight=Math.floor(Math.min(height,maxHeight)-(titleSpaces.height+2*margin+2*border)),gradWidth=Math.floor(Math.min(width,maxWidth)-(2*margin+2*border)),align===ALIGN_HORIZONTAL?(gradientDimensions.height=item.icon.height,gradientDimensions.width=gradWidth-2*padding-labelDim.width/2,linearGradient.attr("x2","100%").attr("y1","0%"),legendGradCont.attr("transform","translate( ".concat(labelDim.width/2," 0)")),gradient_helper_renderAxis(context,legendContainer,gradHeight-item.icon.height-padding,gradWidth-2*padding-1),applyStyle(legendContainer,{height:"".concat(maxItemSpaces.height+border+padding,"px"),width:"".concat(Math.min(width,maxWidth),"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height),legendRect.attr("width",gradientDimensions.width-labelDim.width/2)):(gradientDimensions.height=gradHeight-2*padding-labelDim.height/2,gradientDimensions.width=item.icon.width,linearGradient.attr("x2","0%").attr("y1","100%"),legendGradCont.attr("transform","translate(0 ".concat(labelDim.height/2,")")),gradient_helper_renderAxis(context,legendContainer,gradHeight-2*padding-1,gradWidth-item.icon.width-2*padding),applyStyle(legendContainer,{height:"".concat(Math.min(height,maxHeight),"px"),width:"".concat(maxWidth,"px"),padding:"".concat(padding,"px")}),legendRect.attr("height",gradientDimensions.height-labelDim.height/2),legendRect.attr("width",gradientDimensions.width)),applyStyle(legendGradSvg,{height:"".concat(gradientDimensions.height,"px"),width:"".concat(gradientDimensions.width,"px")}),applyStyle(legendRect,{fill:"url(#linear-gradient)"}),legendGradSvg.attr("height",gradientDimensions.height),legendGradSvg.attr("width",gradientDimensions.width),context.measurement({gradientDimensions:gradientDimensions}),context._legendGradientSvg=legendGradSvg}(this,legendContainer),legendContainer.selectAll("div").style("float","left"),firebolt.mapActionsAndBehaviour(),firebolt.createSelectionSet(this.data().map(function(d){return d.id})),legendContainer}},{key:"getCriteriaFromData",value:function getCriteriaFromData(data){return[[this.fieldName()],[data.value]]}}],[{key:"create",value:function create(dependencies){return new GradientLegend(dependencies)}},{key:"type",value:function type(){return"gradient"}}]),GradientLegend}();function step_legend_typeof(obj){return(step_legend_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function step_legend_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function step_legend_toConsumableArray(arr){return function step_legend_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);isteps[steps.length-1]&&(domainBounds.upper=["".concat(formatter.bounds.upper," ").concat(steps[steps.length-1])])):domainLeg=legend_helper_getInterpolatedData(domain,steps,scaleParams),domainLeg=(domainLeg=step_legend_toConsumableArray(new Set(domainLeg)).sort(function(a,b){return a-b})).map(function(ele,i){var _ref,value=null;return i0&&void 0!==arguments[0]?arguments[0]:{},registrableComponents=this._registrableComponents,mergedPolicy=mergeRecursive(mergeRecursive({},function defaultPolicy(registrableComponents){var aliases=registrableComponents.map(function(comp){return comp.alias()});return{behaviours:{"*":function _(propagationPayload){var propagationCanvas=propagationPayload.sourceCanvas;return!propagationCanvas||-1!==aliases.indexOf(propagationCanvas)}}}}(registrableComponents)),policy);return registrableComponents.forEach(function(canvas){canvas.firebolt().crossInteractionPolicy(mergedPolicy)}),this}}]),ActionModel}()),TITLE_CONFIG={position:"top",align:"left",padding:4,className:"".concat("muze","-title-container")},SUB_TITLE_CONFIG={position:"top",align:"left",padding:16,maxLines:2,className:"".concat("muze","-subtitle-container")},MESSAGE_CONFIG={className:"".concat("muze","-message-container")},LAYOUT_ALIGN_LEFT="left";function canvas_local_options_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var local_options_localOptions=(canvas_local_options_defineProperty(_localOptions={},"rows",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"columns",{value:null,meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"color",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"shape",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"size",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object",sanitization:function sanitization(config){return"string"!=typeof config&&config?config:{field:config}}}}),canvas_local_options_defineProperty(_localOptions,"detail",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"layers",{value:[],meta:{typeCheck:"constructor",typeExpected:"Array"}}),canvas_local_options_defineProperty(_localOptions,"transform",{value:null,meta:{typeCheck:"constructor",typeExpected:"Object"}}),_localOptions),canvasOptions=(canvas_local_options_defineProperty(_canvasOptions={},"title",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(title){if("string"==typeof title||!title){return function t(){return title}}return title},function(titleConfig){var defConfig=mergeRecursive({},TITLE_CONFIG);return mergeRecursive(defConfig,titleConfig)}]}}),canvas_local_options_defineProperty(_canvasOptions,"subtitle",{value:[null,null],meta:{typeCheck:["constructor","constructor"],typeExpected:["Function","Object"],spreadParams:!0,sanitization:[function(subtitle){if("string"==typeof subtitle||!subtitle){return function sub(){return subtitle}}return subtitle},function(subtitleConfig){var defConfig=mergeRecursive({},SUB_TITLE_CONFIG);return mergeRecursive(defConfig,subtitleConfig)}]}}),_canvasOptions);function layoutComponent_defineProperties(target,props){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],isGridComponent=arguments.length>3&&void 0!==arguments[3]&&arguments[3],cut="",componentRatioWidth=1,leftHeight=0,leftWidth=0;if(!component)return{first:definitionModel,second:definitionModel};var _component$getLogical=component.getLogicalSpace(),componentHeight=_component$getLogical.height,componentWidth=_component$getLogical.width,position=component.position();"top"===position||"bottom"===position?(cut="h",componentRatioWidth=componentHeight/definitionModel.remainingHeight(),leftHeight=definitionModel.remainingHeight()-componentHeight,leftWidth=definitionModel.remainingWidth()):(cut="v",componentRatioWidth=componentWidth/definitionModel.remainingWidth(),leftWidth=definitionModel.remainingWidth()-componentWidth,leftHeight=definitionModel.remainingHeight()),leftOvercomponentRationWidth=1-componentRatioWidth,definitionModel.cut(cut);var firstLaneConfig={host:component.name(),cut:null,ratioWeight:componentRatioWidth,preferred:!isGridComponent&&isPreferred,lanes:[]},firstLane=new DefinitionModel(firstLaneConfig);firstLane.remainingHeight(componentHeight),firstLane.remainingWidth(componentWidth);var secondLane=new DefinitionModel({host:null,cut:null,ratioWeight:leftOvercomponentRationWidth,preferred:!isGridComponent&&!isPreferred,lanes:[]});return secondLane.remainingHeight(leftHeight),secondLane.remainingWidth(leftWidth),isPreferred?definitionModel.lanes([firstLane]):"top"===position||"left"===position?definitionModel.lanes([firstLane,secondLane]):definitionModel.lanes([secondLane,firstLane]),{first:firstLane,second:secondLane}}function tree_toConsumableArray(arr){return function tree_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);i0?matrix[0]:matrix[1];return isTransposed?(joinedMatrix=matrix[0].length>0?utils_toConsumableArray(matrix[0]):[],joinedMatrix=matrix[1].length>0?[].concat(utils_toConsumableArray(joinedMatrix),utils_toConsumableArray(matrix[1])):joinedMatrix):joinedMatrix=joinedMatrix.map(function(row,rowIndex){var rowData=[];return matrix[0].length>0&&(rowData=utils_toConsumableArray(matrix[0][rowIndex])),matrix[1].length>0&&(rowData=[].concat(utils_toConsumableArray(rowData),utils_toConsumableArray(matrix[1][rowIndex]))),rowData}),joinedMatrix},utils_computeLogicalSpace=function computeLogicalSpace(){var item=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},config=arguments.length>1?arguments[1]:void 0,maxMeasures=arguments.length>2?arguments[2]:void 0,_config$isTransposed=config.isTransposed,isTransposed=void 0!==_config$isTransposed&&_config$isTransposed,unitMeasures=config.unitMeasures,_getMeasureInfo=function getMeasureInfo(isTransposed){return isTransposed?{firstMeasure:enums_constants_HEIGHT,secondMeasure:"width"}:{firstMeasure:"width",secondMeasure:enums_constants_HEIGHT}}(isTransposed),firstMeasure=_getMeasureInfo.firstMeasure,secondMeasure=_getMeasureInfo.secondMeasure,values=item.values,minMeasures=function getMinMeasures(isTransposed,unitMeasures){return isTransposed?{height:0,width:unitMeasures.width}:{height:unitMeasures.height,width:0}}(isTransposed,unitMeasures);if(values[0].key){var _logicalSpace,logicalSpace=(utils_defineProperty(_logicalSpace={},firstMeasure,0),utils_defineProperty(_logicalSpace,secondMeasure,0),_logicalSpace);return values.forEach(function(valueItem){var space=computeLogicalSpace(valueItem,config,maxMeasures);logicalSpace[firstMeasure]=Math.max(logicalSpace[firstMeasure],space[firstMeasure],minMeasures[firstMeasure]),logicalSpace[secondMeasure]+=+space[secondMeasure]}),item.space=logicalSpace,logicalSpace}return function getLogicalSpace(item,measures,minMeasures){var _ref,maxMeasure=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],firstMeasure=measures.firstMeasure,secondMeasure=measures.secondMeasure,firstMeasureValue=0,secondMeasureValue=0;return item.values.forEach(function(valueArray){var _item$space,fMeasure=0,sMeasure=0;valueArray.forEach(function(placeholder,colIndex){placeholder.setAvailableSpace();var space=placeholder.getLogicalSpace(),minSecondMeasure=placeholder.getMinMeasures(minMeasures[secondMeasure]);sMeasure=Math.max(sMeasure,+space[secondMeasure],minSecondMeasure),maxMeasure[colIndex]=Math.max(maxMeasure[colIndex]||0,space[firstMeasure]),fMeasure+=+maxMeasure[colIndex]}),secondMeasureValue+=sMeasure,firstMeasureValue=Math.max(firstMeasureValue,fMeasure),item.space=(utils_defineProperty(_item$space={},secondMeasure,Math.ceil(secondMeasureValue)),utils_defineProperty(_item$space,firstMeasure,Math.ceil(firstMeasureValue)),_item$space)}),utils_defineProperty(_ref={},secondMeasure,secondMeasureValue),utils_defineProperty(_ref,firstMeasure,firstMeasureValue),_ref}(item,{firstMeasure:firstMeasure,secondMeasure:secondMeasure},minMeasures,maxMeasures)},createMatrixEachLevel=function createMatrixEachLevel(item,isTransposed){if(item.values[0].key){var arr=[];return item.values.forEach(function(child){isTransposed?createMatrixEachLevel(child,isTransposed).forEach(function(e,i){var _arr$i;arr[i]=arr[i]||[],(_arr$i=arr[i]).push.apply(_arr$i,utils_toConsumableArray(e))}):arr.push.apply(arr,utils_toConsumableArray(createMatrixEachLevel(child,isTransposed)))}),item.matrix=arr,arr}return item.matrix=isTransposed?item.values[0].map(function(col,colIndex){return item.values.map(function(row){return row[colIndex]})}):item.values,item.matrix},extraCellsRemover=function extraCellsRemover(arr,beg,end){return arr.slice(beg,-end)},visual_matrix_props_PROPS={config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config||{},value)}},maxMeasures:{},availableSpace:{},logicalSpace:{}},visual_matrix_default_config_defaultConfig={distribution:[],classPrefix:"muze",isDistributionEqual:!0,unitMeasures:{height:100,width:100,border:1},isTransposed:!1,facet:"primary",extraCellLengths:[]};function visual_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};!function visual_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VisualMatrix),this._lastLevelKey=0,this._primaryMatrix=matrix[0]||[],this._secondaryMatrix=matrix[1]||[],this._maxMeasures=[],this._availableSpace={},generateGetterSetters(this,visual_matrix_props_PROPS);var defCon=Object.assign({},this.constructor.defaultConfig());this.config(mergeRecursive(defCon,config)),this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],this.config())}return function visual_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&visual_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&visual_matrix_defineProperties(Constructor,staticProps),Constructor}(VisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"computeViewableSpaces",value:function computeViewableSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"removeExtraCells",value:function removeExtraCells(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getPriorityDistribution",value:function getPriorityDistribution(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"calculateDepth",value:function calculateDepth(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeSpaces",value:function redistributeSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"redistributeViewSpaces",value:function redistributeViewSpaces(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{key:"getCellDimensions",value:function getCellDimensions(){throw new Error(ERROR_MSG.INTERFACE_IMPL)}},{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 _createTree2=function createTree(context){var matrixTree={},lastLevelKey=0,facet="primary",nestFn=utils_nest(),keys=[],layoutMatrix=context._layoutMatrix,primaryMatrix=context.primaryMatrix(),secondaryMatrix=context.secondaryMatrix(),_context$config=context.config(),isTransposed=_context$config.isTransposed,breakPage=_context$config.breakPage;if(isTransposed){if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var _i2=0;_i20){for(var primaryMatrixLength=primaryMatrix.length,_i3=secondaryMatrix.length-1;_i3>0;_i3--)keys.push(_i3+primaryMatrixLength);keys.push(primaryMatrixLength),"primary"===facet&&(lastLevelKey=primaryMatrixLength)}var newMatrix;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),newMatrix=layoutMatrix[0].map(function(col,colIndex){return layoutMatrix.map(function(row){return row[colIndex]})}),matrixTree=nestFn.entries(newMatrix)}else{if(facet=0===primaryMatrix.length?"primary":0===secondaryMatrix.length?"secondary":primaryMatrix.length>=secondaryMatrix.length?"primary":"secondary",primaryMatrix.length>0){for(var i=0;i0){for(var keyLength=primaryMatrix.length>0?primaryMatrix[0].length:0,_i=secondaryMatrix[0].length-1;_i>0;_i--)keys.push(_i+keyLength);keys.push(keyLength),"primary"===facet&&(lastLevelKey=keyLength)}else lastLevelKey=primaryMatrix.length>0?primaryMatrix[0].length-1:0;keys.forEach(function(key){var counter=-1;return nestFn.key(function(d){return counter++,"".concat(d[key].valueOf(),"-").concat(findInPage(counter,breakPage))})}),matrixTree=nestFn.entries(layoutMatrix)}return{tree:matrixTree,lastLevelKey:lastLevelKey}}(this),tree=_createTree2.tree,lastLevelKey=_createTree2.lastLevelKey;return this._lastLevelKey=lastLevelKey,tree}},{key:"getLogicalSpace",value:function getLogicalSpace(){return this.logicalSpace()}},{key:"setAvailableSpace",value:function setAvailableSpace(width,height){this.availableSpace({width:width,height:height});var tree=this.tree(),heightMeasures=this.populateMaxMeasures(enums_constants_HEIGHT,tree),widthMeasures=this.populateMaxMeasures("width",tree),depth=this.calculateDepth(widthMeasures,heightMeasures);return this.viewableMatrix=this.createViewPortMatrix(depth),this.viewableMeasures=this.redistributeSpaces(width,height),this}},{key:"populateMaxMeasures",value:function populateMaxMeasures(type,matrixTree){var _this=this,depth=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,measures=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(measures[depth]=Math.max(measures[depth]||0,matrixTree.space[type]),matrixTree.values){var childDepth=depth+1;matrixTree.values.forEach(function(child){child.space&&(measures=_this.populateMaxMeasures(type,child,childDepth,measures))})}return measures}},{key:"getViewableSpaces",value:function getViewableSpaces(){return this.viewableMeasures}},{key:"getViewableMatrices",value:function getViewableMatrices(){return this.viewableMatrix}},{key:"createViewPortMatrix",value:function createViewPortMatrix(depth){var arr=[];return function createMatrixInstances(){var arr=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],depth=arguments.length>1?arguments[1]:void 0,matrixInfo=arguments.length>2?arguments[2]:void 0,layout=arguments.length>3?arguments[3]:void 0,breakPointer=layout._breakPointer,isTransposed=layout.config().isTransposed,tree=matrixInfo.tree,layoutMatrix=matrixInfo.layoutMatrix;if(0===depth){var brokenMatrix=function breakMatrix(matrix,isTransposed,breakPointer){var primaryMatrix=[],secondaryMatrix=[];return isTransposed?matrix.forEach(function(row,rowIndex){rowIndex>=breakPointer?secondaryMatrix.push(row):primaryMatrix.push(row)}):matrix.forEach(function(row,rowIndex){row.forEach(function(column,columnIndex){columnIndex>=breakPointer?(secondaryMatrix[rowIndex]=secondaryMatrix[rowIndex]||[],secondaryMatrix[rowIndex].push(column)):(primaryMatrix[rowIndex]=primaryMatrix[rowIndex]||[],primaryMatrix[rowIndex].push(column))})}),[primaryMatrix,secondaryMatrix]}(tree.matrix,isTransposed,breakPointer);return arr.push({matrix:tree.matrix,primaryMatrix:brokenMatrix[0],secondaryMatrix:brokenMatrix[1],space:tree.space}),arr}var nextLevel=depth-1;return tree.values.forEach(function(e){createMatrixInstances(arr,nextLevel,{tree:e,layoutMatrix:layoutMatrix},layout)}),arr}(arr,depth,this.removeExtraCells(),this),arr}}],[{key:"defaultConfig",value:function defaultConfig(){return visual_matrix_default_config_defaultConfig}}]),VisualMatrix}();function row_matrix_typeof(obj){return(row_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function row_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function row_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,RowVisualMatrix),(_this=row_matrix_possibleConstructorReturn(this,row_matrix_getPrototypeOf(RowVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length>0?matrix[0][0].length:0,_this._layoutMatrix=combineMatrices([matrix[0]||[],matrix[1]||[]],_this.config()),_this._tree={key:ROW_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function row_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&row_matrix_setPrototypeOf(subClass,superClass)}(RowVisualMatrix,visual_matrix_VisualMatrix),function row_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&row_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&row_matrix_defineProperties(Constructor,staticProps),Constructor}(RowVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!1),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),widths=_this2$getCellDimensi.widths,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=[height,height],columnMeasures=widths;return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=extraCellsRemover(tree.matrix,begCellLen,endCellLen),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var remainingAvailWidth,remainingWidth,cWidths=[],conditions=[],maxPrioritySpace=0,matrix=measures.matrix,availableWidth=measures.width,maxWidths=measures.maxMeasures,currentWidth=measures.maxWidth,height=measures.height,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length?this.primaryMatrix()[0].length:0,dist=[];remainingAvailWidth=availableWidth,remainingWidth=currentWidth,(conditions=2===priority?[primaryMatrixLength-1,primaryMatrixLength]:0===priority?[primaryMatrixLength-1]:[primaryMatrixLength]).forEach(function(i){dist[i]=maxWidths[i],maxPrioritySpace+=maxWidths[i],remainingAvailWidth-=dist[i],remainingWidth-=dist[i]}),matrix[0].forEach(function(e,i){-1===conditions.indexOf(i)&&(dist[i]=remainingAvailWidth*(maxWidths[i]/remainingWidth))}),matrix.forEach(function(row){return row.forEach(function(col,cIdx){-1===conditions.indexOf(cIdx)?(col.setAvailableSpace(dist[cIdx],height),cWidths[cIdx]=Math.max(cWidths[cIdx]||0,Math.floor(col.getLogicalSpace().width))):cWidths[cIdx]=0})});var prioritySpace=availableWidth-cWidths.reduce(function(t,n){return t+n});return prioritySpace<0?cWidths=cWidths.map(function(){return 0}):conditions.forEach(function(i){cWidths[i]=Math.floor(prioritySpace*(dist[i]/maxPrioritySpace||1))}),cWidths}},{key:"calculateDepth",value:function calculateDepth(widthMeasures,heightMeasures){var i,height=this.availableSpace().height;for(i=0;i0?logicalWidths:maxMeasures.map(function(){return 0}),rHeights=function getDistributedHeight(context){var heightWithoutGutter,distSum=0,gutterSum=0,isTransposed=context.isTransposed,distribution=context.distribution,availableHeight=context.availableHeight,height=context.height,isDistributionEqual=context.isDistributionEqual,gutter=context.gutter,matrix=context.matrix,cIdx=context.cIdx;distribution&&void 0!==distribution[0]&&(distSum=distribution.reduce(function(t,n){return t+=n})),gutter&&void 0!==gutter[0]&&(gutterSum=gutter.reduce(function(t,n){return t+=n})),heightWithoutGutter=availableHeight-Math.floor(availableHeight*gutterSum);var colLen=matrix.length;return matrix.map(function(row,rIdx){var space=row[cIdx].getLogicalSpace().height,distHeight=space+space/height*(heightWithoutGutter-height);return isTransposed||(distribution.length>0&&colLen===distribution.length?distHeight=heightWithoutGutter*distribution[rIdx]/distSum:(isDistributionEqual||0===context.height)&&(distHeight=heightWithoutGutter/colLen)),Math.floor(distHeight)})}({matrix:matrix,cIdx:this._lastLevelKey,height:mHeight,availableHeight:height,isDistributionEqual:isDistributionEqual,distribution:distribution,isTransposed:isTransposed,gutter:gutter}),maxWidths.length>0&&(cWidths=cWidths.map(function(e,i){return Math.max(e,maxWidths[0][i]||0)})),maxWidths.push(cWidths);for(var x=0;x=breakPointer&&(columnWidths[1][cIdx-breakPointer]=colWidth,widths[1]=(widths[1]||0)+colWidth),cIdx===_this4._lastLevelKey&&(rowHeights[0][rIdx]=colHeight,rowHeights[1][rIdx]=colHeight)})}),{heights:[0,0],widths:widths,rowHeights:rowHeights,columnWidths:columnWidths}}}]),RowVisualMatrix}();function column_matrix_typeof(obj){return(column_matrix_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function column_matrix_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:{};return function column_matrix_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ColumnVisualMatrix),(_this=column_matrix_possibleConstructorReturn(this,column_matrix_getPrototypeOf(ColumnVisualMatrix).call(this,matrix,config)))._breakPointer=matrix[0].length,_this._tree={key:COLUMN_ROOT,values:_this.createTree()},_this._logicalSpace=_this.computeLogicalSpace(),_this}return function column_matrix_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&column_matrix_setPrototypeOf(subClass,superClass)}(ColumnVisualMatrix,visual_matrix_VisualMatrix),function column_matrix_createClass(Constructor,protoProps,staticProps){return protoProps&&column_matrix_defineProperties(Constructor.prototype,protoProps),staticProps&&column_matrix_defineProperties(Constructor,staticProps),Constructor}(ColumnVisualMatrix,[{key:"computeLogicalSpace",value:function computeLogicalSpace(){var matrixTree=this.tree();return createMatrixEachLevel(matrixTree,!0),utils_computeLogicalSpace(matrixTree,this.config(),this.maxMeasures())}},{key:"computeViewableSpaces",value:function computeViewableSpaces(measures){var _this2=this,maxHeights=measures.maxHeights,maxWidths=measures.maxWidths,height=measures.height,width=measures.width;return this.viewableMatrix.map(function(matrixInst,i){var cellDimOptions={matrixInst:matrixInst,maxWidths:maxWidths,maxHeights:maxHeights,matrixIndex:i,height:height},_this2$getCellDimensi=_this2.getCellDimensions(cellDimOptions),heights=_this2$getCellDimensi.heights,rowHeights=_this2$getCellDimensi.rowHeights,columnWidths=_this2$getCellDimensi.columnWidths,heightMeasures=heights,columnMeasures=[width,width];return{rowHeights:{primary:rowHeights[0],secondary:rowHeights[1]},columnWidths:{primary:columnWidths[0],secondary:columnWidths[1]},height:{primary:heightMeasures[0],secondary:heightMeasures[1]},width:{primary:columnMeasures[0],secondary:columnMeasures[1]}}})}},{key:"removeExtraCells",value:function removeExtraCells(){var _this$config=this.config(),isTransposed=_this$config.isTransposed,extraCellLengths=_this$config.extraCellLengths,matrix=this._layoutMatrix,tree=mergeRecursive({},this.tree()),begCellLen=extraCellLengths[0],endCellLen=extraCellLengths[1]||Number.NEGATIVE_INFINITY,layoutMatrix=isTransposed?matrix.slice(0).map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}):extraCellsRemover(matrix,begCellLen,endCellLen);return tree.values=extraCellsRemover(tree.values,begCellLen,endCellLen),tree.matrix=tree.matrix.map(function(e){return extraCellsRemover(e,begCellLen,endCellLen)}),{tree:tree,layoutMatrix:layoutMatrix}}},{key:"getPriorityDistribution",value:function getPriorityDistribution(measures){var height=measures.height,maxHeights=measures.maxHeights,remainingHeight=height,heightDist=[],conditions=[],divider=2,priority=this.config().priority,primaryMatrixLength=this.primaryMatrix().length;return 2===priority?(conditions=[primaryMatrixLength-1,primaryMatrixLength],divider=2):(conditions=0===priority?[primaryMatrixLength-1]:[primaryMatrixLength],divider=1),maxHeights.forEach(function(heights,index){-1===conditions.indexOf(index)&&(heightDist[index]=heights,remainingHeight-=heights)}),remainingHeight<0?heightDist=heightDist.map(function(){return 0}):conditions.forEach(function(condition){heightDist[condition]=Math.min(maxHeights[condition],remainingHeight/divider)}),heightDist}},{key:"calculateDepth",value:function calculateDepth(widthMeasures){var j,width=this.availableSpace().width;for(j=0;j0)distWidth=availableWidth*distribution[colIndex]/distSum;else if(isDistributionEqual||0===width){var rowLen=row.length;distWidth=availableWidth/rowLen}return Math.floor(distWidth)})}({row:matrix[this._lastLevelKey],width:mWidth,availableWidth:width},this.config());matrix.forEach(function(row,rIdx){return row.forEach(function(col,cIdx){var oldLogicalSpace=col.getLogicalSpace();col.setAvailableSpace(cWidths[cIdx]-borderWidth,oldLogicalSpace.height),rHeights[rIdx]=Math.max(rHeights[rIdx]||0,Math.floor(col.getLogicalSpace().height))})}),maxHeights.length>0&&(rHeights=rHeights.map(function(e,i){return Math.max(e,maxHeights[0][i])})),maxHeights.push(rHeights);for(var x=0;x=breakPointer&&(rowHeights[1][rIdx-breakPointer]=colHeight,heights[1]=(heights[1]||0)+colHeight),rIdx===_this4._lastLevelKey&&(columnWidths[0][cIdx]=colWidth,columnWidths[1][cIdx]=colWidth)})}),{heights:heights,widths:[0,0],rowHeights:rowHeights,columnWidths:columnWidths}}}]),ColumnVisualMatrix}();function layout_helper_toConsumableArray(arr){return function layout_helper_arrayWithoutHoles(arr){if(Array.isArray(arr)){for(var i=0,arr2=new Array(arr.length);imaxMeasure&&layout.scrollInfo(computations_defineProperty({},scrollType,!0)),Math.max(maxMeasure,actualMeasure)}}(layout,paginationDetailsMap[matrixType],relatedMaxMeasure,buffer)},computations_getMatrixHeightDetails=function getMatrixHeightDetails(layout,columnMatrixWidth){var height=layout.measurement().height,buffer=layout.config().buffer,_getHeightRequiredByC=function getHeightRequiredByColMatrix(layout,columnMatrixWidth){var height=layout.measurement().height,columnMatrix=layout.columnMatrix(),maxColumnMatrixHeight=Math.min(columnMatrix.getLogicalSpace().height,height/2);columnMatrix.setAvailableSpace(columnMatrixWidth,maxColumnMatrixHeight);var columnViewSpace=columnMatrix.getViewableSpaces()[layout.config().columnPointer];return{columnMatrixHeight:columnViewSpace.height.primary+columnViewSpace.height.secondary,maxColumnMatrixHeight:maxColumnMatrixHeight}}(layout,columnMatrixWidth),columnMatrixHeight=_getHeightRequiredByC.columnMatrixHeight,maxColumnMatrixHeight=_getHeightRequiredByC.maxColumnMatrixHeight,maxHeightAvailableForRowMatrix=height-Math.min(maxColumnMatrixHeight,columnMatrixHeight);return{columnMatrixHeight:columnMatrixHeight,maxColumnMatrixHeight:maxColumnMatrixHeight,rowMatrixHeight:paginationMeasureGetter(layout,"row",maxHeightAvailableForRowMatrix,buffer),maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix}},bufferCondition={isScroll:!0,pagination:"scroll"},computations_getActualBufferFromConfig=function getActualBufferFromConfig(layout){var buffer=layout.config().buffer,_map2=computations_slicedToArray([enums_constants_HORIZONTAL,enums_constants_VERTICAL].map(function(type){return function getBufferFromCondition(layout,type){var scrollInfo=layout.scrollInfo(),currentBufferType={pagination:layout.config().pagination,isScroll:scrollInfo[type]};return Object.keys(bufferCondition).every(function(e){return bufferCondition[e]===currentBufferType[e]})}(layout,type)?buffer:0}),2);return{horizontalBuffer:_map2[0],verticalBuffer:_map2[1]}},computations_computeLayoutMeasurements=function computeLayoutMeasurements(layout){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_getMatrixWidthDetail=function getMatrixWidthDetails(layout){var rowMatrix=layout.rowMatrix(),width=layout.measurement().width,_layout$config3=layout.config(),border=_layout$config3.border,buffer=_layout$config3.buffer,borderWidth=border.width,rowMatrixWidth=getMatrixMeasurement(rowMatrix,"width"),maxRowMatrixWidth=Math.min(rowMatrixWidth+buffer,width/2),maxWidthAvailableForColumnMatrix=width-maxRowMatrixWidth-borderWidth;return{rowMatrixWidth:rowMatrixWidth,maxRowMatrixWidth:maxRowMatrixWidth,columnMatrixWidth:paginationMeasureGetter(layout,"column",maxWidthAvailableForColumnMatrix,0),maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}}(layout),rowMatrixWidth=_getMatrixWidthDetail.rowMatrixWidth,maxRowMatrixWidth=_getMatrixWidthDetail.maxRowMatrixWidth,maxWidthAvailableForColumnMatrix=_getMatrixWidthDetail.maxWidthAvailableForColumnMatrix,columnMatrixWidth=_getMatrixWidthDetail.columnMatrixWidth,_getMatrixHeightDetai=computations_getMatrixHeightDetails(layout,columnMatrixWidth),columnMatrixHeight=_getMatrixHeightDetai.columnMatrixHeight,rowMatrixHeight=_getMatrixHeightDetai.rowMatrixHeight,maxHeightAvailableForRowMatrix=_getMatrixHeightDetai.maxHeightAvailableForRowMatrix,_getActualBufferFromC=computations_getActualBufferFromConfig(layout),horizontalBuffer=_getActualBufferFromC.horizontalBuffer,verticalBuffer=_getActualBufferFromC.verticalBuffer;rowMatrix.setAvailableSpace(maxRowMatrixWidth-verticalBuffer,rowMatrixHeight-horizontalBuffer);var rowViewableSpaces=rowMatrix.getViewableSpaces(),columnViewableSpaces=columnMatrix.getViewableSpaces();return setViewSpaces(layout,"row",rowViewableSpaces),setViewSpaces(layout,"column",columnViewableSpaces),function setValueMatrixMeasurements(layout,rowViewableSpaces,columnViewableSpaces){var _ref,_ref2,_ref3,_ref4,_ref5,centerMatrix=layout.centerMatrix(),border=layout.config().border,matrices=layout.matrices(),top=matrices.top,bottom=matrices.bottom,borderWidth=border.width,rowHeights=(_ref=[]).concat.apply(_ref,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.rowHeights.primary}))),rowWidthsPrimary=(_ref2=[]).concat.apply(_ref2,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.primary}))),rowWidthsSecondary=(_ref3=[]).concat.apply(_ref3,computations_toConsumableArray(rowViewableSpaces.map(function(e){return e.columnWidths.secondary}))),columnWidths=(_ref4=[]).concat.apply(_ref4,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.columnWidths.primary}))),columnHeightsPrimary=columnViewableSpaces[0].rowHeights.primary,columnHeightsSecondary=(_ref5=[]).concat.apply(_ref5,computations_toConsumableArray(columnViewableSpaces.map(function(e){return e.rowHeights.secondary})));centerMatrix.forEach(function(matrix,rIdx){matrix.forEach(function(placeholder,cIdx){placeholder.setAvailableSpace(columnWidths[cIdx]-borderWidth,rowHeights[rIdx]-borderWidth)})}),computations_setAvailableSpace(top[0],rowWidthsPrimary,columnHeightsPrimary),computations_setAvailableSpace(top[2],rowWidthsSecondary,columnHeightsPrimary),computations_setAvailableSpace(bottom[0],rowWidthsPrimary,columnHeightsSecondary),computations_setAvailableSpace(bottom[2],rowWidthsSecondary,columnHeightsSecondary)}(layout,rowViewableSpaces,columnViewableSpaces),{rowMatrixHeight:rowMatrixHeight-horizontalBuffer,rowMatrixWidth:rowMatrixWidth-verticalBuffer,maxHeightAvailableForRowMatrix:maxHeightAvailableForRowMatrix-horizontalBuffer,columnMatrixHeight:columnMatrixHeight,columnMatrixWidth:columnMatrixWidth,maxWidthAvailableForColumnMatrix:maxWidthAvailableForColumnMatrix}},measureSum=function measureSum(measureArr){return measureArr.reduce(function(total,measure){return total+measure},0)};function layout_typeof(obj){return(layout_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function layout_defineProperties(target,props){for(var i=0;i0&&(leftMatrix=[].concat(layout_helper_toConsumableArray(topLeft),layout_helper_toConsumableArray(leftRows),layout_helper_toConsumableArray(bottomLeft))),rightRows.length>0&&(rightMatrix=[].concat(layout_helper_toConsumableArray(topRight),layout_helper_toConsumableArray(rightRows),layout_helper_toConsumableArray(bottomRight))),topColumns.length>0&&topColumns[0].length>0&&(topMatrix=topColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(topLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(topRight[i]))})),bottomColumns.length>0&&bottomColumns[0].length>0&&(bottomMatrix=bottomColumns.map(function(d,i){return[].concat(layout_helper_toConsumableArray(bottomLeft[i]),layout_helper_toConsumableArray(d),layout_helper_toConsumableArray(bottomRight[i]))})),context.rowMatrix(new row_matrix_RowVisualMatrix([leftMatrix,rightMatrix],{isDistributionEqual:isRowSizeEqual,distribution:distribution.rows,gutter:gutterSpace.rows,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.row,breakPage:breakPage.rows.map(function(e){return e+Math.max(topLeft.length,topRight.length)}),extraCellLengths:[topLeft.length,bottomLeft.length]})),begColCells=topLeft.length>0?topLeft[0].length:bottomLeft.length>0?bottomLeft[0].length:0,endColCells=topRight.length>0?topRight[0].length:bottomRight.length>0?bottomRight[0].length:0,context.columnMatrix(new column_matrix_ColumnVisualMatrix([topMatrix,bottomMatrix],{isDistributionEqual:isColumnSizeEqual,distribution:distribution.columns,gutter:gutterSpace.columns,isTransposed:!0,unitMeasures:{width:minUnitWidth,height:minUnitHeight,border:border.width},priority:priority.col,breakPage:breakPage.columns,extraCellLengths:[begColCells,endColCells]})),context.centerMatrix(valueMatrix),matrices}(this,_matrices),this):layout_get(layout_getPrototypeOf(GridLayout.prototype),"matrices",this).call(this,_matrices)}},{key:"triggerReflow",value:function triggerReflow(){this.scrollInfo({horizontal:!1,vertical:!1});var _computeLayoutMeasure=computations_computeLayoutMeasurements(this),maxHeightAvailableForRowMatrix=_computeLayoutMeasure.maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix=_computeLayoutMeasure.maxWidthAvailableForColumnMatrix;return this.setViewInformation(maxHeightAvailableForRowMatrix,maxWidthAvailableForColumnMatrix),this}},{key:"gotoPage",value:function gotoPage(type,pageNumber){var pageType=type.toLowerCase(),totalPages=this.viewInfo().viewMatricesInfo["".concat(pageType,"Pages")],pointer=Math.min(Math.max(1,pageNumber),totalPages);return this.config(function layout_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}({},"".concat(pageType,"Pointer"),pointer-1)),this.setViewInformation(),this.renderGrid(),this}},{key:"pages",value:function pages(type){var viewMatricesInfo=this.viewInfo().viewMatricesInfo,pageType=type.toLowerCase();return{totalPages:viewMatricesInfo["".concat(pageType,"Pages")],currentPage:this.config()["".concat(pageType,"Pointer")]+1}}},{key:"viewInfo",value:function viewInfo(){return arguments.length?(this._viewInfo=arguments.length<=0?void 0:arguments[0],this):this._viewInfo}},{key:"scrollInfo",value:function scrollInfo(){return arguments.length?(this._scrollInfo=mergeRecursive(this._scrollInfo,arguments.length<=0?void 0:arguments[0]),this):this._scrollInfo}},{key:"setViewInformation",value:function setViewInformation(maxRowHeight,maxColWidth){var _this$config2=this.config(),rowPointer=_this$config2.rowPointer,columnPointer=_this$config2.columnPointer,border=_this$config2.border,viewMatricesInfo=function getViewMatrices(layout,rowPointer,columnPointer){for(var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),centerMatrix=layout.centerMatrix(),matrices=layout.matrices(),rowMatrices=rowMatrix.getViewableMatrices(),columnMatrices=columnMatrix.getViewableMatrices(),centralMatrixPointer={row:0,column:0},i=rowPointer-1;i>=0;i--){var length=Math.max(rowMatrices[i].primaryMatrix.length,rowMatrices[i].secondaryMatrix.length);centralMatrixPointer.row+=length}for(var _i=columnPointer-1;_i>=0;_i--){var matrix=columnMatrices[_i],primaryMatrix=matrix.primaryMatrix,secondaryMatrix=matrix.secondaryMatrix,_length=Math.max(primaryMatrix[0]?primaryMatrix[0].length:0,secondaryMatrix[0]?secondaryMatrix[0].length:0);centralMatrixPointer.column+=_length}matrices.top[1]=columnMatrices[columnPointer].primaryMatrix,matrices.bottom[1]=columnMatrices[columnPointer].secondaryMatrix,matrices.center[0]=rowMatrices[rowPointer].primaryMatrix,matrices.center[2]=rowMatrices[rowPointer].secondaryMatrix;var rowMatrixLen=Math.max(matrices.center[0].length,matrices.center[2].length),columnMatrixLen=Math.max(matrices.top[1][0]?matrices.top[1][0].length:0,matrices.bottom[1][0]?matrices.bottom[1][0].length:0);return matrices.center[1]=centerMatrix.slice(centralMatrixPointer.row,centralMatrixPointer.row+rowMatrixLen).map(function(matrix){return matrix.slice(centralMatrixPointer.column,centralMatrixPointer.column+columnMatrixLen)}),{matrices:matrices,rowPages:rowMatrices.length,columnPages:columnMatrices.length}}(this,rowPointer,columnPointer),layoutDimensions=function getViewMeasurements(layout,maxRowHeight,maxColWidth){var rowMatrix=layout.rowMatrix(),columnMatrix=layout.columnMatrix(),_layout$config=layout.config(),columnPointer=_layout$config.columnPointer,rowPointer=_layout$config.rowPointer,rowSpaces=rowMatrix.getViewableSpaces()[rowPointer],colSpaces=columnMatrix.getViewableSpaces()[columnPointer],rowHeights=rowSpaces.rowHeights,rowMatrixWidth=rowSpaces.width,columnWidths=colSpaces.columnWidths,columnMatrixHeight=colSpaces.height,leftWidth=rowMatrixWidth.primary,rightWidth=rowMatrixWidth.secondary,topHeight=columnMatrixHeight.primary,bottomHeight=columnMatrixHeight.secondary,centerHeight=measureSum(rowHeights.primary),centerWidth=measureSum(columnWidths.primary),viewWidth=[leftWidth,Math.min(centerWidth,maxColWidth),rightWidth],viewHeight=[topHeight,Math.min(centerHeight,maxRowHeight),bottomHeight];return{viewWidth:viewWidth,viewHeight:viewHeight,actualCenterMeasures:{height:centerHeight,width:centerWidth},totalMeasures:{width:measureSum(viewWidth),height:measureSum(viewHeight)},unitHeights:rowHeights,unitWidths:columnWidths}}(this,maxRowHeight,maxColWidth);return layoutDimensions.border=border,this.viewInfo({viewMatricesInfo:viewMatricesInfo,layoutDimensions:layoutDimensions}),this}}],[{key:"defaultViewInfo",value:function defaultViewInfo(){return Object.assign({},{layoutDimensions:{border:this.defaultConfig().border,viewHeight:[0,0,0],viewWidth:[0,0,0]},viewMatricesInfo:{columnPages:0,rowPages:0,matrices:{top:[],center:[],bottom:[]}}})}},{key:"defaultMeasurement",value:function defaultMeasurement(){return DEFAULT_MEASUREMENTS}},{key:"defaultConfig",value:function defaultConfig(){return DEFAULT_CONFIGURATION}},{key:"create",value:function create(){return new GridLayout(null,null,this.defaultMeasurement(),this.defaultConfig())}}]),GridLayout}();function border_helper_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var _matrixSpanGeneratorM,_spanApplierMap,borderMap=(border_helper_defineProperty(_borderMap={},"".concat("top","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("top","-").concat("right"),null),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("left"),"row"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("middle"),"center"),border_helper_defineProperty(_borderMap,"".concat("center","-").concat("right"),"row"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("left"),null),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("middle"),"column"),border_helper_defineProperty(_borderMap,"".concat("bottom","-").concat("right"),null),_borderMap),border_helper_specificBorderApplier=function specificBorderApplier(borderTypes,showBorders,cells,borderInfo){var color=borderInfo.color,width=borderInfo.width,style=borderInfo.style,borderStyle="".concat(width,"px ").concat(style);borderTypes.forEach(function(borderType){!function applySpecificBorder(cells,color,type,style){cells.style("border-".concat(type),"".concat(style," ").concat(color))}(cells,showBorders[borderType]?color:"rgba(0,0,0,0)",borderType,borderStyle)})},border_helper_applyBorders=function applyBorders(cells,border,row,column){var borderApplierFn=function borderApplier(cells,borderInfo){var showRowBorders=borderInfo.showRowBorders,showColBorders=borderInfo.showColBorders,showValueBorders=borderInfo.showValueBorders;return{row:function row(){return border_helper_specificBorderApplier(["top","bottom"],showRowBorders,cells,borderInfo)},column:function column(){return border_helper_specificBorderApplier(["left","right"],showColBorders,cells,borderInfo)},center:function center(){return border_helper_specificBorderApplier(["left","right","top","bottom"],showValueBorders,cells,borderInfo)}}}(cells,border),borderMapVal=borderMap["".concat(ROW_MATRIX_INDEX[VIEW_INDEX[row]],"-").concat(COLUMN_MATRIX_INDEX[column])];borderMapVal&&borderApplierFn[borderMapVal]()};function span_maker_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var orderMaker=function orderMaker(arr){return Array.from(Array(arr.length).keys())},nestByStack=function nestByStack(stack,updateArr){var optionalParams=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},order=optionalParams.order,keyFn=optionalParams.keyFn,arr=updateArr.slice(),currStack=stack.slice(),prevStack=currStack.slice();if(order=order||Array.from(Array(arr.length).keys()),keyFn=keyFn||function(v){return v},0===currStack.length){var _newArr=[];return order.forEach(function(e){_newArr.push(arr[e])}),{prevStack:prevStack,currStack:arr,arr:_newArr}}for(var arrVal="",stackVal="",newArr=[],i=order.length-1;i>=0;i--){var currElemIndex=order[i];if((arrVal+=keyFn(arr[currElemIndex]))===(stackVal+=keyFn(currStack[currElemIndex])))newArr[currElemIndex]=null;else{stackVal="";for(var j=i;j0&&void 0!==arguments[0]?arguments[0]:1,placeholder=arguments.length>1?arguments[1]:void 0,config=arguments.length>2?arguments[2]:void 0,index=arguments.length>3?arguments[3]:void 0,height=placeholder.availHeight(),width=placeholder.availWidth(),borderWidth=config.border.width,unitWidths=config.dimensions.unitWidths,col=index.col;return span_maker_defineProperty(_ref={},"rowSpan",function(){placeholder.setAvailableSpace(width,height*span),1===span&&renderer_utils_selectElement(this).style("height","".concat(height*span+borderWidth,"px"))}),span_maker_defineProperty(_ref,"colSpan",function(){var primaryUnitWidth=unitWidths.primary[col];if(span>1){for(var cumulativeWidth=0,i=col;i0&&void 0!==arguments[0]?arguments[0]:0}},{key:"type",get:function get(){return"simple"}}],[{key:"defaultConfig",value:function defaultConfig(){return{}}}]),SimpleCell}();function enums_defaults_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var visual_cell_src_props_PROPS,enums_defaults_DEFAULT_CONFIG=(enums_defaults_defineProperty(_DEFAULT_CONFIG={},"margin",(enums_defaults_defineProperty(_CONSTANTS$MARGIN={},visual_cell_src_enums_constants_LEFT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_RIGHT,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_TOP,0),enums_defaults_defineProperty(_CONSTANTS$MARGIN,visual_cell_src_enums_constants_BOTTOM,0),_CONSTANTS$MARGIN)),enums_defaults_defineProperty(_DEFAULT_CONFIG,"spaceFixer",2),enums_defaults_defineProperty(_DEFAULT_CONFIG,"isOffset",!1),enums_defaults_defineProperty(_DEFAULT_CONFIG,"verticalAlign",null),enums_defaults_defineProperty(_DEFAULT_CONFIG,"textAlign","center"),enums_defaults_defineProperty(_DEFAULT_CONFIG,"show",!0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"maxLines",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"minCharacters",0),enums_defaults_defineProperty(_DEFAULT_CONFIG,"rotation",null),_DEFAULT_CONFIG);function visual_cell_src_props_defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}var DEFAULT_PROPS={mount:{},availHeight:{},availWidth:{},config:{sanitization:function sanitization(context,value){return mergeRecursive(context._config,value)}},logicalSpace:{},minSpacing:{},source:{}},packages_visual_cell_src_props_PROPS=(visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS={},GEOM,mergeRecursive({data:{},caption:{},config:{},axes:{},facetByFields:{},fields:{},transform:{},layerDef:{},detailFields:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_TEXT,mergeRecursive({smartText:{}},DEFAULT_PROPS)),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,cell_type_AXIS,DEFAULT_PROPS),visual_cell_src_props_defineProperty(visual_cell_src_props_PROPS,BLANK,DEFAULT_PROPS),visual_cell_src_props_PROPS);function axis_cell_typeof(obj){return(axis_cell_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function axis_cell_defineProperties(target,props){for(var i=0;i(availWidth||0)&&maxLines&&(space.height=space.oriTextHeight*maxLines),availWidth&&availWidth":">",'"':""","'":"'","/":"/"};return"".concat(str).replace(/[&<>"'/]/g,function(match){return htmlEscapes[match]})}(rawContent()):rawContent()},createHeading=function createHeading(config,type,labelManager,prevCell){return config?function headerCreator(config,cellType,labelManager,prevCell){var margin={},content=config.content,classPrefix=config.classPrefix,maxLines=config.maxLines,cell=prevCell||new src_text_cell({type:"title"===cellType?"header":"text",className:"".concat(classPrefix,"-").concat(cellType,"-cell")},{labelManager:labelManager}).config({maxLines:maxLines}).minSpacing({width:0,height:0});return cell.source(content),cell._minTickDiff={height:0,width:0},margin=config.position===src_constants_TOP?{top:0,bottom:config.padding}:{top:config.padding,bottom:0},cell.config({margin:margin}),{height:cell.getLogicalSpace().height,cell:cell}}(config,type,labelManager,prevCell):""},legend_maker_legendInitializer=function legendInitializer(legendConfig,canvas,measurement,prevLegends){var legends=[],height=measurement.height,width=measurement.width,headerHeight=measurement.headerHeight,position=legendConfig.position,align=legendConfig.align,legendInfo=function legendCreator(canvas){var LegendCls,dataset=[],axes=canvas.getRetinalAxes();return Object.entries(axes).forEach(function(axisInfo){var scale=axisInfo[1][0],scaleType=axisInfo[0],scaleProps=canvas[scaleType]();if(scaleProps.field&&scale){var _scale$config=scale.config(),type=_scale$config.type,step=_scale$config.step,stepMapper="boolean"==typeof step&&step;LegendCls=LEGEND_TYPE_MAP["".concat(type,"-").concat(stepMapper,"-").concat(scaleType)],dataset.push({scale:scale,canvas:canvas,fieldName:scaleProps.field,title:retrieveFieldDisplayName(canvas.data(),scaleProps.field),LegendCls:LegendCls,scaleType:scaleType})}}),dataset}(canvas),invalidValues=canvas.config().invalidValues,parser=getValueParser(invalidValues);return legendInfo.forEach(function(dataInfo,index){var legendMeasures={},LegendCls=dataInfo.LegendCls,scale=dataInfo.scale,fieldName=dataInfo.fieldName,titleText=dataInfo.title,scaleType=dataInfo.scaleType,config=legendConfig[scaleType]||{},title=config.title||{};if(title.text=title.text||titleText,config.show){config.position=position,config.align=align;var legend=getObjProp(prevLegends[scaleType],index);legend||(legend=LegendCls.create({labelManager:canvas._dependencies.smartlabel,cells:{AxisCell:axis_cell,TextCell:src_text_cell}})),legendMeasures.maxHeight="vertical"===align?height-headerHeight:.2*height,legendMeasures.maxWidth="horizontal"===align?width:.2*width,legendMeasures.width=Math.min(legendMeasures.maxWidth,config.width),legendMeasures.height=Math.min(legendMeasures.maxHeight,config.height),[PADDING,BORDER,MARGIN].forEach(function(e){legendMeasures[e]=config[e]});var metaData=legend.metaData();metaData instanceof datamodel_default.a&&metaData.dispose(),legend.scale(scale).valueParser(parser).title(title).fieldName(fieldName).config(config).metaData(canvas.composition().visualGroup.getGroupByData().project([fieldName])).measurement(legendMeasures).canvasAlias(canvas.alias()).setLegendMeasures(),legends.push({canvas:canvas,legend:legend,scaleType:scaleType})}}),legends};function muze_chart_component_typeof(obj){return(muze_chart_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function muze_chart_component_defineProperties(target,props){for(var i=0;icurrHeight?(sections++,currWidth=0,currHeight=legHeight):sections<0&§ions++,sectionComponents[sections]=sectionComponents[sections]||[],currHeight-=Math.min(leg.measurement().height,currHeight),currWidth=Math.max(Math.min(leg.measurement().width,leg.measurement().maxWidth),currWidth),sectionComponents[sections].push({legend:leg,legendHeight:legHeight,legendWidth:currWidth})});var mount=makeElement(legendMount,["div"],sectionComponents,"".concat(classPrefix,"-legend-section"));mount.classed("".concat(classPrefix,"-legend-vertical-section"),!0).style("width",function(d){return"".concat(d[0].legendWidth,"px")}),makeElement(mount,["div"],function(d){return d},"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legendWidth,"px")})}else{var _mount=makeElement(legendMount,"div",[1],"".concat(classPrefix,"-legend-section"));_mount.classed("".concat(classPrefix,"-legend-horizontal-section"),!0),_mount.classed("".concat(classPrefix,"-legend-section-",0),!0).style("width","".concat(legWidth,"px")),makeElement(_mount,"div",this.components,"".concat(classPrefix,"-legend-components"),{},function(d){return d.legend.id()}).each(function(d){d.legend.mount(this)}).style("width",function(d){return"".concat(d.legend.measurement().width,"px")})}}},{key:"draw",value:function draw(container){this.renderLegend(container||document.getElementById(this.renderAt()))}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.boundBox(params.config.measurement.legendSpace),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.components=params.component,this.params=params,this.target(params.config.target),this.position(params.config.position);var _defaultAlignmentHelp=function defaultAlignmentHelper(position){var alignment=null,alignWith="".concat(ROW_MATRIX_INDEX[1],"-").concat(COLUMN_MATRIX_INDEX[1]);switch(position){case src_constants_TOP:case src_constants_BOTTOM:alignment=HORIZONTAL_CENTER;break;case src_constants_LEFT:case src_constants_RIGHT:alignment=VERTICAL_CENTER;break;default:alignment=VERTICAL_CENTER}return{alignment:alignment,alignWith:alignWith}}(params.config.position),alignWith=_defaultAlignmentHelp.alignWith,alignment=_defaultAlignmentHelp.alignment;this.className(params.config.className),this.alignWith(params.config.alignWith||alignWith),this.alignment(params.config.alignment||alignment)}}]),LegendComponent}(),helper_d3Drag=(__webpack_require__(22),renderer_utils_getD3Drag()),arrowSizeMap={left:"width",right:"width",top:"height",bottom:"height"},getUnitPositions=function getUnitPositions(unitMeasures,totalLength,viewLength){var currentLen=0;return(unitMeasures.primary&&unitMeasures.primary.length?unitMeasures.primary:unitMeasures.secondary).map(function(e){var unitPosition=100*currentLen/(totalLength-viewLength);return currentLen+=e,unitPosition})},helper_createScrollBarArrow=function createScrollBarArrow(mount,type,config){var classPrefix=config.classPrefix,thickness=config.thickness,arrow=makeElement(mount,"div",[type],"".concat(classPrefix,"-scroll-arrow-").concat(type));return arrow.classed("".concat(classPrefix,"-scroll-arrow"),!0),arrow.style(arrowSizeMap[type],"".concat(thickness,"px")),makeElement(arrow,"div",[1],"".concat(classPrefix,"-scroll-arrow-chevron")).attr("id","".concat(classPrefix,"-scroll-arrow-chevron-").concat(type)),arrow},helper_createScrollBarRect=function createScrollBarRect(mount,config){var classPrefix=config.classPrefix,rect=makeElement(mount,"div",[1],"".concat(classPrefix,"-scroll-rect"));return{rect:rect,mover:makeElement(rect,"div",[1],"".concat(classPrefix,"-scroll-mover"))}},applyScrollMouseDownAction=function applyScrollMouseDownAction(moverRect,scrollMaker,speed){var mover=moverRect.mover,rect=moverRect.rect,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y;scrollMaker.changeMoverPosition({x:x-rectX+speed,y:y-rectY+speed})},helper_registerListenerOnArrow=function registerListenerOnArrow(scrollMaker,moverRect,arrowType,speed){var timer="",arrow=scrollMaker._components[arrowType],isTouchDevice=hasTouch();arrow.on(isTouchDevice?"touchstart":"mousedown",function(){renderer_utils_getEvent().preventDefault(),timer=setInterval(function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)},100)}).on(isTouchDevice?"touchend":"mouseup",function(){renderer_utils_getEvent().preventDefault(),clearInterval(timer)}).on("click",function(){applyScrollMouseDownAction(moverRect,scrollMaker,speed)})},helper_registerListeners=function registerListeners(scrollMaker){var moverRect=scrollMaker._components.moverRect,speed=scrollMaker.config().speed;helper_registerListenerOnArrow(scrollMaker,moverRect,"prevArrow",-speed),function applyMoverDrag(scrollMaker,moverRect){var startPos={},moverStartPos=0,rectStartPos=0,endPos={},mover=moverRect.mover,rect=moverRect.rect;mover.call(helper_d3Drag().on("start",function(){var event=renderer_utils_getEvent();moverStartPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect(),startPos={x:event.x,y:event.y}}).on("drag",function(){var event=renderer_utils_getEvent(),window=getWindow(),distanceMoved_x=(endPos={x:event.x,y:event.y}).x-startPos.x,distanceMoved_y=endPos.y-startPos.y,actualPosition={x:moverStartPos.x+distanceMoved_x-rectStartPos.x+window.pageXOffset,y:moverStartPos.y+distanceMoved_y-rectStartPos.y+window.pageYOffset};scrollMaker.changeMoverPosition(actualPosition)}))}(scrollMaker,moverRect),function applyRectClick(scrollMaker,moverRect){moverRect.rect.on("click",function(){var event=renderer_utils_getEvent();scrollMaker.emptyScrollAreaClick(event)})}(scrollMaker,moverRect),helper_registerListenerOnArrow(scrollMaker,moverRect,"nextArrow",speed)},scroll_bar_maker_props_PROPS={config:{sanitization:function sanitization(context,value){return value=mergeRecursive(context._config,value)}},manager:{},unitPositions:{},logicalSpace:{}};function scroll_maker_defineProperties(target,props){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=horizontal_scroll_maker_get(horizontal_scroll_maker_getPrototypeOf(HorizontalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,config,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"left",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"right",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitWidths=_this$logicalSpace.unitWidths,scrollBarWithouArrowLength=width-2*height;rect.style("width","".concat(dimensions.width-2*height,"px")),rect.style("height","".concat(100,"%")),mover.style("width","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style("height","".concat(100,"%")),mover.style(src_constants_LEFT,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitWidths,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.xrectStartPos.width?rectStartPos.width-moverPos.width:newPosition.x,mover.style(src_constants_LEFT,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:0,x:moverPos.x-rectStartPos.x-delta}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.width)/100;return this.changeMoverPosition({y:0,x:movement}),this}}],[{key:"type",value:function type(){return"horizontal"}}]),HorizontalScrollMaker}(),vertical:function(_ScrollMaker){function VerticalScrollMaker(){return function vertical_scroll_maker_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,VerticalScrollMaker),vertical_scroll_maker_possibleConstructorReturn(this,vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker).apply(this,arguments))}return function vertical_scroll_maker_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&vertical_scroll_maker_setPrototypeOf(subClass,superClass)}(VerticalScrollMaker,scroll_maker_ScrollMaker),function vertical_scroll_maker_createClass(Constructor,protoProps,staticProps){return protoProps&&vertical_scroll_maker_defineProperties(Constructor.prototype,protoProps),staticProps&&vertical_scroll_maker_defineProperties(Constructor,staticProps),Constructor}(VerticalScrollMaker,[{key:"createScroll",value:function createScroll(mountPoint){var dimensions=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.logicalSpace(),config=this.config(),scrollBarContainer=vertical_scroll_maker_get(vertical_scroll_maker_getPrototypeOf(VerticalScrollMaker.prototype),"createScroll",this).call(this,mountPoint,dimensions).scrollBarContainer,prevArrow=helper_createScrollBarArrow(scrollBarContainer,"top",config),moverRect=helper_createScrollBarRect(scrollBarContainer,config),nextArrow=helper_createScrollBarArrow(scrollBarContainer,"bottom",config),mover=moverRect.mover,rect=moverRect.rect,_this$logicalSpace=this.logicalSpace(),height=_this$logicalSpace.height,width=_this$logicalSpace.width,totalLength=_this$logicalSpace.totalLength,viewLength=_this$logicalSpace.viewLength,unitHeights=_this$logicalSpace.unitHeights,scrollBarWithouArrowLength=height-2*width;rect.style("height","".concat(scrollBarWithouArrowLength,"px")),rect.style("width","".concat(100,"%")),mover.style("width","".concat(100,"%")),mover.style("height","".concat(viewLength*scrollBarWithouArrowLength/totalLength,"px")),mover.style(src_constants_TOP,"".concat(0,"px")),this._components={prevArrow:prevArrow,nextArrow:nextArrow,moverRect:moverRect,scrollBarContainer:scrollBarContainer},this._scrollBarWithouArrowLength=scrollBarWithouArrowLength,this.unitPositions(getUnitPositions(unitHeights,totalLength,viewLength)),this.registerListeners()}},{key:"emptyScrollAreaClick",value:function emptyScrollAreaClick(event){var _this$_components$mov=this._components.moverRect,mover=_this$_components$mov.mover,rect=_this$_components$mov.rect,speed=this.config().speed,_mover$node$getBoundi=mover.node().getBoundingClientRect(),x=_mover$node$getBoundi.x,y=_mover$node$getBoundi.y,_rect$node$getBoundin=rect.node().getBoundingClientRect(),rectX=_rect$node$getBoundin.x,rectY=_rect$node$getBoundin.y,positionAdjuster=10*speed;event.yrectStartPos.height?rectStartPos.height-moverPos.height:newPosition.y,mover.style(src_constants_TOP,"".concat(currentPos,"px"));var movedViewLength=currentPos*totalLength/this._scrollBarWithouArrowLength;this.manager().performAttachedScrollFunction(this.constructor.type(),movedViewLength)}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){var _this$_components$mov3=this._components.moverRect,mover=_this$_components$mov3.mover,rect=_this$_components$mov3.rect,moverPos=mover.node().getBoundingClientRect(),rectStartPos=rect.node().getBoundingClientRect();return this.changeMoverPosition({y:moverPos.y-rectStartPos.y-delta,x:0}),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){var moverPos=this._components.moverRect.mover.node().getBoundingClientRect(),movement=scrollPercentage*(this._scrollBarWithouArrowLength-moverPos.height)/100;return this.changeMoverPosition({x:0,y:movement}),this}}],[{key:"type",value:function type(){return"vertical"}}]),VerticalScrollMaker}()},ScrollComponent=function(_MuzeComponent){function ScrollComponent(params){var _this;!function scroll_component_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,ScrollComponent);var ScrollMaker=scrollMakerMap[params.config.type];return params.component=new ScrollMaker,params.component.config(params.config.scrollBarComponentConfig),params.component.logicalSpace(params.dimensions),(_this=scroll_component_possibleConstructorReturn(this,scroll_component_getPrototypeOf(ScrollComponent).call(this,params.name,params.component.getLogicalSpace(),0))).setParams(params),_this}return function scroll_component_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function");subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:!0,configurable:!0}}),superClass&&scroll_component_setPrototypeOf(subClass,superClass)}(ScrollComponent,MuzeComponent),function scroll_component_createClass(Constructor,protoProps,staticProps){return protoProps&&scroll_component_defineProperties(Constructor.prototype,protoProps),staticProps&&scroll_component_defineProperties(Constructor,staticProps),Constructor}(ScrollComponent,[{key:"manager",value:function manager(){return arguments.length?(this.component.manager(arguments.length<=0?void 0:arguments[0]),this):this.component.manager()}},{key:"scrollDeltaTo",value:function scrollDeltaTo(delta){return this.component.scrollDeltaTo(delta),this}},{key:"scrollTo",value:function scrollTo(scrollPercentage){return this.component.scrollTo(scrollPercentage),this}},{key:"scrollToUnitIndex",value:function scrollToUnitIndex(unitIndex){var unitPositions=this.component.unitPositions(),sanitizedUnitIndex=Math.min(Math.max(0,unitIndex),unitPositions.length-1);return this.component.scrollTo(unitPositions[sanitizedUnitIndex]),this}},{key:"getScrollPositionsForUnits",value:function getScrollPositionsForUnits(){return this.component.unitPositions()}},{key:"draw",value:function draw(container){return this.component.createScroll(container||document.getElementById(this.renderAt())),this}},{key:"attachScrollAction",value:function attachScrollAction(externalAction){return this.component.attachScrollAction(externalAction),this}},{key:"detachScrollAction",value:function detachScrollAction(){return this.component.detachScrollAction(),this}},{key:"updateWrapper",value:function updateWrapper(params){return this.name(params.name),this.component.config(params.config.scrollBarComponentConfig),this.component.logicalSpace(params.dimensions),this.boundBox(this.component.getLogicalSpace()),this.setParams(params),this}},{key:"setParams",value:function setParams(params){this.component=params.component||this.component,this.params=params,this.target(params.config.target),this.position(params.config.position),this.className(params.config.className),this.alignWith(params.config.alignWith),this.alignment(params.config.alignment)}},{key:"remove",value:function remove(){this.component.remove()}}]),ScrollComponent}();function matrix_component_typeof(obj){return(matrix_component_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function matrix_component_defineProperties(target,props){for(var i=0;iMath.abs(wheelDeltaY)&&scrollBarManager.preventBrowserScroll("horizontal",event).triggerScrollBarAction("horizontal",wheelDeltaX/30),0!==wheelDeltaY&&Math.abs(wheelDeltaX)0?heightAttr:height,minHeight),availableWidthForCanvas=Math.max(widthAttr>0?widthAttr:width,minWidth),_createHeaders=function createHeaders(context,canvasHeight,canvasWidth){var headerHeight=0,headers={},subtitle=context.subtitle(),isSubtitle=title_maker_resolveTitleSubTitleContent(subtitle[0]);return canvasHeight>=200&&canvasWidth>=200&&["title","subtitle"].forEach(function(type){var headerOptions=context[type](),content=title_maker_resolveTitleSubTitleContent(headerOptions[0]);if(content){var config=headerOptions[1];config.width=context.width(),config.height=context.height(),config.classPrefix=context.config().classPrefix,config.content=content,config.padding="title"!==type||isSubtitle.length?config.padding:subtitle[1].padding;var _createHeading=createHeading(config,type,context.dependencies().smartlabel,context["".concat(type,"Cell")]),height=_createHeading.height,cell=_createHeading.cell;headers["".concat(type,"Cell")]=cell,context._composition[type]=cell,headerHeight+=height}}),{headerHeight:headerHeight,headers:headers}}(context,availableHeightForCanvas,availableWidthForCanvas),headers=_createHeaders.headers,headerHeight=_createHeaders.headerHeight,legends=function createLegend(context,headerHeight,height,width){var measurement={height:height,width:width,headerHeight:headerHeight},legend=context.config().legend,show=legend.show,position=legend.position;legend.classPrefix=context.config().classPrefix;var align=position===src_constants_LEFT||position===src_constants_RIGHT?"vertical":"horizontal";return legend.show=show?"vertical"===align&&width>200||"horizontal"===align&&height>200:show,legend.align=align,legend_maker_legendInitializer(legend,context,measurement,context.composition().legend||{})}(context,headerHeight,availableHeightForCanvas,availableWidthForCanvas);context._composition.legend={},legends.forEach(function(e){context._composition.legend[e.scaleType]=e.legend});var legendSpace=function getLegendSpace(legends,legendConfig,availableHeight,availableWidth){var legendSpace={width:0,height:0};return legends.map(function(legendInfo){return legendInfo.legend.measurement()}).forEach(function(space){var height,width;width=Math.min(space.width,space.maxWidth),height=Math.min(space.height,space.maxHeight),"horizontal"===legendConfig.align?legendSpace.width+width>availableWidth?(legendSpace.width=availableWidth,legendSpace.height+=height):(legendSpace.width+=width,legendSpace.height=Math.max(legendSpace.height,height)):legendSpace.height+height>availableHeight?(legendSpace.height=height,legendSpace.width+=width):(legendSpace.height+=height,legendSpace.width=Math.max(legendSpace.width,width))}),"horizontal"===legendConfig.align&&(legendSpace.width=availableWidth),legendSpace}(legends,legend,availableHeightForCanvas,availableWidthForCanvas),legendWidth=legendPosition===src_constants_LEFT||legendPosition===src_constants_RIGHT?legendSpace.width:0,legendHeight=legendPosition===src_constants_TOP||legendPosition===src_constants_BOTTOM?legendSpace.height:0,components={headers:headers,legends:legends,canvases:[context],rows:rows,columns:columns,values:values,cornerMatrices:visGroup.cornerMatrices()},measurement={mountSpace:{height:height,width:width},headerHeight:headerHeight,legendSpace:legendSpace,canvasWidth:availableWidthForCanvas,canvasHeight:availableHeightForCanvas,width:availableWidthForCanvas-legendWidth,height:availableHeightForCanvas-headerHeight-legendHeight,minUnitHeight:context.minUnitHeight(),minUnitWidth:context.minUnitWidth()};return{layoutConfig:layoutConfig=mergeRecursive(layoutConfig,{classPrefix:classPrefix,showHeaders:showHeaders,border:mergeRecursive(visGroup.metaData().border,context.config().border),layoutArrangement:layoutArrangement,legend:legend,buffer:scrollBar.thickness,pagination:pagination,title:titleConfig,subtitle:subtitleConfig,isColumnSizeEqual:isColumnSizeEqual,isRowSizeEqual:isRowSizeEqual,mount:mount,priority:priority}),components:components,measurement:measurement}},componentIndexes={title:0,subtitle:1,legend:2,verticalScrollBar:3,horizontalScrollBar:4,grid:5,message:6},componentNames={0:"title",1:"subtitle",2:"legend",3:"verticalScrollBar",4:"horizontalScrollBar",5:"grid",6:"message"},layout_maker_renderLayout=function renderLayout(canvas,renderDetails){var layoutManager=canvas._layoutManager,gridLayout=canvas.layout(),grid=componentIndexes.grid,compWrappers=component_wrapper_maker_componentWrapperMaker(canvas,gridLayout,renderDetails),componentWrappers=Object.keys(componentIndexes).map(function(e){return compWrappers[e]});componentWrappers[grid]&&function createScrollManager(componentWrappers,canvas){var verticalScrollBar=componentIndexes.verticalScrollBar,grid=componentIndexes.grid,horizontalScrollWrapper=componentWrappers[componentIndexes.horizontalScrollBar],verticalScrollWrapper=componentWrappers[verticalScrollBar],gridWrapper=componentWrappers[grid],scrollBarManager=new ScrollManager,scrollBarComponents={};verticalScrollWrapper&&(scrollBarComponents.vertical=verticalScrollWrapper),horizontalScrollWrapper&&(scrollBarComponents.horizontal=horizontalScrollWrapper),scrollBarManager.scrollBarComponents(scrollBarComponents).attachedComponents({grid:gridWrapper}),canvas.composition().hScrollBar=horizontalScrollWrapper,canvas.composition().vScrollBar=verticalScrollWrapper,[horizontalScrollWrapper,verticalScrollWrapper].forEach(function(wrapper){wrapper&&wrapper.manager(scrollBarManager)}),gridWrapper.scrollBarManager(scrollBarManager)}(componentWrappers,canvas),componentWrappers.forEach(function(componentWrapper,index){if(!componentWrapper){var deleteElementName=componentNames[index];layoutManager.removeComponent(deleteElementName)}}),layoutManager.registerComponents(componentWrappers).compute(),function attachListeners(componentWrappers){componentWrappers.forEach(function(componentWrapper){componentWrapper&&componentWrapper.attachListener()})}(componentWrappers)};function group_firebolt_typeof(obj){return(group_firebolt_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function _typeof(obj){return typeof obj}:function _typeof(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function group_firebolt_defineProperties(target,props){for(var i=0;i","\"","'","/","createHeading","prevCell","cellType","_minTickDiff","legendInitializer","legendConfig","prevLegends","legends","headerHeight","legendInfo","legendCreator","LegendCls","dataset","scaleProps","_scale$config","stepMapper","dataInfo","legendMeasures","titleText","getGroupByData","setLegendMeasures","MuzeComponent","_this$boundBox","HeaderComponent","headerComponent_classCallCheck","headerComponent_possibleConstructorReturn","headerComponent_getPrototypeOf","setParams","cont","renderHeader","LegendComponent","legendComponent_classCallCheck","legendComponent_possibleConstructorReturn","legendComponent_getPrototypeOf","legendSpace","sectionComponents","_this$params$config","legendMount","legWidth","legHeight","sections","currHeight","currWidth","leg","legendHeight","legendWidth","renderLegend","_defaultAlignmentHelp","defaultAlignmentHelper","arrowSizeMap","getUnitPositions","totalLength","viewLength","currentLen","unitPosition","createScrollBarArrow","createScrollBarRect","mover","applyScrollMouseDownAction","moverRect","scrollMaker","_mover$node$getBoundi","_rect$node$getBoundin","rectX","rectY","changeMoverPosition","registerListenerOnArrow","arrowType","_components","isTouchDevice","registerListeners","applyMoverDrag","moverStartPos","rectStartPos","distanceMoved","actualPosition","pageXOffset","pageYOffset","applyRectClick","emptyScrollAreaClick","manager","unitPositions","ScrollMaker","scroll_maker_classCallCheck","_attachedScrollAction","_unitPositions","scroll_maker_createClass","scrollTo","scrollDeltaTo","createScroll","scrollBarContainer","scrollContainerHelper","attachScrollAction","externalScrollAction","detachScrollAction","scrollMakerMap","_ScrollMaker","HorizontalScrollMaker","horizontal_scroll_maker_classCallCheck","horizontal_scroll_maker_possibleConstructorReturn","horizontal_scroll_maker_getPrototypeOf","horizontal_scroll_maker_inherits","horizontal_scroll_maker_createClass","horizontal_scroll_maker_get","prevArrow","nextArrow","_this$logicalSpace","scrollBarWithouArrowLength","_scrollBarWithouArrowLength","_this$_components$mov","positionAdjuster","newPosition","currentPos","_this$_components$mov2","moverPos","movedViewLength","performAttachedScrollFunction","delta","_this$_components$mov3","scrollPercentage","movement","VerticalScrollMaker","vertical_scroll_maker_classCallCheck","vertical_scroll_maker_possibleConstructorReturn","vertical_scroll_maker_getPrototypeOf","vertical_scroll_maker_inherits","vertical_scroll_maker_createClass","vertical_scroll_maker_get","ScrollComponent","scroll_component_classCallCheck","scrollBarComponentConfig","scroll_component_possibleConstructorReturn","scroll_component_getPrototypeOf","unitIndex","sanitizedUnitIndex","externalAction","MatrixComponent","matrix_component_classCallCheck","matrix_component_possibleConstructorReturn","matrix_component_getPrototypeOf","_this$params$config$s","containerForMatrix","applyScroll","_cellSpanMaker","cellSpanMaker","_matrixSpanGenerator","renderTable","applySpans","applier","renderPlaceholders","renderMatrix","applyScrollAction","scollDistance","GridComponent","grid_component_classCallCheck","grid_component_possibleConstructorReturn","grid_component_getPrototypeOf","_this$component$viewI","matrixDim","matrixName","updateWrapper","matrixWrapper","allComponents","_scrollBarManager","scrollBarManager","wheelDeltaX","wheelDeltaY","preventBrowserScroll","triggerScrollBarAction","movedView","scrollActionApplier","_this$component$0$0$b","sanitizeGrid","attachScrollListener","MessageComponent","message_component_classCallCheck","message_component_possibleConstructorReturn","message_component_getPrototypeOf","_config$dimensions","message","_params$config","headerMap","headerCell","configType","isGridPresent","renderDetails","_renderDetails$compon","checkParamsValidation","createHeaderWrapper","headerType","layoutManager","_headerMap$headerType","headerConfig","component_wrapper_maker_objectSpread","wrapperParams","existingComponent","createScrollBarWrapper","scrollBarType","grid","_scrollBarMap$scrollB","scrollBarMap","layoutBasedMeasure","viewMeasure","rowAlign","colAlign","componentWrapperMaker","_layoutManager","createMessageWrapper","defaultDimensions","gridComponent","getBoundBox","createLegendWrapper","legendWrapper","gridLayoutWrapper","verticalScrollBar","horizontalScrollBar","ScrollManager","scroll_manager_classCallCheck","_scrollBarComponents","_attachedComponents","scroll_manager_createClass","scrollBarComponents","attachedComponents","performScrollAction","getRenderDetails","_mount$getBoundingCli","heightAttr","widthAttr","visGroup","_visGroup$placeholder","legendPosition","layoutArrangement","arrangeComponents","_titleLayouts","titleLayouts","component_resolver_defineProperty","legendLayouts","titlePosition","subtitlePosition","availableHeightForCanvas","availableWidthForCanvas","_createHeaders","canvasHeight","canvasWidth","isSubtitle","headerOptions","_createHeading","createLegend","getLegendSpace","mountSpace","componentIndexes","componentNames","3","4","5","6","renderLayout","gridLayout","compWrappers","componentWrappers","createScrollManager","horizontalScrollWrapper","verticalScrollWrapper","gridWrapper","hScrollBar","vScrollBar","componentWrapper","deleteElementName","removeComponent","registerComponents","attachListeners","attachListener","defaultInteractionPolicy","isMeasure","group_firebolt_toConsumableArray","getFieldsFromChannel","colDim","unitColFacets","equals","unitRowFacets","propagateWith","defaultCrossInteractionPolicy","propagationCanvasAlias","propagationUnit","GroupFireBolt","group_firebolt_classCallCheck","group_firebolt_possibleConstructorReturn","group_firebolt_getPrototypeOf","behaviouralAction","validFields","APP_INITIAL_STATE","app","Canvas","globalDependencies","canvas_classCallCheck","canvas_possibleConstructorReturn","canvas_getPrototypeOf","canvas_defineProperty","canvas_assertThisInitialized","initedComponents","initCanvas","createGroupState","_VisualGroup$getState2","canvas_helper_slicedToArray","register","prepareLayout","triggerReflow","setLayoutInfForUnits","getRootNodeId","setLabelRotationForAxes","rotationVal","getAxes","initialSettings","regEntry","COMPONENTS","SUBREGISTRIES","regObj","globalCache","defaultRegistry","overrideRegistryDefinitions","overrideRegistry","muze","_transactor2","muze_slicedToArray","env","globalStore","componentSubRegistryDef","settings","withSettings","enableChainedTransaction","transactionModel","transactionEndpoint","transactionItems","Smartlabel","SideEffects","standards","Behaviours","pkg","operators","utils","lookupWhat","lookupDetails","lookupTarget"],"mappings":"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GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAzB,IAAIg3C,+BAESgY,cAAKK,aCZTA,YAAS,IAAI3pD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAzB,IAAIg3C,+BAESgY,cAAKK,aCZTA,YAAS,IAAI3pD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAzB,IAAIg3C,+BAESgY,cAAKK,aCALL,cAZK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAzB,IAAIg3C,gCCESgY,cAZK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAzB,IAAIg3C,gCCESgY,cAZK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAzB,IAAIg3C,gCCESgY,gBAZK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAzB,IAAIg3C,gCCESgY,gBAZK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAzB,IAAIg3C,gCCESgY,kBAZK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,yDACA,+DACA,sEACAzB,IAAIg3C,gCCASgY,cAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCESgY,cAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCESgY,cAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCESgY,cAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCESgY,gBAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCESgY,cAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCESgY,cAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCESgY,cAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCESgY,gBAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCESgY,cAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCESgY,gBAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCESgY,gBAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCRKqY,aAAS,IAAI3pD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,+BAESgY,eAAKK,cCALL,gBAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCESgY,eAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0DACAzB,IAAIg3C,gCCESgY,iBAVK,IAAItpD,MAAM,GAAGjE,OAC/B,qBACA,2BACA,iCACA,uCACA,6CACA,mDACA,0D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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 = 5);\n","(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(\"DataModel\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DataModel\"] = factory();\n\telse\n\t\troot[\"DataModel\"] = 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 = \"./src/index.js\");\n","import dsv from \"./dsv\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatRows = csv.formatRows;\n","var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n })).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(text) {\n return text == null ? \"\"\n : reFormat.test(text += \"\") ? \"\\\"\" + text.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : text;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatRows: formatRows\n };\n}\n","export {default as dsvFormat} from \"./dsv\";\nexport {csvParse, csvParseRows, csvFormat, csvFormatRows} from \"./csv\";\nexport {tsvParse, tsvParseRows, tsvFormat, tsvFormatRows} from \"./tsv\";\n","import dsv from \"./dsv\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatRows = tsv.formatRows;\n","export { DataFormat, FilteringMode } from '../enums';\n/**\n * The event name for data propagation.\n */\nexport const PROPAGATION = 'propagation';\n\n/**\n * The name of the unique row id column in DataModel.\n */\nexport const ROW_ID = '__id__';\n\n/**\n * The enums for operation names performed on DataModel.\n */\nexport const DM_DERIVATIVES = {\n SELECT: 'select',\n PROJECT: 'project',\n GROUPBY: 'group',\n COMPOSE: 'compose',\n CAL_VAR: 'calculatedVariable',\n BIN: 'bin',\n SORT: 'sort'\n};\n\nexport const JOINS = {\n CROSS: 'cross',\n LEFTOUTER: 'leftOuter',\n RIGHTOUTER: 'rightOuter',\n NATURAL: 'natural',\n FULLOUTER: 'fullOuter'\n};\n\nexport const LOGICAL_OPERATORS = {\n AND: 'and',\n OR: 'or'\n};\n","import FlatJSON from './flat-json';\nimport DSVArr from './dsv-arr';\nimport DSVStr from './dsv-str';\nimport { detectDataFormat } from '../utils';\n\n/**\n * Parses the input data and detect the format automatically.\n *\n * @param {string|Array} data - The input data.\n * @param {Object} options - An optional config specific to data format.\n * @return {Array.} Returns an array of headers and column major data.\n */\nfunction Auto (data, options) {\n const converters = { FlatJSON, DSVStr, DSVArr };\n const dataFormat = detectDataFormat(data);\n\n if (!dataFormat) {\n throw new Error('Couldn\\'t detect the data format');\n }\n\n return converters[dataFormat](data, options);\n}\n\nexport default Auto;\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in DSV array to a manageable internal format.\n *\n * @param {Array.} arr - A 2D array containing of the DSV data.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv data is header or not.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * [\"a\", \"b\", \"c\"],\n * [1, 2, 3],\n * [4, 5, 6],\n * [7, 8, 9]\n * ];\n */\nfunction DSVArr (arr, options) {\n const defaultOption = {\n firstRowHeader: true,\n };\n options = Object.assign({}, defaultOption, options);\n\n let header;\n const columns = [];\n const push = columnMajor(columns);\n\n if (options.firstRowHeader) {\n // If header present then mutate the array.\n // Do in-place mutation to save space.\n header = arr.splice(0, 1)[0];\n } else {\n header = [];\n }\n\n arr.forEach(field => push(...field));\n\n return [header, columns];\n}\n\nexport default DSVArr;\n","import { dsvFormat as d3Dsv } from 'd3-dsv';\nimport DSVArr from './dsv-arr';\n\n/**\n * Parses and converts data formatted in DSV string to a manageable internal format.\n *\n * @todo Support to be given for https://tools.ietf.org/html/rfc4180.\n * @todo Sample implementation https://github.com/knrz/CSV.js/.\n *\n * @param {string} str - The input DSV string.\n * @param {Object} options - Option to control the behaviour of the parsing.\n * @param {boolean} [options.firstRowHeader=true] - Whether the first row of the dsv string data is header or not.\n * @param {string} [options.fieldSeparator=\",\"] - The separator of two consecutive field.\n * @return {Array} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = `\n * a,b,c\n * 1,2,3\n * 4,5,6\n * 7,8,9\n * `\n */\nfunction DSVStr (str, options) {\n const defaultOption = {\n firstRowHeader: true,\n fieldSeparator: ','\n };\n options = Object.assign({}, defaultOption, options);\n\n const dsv = d3Dsv(options.fieldSeparator);\n return DSVArr(dsv.parseRows(str), options);\n}\n\nexport default DSVStr;\n","import { columnMajor } from '../utils';\n\n/**\n * Parses and converts data formatted in JSON to a manageable internal format.\n *\n * @param {Array.} arr - The input data formatted in JSON.\n * @return {Array.} Returns an array of headers and column major data.\n * @example\n *\n * // Sample input data:\n * const data = [\n * {\n * \"a\": 1,\n * \"b\": 2,\n * \"c\": 3\n * },\n * {\n * \"a\": 4,\n * \"b\": 5,\n * \"c\": 6\n * },\n * {\n * \"a\": 7,\n * \"b\": 8,\n * \"c\": 9\n * }\n * ];\n */\nfunction FlatJSON (arr) {\n const header = {};\n let i = 0;\n let insertionIndex;\n const columns = [];\n const push = columnMajor(columns);\n\n arr.forEach((item) => {\n const fields = [];\n for (let key in item) {\n if (key in header) {\n insertionIndex = header[key];\n } else {\n header[key] = i++;\n insertionIndex = i - 1;\n }\n fields[insertionIndex] = item[key];\n }\n push(...fields);\n });\n\n return [Object.keys(header), columns];\n}\n\nexport default FlatJSON;\n","export { default as DSVArr } from './dsv-arr';\nexport { default as DSVStr } from './dsv-str';\nexport { default as FlatJSON } from './flat-json';\nexport { default as Auto } from './auto-resolver';\n","/* eslint-disable default-case */\n\nimport { FieldType, DimensionSubtype, DataFormat, FilteringMode } from './enums';\nimport {\n persistDerivations,\n getRootGroupByModel,\n propagateToAllDataModels,\n getRootDataModel,\n propagateImmutableActions,\n addToPropNamespace,\n sanitizeUnitSchema,\n splitWithSelect,\n splitWithProject,\n getNormalizedProFields\n} from './helper';\nimport { DM_DERIVATIVES, PROPAGATION } from './constants';\nimport {\n dataBuilder,\n rowDiffsetIterator,\n groupBy\n} from './operator';\nimport { createBinnedFieldData } from './operator/bucket-creator';\nimport Relation from './relation';\nimport reducerStore from './utils/reducer-store';\nimport { createFields } from './field-creator';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport Value from './value';\n\n/**\n * DataModel is an in-browser representation of tabular data. It supports\n * {@link https://en.wikipedia.org/wiki/Relational_algebra | relational algebra} operators as well as generic data\n * processing opearators.\n * DataModel extends {@link Relation} class which defines all the relational algebra opreators. DataModel gives\n * definition of generic data processing operators which are not relational algebra complient.\n *\n * @public\n * @class\n * @extends Relation\n * @memberof Datamodel\n */\nclass DataModel extends Relation {\n /**\n * Creates a new DataModel instance by providing data and schema. Data could be in the form of\n * - Flat JSON\n * - DSV String\n * - 2D Array\n *\n * By default DataModel finds suitable adapter to serialize the data. DataModel also expects a\n * {@link Schema | schema} for identifying the variables present in data.\n *\n * @constructor\n * @example\n * const data = loadData('cars.csv');\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', unit : 'cm', scale: '1000', numberformat: val => `${val}G`},\n * { name: 'Cylinders', type: 'dimension' },\n * { name: 'Displacement', type: 'measure' },\n * { name: 'Horsepower', type: 'measure' },\n * { name: 'Weight_in_lbs', type: 'measure' },\n * { name: 'Acceleration', type: 'measure' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin', type: 'dimension' }\n * ];\n * const dm = new DataModel(data, schema, { name: 'Cars' });\n * table(dm);\n *\n * @public\n *\n * @param {Array. | string | Array.} data Input data in any of the mentioned formats\n * @param {Array.} schema Defination of the variables. Order of the variables in data and order of the\n * variables in schema has to be same.\n * @param {object} [options] Optional arguments to specify more settings regarding the creation part\n * @param {string} [options.name] Name of the datamodel instance. If no name is given an auto generated name is\n * assigned to the instance.\n * @param {string} [options.fieldSeparator=','] specify field separator type if the data is of type dsv string.\n */\n constructor (...args) {\n super(...args);\n\n this._onPropagation = [];\n }\n\n /**\n * Reducers are simple functions which reduces an array of numbers to a representative number of the set.\n * Like an array of numbers `[10, 20, 5, 15]` can be reduced to `12.5` if average / mean reducer function is\n * applied. All the measure fields in datamodel (variables in data) needs a reducer to handle aggregation.\n *\n * @public\n *\n * @return {ReducerStore} Singleton instance of {@link ReducerStore}.\n */\n static get Reducers () {\n return reducerStore;\n }\n\n /**\n * Configure null, undefined, invalid values in the source data\n *\n * @public\n *\n * @param {Object} [config] - Configuration to control how null, undefined and non-parsable values are\n * represented in DataModel.\n * @param {string} [config.undefined] - Define how an undefined value will be represented.\n * @param {string} [config.null] - Define how a null value will be represented.\n * @param {string} [config.invalid] - Define how a non-parsable value will be represented.\n */\n static configureInvalidAwareTypes (config) {\n return InvalidAwareTypes.invalidAwareVals(config);\n }\n\n /**\n * Retrieve the data attached to an instance in JSON format.\n *\n * @example\n * // DataModel instance is already prepared and assigned to dm variable\n * const data = dm.getData({\n * order: 'column',\n * formatter: {\n * origin: (val) => val === 'European Union' ? 'EU' : val;\n * }\n * });\n * console.log(data);\n *\n * @public\n *\n * @param {Object} [options] Options to control how the raw data is to be returned.\n * @param {string} [options.order='row'] Defines if data is retieved in row order or column order. Possible values\n * are `'rows'` and `'columns'`\n * @param {Function} [options.formatter=null] Formats the output data. This expects an object, where the keys are\n * the name of the variable needs to be formatted. The formatter function is called for each row passing the\n * value of the cell for a particular row as arguments. The formatter is a function in the form of\n * `function (value, rowId, schema) => { ... }`\n * Know more about {@link Fomatter}.\n *\n * @return {Array} Returns a multidimensional array of the data with schema. The return format looks like\n * ```\n * {\n * data,\n * schema\n * }\n * ```\n */\n getData (options) {\n const defOptions = {\n order: 'row',\n formatter: null,\n withUid: false,\n getAllFields: false,\n sort: []\n };\n options = Object.assign({}, defOptions, options);\n const fields = this.getPartialFieldspace().fields;\n\n const dataGenerated = dataBuilder.call(\n this,\n this.getPartialFieldspace().fields,\n this._rowDiffset,\n options.getAllFields ? fields.map(d => d.name()).join() : this._colIdentifier,\n options.sort,\n {\n columnWise: options.order === 'column',\n addUid: !!options.withUid\n }\n );\n\n if (!options.formatter) {\n return dataGenerated;\n }\n\n const { formatter } = options;\n const { data, schema, uids } = dataGenerated;\n const fieldNames = schema.map((e => e.name));\n const fmtFieldNames = Object.keys(formatter);\n const fmtFieldIdx = fmtFieldNames.reduce((acc, next) => {\n const idx = fieldNames.indexOf(next);\n if (idx !== -1) {\n acc.push([idx, formatter[next]]);\n }\n return acc;\n }, []);\n\n if (options.order === 'column') {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n data[fIdx].forEach((datum, datumIdx) => {\n data[fIdx][datumIdx] = fmtFn.call(\n undefined,\n datum,\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n } else {\n data.forEach((datum, datumIdx) => {\n fmtFieldIdx.forEach((elem) => {\n const fIdx = elem[0];\n const fmtFn = elem[1];\n\n datum[fIdx] = fmtFn.call(\n undefined,\n datum[fIdx],\n uids[datumIdx],\n schema[fIdx]\n );\n });\n });\n }\n\n return dataGenerated;\n }\n\n /**\n * Returns the unique ids in an array.\n *\n * @return {Array} Returns an array of ids.\n */\n getUids () {\n const rowDiffset = this._rowDiffset;\n const ids = [];\n\n if (rowDiffset.length) {\n const diffSets = rowDiffset.split(',');\n\n diffSets.forEach((set) => {\n let [start, end] = set.split('-').map(Number);\n\n end = end !== undefined ? end : start;\n ids.push(...Array(end - start + 1).fill().map((_, idx) => start + idx));\n });\n }\n\n return ids;\n }\n /**\n * Groups the data using particular dimensions and by reducing measures. It expects a list of dimensions using which\n * it projects the datamodel and perform aggregations to reduce the duplicate tuples. Refer this\n * {@link link_to_one_example_with_group_by | document} to know the intuition behind groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupedDM = dm.groupBy(['Year'], { horsepower: 'max' } );\n * console.log(groupedDm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {DataModel} Returns a new DataModel instance after performing the groupby.\n */\n groupBy (fieldsArr, reducers = {}, config = { saveChild: true }) {\n const groupByString = `${fieldsArr.join()}`;\n let params = [this, fieldsArr, reducers];\n const newDataModel = groupBy(...params);\n\n persistDerivations(\n this,\n newDataModel,\n DM_DERIVATIVES.GROUPBY,\n { fieldsArr, groupByString, defaultReducer: reducerStore.defaultReducer() },\n reducers\n );\n\n if (config.saveChild) {\n newDataModel.setParent(this);\n } else {\n newDataModel.setParent(null);\n }\n\n return newDataModel;\n }\n\n /**\n * Performs sorting operation on the current {@link DataModel} instance according to the specified sorting details.\n * Like every other operator it doesn't mutate the current DataModel instance on which it was called, instead\n * returns a new DataModel instance containing the sorted data.\n *\n * DataModel support multi level sorting by listing the variables using which sorting needs to be performed and\n * the type of sorting `ASC` or `DESC`.\n *\n * In the following example, data is sorted by `Origin` field in `DESC` order in first level followed by another\n * level of sorting by `Acceleration` in `ASC` order.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * let sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\"] // Default value is ASC\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * // Sort with a custom sorting function\n * sortedDm = dm.sort([\n * [\"Origin\", \"DESC\"]\n * [\"Acceleration\", (a, b) => a - b] // Custom sorting function\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @text\n * DataModel also provides another sorting mechanism out of the box where sort is applied to a variable using\n * another variable which determines the order.\n * Like the above DataModel contains three fields `Origin`, `Name` and `Acceleration`. Now, the data in this\n * model can be sorted by `Origin` field according to the average value of all `Acceleration` for a\n * particular `Origin` value.\n *\n * @example\n * // here dm is the pre-declared DataModel instance containing the data of 'cars.json' file\n * const sortedDm = dm.sort([\n * ['Origin', ['Acceleration', (a, b) => avg(...a.Acceleration) - avg(...b.Acceleration)]]\n * ]);\n *\n * console.log(dm.getData());\n * console.log(sortedDm.getData());\n *\n * @public\n *\n * @param {Array.} sortingDetails - Sorting details based on which the sorting will be performed.\n * @return {DataModel} Returns a new instance of DataModel with sorted data.\n */\n sort (sortingDetails, config = { saveChild: false }) {\n const rawData = this.getData({\n order: 'row',\n sort: sortingDetails\n });\n const header = rawData.schema.map(field => field.name);\n const dataInCSVArr = [header].concat(rawData.data);\n\n const sortedDm = new this.constructor(dataInCSVArr, rawData.schema, { dataFormat: 'DSVArr' });\n\n persistDerivations(\n this,\n sortedDm,\n DM_DERIVATIVES.SORT,\n config,\n sortingDetails\n );\n\n if (config.saveChild) {\n sortedDm.setParent(this);\n } else {\n sortedDm.setParent(null);\n }\n\n return sortedDm;\n }\n\n /**\n * Performs the serialization operation on the current {@link DataModel} instance according to the specified data\n * type. When an {@link DataModel} instance is created, it de-serializes the input data into its internal format,\n * and during its serialization process, it converts its internal data format to the specified data type and returns\n * that data regardless what type of data is used during the {@link DataModel} initialization.\n *\n * @example\n * // here dm is the pre-declared DataModel instance.\n * const csvData = dm.serialize(DataModel.DataFormat.DSV_STR, { fieldSeparator: \",\" });\n * console.log(csvData); // The csv formatted data.\n *\n * const jsonData = dm.serialize(DataModel.DataFormat.FLAT_JSON);\n * console.log(jsonData); // The json data.\n *\n * @public\n *\n * @param {string} type - The data type name for serialization.\n * @param {Object} options - The optional option object.\n * @param {string} options.fieldSeparator - The field separator character for DSV data type.\n * @return {Array|string} Returns the serialized data.\n */\n serialize (type, options) {\n type = type || this._dataFormat;\n options = Object.assign({}, { fieldSeparator: ',' }, options);\n\n const fields = this.getFieldspace().fields;\n const colData = fields.map(f => f.formattedData());\n const rowsCount = colData[0].length;\n let serializedData;\n let rowIdx;\n let colIdx;\n\n if (type === DataFormat.FLAT_JSON) {\n serializedData = [];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = {};\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row[fields[colIdx].name()] = colData[colIdx][rowIdx];\n }\n serializedData.push(row);\n }\n } else if (type === DataFormat.DSV_STR) {\n serializedData = [fields.map(f => f.name()).join(options.fieldSeparator)];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row.join(options.fieldSeparator));\n }\n serializedData = serializedData.join('\\n');\n } else if (type === DataFormat.DSV_ARR) {\n serializedData = [fields.map(f => f.name())];\n for (rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n const row = [];\n for (colIdx = 0; colIdx < fields.length; colIdx++) {\n row.push(colData[colIdx][rowIdx]);\n }\n serializedData.push(row);\n }\n } else {\n throw new Error(`Data type ${type} is not supported`);\n }\n\n return serializedData;\n }\n\n addField (field) {\n const fieldName = field.name();\n this._colIdentifier += `,${fieldName}`;\n const partialFieldspace = this._partialFieldspace;\n const cachedValueObjects = partialFieldspace._cachedValueObjects;\n\n if (!partialFieldspace.fieldsObj()[field.name()]) {\n partialFieldspace.fields.push(field);\n cachedValueObjects.forEach((obj, i) => {\n obj[field.name()] = new Value(field.partialField.data[i], field);\n });\n } else {\n const fieldIndex = partialFieldspace.fields.findIndex(fieldinst => fieldinst.name() === fieldName);\n fieldIndex >= 0 && (partialFieldspace.fields[fieldIndex] = field);\n }\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n\n this.__calculateFieldspace().calculateFieldsConfig();\n return this;\n }\n\n /**\n * Creates a new variable calculated from existing variables. This method expects the definition of the newly created\n * variable and a function which resolves the value of the new variable from existing variables.\n *\n * Can create a new measure based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const newDm = dataModel.calculateVariable({\n * name: 'powerToWeight',\n * type: 'measure'\n * }, ['horsepower', 'weight_in_lbs', (hp, weight) => hp / weight ]);\n *\n *\n * Can create a new dimension based on existing variables:\n * @example\n * // DataModel already prepared and assigned to dm variable;\n * const child = dataModel.calculateVariable(\n * {\n * name: 'Efficiency',\n * type: 'dimension'\n * }, ['horsepower', (hp) => {\n * if (hp < 80) { return 'low'; },\n * else if (hp < 120) { return 'moderate'; }\n * else { return 'high' }\n * }]);\n *\n * @public\n *\n * @param {Object} schema - The schema of newly defined variable.\n * @param {Array.} dependency - An array containing the dependency variable names and a resolver\n * function as the last element.\n * @param {Object} config - An optional config object.\n * @param {boolean} [config.saveChild] - Whether the newly created DataModel will be a child.\n * @param {boolean} [config.replaceVar] - Whether the newly created variable will replace the existing variable.\n * @return {DataModel} Returns an instance of DataModel with the new field.\n */\n calculateVariable (schema, dependency, config) {\n schema = sanitizeUnitSchema(schema);\n config = Object.assign({}, { saveChild: true, replaceVar: false }, config);\n\n const fieldsConfig = this.getFieldsConfig();\n const depVars = dependency.slice(0, dependency.length - 1);\n const retrieveFn = dependency[dependency.length - 1];\n\n if (fieldsConfig[schema.name] && !config.replaceVar) {\n throw new Error(`${schema.name} field already exists in datamodel`);\n }\n\n const depFieldIndices = depVars.map((field) => {\n const fieldSpec = fieldsConfig[field];\n if (!fieldSpec) {\n // @todo dont throw error here, use warning in production mode\n throw new Error(`${field} is not a valid column name.`);\n }\n return fieldSpec.index;\n });\n\n const clone = this.clone(config.saveChild);\n\n const fs = clone.getFieldspace().fields;\n const suppliedFields = depFieldIndices.map(idx => fs[idx]);\n\n let cachedStore = {};\n let cloneProvider = () => this.detachedRoot();\n\n const computedValues = [];\n rowDiffsetIterator(clone._rowDiffset, (i) => {\n const fieldsData = suppliedFields.map(field => field.partialField.data[i]);\n computedValues[i] = retrieveFn(...fieldsData, i, cloneProvider, cachedStore);\n });\n const [field] = createFields([computedValues], [schema], [schema.name]);\n clone.addField(field);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.CAL_VAR,\n { config: schema, fields: depVars },\n retrieveFn\n );\n\n return clone;\n }\n\n /**\n * Propagates changes across all the connected DataModel instances.\n *\n * @param {Array} identifiers - A list of identifiers that were interacted with.\n * @param {Object} payload - The interaction specific details.\n *\n * @return {DataModel} DataModel instance.\n */\n propagate (identifiers, config = {}, addToNameSpace, propConfig = {}) {\n const isMutableAction = config.isMutableAction;\n const propagationSourceId = config.sourceId;\n const payload = config.payload;\n const rootModel = getRootDataModel(this);\n const propagationNameSpace = rootModel._propagationNameSpace;\n const rootGroupByModel = getRootGroupByModel(this);\n const rootModels = {\n groupByModel: rootGroupByModel,\n model: rootModel\n };\n\n addToNameSpace && addToPropNamespace(propagationNameSpace, config, this);\n propagateToAllDataModels(identifiers, rootModels, { propagationNameSpace, sourceId: propagationSourceId },\n Object.assign({\n payload\n }, config));\n\n if (isMutableAction) {\n propagateImmutableActions(propagationNameSpace, rootModels, {\n config,\n propConfig\n }, this);\n }\n\n return this;\n }\n\n /**\n * Associates a callback with an event name.\n *\n * @param {string} eventName - The name of the event.\n * @param {Function} callback - The callback to invoke.\n * @return {DataModel} Returns this current DataModel instance itself.\n */\n on (eventName, callback) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation.push(callback);\n break;\n }\n return this;\n }\n\n /**\n * Unsubscribes the callbacks for the provided event name.\n *\n * @param {string} eventName - The name of the event to unsubscribe.\n * @return {DataModel} Returns the current DataModel instance itself.\n */\n unsubscribe (eventName) {\n switch (eventName) {\n case PROPAGATION:\n this._onPropagation = [];\n break;\n\n }\n return this;\n }\n\n /**\n * This method is used to invoke the method associated with propagation.\n *\n * @param {Object} payload The interaction payload.\n * @param {DataModel} identifiers The propagated DataModel.\n * @memberof DataModel\n */\n handlePropagation (propModel, payload) {\n let propListeners = this._onPropagation;\n propListeners.forEach(fn => fn.call(this, propModel, payload));\n }\n\n /**\n * Performs the binning operation on a measure field based on the binning configuration. Binning means discretizing\n * values of a measure. Binning configuration contains an array; subsequent values from the array marks the boundary\n * of buckets in [inclusive, exclusive) range format. This operation does not mutate the subject measure field,\n * instead, it creates a new field (variable) of type dimension and subtype binned.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non-uniform buckets,\n * - providing bins count,\n * - providing each bin size,\n *\n * When custom `buckets` are provided as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', buckets: [30, 80, 100, 110] }\n * const binnedDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binsCount` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHP', binsCount: 5, start: 0, end: 100 }\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @text\n * When `binSize` is defined as part of binning configuration:\n * @example\n * // DataModel already prepared and assigned to dm variable\n * const config = { name: 'binnedHorsepower', binSize: 20, start: 5}\n * const binDM = dataModel.bin('horsepower', config);\n *\n * @public\n *\n * @param {string} measureFieldName - The name of the target measure field.\n * @param {Object} config - The config object.\n * @param {string} [config.name] - The name of the new field which will be created.\n * @param {string} [config.buckets] - An array containing the bucket ranges.\n * @param {string} [config.binSize] - The size of each bin. It is ignored when buckets are given.\n * @param {string} [config.binsCount] - The total number of bins to generate. It is ignored when buckets are given.\n * @param {string} [config.start] - The start value of the bucket ranges. It is ignored when buckets are given.\n * @param {string} [config.end] - The end value of the bucket ranges. It is ignored when buckets are given.\n * @return {DataModel} Returns a new {@link DataModel} instance with the new field.\n */\n bin (measureFieldName, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n if (!fieldsConfig[measureFieldName]) {\n throw new Error(`Field ${measureFieldName} doesn't exist`);\n }\n\n const binFieldName = config.name || `${measureFieldName}_binned`;\n\n if (fieldsConfig[binFieldName]) {\n throw new Error(`Field ${binFieldName} already exists`);\n }\n\n const measureField = this.getFieldspace().fieldsObj()[measureFieldName];\n const { binnedData, bins } = createBinnedFieldData(measureField, this._rowDiffset, config);\n\n const binField = createFields([binnedData], [\n {\n name: binFieldName,\n type: FieldType.DIMENSION,\n subtype: DimensionSubtype.BINNED,\n bins\n }], [binFieldName])[0];\n\n const clone = this.clone(config.saveChild);\n clone.addField(binField);\n\n persistDerivations(\n this,\n clone,\n DM_DERIVATIVES.BIN,\n { measureFieldName, config, binFieldName },\n null\n );\n\n return clone;\n }\n\n /**\n * Creates a new {@link DataModel} instance with completely detached root from current {@link DataModel} instance,\n * the new {@link DataModel} instance has no parent-children relationship with the current one, but has same data as\n * the current one.\n * This API is useful when a completely different {@link DataModel} but with same data as the current instance is\n * needed.\n *\n * @example\n * const dm = new DataModel(data, schema);\n * const detachedDm = dm.detachedRoot();\n *\n * // has different namespace\n * console.log(dm.getPartialFieldspace().name);\n * console.log(detachedDm.getPartialFieldspace().name);\n *\n * // has same data\n * console.log(dm.getData());\n * console.log(detachedDm.getData());\n *\n * @public\n *\n * @return {DataModel} Returns a detached {@link DataModel} instance.\n */\n detachedRoot () {\n const data = this.serialize(DataFormat.FLAT_JSON);\n const schema = this.getSchema();\n\n return new DataModel(data, schema);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of rows in the source {@link DataModel}\n * instance based on a set of dimensions.\n *\n * For each unique dimensional value, a new split is created which creates a unique {@link DataModel} instance for\n * that split\n *\n * If multiple dimensions are provided, it splits the source {@link DataModel} instance with all possible\n * combinations of the dimensional values for all the dimensions provided\n *\n * Additionally, it also accepts a predicate function to reduce the set of rows provided. A\n * {@link link_to_selection | Selection} is performed on all the split {@link DataModel} instances based on\n * the predicate function\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByRow(['Origin'])\n * console.log(splitDt));\n * // This should give three unique DataModel instances, one each having rows only for 'USA',\n * // 'Europe' and 'Japan' respectively\n *\n * @example\n * // without predicate function:\n * const splitDtMulti = dt.splitByRow(['Origin', 'Cylinders'])\n * console.log(splitDtMulti));\n * // This should give DataModel instances for all unique combinations of Origin and Cylinder values\n *\n * @example\n * // with predicate function:\n * const splitWithPredDt = dt.select(['Origin'], fields => fields.Origin.value === \"USA\")\n * console.log(splitWithPredDt);\n * // This should not include the DataModel for the Origin : 'USA'\n *\n *\n * @public\n *\n * @param {Array} dimensionArr - Set of dimensions based on which the split should occur\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByRow (dimensionArr, reducerFn, config) {\n const fieldsConfig = this.getFieldsConfig();\n\n dimensionArr.forEach((fieldName) => {\n if (!fieldsConfig[fieldName]) {\n throw new Error(`Field ${fieldName} doesn't exist in the schema`);\n }\n });\n\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n\n config = Object.assign({}, defConfig, config);\n\n return splitWithSelect(this, dimensionArr, reducerFn, config);\n }\n\n /**\n * Creates a set of new {@link DataModel} instances by splitting the set of fields in the source {@link DataModel}\n * instance based on a set of common and unique field names provided.\n *\n * Each DataModel created contains a set of fields which are common to all and a set of unique fields.\n * It also accepts configurations such as saveChild and mode(inverse or normal) to include/exclude the respective\n * fields\n *\n * @example\n * // without predicate function:\n * const splitDt = dt.splitByColumn( [['Acceleration'], ['Horsepower']], ['Origin'])\n * console.log(splitDt));\n * // This should give two unique DataModel instances, both having the field 'Origin' and\n * // one each having 'Acceleration' and 'Horsepower' fields respectively\n *\n * @example\n * // without predicate function:\n * const splitDtInv = dt.splitByColumn( [['Acceleration'], ['Horsepower'],['Origin', 'Cylinders'],\n * {mode: 'inverse'})\n * console.log(splitDtInv));\n * // This should give DataModel instances in the following way:\n * // All DataModel Instances do not have the fields 'Origin' and 'Cylinders'\n * // One DataModel Instance has rest of the fields except 'Acceleration' and the other DataModel instance\n * // has rest of the fields except 'Horsepower'\n *\n *\n *\n * @public\n *\n * @param {Array} uniqueFields - Set of unique fields included in each datamModel instance\n * @param {Array} commonFields - Set of common fields included in all datamModel instances\n * @param {Object} config - The configuration object\n * @param {string} [config.saveChild] - Configuration to save child or not\n * @param {string}[config.mode=FilteringMode.NORMAL] -The mode of the selection.\n * @return {Array} Returns the new DataModel instances after operation.\n */\n splitByColumn (uniqueFields = [], commonFields = [], config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const normalizedProjFieldSets = [[commonFields]];\n\n config = Object.assign({}, defConfig, config);\n uniqueFields = uniqueFields.length ? uniqueFields : [[]];\n\n\n uniqueFields.forEach((fieldSet, i) => {\n normalizedProjFieldSets[i] = getNormalizedProFields(\n [...fieldSet, ...commonFields],\n allFields,\n fieldConfig);\n });\n\n return splitWithProject(this, normalizedProjFieldSets, config, allFields);\n }\n\n\n}\n\nexport default DataModel;\n","import { DataFormat } from './enums';\n\nexport default {\n dataFormat: DataFormat.AUTO\n};\n","/**\n * DataFormat Enum defines the format of the input data.\n * Based on the format of the data the respective adapter is loaded.\n *\n * @readonly\n * @enum {string}\n */\nconst DataFormat = {\n FLAT_JSON: 'FlatJSON',\n DSV_STR: 'DSVStr',\n DSV_ARR: 'DSVArr',\n AUTO: 'Auto'\n};\n\nexport default DataFormat;\n","/**\n * DimensionSubtype enum defines the sub types of the Dimensional Field.\n *\n * @readonly\n * @enum {string}\n */\nconst DimensionSubtype = {\n CATEGORICAL: 'categorical',\n TEMPORAL: 'temporal',\n GEO: 'geo',\n BINNED: 'binned'\n};\n\nexport default DimensionSubtype;\n","/**\n * FieldType enum defines the high level field based on which visuals are controlled.\n * Measure in a high level is numeric field and Dimension in a high level is string field.\n *\n * @readonly\n * @enum {string}\n */\nconst FieldType = {\n MEASURE: 'measure',\n DIMENSION: 'dimension'\n};\n\nexport default FieldType;\n","/**\n * Filtering mode enum defines the filering modes of DataModel.\n *\n * @readonly\n * @enum {string}\n */\nconst FilteringMode = {\n NORMAL: 'normal',\n INVERSE: 'inverse',\n ALL: 'all'\n};\n\nexport default FilteringMode;\n","/**\n * Group by function names\n *\n * @readonly\n * @enum {string}\n */\nconst GROUP_BY_FUNCTIONS = {\n SUM: 'sum',\n AVG: 'avg',\n MIN: 'min',\n MAX: 'max',\n FIRST: 'first',\n LAST: 'last',\n COUNT: 'count',\n STD: 'std'\n};\n\nexport default GROUP_BY_FUNCTIONS;\n","/**\n * FilteringMode determines if resultant DataModel should be created from selection set or rejection set.\n *\n * The following modes are available\n * - `NORMAL`: Only entries from selection set are included in the resulatant DataModel instance\n * - `INVERSE`: Only entries from rejection set are included in the resulatant DataModel instance\n * - ALL: Both the entries from selection and rejection set are returned in two different DataModel instance\n */\n\nexport { default as DataFormat } from './data-format';\nexport { default as DimensionSubtype } from './dimension-subtype';\nexport { default as MeasureSubtype } from './measure-subtype';\nexport { default as FieldType } from './field-type';\nexport { default as FilteringMode } from './filtering-mode';\nexport { default as GROUP_BY_FUNCTIONS } from './group-by-functions';\n","/**\n * MeasureSubtype enum defines the sub types of the Measure Field.\n *\n * @readonly\n * @enum {string}\n */\nconst MeasureSubtype = {\n CONTINUOUS: 'continuous'\n};\n\nexport default MeasureSubtype;\n","import DataModel from './datamodel';\nimport {\n compose,\n bin,\n select,\n project,\n groupby as groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n} from './operator';\nimport * as Stats from './stats';\nimport * as enums from './enums';\nimport { DateTimeFormatter } from './utils';\nimport { DataFormat, FilteringMode, DM_DERIVATIVES } from './constants';\nimport InvalidAwareTypes from './invalid-aware-types';\nimport pkg from '../package.json';\n\nconst Operators = {\n compose,\n bin,\n select,\n project,\n groupBy,\n calculateVariable,\n sort,\n crossProduct,\n difference,\n naturalJoin,\n leftOuterJoin,\n rightOuterJoin,\n fullOuterJoin,\n union\n};\n\nconst version = pkg.version;\nObject.assign(DataModel, {\n Operators,\n Stats,\n DM_DERIVATIVES,\n DateTimeFormatter,\n DataFormat,\n FilteringMode,\n InvalidAwareTypes,\n version\n}, enums);\n\nexport default DataModel;\n","import { FieldType, DimensionSubtype, MeasureSubtype } from './enums';\nimport {\n Categorical,\n Temporal,\n Binned,\n Continuous,\n CategoricalParser,\n TemporalParser,\n BinnedParser,\n ContinuousParser,\n PartialField\n} from './fields';\n\n/**\n * Creates a field instance according to the provided data and schema.\n *\n * @param {Array} data - The field data array.\n * @param {Object} schema - The field schema object.\n * @return {Field} Returns the newly created field instance.\n */\nfunction createUnitField(data, schema) {\n data = data || [];\n let partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new ContinuousParser());\n return new Continuous(partialField, `0-${data.length - 1}`);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.TEMPORAL:\n partialField = new PartialField(schema.name, data, schema, new TemporalParser(schema));\n return new Temporal(partialField, `0-${data.length - 1}`);\n case DimensionSubtype.BINNED:\n partialField = new PartialField(schema.name, data, schema, new BinnedParser());\n return new Binned(partialField, `0-${data.length - 1}`);\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n default:\n partialField = new PartialField(schema.name, data, schema, new CategoricalParser());\n return new Categorical(partialField, `0-${data.length - 1}`);\n }\n}\n\n\n/**\n * Creates a field instance from partialField and rowDiffset.\n *\n * @param {PartialField} partialField - The corresponding partial field.\n * @param {string} rowDiffset - The data subset config.\n * @return {Field} Returns the newly created field instance.\n */\nexport function createUnitFieldFromPartial(partialField, rowDiffset) {\n const { schema } = partialField;\n\n switch (schema.type) {\n case FieldType.MEASURE:\n switch (schema.subtype) {\n case MeasureSubtype.CONTINUOUS:\n return new Continuous(partialField, rowDiffset);\n default:\n return new Continuous(partialField, rowDiffset);\n }\n case FieldType.DIMENSION:\n switch (schema.subtype) {\n case DimensionSubtype.CATEGORICAL:\n return new Categorical(partialField, rowDiffset);\n case DimensionSubtype.TEMPORAL:\n return new Temporal(partialField, rowDiffset);\n case DimensionSubtype.BINNED:\n return new Binned(partialField, rowDiffset);\n default:\n return new Categorical(partialField, rowDiffset);\n }\n default:\n return new Categorical(partialField, rowDiffset);\n }\n}\n\n/**\n * Creates the field instances with input data and schema.\n *\n * @param {Array} dataColumn - The data array for fields.\n * @param {Array} schema - The schema array for fields.\n * @param {Array} headers - The array of header names.\n * @return {Array.} Returns an array of newly created field instances.\n */\nexport function createFields(dataColumn, schema, headers) {\n const headersObj = {};\n\n if (!(headers && headers.length)) {\n headers = schema.map(item => item.name);\n }\n\n headers.forEach((header, i) => {\n headersObj[header] = i;\n });\n\n return schema.map(item => createUnitField(dataColumn[headersObj[item.name]], item));\n}\n","import { FieldType } from './enums';\nimport { getUniqueId } from './utils';\n\nconst fieldStore = {\n data: {},\n\n createNamespace (fieldArr, name) {\n const dataId = name || getUniqueId();\n\n this.data[dataId] = {\n name: dataId,\n fields: fieldArr,\n\n fieldsObj () {\n let fieldsObj = this._cachedFieldsObj;\n\n if (!fieldsObj) {\n fieldsObj = this._cachedFieldsObj = {};\n this.fields.forEach((field) => {\n fieldsObj[field.name()] = field;\n });\n }\n return fieldsObj;\n },\n getMeasure () {\n let measureFields = this._cachedMeasure;\n\n if (!measureFields) {\n measureFields = this._cachedMeasure = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.MEASURE) {\n measureFields[field.name()] = field;\n }\n });\n }\n return measureFields;\n },\n getDimension () {\n let dimensionFields = this._cachedDimension;\n\n if (!this._cachedDimension) {\n dimensionFields = this._cachedDimension = {};\n this.fields.forEach((field) => {\n if (field.schema().type === FieldType.DIMENSION) {\n dimensionFields[field.name()] = field;\n }\n });\n }\n return dimensionFields;\n },\n };\n return this.data[dataId];\n },\n};\n\nexport default fieldStore;\n","import Dimension from '../dimension';\n\n/**\n * Represents binned field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Binned extends Dimension {\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the last and first values of bins config array.\n */\n calculateDataDomain () {\n const binsArr = this.partialField.schema.bins;\n return [binsArr[0], binsArr[binsArr.length - 1]];\n }\n\n /**\n * Returns the bins config provided while creating the field instance.\n *\n * @public\n * @return {Array} Returns the bins array config.\n */\n bins () {\n return this.partialField.schema.bins;\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { DimensionSubtype } from '../../enums';\nimport Dimension from '../dimension';\n/**\n * Represents categorical field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Categorical extends Dimension {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return DimensionSubtype.CATEGORICAL;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n return domain;\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport { MeasureSubtype } from '../../enums';\nimport Measure from '../measure';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents continuous field subtype.\n *\n * @public\n * @class\n * @extends Measure\n */\nexport default class Continuous extends Measure {\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @override\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return MeasureSubtype.CONTINUOUS;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the min and max values.\n */\n calculateDataDomain () {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n // here don't use this.data() as the iteration will be occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n return;\n }\n\n if (datum < min) {\n min = datum;\n }\n if (datum > max) {\n max = datum;\n }\n });\n\n return [min, max];\n }\n}\n","import Field from '../field';\n\n/**\n * Represents dimension field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Dimension extends Field {\n /**\n * Returns the domain for the dimension field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\n\n/**\n * In {@link DataModel}, every tabular data consists of column, a column is stored as field.\n * Field contains all the data for a given column in an array.\n *\n * Each record consists of several fields; the fields of all records form the columns.\n * Examples of fields: name, gender, sex etc.\n *\n * In DataModel, each field can have multiple attributes which describes its data and behaviour.\n * A field can have two types of data: Measure and Dimension.\n *\n * A Dimension Field is the context on which a data is categorized and the measure is the numerical values that\n * quantify the data set.\n * In short a dimension is the lens through which you are looking at your measure data.\n *\n * Refer to {@link Schema} to get info about possible field attributes.\n *\n * @public\n * @class\n */\nexport default class Field {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n this.partialField = partialField;\n this.rowDiffset = rowDiffset;\n }\n\n /**\n * Generates the field type specific domain.\n *\n * @public\n * @abstract\n */\n domain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the the field schema.\n *\n * @public\n * @return {string} Returns the field schema.\n */\n schema () {\n return this.partialField.schema;\n }\n\n /**\n * Returns the name of the field.\n *\n * @public\n * @return {string} Returns the name of the field.\n */\n name () {\n return this.partialField.name;\n }\n\n /**\n * Returns the type of the field.\n *\n * @public\n * @return {string} Returns the type of the field.\n */\n type () {\n return this.partialField.schema.type;\n }\n\n /**\n * Returns the subtype of the field.\n *\n * @public\n * @return {string} Returns the subtype of the field.\n */\n subtype () {\n return this.partialField.schema.subtype;\n }\n\n /**\n * Returns the description of the field.\n *\n * @public\n * @return {string} Returns the description of the field.\n */\n description () {\n return this.partialField.schema.description;\n }\n\n /**\n * Returns the display name of the field.\n *\n * @public\n * @return {string} Returns the display name of the field.\n */\n displayName () {\n return this.partialField.schema.displayName || this.partialField.schema.name;\n }\n\n /**\n * Returns the data associated with the field.\n *\n * @public\n * @return {Array} Returns the data.\n */\n data () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n data.push(this.partialField.data[i]);\n });\n return data;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @abstract\n */\n formattedData () {\n throw new Error('Not yet implemented');\n }\n}\n","export { default as Field } from './field';\nexport { default as Dimension } from './dimension';\nexport { default as Categorical } from './categorical';\nexport { default as Temporal } from './temporal';\nexport { default as Binned } from './binned';\nexport { default as Measure } from './measure';\nexport { default as Continuous } from './continuous';\nexport { default as FieldParser } from './parsers/field-parser';\nexport { default as CategoricalParser } from './parsers/categorical-parser';\nexport { default as TemporalParser } from './parsers/temporal-parser';\nexport { default as BinnedParser } from './parsers/binned-parser';\nexport { default as ContinuousParser } from './parsers/continuous-parser';\nexport { default as PartialField } from './partial-field';\n","import { formatNumber } from '../../utils';\nimport { defaultReducerName } from '../../operator/group-by-function';\nimport Field from '../field';\n\n/**\n * Represents measure field type.\n *\n * @public\n * @class\n * @extends Field\n */\nexport default class Measure extends Field {\n /**\n * Returns the domain for the measure field.\n *\n * @override\n * @public\n * @return {any} Returns the calculated domain.\n */\n domain () {\n if (!this._cachedDomain) {\n this._cachedDomain = this.calculateDataDomain();\n }\n return this._cachedDomain;\n }\n\n /**\n * Returns the unit of the measure field.\n *\n * @public\n * @return {string} Returns unit of the field.\n */\n unit () {\n return this.partialField.schema.unit;\n }\n\n /**\n * Returns the aggregation function name of the measure field.\n *\n * @public\n * @return {string} Returns aggregation function name of the field.\n */\n defAggFn () {\n return this.partialField.schema.defAggFn || defaultReducerName;\n }\n\n /**\n * Returns the number format of the measure field.\n *\n * @public\n * @return {Function} Returns number format of the field.\n */\n numberFormat () {\n const { numberFormat } = this.partialField.schema;\n return numberFormat instanceof Function ? numberFormat : formatNumber;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @abstract\n */\n calculateDataDomain () {\n throw new Error('Not yet implemented');\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n return this.data();\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the binned values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class BinnedParser extends FieldParser {\n /**\n * Parses a single binned value of a field and returns the sanitized value.\n *\n * @public\n * @param {string} val - The value of the field.\n * @return {string} Returns the sanitized value.\n */\n parse (val) {\n const regex = /^\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*-\\s*([+-]?\\d+(?:\\.\\d+)?)\\s*$/;\n val = String(val);\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let matched = val.match(regex);\n result = matched ? `${Number.parseFloat(matched[1])}-${Number.parseFloat(matched[2])}`\n : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the categorical values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class CategoricalParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the stringified form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the stringified value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n result = String(val).trim();\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","import FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the continuous values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class ContinuousParser extends FieldParser {\n /**\n * Parses a single value of a field and returns the number form.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {string} Returns the number value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let parsedVal = parseFloat(val, 10);\n result = Number.isNaN(parsedVal) ? InvalidAwareTypes.NA : parsedVal;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","/**\n * A interface to represent a parser which is responsible to parse the field.\n *\n * @public\n * @interface\n */\nexport default class FieldParser {\n /**\n * Parses a single value of a field and return the sanitized form.\n *\n * @public\n * @abstract\n */\n parse () {\n throw new Error('Not yet implemented');\n }\n}\n","import { DateTimeFormatter } from '../../../utils';\nimport FieldParser from '../field-parser';\nimport InvalidAwareTypes from '../../../invalid-aware-types';\n\n/**\n * A FieldParser which parses the temporal values.\n *\n * @public\n * @class\n * @implements {FieldParser}\n */\nexport default class TemporalParser extends FieldParser {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {Object} schema - The schema object for the corresponding field.\n */\n constructor (schema) {\n super();\n this.schema = schema;\n this._dtf = new DateTimeFormatter(this.schema.format);\n }\n\n /**\n * Parses a single value of a field and returns the millisecond value.\n *\n * @public\n * @param {string|number} val - The value of the field.\n * @return {number} Returns the millisecond value.\n */\n parse (val) {\n let result;\n // check if invalid date value\n if (!InvalidAwareTypes.isInvalid(val)) {\n let nativeDate = this._dtf.getNativeDate(val);\n result = nativeDate ? nativeDate.getTime() : InvalidAwareTypes.NA;\n } else {\n result = InvalidAwareTypes.getInvalidType(val);\n }\n return result;\n }\n}\n","/**\n * Stores the full data and the metadata of a field. It provides\n * a single source of data from which the future Field\n * instance can get a subset of it with a rowDiffset config.\n *\n * @class\n * @public\n */\nexport default class PartialField {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} name - The name of the field.\n * @param {Array} data - The data array.\n * @param {Object} schema - The schema object of the corresponding field.\n * @param {FieldParser} parser - The parser instance corresponding to that field.\n */\n constructor (name, data, schema, parser) {\n this.name = name;\n this.schema = schema;\n this.parser = parser;\n this.data = this._sanitize(data);\n }\n\n /**\n * Sanitizes the field data.\n *\n * @private\n * @param {Array} data - The actual input data.\n * @return {Array} Returns the sanitized data.\n */\n _sanitize (data) {\n return data.map(datum => this.parser.parse(datum));\n }\n}\n","import { rowDiffsetIterator } from '../../operator/row-diffset-iterator';\nimport Dimension from '../dimension';\nimport { DateTimeFormatter } from '../../utils';\nimport InvalidAwareTypes from '../../invalid-aware-types';\n\n/**\n * Represents temporal field subtype.\n *\n * @public\n * @class\n * @extends Dimension\n */\nexport default class Temporal extends Dimension {\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {PartialField} partialField - The partialField instance which holds the whole data.\n * @param {string} rowDiffset - The data subset definition.\n */\n constructor (partialField, rowDiffset) {\n super(partialField, rowDiffset);\n\n this._cachedMinDiff = null;\n }\n\n /**\n * Calculates the corresponding field domain.\n *\n * @public\n * @override\n * @return {Array} Returns the unique values.\n */\n calculateDataDomain () {\n const hash = new Set();\n const domain = [];\n\n // here don't use this.data() as the iteration will be\n // occurred two times on same data.\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (!hash.has(datum)) {\n hash.add(datum);\n domain.push(datum);\n }\n });\n\n return domain;\n }\n\n\n /**\n * Calculates the minimum consecutive difference from the associated field data.\n *\n * @public\n * @return {number} Returns the minimum consecutive diff in milliseconds.\n */\n minimumConsecutiveDifference () {\n if (this._cachedMinDiff) {\n return this._cachedMinDiff;\n }\n\n const sortedData = this.data().filter(item => !(item instanceof InvalidAwareTypes)).sort((a, b) => a - b);\n const arrLn = sortedData.length;\n let minDiff = Number.POSITIVE_INFINITY;\n let prevDatum;\n let nextDatum;\n let processedCount = 0;\n\n for (let i = 1; i < arrLn; i++) {\n prevDatum = sortedData[i - 1];\n nextDatum = sortedData[i];\n\n if (nextDatum === prevDatum) {\n continue;\n }\n\n minDiff = Math.min(minDiff, nextDatum - sortedData[i - 1]);\n processedCount++;\n }\n\n if (!processedCount) {\n minDiff = null;\n }\n this._cachedMinDiff = minDiff;\n\n return this._cachedMinDiff;\n }\n\n /**\n * Returns the format specified in the input schema while creating field.\n *\n * @public\n * @return {string} Returns the datetime format.\n */\n format () {\n return this.partialField.schema.format;\n }\n\n /**\n * Returns the formatted version of the underlying field data.\n *\n * @public\n * @override\n * @return {Array} Returns the formatted data.\n */\n formattedData () {\n const data = [];\n rowDiffsetIterator(this.rowDiffset, (i) => {\n const datum = this.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n data.push(datum);\n } else {\n data.push(DateTimeFormatter.formatAs(datum, this.format()));\n }\n });\n return data;\n }\n}\n\n","import { FieldType, FilteringMode, DimensionSubtype, MeasureSubtype, DataFormat } from './enums';\nimport fieldStore from './field-store';\nimport Value from './value';\nimport {\n rowDiffsetIterator\n} from './operator';\nimport { DM_DERIVATIVES, LOGICAL_OPERATORS } from './constants';\nimport { createFields, createUnitFieldFromPartial } from './field-creator';\nimport defaultConfig from './default-config';\nimport * as converter from './converter';\nimport { extend2, detectDataFormat } from './utils';\n\n/**\n * Prepares the selection data.\n */\nfunction prepareSelectionData (fields, i) {\n const resp = {};\n for (let field of fields) {\n resp[field.name()] = new Value(field.partialField.data[i], field);\n }\n return resp;\n}\n\nexport function prepareJoinData (fields) {\n const resp = {};\n Object.keys(fields).forEach((key) => { resp[key] = new Value(fields[key], key); });\n return resp;\n}\n\nexport const updateFields = ([rowDiffset, colIdentifier], partialFieldspace, fieldStoreName) => {\n let collID = colIdentifier.length ? colIdentifier.split(',') : [];\n let partialFieldMap = partialFieldspace.fieldsObj();\n let newFields = collID.map(coll => createUnitFieldFromPartial(partialFieldMap[coll].partialField, rowDiffset));\n return fieldStore.createNamespace(newFields, fieldStoreName);\n};\n\nexport const persistCurrentDerivation = (model, operation, config = {}, criteriaFn) => {\n if (operation === DM_DERIVATIVES.COMPOSE) {\n model._derivation.length = 0;\n model._derivation.push(...criteriaFn);\n } else {\n model._derivation.push({\n op: operation,\n meta: config,\n criteria: criteriaFn\n });\n }\n};\nexport const persistAncestorDerivation = (sourceDm, newDm) => {\n newDm._ancestorDerivation.push(...sourceDm._ancestorDerivation, ...sourceDm._derivation);\n};\n\nexport const persistDerivations = (sourceDm, model, operation, config = {}, criteriaFn) => {\n persistCurrentDerivation(model, operation, config, criteriaFn);\n persistAncestorDerivation(sourceDm, model);\n};\n\nconst selectModeMap = {\n [FilteringMode.NORMAL]: {\n diffIndex: ['rowDiffset'],\n calcDiff: [true, false]\n },\n [FilteringMode.INVERSE]: {\n diffIndex: ['rejectRowDiffset'],\n calcDiff: [false, true]\n },\n [FilteringMode.ALL]: {\n diffIndex: ['rowDiffset', 'rejectRowDiffset'],\n calcDiff: [true, true]\n }\n};\n\nconst generateRowDiffset = (rowDiffset, i, lastInsertedValue) => {\n if (lastInsertedValue !== -1 && i === (lastInsertedValue + 1)) {\n const li = rowDiffset.length - 1;\n\n rowDiffset[li] = `${rowDiffset[li].split('-')[0]}-${i}`;\n } else {\n rowDiffset.push(`${i}`);\n }\n};\n\nexport const selectRowDiffsetIterator = (rowDiffset, checker, mode) => {\n let lastInsertedValueSel = -1;\n let lastInsertedValueRej = -1;\n const newRowDiffSet = [];\n const rejRowDiffSet = [];\n\n const [shouldSelect, shouldReject] = selectModeMap[mode].calcDiff;\n\n rowDiffsetIterator(rowDiffset, (i) => {\n const checkerResult = checker(i);\n checkerResult && shouldSelect && generateRowDiffset(newRowDiffSet, i, lastInsertedValueSel);\n !checkerResult && shouldReject && generateRowDiffset(rejRowDiffSet, i, lastInsertedValueRej);\n });\n return {\n rowDiffset: newRowDiffSet.join(','),\n rejectRowDiffset: rejRowDiffSet.join(',')\n };\n};\n\n\nexport const rowSplitDiffsetIterator = (rowDiffset, checker, mode, dimensionArr, fieldStoreObj) => {\n let lastInsertedValue = {};\n const splitRowDiffset = {};\n const dimensionMap = {};\n\n rowDiffsetIterator(rowDiffset, (i) => {\n if (checker(i)) {\n let hash = '';\n\n let dimensionSet = { keys: {} };\n\n dimensionArr.forEach((_) => {\n const data = fieldStoreObj[_].partialField.data[i];\n hash = `${hash}-${data}`;\n dimensionSet.keys[_] = data;\n });\n\n if (splitRowDiffset[hash] === undefined) {\n splitRowDiffset[hash] = [];\n lastInsertedValue[hash] = -1;\n dimensionMap[hash] = dimensionSet;\n }\n\n generateRowDiffset(splitRowDiffset[hash], i, lastInsertedValue[hash]);\n lastInsertedValue[hash] = i;\n }\n });\n\n return {\n splitRowDiffset,\n dimensionMap\n };\n};\n\n\nexport const selectHelper = (clonedDm, selectFn, config, sourceDm, iterator) => {\n let cachedStore = {};\n let cloneProvider = () => sourceDm.detachedRoot();\n const { mode } = config;\n const rowDiffset = clonedDm._rowDiffset;\n const fields = clonedDm.getPartialFieldspace().fields;\n const selectorHelperFn = index => selectFn(\n prepareSelectionData(fields, index),\n index,\n cloneProvider,\n cachedStore\n );\n\n return iterator(rowDiffset, selectorHelperFn, mode);\n};\n\nexport const cloneWithAllFields = (model) => {\n const clonedDm = model.clone(false);\n const partialFieldspace = model.getPartialFieldspace();\n clonedDm._colIdentifier = partialFieldspace.fields.map(f => f.name()).join(',');\n\n // flush out cached namespace values on addition of new fields\n partialFieldspace._cachedFieldsObj = null;\n partialFieldspace._cachedDimension = null;\n partialFieldspace._cachedMeasure = null;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n\n return clonedDm;\n};\n\nconst getKey = (arr, data, fn) => {\n let key = fn(arr, data, 0);\n\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${fn(arr, data, i)}`;\n }\n return key;\n};\n\nexport const filterPropagationModel = (model, propModels, config = {}) => {\n let fns = [];\n const operation = config.operation || LOGICAL_OPERATORS.AND;\n const filterByMeasure = config.filterByMeasure || false;\n const clonedModel = cloneWithAllFields(model);\n const modelFieldsConfig = clonedModel.getFieldsConfig();\n\n if (!propModels.length) {\n fns = [() => false];\n } else {\n fns = propModels.map(propModel => ((dataModel) => {\n let keyFn;\n const dataObj = dataModel.getData();\n const fieldsConfig = dataModel.getFieldsConfig();\n const dimensions = Object.keys(dataModel.getFieldspace().getDimension())\n .filter(d => d in modelFieldsConfig);\n const dLen = dimensions.length;\n const indices = dimensions.map(d =>\n fieldsConfig[d].index);\n const measures = Object.keys(dataModel.getFieldspace().getMeasure())\n .filter(d => d in modelFieldsConfig);\n const fieldsSpace = dataModel.getFieldspace().fieldsObj();\n const data = dataObj.data;\n const domain = measures.reduce((acc, v) => {\n acc[v] = fieldsSpace[v].domain();\n return acc;\n }, {});\n const valuesMap = {};\n\n keyFn = (arr, row, idx) => row[arr[idx]];\n if (dLen) {\n data.forEach((row) => {\n const key = getKey(indices, row, keyFn);\n valuesMap[key] = 1;\n });\n }\n\n keyFn = (arr, fields, idx) => fields[arr[idx]].value;\n return data.length ? (fields) => {\n const present = dLen ? valuesMap[getKey(dimensions, fields, keyFn)] : true;\n\n if (filterByMeasure) {\n return measures.every(field => fields[field].value >= domain[field][0] &&\n fields[field].value <= domain[field][1]) && present;\n }\n return present;\n } : () => false;\n })(propModel));\n }\n\n let filteredModel;\n if (operation === LOGICAL_OPERATORS.AND) {\n filteredModel = clonedModel.select(fields => fns.every(fn => fn(fields)), {\n saveChild: false\n });\n } else {\n filteredModel = clonedModel.select(fields => fns.some(fn => fn(fields)), {\n saveChild: false\n });\n }\n\n return filteredModel;\n};\n\n\nexport const splitWithSelect = (sourceDm, dimensionArr, reducerFn = val => val, config) => {\n const {\n saveChild,\n } = config;\n const fieldStoreObj = sourceDm.getFieldspace().fieldsObj();\n\n const {\n splitRowDiffset,\n dimensionMap\n } = selectHelper(\n sourceDm.clone(saveChild),\n reducerFn,\n config,\n sourceDm,\n (...params) => rowSplitDiffsetIterator(...params, dimensionArr, fieldStoreObj)\n );\n\n const clonedDMs = [];\n Object.keys(splitRowDiffset).sort().forEach((e) => {\n if (splitRowDiffset[e]) {\n const cloned = sourceDm.clone(saveChild);\n const derivation = dimensionMap[e];\n cloned._rowDiffset = splitRowDiffset[e].join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n const derivationFormula = fields => dimensionArr.every(_ => fields[_].value === derivation.keys[_]);\n // Store reference to child model and selector function\n if (saveChild) {\n persistDerivations(sourceDm, cloned, DM_DERIVATIVES.SELECT, config, derivationFormula);\n }\n cloned._derivation[cloned._derivation.length - 1].meta = dimensionMap[e];\n\n clonedDMs.push(cloned);\n }\n });\n\n\n return clonedDMs;\n};\nexport const addDiffsetToClonedDm = (clonedDm, rowDiffset, sourceDm, selectConfig, selectFn) => {\n clonedDm._rowDiffset = rowDiffset;\n clonedDm.__calculateFieldspace().calculateFieldsConfig();\n persistDerivations(\n sourceDm,\n clonedDm,\n DM_DERIVATIVES.SELECT,\n { config: selectConfig },\n selectFn\n );\n};\n\n\nexport const cloneWithSelect = (sourceDm, selectFn, selectConfig, cloneConfig) => {\n let extraCloneDm = {};\n\n let { mode } = selectConfig;\n\n const cloned = sourceDm.clone(cloneConfig.saveChild);\n const setOfRowDiffsets = selectHelper(\n cloned,\n selectFn,\n selectConfig,\n sourceDm,\n selectRowDiffsetIterator\n );\n const diffIndex = selectModeMap[mode].diffIndex;\n\n addDiffsetToClonedDm(cloned, setOfRowDiffsets[diffIndex[0]], sourceDm, selectConfig, selectFn);\n\n if (diffIndex.length > 1) {\n extraCloneDm = sourceDm.clone(cloneConfig.saveChild);\n addDiffsetToClonedDm(extraCloneDm, setOfRowDiffsets[diffIndex[1]], sourceDm, selectConfig, selectFn);\n return [cloned, extraCloneDm];\n }\n\n return cloned;\n};\n\nexport const cloneWithProject = (sourceDm, projField, config, allFields) => {\n const cloned = sourceDm.clone(config.saveChild);\n let projectionSet = projField;\n if (config.mode === FilteringMode.INVERSE) {\n projectionSet = allFields.filter(fieldName => projField.indexOf(fieldName) === -1);\n }\n // cloned._colIdentifier = sourceDm._colIdentifier.split(',')\n // .filter(coll => projectionSet.indexOf(coll) !== -1).join();\n cloned._colIdentifier = projectionSet.join(',');\n cloned.__calculateFieldspace().calculateFieldsConfig();\n\n persistDerivations(\n sourceDm,\n cloned,\n DM_DERIVATIVES.PROJECT,\n { projField, config, actualProjField: projectionSet },\n null\n );\n\n return cloned;\n};\n\n\nexport const splitWithProject = (sourceDm, projFieldSet, config, allFields) =>\n projFieldSet.map(projFields =>\n cloneWithProject(sourceDm, projFields, config, allFields));\n\nexport const sanitizeUnitSchema = (unitSchema) => {\n // Do deep clone of the unit schema as the user might change it later.\n unitSchema = extend2({}, unitSchema);\n if (!unitSchema.type) {\n unitSchema.type = FieldType.DIMENSION;\n }\n\n if (!unitSchema.subtype) {\n switch (unitSchema.type) {\n case FieldType.MEASURE:\n unitSchema.subtype = MeasureSubtype.CONTINUOUS;\n break;\n default:\n case FieldType.DIMENSION:\n unitSchema.subtype = DimensionSubtype.CATEGORICAL;\n break;\n }\n }\n\n return unitSchema;\n};\n\nexport const validateUnitSchema = (unitSchema) => {\n const supportedMeasureSubTypes = [MeasureSubtype.CONTINUOUS];\n const supportedDimSubTypes = [\n DimensionSubtype.CATEGORICAL,\n DimensionSubtype.BINNED,\n DimensionSubtype.TEMPORAL,\n DimensionSubtype.GEO\n ];\n const { type, subtype, name } = unitSchema;\n\n switch (type) {\n case FieldType.DIMENSION:\n if (supportedDimSubTypes.indexOf(subtype) === -1) {\n throw new Error(`DataModel doesn't support dimension field subtype ${subtype} used for ${name} field`);\n }\n break;\n case FieldType.MEASURE:\n if (supportedMeasureSubTypes.indexOf(subtype) === -1) {\n throw new Error(`DataModel doesn't support measure field subtype ${subtype} used for ${name} field`);\n }\n break;\n default:\n throw new Error(`DataModel doesn't support field type ${type} used for ${name} field`);\n }\n};\n\nexport const sanitizeAndValidateSchema = schema => schema.map((unitSchema) => {\n unitSchema = sanitizeUnitSchema(unitSchema);\n validateUnitSchema(unitSchema);\n return unitSchema;\n});\n\nexport const resolveFieldName = (schema, dataHeader) => {\n schema.forEach((unitSchema) => {\n const fieldNameAs = unitSchema.as;\n if (!fieldNameAs) { return; }\n\n const idx = dataHeader.indexOf(unitSchema.name);\n dataHeader[idx] = fieldNameAs;\n unitSchema.name = fieldNameAs;\n delete unitSchema.as;\n });\n};\n\nexport const updateData = (relation, data, schema, options) => {\n schema = sanitizeAndValidateSchema(schema);\n options = Object.assign(Object.assign({}, defaultConfig), options);\n const converterFn = converter[options.dataFormat];\n\n if (!(converterFn && typeof converterFn === 'function')) {\n throw new Error(`No converter function found for ${options.dataFormat} format`);\n }\n\n const [header, formattedData] = converterFn(data, options);\n resolveFieldName(schema, header);\n const fieldArr = createFields(formattedData, schema, header);\n\n // This will create a new fieldStore with the fields\n const nameSpace = fieldStore.createNamespace(fieldArr, options.name);\n relation._partialFieldspace = nameSpace;\n\n // If data is provided create the default colIdentifier and rowDiffset\n relation._rowDiffset = formattedData.length && formattedData[0].length ? `0-${formattedData[0].length - 1}` : '';\n\n // This stores the value objects which is passed to the filter method when selection operation is done.\n const valueObjects = [];\n rowDiffsetIterator(relation._rowDiffset, (i) => {\n valueObjects[i] = prepareSelectionData(nameSpace.fields, i);\n });\n nameSpace._cachedValueObjects = valueObjects;\n\n relation._colIdentifier = (schema.map(_ => _.name)).join();\n relation._dataFormat = options.dataFormat === DataFormat.AUTO ? detectDataFormat(data) : options.dataFormat;\n return relation;\n};\n\nexport const fieldInSchema = (schema, field) => {\n let i = 0;\n\n for (; i < schema.length; ++i) {\n if (field === schema[i].name) {\n return {\n type: schema[i].subtype || schema[i].type,\n index: i\n };\n }\n }\n return null;\n};\n\n\nexport const getDerivationArguments = (derivation) => {\n let params = [];\n let operation;\n operation = derivation.op;\n switch (operation) {\n case DM_DERIVATIVES.SELECT:\n params = [derivation.criteria];\n break;\n case DM_DERIVATIVES.PROJECT:\n params = [derivation.meta.actualProjField];\n break;\n case DM_DERIVATIVES.GROUPBY:\n operation = 'groupBy';\n params = [derivation.meta.groupByString.split(','), derivation.criteria];\n break;\n default:\n operation = null;\n }\n\n return {\n operation,\n params\n };\n};\n\nconst applyExistingOperationOnModel = (propModel, dataModel) => {\n const derivations = dataModel.getDerivations();\n let selectionModel = propModel;\n\n derivations.forEach((derivation) => {\n if (!derivation) {\n return;\n }\n\n const { operation, params } = getDerivationArguments(derivation);\n if (operation) {\n selectionModel = selectionModel[operation](...params, {\n saveChild: false\n });\n }\n });\n\n return selectionModel;\n};\n\nconst getFilteredModel = (propModel, path) => {\n for (let i = 0, len = path.length; i < len; i++) {\n const model = path[i];\n propModel = applyExistingOperationOnModel(propModel, model);\n }\n return propModel;\n};\n\nconst propagateIdentifiers = (dataModel, propModel, config = {}, propModelInf = {}) => {\n const nonTraversingModel = propModelInf.nonTraversingModel;\n const excludeModels = propModelInf.excludeModels || [];\n\n if (dataModel === nonTraversingModel) {\n return;\n }\n\n const propagate = excludeModels.length ? excludeModels.indexOf(dataModel) === -1 : true;\n\n propagate && dataModel.handlePropagation(propModel, config);\n\n const children = dataModel._children;\n children.forEach((child) => {\n const selectionModel = applyExistingOperationOnModel(propModel, child);\n propagateIdentifiers(child, selectionModel, config, propModelInf);\n });\n};\n\nexport const getRootGroupByModel = (model) => {\n while (model._parent && model._derivation.find(d => d.op !== DM_DERIVATIVES.GROUPBY)) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getRootDataModel = (model) => {\n while (model._parent) {\n model = model._parent;\n }\n return model;\n};\n\nexport const getPathToRootModel = (model, path = []) => {\n while (model._parent) {\n path.push(model);\n model = model._parent;\n }\n return path;\n};\n\nexport const propagateToAllDataModels = (identifiers, rootModels, propagationInf, config) => {\n let criteria;\n let propModel;\n const { propagationNameSpace, propagateToSource } = propagationInf;\n const propagationSourceId = propagationInf.sourceId;\n const propagateInterpolatedValues = config.propagateInterpolatedValues;\n const filterFn = (entry) => {\n const filter = config.filterFn || (() => true);\n return filter(entry, config);\n };\n\n let criterias = [];\n\n if (identifiers === null && config.persistent !== true) {\n criterias = [{\n criteria: []\n }];\n criteria = [];\n } else {\n let actionCriterias = Object.values(propagationNameSpace.mutableActions);\n if (propagateToSource !== false) {\n actionCriterias = actionCriterias.filter(d => d.config.sourceId !== propagationSourceId);\n }\n\n const filteredCriteria = actionCriterias.filter(filterFn).map(action => action.config.criteria);\n\n const excludeModels = [];\n\n if (propagateToSource !== false) {\n const sourceActionCriterias = Object.values(propagationNameSpace.mutableActions);\n\n sourceActionCriterias.forEach((actionInf) => {\n const actionConf = actionInf.config;\n if (actionConf.applyOnSource === false && actionConf.action === config.action &&\n actionConf.sourceId !== propagationSourceId) {\n excludeModels.push(actionInf.model);\n criteria = sourceActionCriterias.filter(d => d !== actionInf).map(d => d.config.criteria);\n criteria.length && criterias.push({\n criteria,\n models: actionInf.model,\n path: getPathToRootModel(actionInf.model)\n });\n }\n });\n }\n\n\n criteria = [].concat(...[...filteredCriteria, identifiers]).filter(d => d !== null);\n criterias.push({\n criteria,\n excludeModels: [...excludeModels, ...config.excludeModels || []]\n });\n }\n\n const rootModel = rootModels.model;\n\n const propConfig = Object.assign({\n sourceIdentifiers: identifiers,\n propagationSourceId\n }, config);\n\n const rootGroupByModel = rootModels.groupByModel;\n if (propagateInterpolatedValues && rootGroupByModel) {\n propModel = filterPropagationModel(rootGroupByModel, criteria, {\n filterByMeasure: propagateInterpolatedValues\n });\n propagateIdentifiers(rootGroupByModel, propModel, propConfig);\n }\n\n criterias.forEach((inf) => {\n const propagationModel = filterPropagationModel(rootModel, inf.criteria);\n const path = inf.path;\n\n if (path) {\n const filteredModel = getFilteredModel(propagationModel, path.reverse());\n inf.models.handlePropagation(filteredModel, propConfig);\n } else {\n propagateIdentifiers(rootModel, propagationModel, propConfig, {\n excludeModels: inf.excludeModels,\n nonTraversingModel: propagateInterpolatedValues && rootGroupByModel\n });\n }\n });\n};\n\nexport const propagateImmutableActions = (propagationNameSpace, rootModels, propagationInf) => {\n const immutableActions = propagationNameSpace.immutableActions;\n\n for (const action in immutableActions) {\n const actionInf = immutableActions[action];\n const actionConf = actionInf.config;\n const propagationSourceId = propagationInf.config.sourceId;\n const filterImmutableAction = propagationInf.propConfig.filterImmutableAction ?\n propagationInf.propConfig.filterImmutableAction(actionConf, propagationInf.config) : true;\n if (actionConf.sourceId !== propagationSourceId && filterImmutableAction) {\n const criteriaModel = actionConf.criteria;\n propagateToAllDataModels(criteriaModel, rootModels, {\n propagationNameSpace,\n propagateToSource: false,\n sourceId: propagationSourceId\n }, actionConf);\n }\n }\n};\n\nexport const addToPropNamespace = (propagationNameSpace, config = {}, model) => {\n let sourceNamespace;\n const isMutableAction = config.isMutableAction;\n const criteria = config.criteria;\n const key = `${config.action}-${config.sourceId}`;\n\n if (isMutableAction) {\n sourceNamespace = propagationNameSpace.mutableActions;\n } else {\n sourceNamespace = propagationNameSpace.immutableActions;\n }\n\n if (criteria === null) {\n delete sourceNamespace[key];\n } else {\n sourceNamespace[key] = {\n model,\n config\n };\n }\n\n return this;\n};\n\n\nexport const getNormalizedProFields = (projField, allFields, fieldConfig) => {\n const normalizedProjField = projField.reduce((acc, field) => {\n if (field.constructor.name === 'RegExp') {\n acc.push(...allFields.filter(fieldName => fieldName.search(field) !== -1));\n } else if (field in fieldConfig) {\n acc.push(field);\n }\n return acc;\n }, []);\n return Array.from(new Set(normalizedProjField)).map(field => field.trim());\n};\n","const DataModel = require('./export');\n\nmodule.exports = DataModel.default ? DataModel.default : DataModel;\n","/**\n * A parser to parser null, undefined, invalid and NIL values.\n *\n * @public\n * @class\n */\nclass InvalidAwareTypes {\n /**\n * Static method which gets/sets the invalid value registry.\n *\n * @public\n * @param {Object} config - The custom configuration supplied by user.\n * @return {Object} Returns the invalid values registry.\n */\n static invalidAwareVals (config) {\n if (!config) {\n return InvalidAwareTypes._invalidAwareValsMap;\n }\n return Object.assign(InvalidAwareTypes._invalidAwareValsMap, config);\n }\n\n /**\n * Initialize a new instance.\n *\n * @public\n * @param {string} value - The value of the invalid data type.\n */\n constructor (value) {\n this._value = value;\n }\n\n /**\n * Returns the current value of the instance.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n value () {\n return this._value;\n }\n\n /**\n * Returns the current value of the instance in string format.\n *\n * @public\n * @return {string} Returns the value of the invalid data type.\n */\n toString () {\n return String(this._value);\n }\n\n static isInvalid(val) {\n return (val instanceof InvalidAwareTypes) || !!InvalidAwareTypes.invalidAwareVals()[val];\n }\n\n static getInvalidType(val) {\n return val instanceof InvalidAwareTypes ? val : InvalidAwareTypes.invalidAwareVals()[val];\n }\n}\n\n/**\n * Enums for Invalid types.\n */\nInvalidAwareTypes.NULL = new InvalidAwareTypes('null');\nInvalidAwareTypes.NA = new InvalidAwareTypes('na');\nInvalidAwareTypes.NIL = new InvalidAwareTypes('nil');\n\n/**\n * Default Registry for mapping the invalid values.\n *\n * @private\n */\nInvalidAwareTypes._invalidAwareValsMap = {\n invalid: InvalidAwareTypes.NA,\n nil: InvalidAwareTypes.NIL,\n null: InvalidAwareTypes.NULL,\n undefined: InvalidAwareTypes.NA\n};\n\nexport default InvalidAwareTypes;\n","import { rowDiffsetIterator } from './row-diffset-iterator';\nimport InvalidAwareTypes from '../invalid-aware-types';\n\nconst generateBuckets = (binSize, start, end) => {\n const buckets = [];\n let next = start;\n\n while (next < end) {\n buckets.push(next);\n next += binSize;\n }\n buckets.push(next);\n\n return buckets;\n};\n\nconst findBucketRange = (bucketRanges, value) => {\n let leftIdx = 0;\n let rightIdx = bucketRanges.length - 1;\n let midIdx;\n let range;\n\n // Here use binary search as the bucketRanges is a sorted array\n while (leftIdx <= rightIdx) {\n midIdx = leftIdx + Math.floor((rightIdx - leftIdx) / 2);\n range = bucketRanges[midIdx];\n\n if (value >= range.start && value < range.end) {\n return range;\n } else if (value >= range.end) {\n leftIdx = midIdx + 1;\n } else if (value < range.start) {\n rightIdx = midIdx - 1;\n }\n }\n\n return null;\n};\n\n /**\n * Creates the bin data from input measure field and supplied configs.\n *\n * @param {Measure} measureField - The Measure field instance.\n * @param {string} rowDiffset - The datamodel rowDiffset values.\n * @param {Object} config - The config object.\n * @return {Object} Returns the binned data and the corresponding bins.\n */\nexport function createBinnedFieldData (measureField, rowDiffset, config) {\n let { buckets, binsCount, binSize, start, end } = config;\n const [dMin, dMax] = measureField.domain();\n\n if (!buckets) {\n start = (start !== 0 && (!start || start > dMin)) ? dMin : start;\n end = (end !== 0 && (!end || end < dMax)) ? (dMax + 1) : end;\n\n if (binsCount) {\n binSize = Math.ceil(Math.abs(end - start) / binsCount);\n }\n\n buckets = generateBuckets(binSize, start, end);\n }\n\n if (buckets[0] > dMin) {\n buckets.unshift(dMin);\n }\n if (buckets[buckets.length - 1] <= dMax) {\n buckets.push(dMax + 1);\n }\n\n const bucketRanges = [];\n for (let i = 0; i < buckets.length - 1; i++) {\n bucketRanges.push({\n start: buckets[i],\n end: buckets[i + 1]\n });\n }\n\n const binnedData = [];\n rowDiffsetIterator(rowDiffset, (i) => {\n const datum = measureField.partialField.data[i];\n if (datum instanceof InvalidAwareTypes) {\n binnedData.push(datum);\n return;\n }\n\n const range = findBucketRange(bucketRanges, datum);\n binnedData.push(`${range.start}-${range.end}`);\n });\n\n return { binnedData, bins: buckets };\n}\n","import { persistDerivations } from '../helper';\nimport { DM_DERIVATIVES } from '../constants';\n\n/**\n * DataModel's opearators are exposed as composable functional operators as well as chainable operators. Chainable\n * operators are called on the instances of {@link Datamodel} and {@link Relation} class.\n *\n * Those same operators can be used as composable operators from `DataModel.Operators` namespace.\n *\n * All these operators have similar behaviour. All these operators when called with the argument returns a function\n * which expects a DataModel instance.\n *\n * @public\n * @module Operators\n * @namespace DataModel\n */\n\n/**\n * This is functional version of selection operator. {@link link_to_selection | Selection} is a row filtering operation.\n * It takes {@link SelectionPredicate | predicate} for filtering criteria and returns a function.\n * The returned function is called with the DataModel instance on which the action needs to be performed.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection opearation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * [Warn] Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * [Error] `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @example\n * const select = DataModel.Operators.select;\n * usaCarsFn = select(fields => fields.Origin.value === 'USA');\n * usaCarsDm = usaCarsFn(dm);\n * console.log(usaCarsDm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {SelectionPredicate} selectFn - Predicate funciton which is called for each row with the current row\n * ```\n * function (row, i) { ... }\n * ```\n * @param {Object} [config] - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const select = (...args) => dm => dm.select(...args);\n\n/**\n * This is functional version of projection operator. {@link link_to_projection | Projection} is a column filtering\n * operation.It expects list of fields name and either include those or exclude those based on {@link FilteringMode} on\n * the resultant variable.It returns a function which is called with the DataModel instance on which the action needs\n * to be performed.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @error\n * `FilteringMode.ALL` is not a valid working mode for functional version of `select`. Its only avialable on the\n * chained version.\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const project = (...args) => dm => dm.project(...args);\n\n/**\n * This is functional version of binnig operator. Binning happens on a measure field based on a binning configuration.\n * Binning in DataModel does not aggregate the number of rows present in DataModel instance after binning, it just adds\n * a new field with the binned value. Refer binning {@link example_of_binning | example} to have a intuition of what\n * binning is and the use case.\n *\n * Binning can be configured by\n * - providing custom bin configuration with non uniform buckets\n * - providing bin count\n * - providing each bin size\n *\n * When custom buckets are provided as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const buckets = {\n * start: 30\n * stops: [80, 100, 110]\n * };\n * const config = { buckets, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(dm);\n *\n * @text\n * When `binCount` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binCount: 5, name: 'binnedHP' }\n * const binFn = bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @text\n * When `binSize` is defined as part of binning configuration\n * @example\n * // DataModel already prepared and assigned to dm vairable\n * const config = { binSize: 200, name: 'binnedHorsepower' }\n * const binnedDm = dataModel.bin('horsepower', config);\n * const binnedDm = binFn(Dm);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {String} name Name of measure which will be used to create bin\n * @param {Object} config Config required for bin creation\n * @param {Array.} config.bucketObj.stops Defination of bucket ranges. Two subsequent number from arrays\n * are picked and a range is created. The first number from range is inclusive and the second number from range\n * is exclusive.\n * @param {Number} [config.bucketObj.startAt] Force the start of the bin from a particular number.\n * If not mentioned, the start of the bin or the lower domain of the data if stops is not mentioned, else its\n * the first value of the stop.\n * @param {Number} config.binSize Bucket size for each bin\n * @param {Number} config.binCount Number of bins which will be created\n * @param {String} config.name Name of the new binned field to be created\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const bin = (...args) => dm => dm.bin(...args);\n\n/**\n * This is functional version of `groupBy` operator.Groups the data using particular dimensions and by reducing\n * measures. It expects a list of dimensions using which it projects the datamodel and perform aggregations to reduce\n * the duplicate tuples. Refer this {@link link_to_one_example_with_group_by | document} to know the intuition behind\n * groupBy.\n *\n * DataModel by default provides definition of few {@link reducer | Reducers}.\n * {@link ReducerStore | User defined reducers} can also be registered.\n *\n * This is the chained implementation of `groupBy`.\n * `groupBy` also supports {@link link_to_compose_groupBy | composability}\n *\n * @example\n * const groupBy = DataModel.Operators.groupBy;\n * const groupedFn = groupBy(['Year'], { horsepower: 'max' } );\n * groupedDM = groupByFn(dm);\n *\n * @public\n *\n * @param {Array.} fieldsArr - Array containing the name of dimensions\n * @param {Object} [reducers={}] - A map whose key is the variable name and value is the name of the reducer. If its\n * not passed, or any variable is ommitted from the object, default aggregation function is used from the\n * schema of the variable.\n *\n * @return {PreparatorFunction} Function which expects an instance of DataModel on which the operator needs to be\n * applied.\n */\nexport const groupBy = (...args) => dm => dm.groupBy(...args);\n\n/**\n * Enables composing operators to run multiple operations and save group of operataion as named opration on a DataModel.\n * The resulting DataModel will be the result of all the operation provided. The operations provided will be executed in\n * a serial manner ie. result of one operation will be the input for the next operations (like pipe operator in unix).\n *\n * Suported operations in compose are\n * - `select`\n * - `project`\n * - `groupBy`\n * - `bin`\n * - `compose`\n *\n * @example\n * const compose = DataModel.Operators.compose;\n * const select = DataModel.Operators.select;\n * const project = DataModel.Operators.project;\n *\n * let composedFn = compose(\n * select(fields => fields.netprofit.value <= 15),\n * project(['netprofit', 'netsales']));\n *\n * const dataModel = new DataModel(data1, schema1);\n *\n * let composedDm = composedFn(dataModel);\n *\n * @public\n * @namespace DataModel\n * @module Operators\n *\n * @param {Array.} operators: An array of operation that will be applied on the\n * datatable.\n *\n * @returns {DataModel} Instance of resultant DataModel\n */\nexport const compose = (...operations) =>\n (dm, config = { saveChild: true }) => {\n let currentDM = dm;\n let firstChild;\n const derivations = [];\n\n operations.forEach((operation) => {\n currentDM = operation(currentDM);\n derivations.push(...currentDM._derivation);\n if (!firstChild) {\n firstChild = currentDM;\n }\n });\n\n if (firstChild && firstChild !== currentDM) {\n firstChild.dispose();\n }\n\n // reset all ancestorDerivation saved in-between compose\n currentDM._ancestorDerivation = [];\n persistDerivations(\n dm,\n currentDM,\n DM_DERIVATIVES.COMPOSE,\n null,\n derivations\n );\n\n if (config.saveChild) {\n currentDM.setParent(dm);\n } else {\n currentDM.setParent(null);\n }\n\n return currentDM;\n };\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { getCommonSchema } from './get-common-schema';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { JOINS } from '../constants';\nimport { prepareJoinData } from '../helper';\n/**\n * Default filter function for crossProduct.\n *\n * @return {boolean} Always returns true.\n */\nfunction defaultFilterFn() { return true; }\n\n/**\n * Implementation of cross product operation between two DataModel instances.\n * It internally creates the data and schema for the new DataModel.\n *\n * @param {DataModel} dataModel1 - The left DataModel instance.\n * @param {DataModel} dataModel2 - The right DataModel instance.\n * @param {Function} filterFn - The filter function which is used to filter the tuples.\n * @param {boolean} [replaceCommonSchema=false] - The flag if the common name schema should be there.\n * @return {DataModel} Returns The newly created DataModel instance from the crossProduct operation.\n */\nexport function crossProduct (dm1, dm2, filterFn, replaceCommonSchema = false, jointype = JOINS.CROSS) {\n const schema = [];\n const data = [];\n const applicableFilterFn = filterFn || defaultFilterFn;\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreName = dm1FieldStore.name;\n const dm2FieldStoreName = dm2FieldStore.name;\n const name = `${dm1FieldStore.name}.${dm2FieldStore.name}`;\n const commonSchemaList = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n if (dm1FieldStoreName === dm2FieldStoreName) {\n throw new Error('DataModels must have different alias names');\n }\n // Here prepare the schema\n dm1FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1 && !replaceCommonSchema) {\n tmpSchema.name = `${dm1FieldStore.name}.${tmpSchema.name}`;\n }\n schema.push(tmpSchema);\n });\n dm2FieldStore.fields.forEach((field) => {\n const tmpSchema = extend2({}, field.schema());\n if (commonSchemaList.indexOf(tmpSchema.name) !== -1) {\n if (!replaceCommonSchema) {\n tmpSchema.name = `${dm2FieldStore.name}.${tmpSchema.name}`;\n schema.push(tmpSchema);\n }\n } else {\n schema.push(tmpSchema);\n }\n });\n\n // Here prepare Data\n rowDiffsetIterator(dm1._rowDiffset, (i) => {\n let rowAdded = false;\n let rowPosition;\n rowDiffsetIterator(dm2._rowDiffset, (ii) => {\n const tuple = [];\n const userArg = {};\n userArg[dm1FieldStoreName] = {};\n userArg[dm2FieldStoreName] = {};\n dm1FieldStore.fields.forEach((field) => {\n tuple.push(field.partialField.data[i]);\n userArg[dm1FieldStoreName][field.name()] = field.partialField.data[i];\n });\n dm2FieldStore.fields.forEach((field) => {\n if (!(commonSchemaList.indexOf(field.schema().name) !== -1 && replaceCommonSchema)) {\n tuple.push(field.partialField.data[ii]);\n }\n userArg[dm2FieldStoreName][field.name()] = field.partialField.data[ii];\n });\n\n let cachedStore = {};\n let cloneProvider1 = () => dm1.detachedRoot();\n let cloneProvider2 = () => dm2.detachedRoot();\n\n const dm1Fields = prepareJoinData(userArg[dm1FieldStoreName]);\n const dm2Fields = prepareJoinData(userArg[dm2FieldStoreName]);\n if (applicableFilterFn(dm1Fields, dm2Fields, cloneProvider1, cloneProvider2, cachedStore)) {\n const tupleObj = {};\n tuple.forEach((cellVal, iii) => {\n tupleObj[schema[iii].name] = cellVal;\n });\n if (rowAdded && JOINS.CROSS !== jointype) {\n data[rowPosition] = tupleObj;\n }\n else {\n data.push(tupleObj);\n rowAdded = true;\n rowPosition = i;\n }\n } else if ((jointype === JOINS.LEFTOUTER || jointype === JOINS.RIGHTOUTER) && !rowAdded) {\n const tupleObj = {};\n let len = dm1FieldStore.fields.length - 1;\n tuple.forEach((cellVal, iii) => {\n if (iii <= len) {\n tupleObj[schema[iii].name] = cellVal;\n }\n else {\n tupleObj[schema[iii].name] = null;\n }\n });\n rowAdded = true;\n rowPosition = i;\n data.push(tupleObj);\n }\n });\n });\n\n return new DataModel(data, schema, { name });\n}\n","import { DimensionSubtype, MeasureSubtype } from '../enums';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { mergeSort } from './merge-sort';\nimport { fieldInSchema } from '../helper';\nimport { isCallable, isArray, } from '../utils';\n/**\n * Generates the sorting functions to sort the data of a DataModel instance\n * according to the input data type.\n *\n * @param {string} dataType - The data type e.g. 'measure', 'datetime' etc.\n * @param {string} sortType - The sorting order i.e. 'asc' or 'desc'.\n * @param {integer} index - The index of the data which will be sorted.\n * @return {Function} Returns the the sorting function.\n */\nfunction getSortFn (dataType, sortType, index) {\n let retFunc;\n switch (dataType) {\n case MeasureSubtype.CONTINUOUS:\n case DimensionSubtype.TEMPORAL:\n if (sortType === 'desc') {\n retFunc = (a, b) => b[index] - a[index];\n } else {\n retFunc = (a, b) => a[index] - b[index];\n }\n break;\n default:\n retFunc = (a, b) => {\n const a1 = `${a[index]}`;\n const b1 = `${b[index]}`;\n if (a1 < b1) {\n return sortType === 'desc' ? 1 : -1;\n }\n if (a1 > b1) {\n return sortType === 'desc' ? -1 : 1;\n }\n return 0;\n };\n }\n return retFunc;\n}\n\n/**\n * Groups the data according to the specified target field.\n *\n * @param {Array} data - The input data array.\n * @param {number} fieldIndex - The target field index within schema array.\n * @return {Array} Returns an array containing the grouped data.\n */\nfunction groupData(data, fieldIndex) {\n const hashMap = new Map();\n const groupedData = [];\n\n data.forEach((datum) => {\n const fieldVal = datum[fieldIndex];\n if (hashMap.has(fieldVal)) {\n groupedData[hashMap.get(fieldVal)][1].push(datum);\n } else {\n groupedData.push([fieldVal, [datum]]);\n hashMap.set(fieldVal, groupedData.length - 1);\n }\n });\n\n return groupedData;\n}\n\n/**\n * Creates the argument value used for sorting function when sort is done\n * with another fields.\n *\n * @param {Array} groupedDatum - The grouped datum for a single dimension field value.\n * @param {Array} targetFields - An array of the sorting fields.\n * @param {Array} targetFieldDetails - An array of the sorting field details in schema.\n * @return {Object} Returns an object containing the value of sorting fields and the target field name.\n */\nfunction createSortingFnArg(groupedDatum, targetFields, targetFieldDetails) {\n const arg = {\n label: groupedDatum[0]\n };\n\n targetFields.reduce((acc, next, idx) => {\n acc[next] = groupedDatum[1].map(datum => datum[targetFieldDetails[idx].index]);\n return acc;\n }, arg);\n\n return arg;\n}\n\n/**\n * Sorts the data before return in dataBuilder.\n *\n * @param {Object} dataObj - An object containing the data and schema.\n * @param {Array} sortingDetails - An array containing the sorting configs.\n */\nfunction sortData(dataObj, sortingDetails) {\n const { data, schema } = dataObj;\n let fieldName;\n let sortMeta;\n let fDetails;\n let i = sortingDetails.length - 1;\n\n for (; i >= 0; i--) {\n fieldName = sortingDetails[i][0];\n sortMeta = sortingDetails[i][1];\n fDetails = fieldInSchema(schema, fieldName);\n\n if (!fDetails) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (isCallable(sortMeta)) {\n // eslint-disable-next-line no-loop-func\n mergeSort(data, (a, b) => sortMeta(a[fDetails.index], b[fDetails.index]));\n } else if (isArray(sortMeta)) {\n const groupedData = groupData(data, fDetails.index);\n const sortingFn = sortMeta[sortMeta.length - 1];\n const targetFields = sortMeta.slice(0, sortMeta.length - 1);\n const targetFieldDetails = targetFields.map(f => fieldInSchema(schema, f));\n\n groupedData.forEach((groupedDatum) => {\n groupedDatum.push(createSortingFnArg(groupedDatum, targetFields, targetFieldDetails));\n });\n\n mergeSort(groupedData, (a, b) => {\n const m = a[2];\n const n = b[2];\n return sortingFn(m, n);\n });\n\n // Empty the array\n data.length = 0;\n groupedData.forEach((datum) => {\n data.push(...datum[1]);\n });\n } else {\n sortMeta = String(sortMeta).toLowerCase() === 'desc' ? 'desc' : 'asc';\n mergeSort(data, getSortFn(fDetails.type, sortMeta, fDetails.index));\n }\n }\n\n dataObj.uids = [];\n data.forEach((value) => {\n dataObj.uids.push(value.pop());\n });\n}\n\n\n/**\n * Builds the actual data array.\n *\n * @param {Array} fieldStore - An array of field.\n * @param {string} rowDiffset - A string consisting of which rows to be included eg. '0-2,4,6';\n * @param {string} colIdentifier - A string consisting of the details of which column\n * to be included eg 'date,sales,profit';\n * @param {Object} sortingDetails - An object containing the sorting details of the DataModel instance.\n * @param {Object} options - The options required to create the type of the data.\n * @return {Object} Returns an object containing the multidimensional array and the relative schema.\n */\nexport function dataBuilder (fieldStore, rowDiffset, colIdentifier, sortingDetails, options) {\n const defOptions = {\n addUid: false,\n columnWise: false\n };\n options = Object.assign({}, defOptions, options);\n\n const retObj = {\n schema: [],\n data: [],\n uids: []\n };\n const addUid = options.addUid;\n const reqSorting = sortingDetails && sortingDetails.length > 0;\n // It stores the fields according to the colIdentifier argument\n const tmpDataArr = [];\n // Stores the fields according to the colIdentifier argument\n const colIArr = colIdentifier.split(',');\n\n colIArr.forEach((colName) => {\n for (let i = 0; i < fieldStore.length; i += 1) {\n if (fieldStore[i].name() === colName) {\n tmpDataArr.push(fieldStore[i]);\n break;\n }\n }\n });\n\n // Inserts the schema to the schema object\n tmpDataArr.forEach((field) => {\n /** @todo Need to use extend2 here otherwise user can overwrite the schema. */\n retObj.schema.push(field.schema());\n });\n\n if (addUid) {\n retObj.schema.push({\n name: 'uid',\n type: 'identifier'\n });\n }\n\n rowDiffsetIterator(rowDiffset, (i) => {\n retObj.data.push([]);\n const insertInd = retObj.data.length - 1;\n let start = 0;\n tmpDataArr.forEach((field, ii) => {\n retObj.data[insertInd][ii + start] = field.partialField.data[i];\n });\n if (addUid) {\n retObj.data[insertInd][tmpDataArr.length] = i;\n }\n // Creates an array of unique identifiers for each row\n retObj.uids.push(i);\n\n // If sorting needed then there is the need to expose the index\n // mapping from the old index to its new index\n if (reqSorting) { retObj.data[insertInd].push(i); }\n });\n\n // Handles the sort functionality\n if (reqSorting) {\n sortData(retObj, sortingDetails);\n }\n\n if (options.columnWise) {\n const tmpData = Array(...Array(retObj.schema.length)).map(() => []);\n retObj.data.forEach((tuple) => {\n tuple.forEach((data, i) => {\n tmpData[i].push(data);\n });\n });\n retObj.data = tmpData;\n }\n\n return retObj;\n}\n","import DataModel from '../datamodel';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n\n/**\n * Performs the union operation between two dm instances.\n *\n * @todo Fix the conflicts between union and difference terminology here.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function difference (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n * @param {boolean} addData - If true only tuple will be added to the data.\n */\n function prepareDataHelper(dm, fieldsObj, addData) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n if (addData) { data.push(tuple); }\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm2, dm2FieldStoreFieldObj, false);\n prepareDataHelper(dm1, dm1FieldStoreFieldObj, true);\n\n return new DataModel(data, schema, { name });\n}\n\n","/**\n * The helper function that returns an array of common schema\n * from two fieldStore instances.\n *\n * @param {FieldStore} fs1 - The first FieldStore instance.\n * @param {FieldStore} fs2 - The second FieldStore instance.\n * @return {Array} An array containing the common schema.\n */\nexport function getCommonSchema (fs1, fs2) {\n const retArr = [];\n const fs1Arr = [];\n fs1.fields.forEach((field) => {\n fs1Arr.push(field.schema().name);\n });\n fs2.fields.forEach((field) => {\n if (fs1Arr.indexOf(field.schema().name) !== -1) {\n retArr.push(field.schema().name);\n }\n });\n return retArr;\n}\n","import { isArray } from '../utils';\nimport InvalidAwareTypes from '../invalid-aware-types';\nimport { GROUP_BY_FUNCTIONS } from '../enums';\n\nconst { SUM, AVG, FIRST, LAST, COUNT, STD, MIN, MAX } = GROUP_BY_FUNCTIONS;\n\nfunction getFilteredValues(arr) {\n return arr.filter(item => !(item instanceof InvalidAwareTypes));\n}\n/**\n * Reducer function that returns the sum of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the sum of the array.\n */\nfunction sum (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const filteredNumber = getFilteredValues(arr);\n const totalSum = filteredNumber.length ?\n filteredNumber.reduce((acc, curr) => acc + curr, 0)\n : InvalidAwareTypes.NULL;\n return totalSum;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that returns the average of all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the mean value of the array.\n */\nfunction avg (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n const totalSum = sum(arr);\n const len = arr.length || 1;\n return (Number.isNaN(totalSum) || totalSum instanceof InvalidAwareTypes) ?\n InvalidAwareTypes.NULL : totalSum / len;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the min value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the minimum value of the array.\n */\nfunction min (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.min(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the max value amongst all the values.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the maximum value of the array.\n */\nfunction max (arr) {\n if (isArray(arr) && !(arr[0] instanceof Array)) {\n // Filter out undefined, null and NaN values\n const filteredValues = getFilteredValues(arr);\n\n return (filteredValues.length) ? Math.max(...filteredValues) : InvalidAwareTypes.NULL;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Reducer function that gives the first value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the first value of the array.\n */\nfunction first (arr) {\n return arr[0];\n}\n\n/**\n * Reducer function that gives the last value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the last value of the array.\n */\nfunction last (arr) {\n return arr[arr.length - 1];\n}\n\n/**\n * Reducer function that gives the count value of the array.\n *\n * @public\n * @param {Array} arr - The input array.\n * @return {number} Returns the length of the array.\n */\nfunction count (arr) {\n if (isArray(arr)) {\n return arr.length;\n }\n return InvalidAwareTypes.NULL;\n}\n\n/**\n * Calculates the variance of the input array.\n *\n * @param {Array.} arr - The input array.\n * @return {number} Returns the variance of the input array.\n */\nfunction variance (arr) {\n let mean = avg(arr);\n return avg(arr.map(num => (num - mean) ** 2));\n}\n\n/**\n * Calculates the square root of the variance of the input array.\n *\n * @public\n * @param {Array.} arr - The input array.\n * @return {number} Returns the square root of the variance.\n */\nfunction std (arr) {\n return Math.sqrt(variance(arr));\n}\n\n\nconst fnList = {\n [SUM]: sum,\n [AVG]: avg,\n [MIN]: min,\n [MAX]: max,\n [FIRST]: first,\n [LAST]: last,\n [COUNT]: count,\n [STD]: std\n};\n\nconst defaultReducerName = SUM;\n\nexport {\n defaultReducerName,\n sum as defReducer,\n fnList,\n};\n","import { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport DataModel from '../export';\nimport reducerStore from '../utils/reducer-store';\nimport { defaultReducerName } from './group-by-function';\nimport { FieldType } from '../enums';\n\n/**\n * This function sanitize the user given field and return a common Array structure field\n * list\n * @param {DataModel} dataModel the dataModel operating on\n * @param {Array} fieldArr user input of field Array\n * @return {Array} arrays of field name\n */\nfunction getFieldArr (dataModel, fieldArr) {\n const retArr = [];\n const fieldStore = dataModel.getFieldspace();\n const dimensions = fieldStore.getDimension();\n\n Object.entries(dimensions).forEach(([key]) => {\n if (fieldArr && fieldArr.length) {\n if (fieldArr.indexOf(key) !== -1) {\n retArr.push(key);\n }\n } else {\n retArr.push(key);\n }\n });\n\n return retArr;\n}\n\n/**\n * This sanitize the reducer provide by the user and create a common type of object.\n * user can give function Also\n * @param {DataModel} dataModel dataModel to worked on\n * @param {Object|function} [reducers={}] reducer provided by the users\n * @return {Object} object containing reducer function for every measure\n */\nfunction getReducerObj (dataModel, reducers = {}) {\n const retObj = {};\n const fieldStore = dataModel.getFieldspace();\n const measures = fieldStore.getMeasure();\n const defReducer = reducerStore.defaultReducer();\n\n Object.keys(measures).forEach((measureName) => {\n if (typeof reducers[measureName] !== 'string') {\n reducers[measureName] = measures[measureName].defAggFn();\n }\n const reducerFn = reducerStore.resolve(reducers[measureName]);\n if (reducerFn) {\n retObj[measureName] = reducerFn;\n } else {\n retObj[measureName] = defReducer;\n reducers[measureName] = defaultReducerName;\n }\n });\n return retObj;\n}\n\n/**\n * main function which perform the group-by operations which reduce the measures value is the\n * fields are common according to the reducer function provided\n * @param {DataModel} dataModel the dataModel to worked\n * @param {Array} fieldArr fields according to which the groupby should be worked\n * @param {Object|Function} reducers reducers function\n * @param {DataModel} existingDataModel Existing datamodel instance\n * @return {DataModel} new dataModel with the group by\n */\nfunction groupBy (dataModel, fieldArr, reducers, existingDataModel) {\n const sFieldArr = getFieldArr(dataModel, fieldArr);\n const reducerObj = getReducerObj(dataModel, reducers);\n const fieldStore = dataModel.getFieldspace();\n const fieldStoreObj = fieldStore.fieldsObj();\n const dbName = fieldStore.name;\n const dimensionArr = [];\n const measureArr = [];\n const schema = [];\n const hashMap = {};\n const data = [];\n let newDataModel;\n\n // Prepare the schema\n Object.entries(fieldStoreObj).forEach(([key, value]) => {\n if (sFieldArr.indexOf(key) !== -1 || reducerObj[key]) {\n schema.push(extend2({}, value.schema()));\n\n switch (value.schema().type) {\n case FieldType.MEASURE:\n measureArr.push(key);\n break;\n default:\n case FieldType.DIMENSION:\n dimensionArr.push(key);\n }\n }\n });\n // Prepare the data\n let rowCount = 0;\n rowDiffsetIterator(dataModel._rowDiffset, (i) => {\n let hash = '';\n dimensionArr.forEach((_) => {\n hash = `${hash}-${fieldStoreObj[_].partialField.data[i]}`;\n });\n if (hashMap[hash] === undefined) {\n hashMap[hash] = rowCount;\n data.push({});\n dimensionArr.forEach((_) => {\n data[rowCount][_] = fieldStoreObj[_].partialField.data[i];\n });\n measureArr.forEach((_) => {\n data[rowCount][_] = [fieldStoreObj[_].partialField.data[i]];\n });\n rowCount += 1;\n } else {\n measureArr.forEach((_) => {\n data[hashMap[hash]][_].push(fieldStoreObj[_].partialField.data[i]);\n });\n }\n });\n\n // reduction\n let cachedStore = {};\n let cloneProvider = () => dataModel.detachedRoot();\n data.forEach((row) => {\n const tuple = row;\n measureArr.forEach((_) => {\n tuple[_] = reducerObj[_](row[_], cloneProvider, cachedStore);\n });\n });\n if (existingDataModel) {\n existingDataModel.__calculateFieldspace();\n newDataModel = existingDataModel;\n }\n else {\n newDataModel = new DataModel(data, schema, { name: dbName });\n }\n return newDataModel;\n}\n\nexport { groupBy, getFieldArr, getReducerObj };\n","export { createBinnedFieldData } from './bucket-creator';\nexport { compose, bin, select, project, groupBy as groupby } from './compose';\nexport { calculateVariable, sort } from './pure-operators';\nexport { crossProduct } from './cross-product';\nexport { dataBuilder } from './data-builder';\nexport { difference } from './difference';\nexport { getCommonSchema } from './get-common-schema';\nexport { defReducer, fnList } from './group-by-function';\nexport { groupBy, getFieldArr, getReducerObj } from './group-by';\nexport { mergeSort } from './merge-sort';\nexport { naturalJoinFilter } from './natural-join-filter-function';\nexport { naturalJoin } from './natural-join';\nexport { leftOuterJoin, rightOuterJoin, fullOuterJoin } from './outer-join';\nexport { rowDiffsetIterator } from './row-diffset-iterator';\nexport { union } from './union';\n","/**\n * The default sort function.\n *\n * @param {*} a - The first value.\n * @param {*} b - The second value.\n * @return {number} Returns the comparison result e.g. 1 or 0 or -1.\n */\nfunction defSortFn (a, b) {\n const a1 = `${a}`;\n const b1 = `${b}`;\n if (a1 < b1) {\n return -1;\n }\n if (a1 > b1) {\n return 1;\n }\n return 0;\n}\n\n/**\n * The helper function for merge sort which creates the sorted array\n * from the two halves of the input array.\n *\n * @param {Array} arr - The target array which needs to be merged.\n * @param {number} lo - The starting index of the first array half.\n * @param {number} mid - The ending index of the first array half.\n * @param {number} hi - The ending index of the second array half.\n * @param {Function} sortFn - The sort function.\n */\nfunction merge (arr, lo, mid, hi, sortFn) {\n const mainArr = arr;\n const auxArr = [];\n for (let i = lo; i <= hi; i += 1) {\n auxArr[i] = mainArr[i];\n }\n let a = lo;\n let b = mid + 1;\n\n for (let i = lo; i <= hi; i += 1) {\n if (a > mid) {\n mainArr[i] = auxArr[b];\n b += 1;\n } else if (b > hi) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else if (sortFn(auxArr[a], auxArr[b]) <= 0) {\n mainArr[i] = auxArr[a];\n a += 1;\n } else {\n mainArr[i] = auxArr[b];\n b += 1;\n }\n }\n}\n\n/**\n * The helper function for merge sort which would be called\n * recursively for sorting the array halves.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {number} lo - The starting index of the array half.\n * @param {number} hi - The ending index of the array half.\n * @param {Function} sortFn - The sort function.\n * @return {Array} Returns the target array itself.\n */\nfunction sort (arr, lo, hi, sortFn) {\n if (hi === lo) { return arr; }\n\n const mid = lo + Math.floor((hi - lo) / 2);\n sort(arr, lo, mid, sortFn);\n sort(arr, mid + 1, hi, sortFn);\n merge(arr, lo, mid, hi, sortFn);\n\n return arr;\n}\n\n/**\n * The implementation of merge sort.\n * It is used in DataModel for stable sorting as it is not sure\n * what the sorting algorithm used by browsers is stable or not.\n *\n * @param {Array} arr - The target array which needs to be sorted.\n * @param {Function} [sortFn=defSortFn] - The sort function.\n * @return {Array} Returns the input array itself in sorted order.\n */\nexport function mergeSort (arr, sortFn = defSortFn) {\n if (arr.length > 1) {\n sort(arr, 0, arr.length - 1, sortFn);\n }\n return arr;\n}\n","import { getCommonSchema } from './get-common-schema';\n\n/**\n * The filter function used in natural join.\n * It generates a function that will have the logic to join two\n * DataModel instances by the process of natural join.\n *\n * @param {DataModel} dm1 - The left DataModel instance.\n * @param {DataModel} dm2 - The right DataModel instance.\n * @return {Function} Returns a function that is used in cross-product operation.\n */\nexport function naturalJoinFilter (dm1, dm2) {\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n // const dm1FieldStoreName = dm1FieldStore.name;\n // const dm2FieldStoreName = dm2FieldStore.name;\n const commonSchemaArr = getCommonSchema(dm1FieldStore, dm2FieldStore);\n\n return (dm1Fields, dm2Fields) => {\n let retainTuple = true;\n commonSchemaArr.forEach((fieldName) => {\n if (dm1Fields[fieldName].value ===\n dm2Fields[fieldName].value && retainTuple) {\n retainTuple = true;\n } else {\n retainTuple = false;\n }\n });\n return retainTuple;\n };\n}\n","import { crossProduct } from './cross-product';\nimport { naturalJoinFilter } from './natural-join-filter-function';\n\nexport function naturalJoin (dataModel1, dataModel2) {\n return crossProduct(dataModel1, dataModel2, naturalJoinFilter(dataModel1, dataModel2), true);\n}\n","import { crossProduct } from './cross-product';\nimport { JOINS } from '../constants';\nimport { union } from './union';\n\n\nexport function leftOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel1, dataModel2, filterFn, false, JOINS.LEFTOUTER);\n}\n\nexport function rightOuterJoin (dataModel1, dataModel2, filterFn) {\n return crossProduct(dataModel2, dataModel1, filterFn, false, JOINS.RIGHTOUTER);\n}\n\nexport function fullOuterJoin (dataModel1, dataModel2, filterFn) {\n return union(leftOuterJoin(dataModel1, dataModel2, filterFn), rightOuterJoin(dataModel1, dataModel2, filterFn));\n}\n","/**\n * Wrapper on calculateVariable() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const calculateVariable = (...args) => dm => dm.calculateVariable(...args);\n\n/**\n * Wrapper on sort() method of DataModel to behave\n * the pure-function functionality.\n *\n * @param {Array} args - The argument list.\n * @return {any} Returns the returned value of calling function.\n */\nexport const sort = (...args) => dm => dm.sort(...args);\n","/**\n * Iterates through the diffSet array and call the callback with the current\n * index.\n *\n * @param {string} rowDiffset - The row diffset string e.g. '0-4,6,10-13'.\n * @param {Function} callback - The callback function to be called with every index.\n */\nexport function rowDiffsetIterator (rowDiffset, callback) {\n if (rowDiffset.length > 0) {\n const rowDiffArr = rowDiffset.split(',');\n rowDiffArr.forEach((diffStr) => {\n const diffStsArr = diffStr.split('-');\n const start = +(diffStsArr[0]);\n const end = +(diffStsArr[1] || diffStsArr[0]);\n if (end >= start) {\n for (let i = start; i <= end; i += 1) {\n callback(i);\n }\n }\n });\n }\n}\n","import DataModel from '../export';\nimport { extend2 } from '../utils';\nimport { rowDiffsetIterator } from './row-diffset-iterator';\nimport { isArrEqual } from '../utils/helper';\n/**\n * Performs the union operation between two dm instances.\n *\n * @param {dm} dm1 - The first dm instance.\n * @param {dm} dm2 - The second dm instance.\n * @return {dm} Returns the newly created dm after union operation.\n */\nexport function union (dm1, dm2) {\n const hashTable = {};\n const schema = [];\n const schemaNameArr = [];\n const data = [];\n const dm1FieldStore = dm1.getFieldspace();\n const dm2FieldStore = dm2.getFieldspace();\n const dm1FieldStoreFieldObj = dm1FieldStore.fieldsObj();\n const dm2FieldStoreFieldObj = dm2FieldStore.fieldsObj();\n const name = `${dm1FieldStore.name} union ${dm2FieldStore.name}`;\n\n // For union the columns should match otherwise return a clone of the dm1\n if (!isArrEqual(dm1._colIdentifier.split(',').sort(), dm2._colIdentifier.split(',').sort())) {\n return null;\n }\n\n // Prepare the schema\n (dm1._colIdentifier.split(',')).forEach((fieldName) => {\n const field = dm1FieldStoreFieldObj[fieldName];\n schema.push(extend2({}, field.schema()));\n schemaNameArr.push(field.schema().name);\n });\n\n /**\n * The helper function to create the data.\n *\n * @param {dm} dm - The dm instance for which the data is inserted.\n * @param {Object} fieldsObj - The fieldStore object format.\n */\n function prepareDataHelper (dm, fieldsObj) {\n rowDiffsetIterator(dm._rowDiffset, (i) => {\n const tuple = {};\n let hashData = '';\n schemaNameArr.forEach((schemaName) => {\n const value = fieldsObj[schemaName].partialField.data[i];\n hashData += `-${value}`;\n tuple[schemaName] = value;\n });\n if (!hashTable[hashData]) {\n data.push(tuple);\n hashTable[hashData] = true;\n }\n });\n }\n\n // Prepare the data\n prepareDataHelper(dm1, dm1FieldStoreFieldObj);\n prepareDataHelper(dm2, dm2FieldStoreFieldObj);\n\n return new DataModel(data, schema, { name });\n}\n","import { FilteringMode } from './enums';\nimport { getUniqueId } from './utils';\nimport {\n updateFields,\n cloneWithSelect,\n cloneWithProject,\n updateData,\n getNormalizedProFields\n} from './helper';\nimport { crossProduct, difference, naturalJoinFilter, union } from './operator';\n\n/**\n * Relation provides the definitions of basic operators of relational algebra like *selection*, *projection*, *union*,\n * *difference* etc.\n *\n * It is extended by {@link DataModel} to inherit the functionalities of relational algebra concept.\n *\n * @class\n * @public\n * @module Relation\n * @namespace DataModel\n */\nclass Relation {\n\n /**\n * Creates a new Relation instance by providing underlying data and schema.\n *\n * @private\n *\n * @param {Object | string | Relation} data - The input tabular data in dsv or json format or\n * an existing Relation instance object.\n * @param {Array} schema - An array of data schema.\n * @param {Object} [options] - The optional options.\n */\n constructor (...params) {\n let source;\n\n this._parent = null;\n this._derivation = [];\n this._ancestorDerivation = [];\n this._children = [];\n\n if (params.length === 1 && ((source = params[0]) instanceof Relation)) {\n // parent datamodel was passed as part of source\n this._colIdentifier = source._colIdentifier;\n this._rowDiffset = source._rowDiffset;\n this._dataFormat = source._dataFormat;\n this._parent = source;\n this._partialFieldspace = this._parent._partialFieldspace;\n this._fieldStoreName = getUniqueId();\n this.__calculateFieldspace().calculateFieldsConfig();\n } else {\n updateData(this, ...params);\n this._fieldStoreName = this._partialFieldspace.name;\n this.__calculateFieldspace().calculateFieldsConfig();\n this._propagationNameSpace = {\n mutableActions: {},\n immutableActions: {}\n };\n }\n }\n\n /**\n * Retrieves the {@link Schema | schema} details for every {@link Field | field} as an array.\n *\n * @public\n *\n * @return {Array.} Array of fields schema.\n * ```\n * [\n * { name: 'Name', type: 'dimension' },\n * { name: 'Miles_per_Gallon', type: 'measure', numberFormat: (val) => `${val} miles / gallon` },\n * { name: 'Cylinder', type: 'dimension' },\n * { name: 'Displacement', type: 'measure', defAggFn: 'max' },\n * { name: 'HorsePower', type: 'measure', defAggFn: 'max' },\n * { name: 'Weight_in_lbs', type: 'measure', defAggFn: 'avg', },\n * { name: 'Acceleration', type: 'measure', defAggFn: 'avg' },\n * { name: 'Year', type: 'dimension', subtype: 'datetime', format: '%Y' },\n * { name: 'Origin' }\n * ]\n * ```\n */\n getSchema () {\n return this.getFieldspace().fields.map(d => d.schema());\n }\n\n /**\n * Returns the name of the {@link DataModel} instance. If no name was specified during {@link DataModel}\n * initialization, then it returns a auto-generated name.\n *\n * @public\n *\n * @return {string} Name of the DataModel instance.\n */\n getName() {\n return this._fieldStoreName;\n }\n\n getFieldspace () {\n return this._fieldspace;\n }\n\n __calculateFieldspace () {\n this._fieldspace = updateFields([this._rowDiffset, this._colIdentifier],\n this.getPartialFieldspace(), this._fieldStoreName);\n return this;\n }\n\n getPartialFieldspace () {\n return this._partialFieldspace;\n }\n\n /**\n * Performs {@link link_of_cross_product | cross-product} between two {@link DataModel} instances and returns a\n * new {@link DataModel} instance containing the results. This operation is also called theta join.\n *\n * Cross product takes two set and create one set where each value of one set is paired with each value of another\n * set.\n *\n * This method takes an optional predicate which filters the generated result rows. If the predicate returns true\n * the combined row is included in the resulatant table.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.join(originDM)));\n *\n * console.log(carsDM.join(originDM,\n * obj => obj.[originDM.getName()].Origin === obj.[carsDM.getName()].Origin));\n *\n * @text\n * This is chained version of `join` operator. `join` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel to be joined with the current instance DataModel.\n * @param {SelectionPredicate} filterFn - The predicate function that will filter the result of the crossProduct.\n *\n * @return {DataModel} New DataModel instance created after joining.\n */\n join (joinWith, filterFn) {\n return crossProduct(this, joinWith, filterFn);\n }\n\n /**\n * {@link natural_join | Natural join} is a special kind of cross-product join where filtering of rows are performed\n * internally by resolving common fields are from both table and the rows with common value are included.\n *\n * @example\n * let originDM = dm.project(['Origin','Origin_Formal_Name']);\n * let carsDM = dm.project(['Name','Miles_per_Gallon','Origin'])\n *\n * console.log(carsDM.naturalJoin(originDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} joinWith - The DataModel with which the current instance of DataModel on which the method is\n * called will be joined.\n * @return {DataModel} New DataModel instance created after joining.\n */\n naturalJoin (joinWith) {\n return crossProduct(this, joinWith, naturalJoinFilter(this, joinWith), true);\n }\n\n /**\n * {@link link_to_union | Union} operation can be termed as vertical stacking of all rows from both the DataModel\n * instances, provided that both of the {@link DataModel} instances should have same column names.\n *\n * @example\n * console.log(EuropeanMakerDM.union(USAMakerDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} unionWith - DataModel instance for which union has to be applied with the instance on which\n * the method is called\n *\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n union (unionWith) {\n return union(this, unionWith);\n }\n\n /**\n * {@link link_to_difference | Difference } operation only include rows which are present in the datamodel on which\n * it was called but not on the one passed as argument.\n *\n * @example\n * console.log(highPowerDM.difference(highExpensiveDM));\n *\n * @text\n * This is chained version of `naturalJoin` operator. `naturalJoin` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {DataModel} differenceWith - DataModel instance for which difference has to be applied with the instance\n * on which the method is called\n * @return {DataModel} New DataModel instance with the result of the operation\n */\n difference (differenceWith) {\n return difference(this, differenceWith);\n }\n\n /**\n * {@link link_to_selection | Selection} is a row filtering operation. It expects a predicate and an optional mode\n * which control which all rows should be included in the resultant DataModel instance.\n *\n * {@link SelectionPredicate} is a function which returns a boolean value. For selection operation the selection\n * function is called for each row of DataModel instance with the current row passed as argument.\n *\n * After executing {@link SelectionPredicate} the rows are labeled as either an entry of selection set or an entry\n * of rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resultant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * // with selection mode NORMAL:\n * const normDt = dt.select(fields => fields.Origin.value === \"USA\")\n * console.log(normDt));\n *\n * // with selection mode INVERSE:\n * const inverDt = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt);\n *\n * // with selection mode ALL:\n * const dtArr = dt.select(fields => fields.Origin.value === \"USA\", { mode: DataModel.FilteringMode.ALL })\n * // print the selected parts\n * console.log(dtArr[0]);\n * // print the inverted parts\n * console.log(dtArr[1]);\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Function} selectFn - The predicate function which is called for each row with the current row.\n * ```\n * function (row, i, cloneProvider, store) { ... }\n * ```\n * @param {Object} config - The configuration object to control the inclusion exclusion of a row in resultant\n * DataModel instance.\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - The mode of the selection.\n * @return {DataModel} Returns the new DataModel instance(s) after operation.\n */\n select (selectFn, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n config.mode = config.mode || defConfig.mode;\n\n const cloneConfig = { saveChild: config.saveChild };\n return cloneWithSelect(\n this,\n selectFn,\n config,\n cloneConfig\n );\n }\n\n /**\n * Retrieves a boolean value if the current {@link DataModel} instance has data.\n *\n * @example\n * const schema = [\n * { name: 'CarName', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n * const data = [];\n *\n * const dt = new DataModel(data, schema);\n * console.log(dt.isEmpty());\n *\n * @public\n *\n * @return {Boolean} True if the datamodel has no data, otherwise false.\n */\n isEmpty () {\n return !this._rowDiffset.length || !this._colIdentifier.length;\n }\n\n /**\n * Creates a clone from the current DataModel instance with child parent relationship.\n *\n * @private\n * @param {boolean} [saveChild=true] - Whether the cloned instance would be recorded in the parent instance.\n * @return {DataModel} - Returns the newly cloned DataModel instance.\n */\n clone (saveChild = true) {\n const clonedDm = new this.constructor(this);\n if (saveChild) {\n clonedDm.setParent(this);\n } else {\n clonedDm.setParent(null);\n }\n return clonedDm;\n }\n\n /**\n * {@link Projection} is filter column (field) operation. It expects list of fields' name and either include those\n * or exclude those based on {@link FilteringMode} on the resultant variable.\n *\n * Projection expects array of fields name based on which it creates the selection and rejection set. All the field\n * whose name is present in array goes in selection set and rest of the fields goes in rejection set.\n *\n * {@link FilteringMode} operates on the selection and rejection set to determine which one would reflect in the\n * resulatant datamodel.\n *\n * @warning\n * Selection and rejection set is only a logical idea for concept explanation purpose.\n *\n * @example\n * const dm = new DataModel(data, schema);\n *\n * // with projection mode NORMAL:\n * const normDt = dt.project([\"Name\", \"HorsePower\"]);\n * console.log(normDt.getData());\n *\n * // with projection mode INVERSE:\n * const inverDt = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.INVERSE })\n * console.log(inverDt.getData());\n *\n * // with selection mode ALL:\n * const dtArr = dt.project([\"Name\", \"HorsePower\"], { mode: DataModel.FilteringMode.ALL })\n * // print the normal parts\n * console.log(dtArr[0].getData());\n * // print the inverted parts\n * console.log(dtArr[1].getData());\n *\n * @text\n * This is chained version of `select` operator. `select` can also be used as\n * {@link link_to_join_op | functional operator}.\n *\n * @public\n *\n * @param {Array.} projField - An array of column names in string or regular expression.\n * @param {Object} [config] - An optional config to control the creation of new DataModel\n * @param {FilteringMode} [config.mode=FilteringMode.NORMAL] - Mode of the projection\n *\n * @return {DataModel} Returns the new DataModel instance after operation.\n */\n project (projField, config) {\n const defConfig = {\n mode: FilteringMode.NORMAL,\n saveChild: true\n };\n config = Object.assign({}, defConfig, config);\n const fieldConfig = this.getFieldsConfig();\n const allFields = Object.keys(fieldConfig);\n const { mode } = config;\n const normalizedProjField = getNormalizedProFields(projField, allFields, fieldConfig);\n\n let dataModel;\n\n if (mode === FilteringMode.ALL) {\n let projectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.NORMAL,\n saveChild: config.saveChild\n }, allFields);\n let rejectionClone = cloneWithProject(this, normalizedProjField, {\n mode: FilteringMode.INVERSE,\n saveChild: config.saveChild\n }, allFields);\n dataModel = [projectionClone, rejectionClone];\n } else {\n let projectionClone = cloneWithProject(this, normalizedProjField, config, allFields);\n dataModel = projectionClone;\n }\n\n return dataModel;\n }\n\n getFieldsConfig () {\n return this._fieldConfig;\n }\n\n calculateFieldsConfig () {\n this._fieldConfig = this._fieldspace.fields.reduce((acc, fieldObj, i) => {\n acc[fieldObj.name()] = {\n index: i,\n def: fieldObj.schema(),\n };\n return acc;\n }, {});\n return this;\n }\n\n\n /**\n * Frees up the resources associated with the current DataModel instance and breaks all the links instance has in\n * the DAG.\n *\n * @public\n */\n dispose () {\n this._parent && this._parent.removeChild(this);\n this._parent = null;\n this._children.forEach((child) => {\n child._parent = null;\n });\n this._children = [];\n }\n\n /**\n * Removes the specified child {@link DataModel} from the child list of the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\")\n * dt.removeChild(dt2);\n *\n * @private\n *\n * @param {DataModel} child - Delegates the parent to remove this child.\n */\n removeChild (child) {\n let idx = this._children.findIndex(sibling => sibling === child);\n idx !== -1 ? this._children.splice(idx, 1) : true;\n }\n\n /**\n * Sets the specified {@link DataModel} as a parent for the current {@link DataModel} instance.\n *\n * @param {DataModel} parent - The datamodel instance which will act as parent.\n */\n setParent (parent) {\n this._parent && this._parent.removeChild(this);\n this._parent = parent;\n parent && parent._children.push(this);\n }\n\n /**\n * Returns the parent {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const parentDm = dt2.getParent();\n *\n * @return {DataModel} Returns the parent DataModel instance.\n */\n getParent () {\n return this._parent;\n }\n\n /**\n * Returns the immediate child {@link DataModel} instances.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n *\n * const childDm1 = dt.select(fields => fields.Origin.value === \"USA\");\n * const childDm2 = dt.select(fields => fields.Origin.value === \"Japan\");\n * const childDm3 = dt.groupBy([\"Origin\"]);\n *\n * @return {DataModel[]} Returns the immediate child DataModel instances.\n */\n getChildren () {\n return this._children;\n }\n\n /**\n * Returns the in-between operation meta data while creating the current {@link DataModel} instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const derivations = dt3.getDerivations();\n *\n * @return {Any[]} Returns the derivation meta data.\n */\n getDerivations () {\n return this._derivation;\n }\n\n /**\n * Returns the in-between operation meta data happened from root {@link DataModel} to current instance.\n *\n * @example\n * const schema = [\n * { name: 'Name', type: 'dimension' },\n * { name: 'HorsePower', type: 'measure' },\n * { name: \"Origin\", type: 'dimension' }\n * ];\n *\n * const data = [\n * { Name: \"chevrolet chevelle malibu\", Horsepower: 130, Origin: \"USA\" },\n * { Name: \"citroen ds-21 pallas\", Horsepower: 115, Origin: \"Europe\" },\n * { Name: \"datsun pl510\", Horsepower: 88, Origin: \"Japan\" },\n * { Name: \"amc rebel sst\", Horsepower: 150, Origin: \"USA\"},\n * ]\n *\n * const dt = new DataModel(data, schema);\n * const dt2 = dt.select(fields => fields.Origin.value === \"USA\");\n * const dt3 = dt2.groupBy([\"Origin\"]);\n * const ancDerivations = dt3.getAncestorDerivations();\n *\n * @return {Any[]} Returns the previous derivation meta data.\n */\n getAncestorDerivations () {\n return this._ancestorDerivation;\n }\n}\n\nexport default Relation;\n","import { fnList } from '../operator/group-by-function';\n\nexport const { sum, avg, min, max, first, last, count, std: sd } = fnList;\n","/**\n * The utility function to calculate major column.\n *\n * @param {Object} store - The store object.\n * @return {Function} Returns the push function.\n */\nexport default (store) => {\n let i = 0;\n return (...fields) => {\n fields.forEach((val, fieldIndex) => {\n if (!(store[fieldIndex] instanceof Array)) {\n store[fieldIndex] = Array.from({ length: i });\n }\n store[fieldIndex].push(val);\n });\n i++;\n };\n};\n","/**\n * Creates a JS native date object from input\n *\n * @param {string | number | Date} date Input using which date object to be created\n * @return {Date} : JS native date object\n */\nfunction convertToNativeDate (date) {\n if (date instanceof Date) {\n return date;\n }\n\n return new Date(date);\n}\n/**\n * Apply padding before a number if its less than 1o. This is used when constant digit's number to be returned\n * between 0 - 99\n *\n * @param {number} n Input to be padded\n * @return {string} Padded number\n */\nfunction pad (n) {\n return (n < 10) ? (`0${n}`) : n;\n}\n/*\n * DateFormatter utility to convert any date format to any other date format\n * DateFormatter parse a date time stamp specified by a user abiding by rules which are defined\n * by user in terms of token. It creates JS native date object from the user specified format.\n * That native date can also be displayed\n * in any specified format.\n * This utility class only takes care of format conversion only\n */\n\n/*\n * Escapes all the special character that are used in regular expression.\n * Like\n * RegExp.escape('sgfd-$') // Output: sgfd\\-\\$\n *\n * @param text {String} : text which is to be escaped\n */\nRegExp.escape = function (text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n};\n\n/**\n * DateTimeFormatter class to convert any user format of date time stamp to any other format\n * of date time stamp.\n *\n * @param {string} format Format of the date given. For the above date,\n * 'year: %Y, month: %b, day: %d'.\n * @class\n */\n/* istanbul ignore next */ function DateTimeFormatter (format) {\n this.format = format;\n this.dtParams = undefined;\n this.nativeDate = undefined;\n}\n\n// The identifier of the tokens\nDateTimeFormatter.TOKEN_PREFIX = '%';\n\n// JS native Date constructor takes the date params (year, month, etc) in a certail sequence.\n// This defines the sequence of the date parameters in the constructor.\nDateTimeFormatter.DATETIME_PARAM_SEQUENCE = {\n YEAR: 0,\n MONTH: 1,\n DAY: 2,\n HOUR: 3,\n MINUTE: 4,\n SECOND: 5,\n MILLISECOND: 6\n};\n\n/*\n * This is a default number parsing utility. It tries to parse a number in integer, if parsing is unsuccessful, it\n * gives back a default value.\n *\n * @param: defVal {Number} : Default no if the parsing to integer is not successful\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be parsed.\n */\nDateTimeFormatter.defaultNumberParser = function (defVal) {\n return function (val) {\n let parsedVal;\n if (isFinite(parsedVal = parseInt(val, 10))) {\n return parsedVal;\n }\n\n return defVal;\n };\n};\n\n/*\n * This is a default number range utility. It tries to find an element in the range. If not found it returns a\n * default no as an index.\n *\n * @param: range {Array} : The list which is to be serached\n * @param: defVal {Number} : Default no if the serach and find does not return anything\n * @return {Function} : An closure function which is to be called by passing an the value which needs to be found\n */\nDateTimeFormatter.defaultRangeParser = function (range, defVal) {\n return (val) => {\n let i;\n let l;\n\n if (!val) { return defVal; }\n\n const nVal = val.toLowerCase();\n\n for (i = 0, l = range.length; i < l; i++) {\n if (range[i].toLowerCase() === nVal) {\n return i;\n }\n }\n\n if (i === undefined) {\n return defVal;\n }\n return null;\n };\n};\n\n/*\n * Defines the tokens which are supporter by the dateformatter. Using this definitation a value gets extracted from\n * the user specifed date string. This also formats the value for display purpose from native JS date.\n * The definition of each token contains the following named properties\n * {\n * %token_name% : {\n * name: name of the token, this is used in reverse lookup,\n * extract: a function that returns the regular expression to extract that piece of information. All the\n * regex should be gouped by using ()\n * parser: a function which receives value extracted by the above regex and parse it to get the date params\n * formatter: a formatter function that takes milliseconds or JS Date object and format the param\n * represented by the token only.\n * }\n * }\n *\n * @return {Object} : Definition of the all the supported tokens.\n */\nDateTimeFormatter.getTokenDefinitions = function () {\n const daysDef = {\n short: [\n 'Sun',\n 'Mon',\n 'Tue',\n 'Wed',\n 'Thu',\n 'Fri',\n 'Sat'\n ],\n long: [\n 'Sunday',\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday'\n ]\n };\n const monthsDef = {\n short: [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec'\n ],\n long: [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n };\n\n const definitions = {\n H: {\n // 24 hours format\n name: 'H',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n\n return d.getHours().toString();\n }\n },\n l: {\n // 12 hours format\n name: 'l',\n index: 3,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const hours = d.getHours() % 12;\n\n return (hours === 0 ? 12 : hours).toString();\n }\n },\n p: {\n // AM or PM\n name: 'p',\n index: 3,\n extract () { return '(AM|PM)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'AM' : 'PM');\n }\n },\n P: {\n // am or pm\n name: 'P',\n index: 3,\n extract () { return '(am|pm)'; },\n parser: (val) => {\n if (val) {\n return val.toLowerCase();\n }\n return null;\n },\n formatter: (val) => {\n const d = convertToNativeDate(val);\n const hours = d.getHours();\n\n return (hours < 12 ? 'am' : 'pm');\n }\n },\n M: {\n // Two digit minutes 00 - 59\n name: 'M',\n index: 4,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const mins = d.getMinutes();\n\n return pad(mins);\n }\n },\n S: {\n // Two digit seconds 00 - 59\n name: 'S',\n index: 5,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const seconds = d.getSeconds();\n\n return pad(seconds);\n }\n },\n K: {\n // Milliseconds\n name: 'K',\n index: 6,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const ms = d.getMilliseconds();\n\n return ms.toString();\n }\n },\n a: {\n // Short name of day, like Mon\n name: 'a',\n index: 2,\n extract () { return `(${daysDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.short[day]).toString();\n }\n },\n A: {\n // Long name of day, like Monday\n name: 'A',\n index: 2,\n extract () { return `(${daysDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(daysDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDay();\n\n return (daysDef.long[day]).toString();\n }\n },\n e: {\n // 8 of March, 11 of November\n name: 'e',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return day.toString();\n }\n },\n d: {\n // 08 of March, 11 of November\n name: 'd',\n index: 2,\n extract () { return '(\\\\d+)'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const day = d.getDate();\n\n return pad(day);\n }\n },\n b: {\n // Short month, like Jan\n name: 'b',\n index: 1,\n extract () { return `(${monthsDef.short.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.short),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.short[month]).toString();\n }\n },\n B: {\n // Long month, like January\n name: 'B',\n index: 1,\n extract () { return `(${monthsDef.long.join('|')})`; },\n parser: DateTimeFormatter.defaultRangeParser(monthsDef.long),\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return (monthsDef.long[month]).toString();\n }\n },\n m: {\n // Two digit month of year like 01 for January\n name: 'm',\n index: 1,\n extract () { return '(\\\\d+)'; },\n parser (val) { return DateTimeFormatter.defaultNumberParser()(val) - 1; },\n formatter (val) {\n const d = convertToNativeDate(val);\n const month = d.getMonth();\n\n return pad(month + 1);\n }\n },\n y: {\n // Short year like 90 for 1990\n name: 'y',\n index: 0,\n extract () { return '(\\\\d{2})'; },\n parser (val) {\n let result;\n if (val) {\n const l = val.length;\n val = val.substring(l - 2, l);\n }\n let parsedVal = DateTimeFormatter.defaultNumberParser()(val);\n let presentDate = new Date();\n let presentYear = Math.trunc((presentDate.getFullYear()) / 100);\n\n result = `${presentYear}${parsedVal}`;\n\n if (convertToNativeDate(result).getFullYear() > presentDate.getFullYear()) {\n result = `${presentYear - 1}${parsedVal}`;\n }\n return convertToNativeDate(result).getFullYear();\n },\n formatter (val) {\n const d = convertToNativeDate(val);\n let year = d.getFullYear().toString();\n let l;\n\n if (year) {\n l = year.length;\n year = year.substring(l - 2, l);\n }\n\n return year;\n }\n },\n Y: {\n // Long year like 1990\n name: 'Y',\n index: 0,\n extract () { return '(\\\\d{4})'; },\n parser: DateTimeFormatter.defaultNumberParser(),\n formatter (val) {\n const d = convertToNativeDate(val);\n const year = d.getFullYear().toString();\n\n return year;\n }\n }\n };\n\n return definitions;\n};\n\n/*\n * The tokens which works internally is not user friendly in terms of memorizing the names. This gives a formal\n * definition to the informal notations.\n *\n * @return {Object} : Formal definition of the tokens\n */\nDateTimeFormatter.getTokenFormalNames = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n\n return {\n HOUR: definitions.H,\n HOUR_12: definitions.l,\n AMPM_UPPERCASE: definitions.p,\n AMPM_LOWERCASE: definitions.P,\n MINUTE: definitions.M,\n SECOND: definitions.S,\n SHORT_DAY: definitions.a,\n LONG_DAY: definitions.A,\n DAY_OF_MONTH: definitions.e,\n DAY_OF_MONTH_CONSTANT_WIDTH: definitions.d,\n SHORT_MONTH: definitions.b,\n LONG_MONTH: definitions.B,\n MONTH_OF_YEAR: definitions.m,\n SHORT_YEAR: definitions.y,\n LONG_YEAR: definitions.Y\n };\n};\n\n/*\n * This defines the rules and declares dependencies that resolves a date parameter (year, month etc) from\n * the date time parameter array.\n *\n * @return {Object} : An object that contains dependencies and a resolver function. The dependencies values are fed\n * to the resolver function in that particular sequence only.\n */\nDateTimeFormatter.tokenResolver = function () {\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const defaultResolver = (...args) => { // eslint-disable-line require-jsdoc\n let i = 0;\n let arg;\n let targetParam;\n const l = args.length;\n\n for (; i < l; i++) {\n arg = args[i];\n if (args[i]) {\n targetParam = arg;\n }\n }\n\n if (!targetParam) { return null; }\n\n return targetParam[0].parser(targetParam[1]);\n };\n\n return {\n YEAR: [definitions.y, definitions.Y,\n defaultResolver\n ],\n MONTH: [definitions.b, definitions.B, definitions.m,\n defaultResolver\n ],\n DAY: [definitions.a, definitions.A, definitions.e, definitions.d,\n defaultResolver\n ],\n HOUR: [definitions.H, definitions.l, definitions.p, definitions.P,\n function (hourFormat24, hourFormat12, ampmLower, ampmUpper) {\n let targetParam;\n let amOrpm;\n let isPM;\n let val;\n\n if (hourFormat12 && (amOrpm = (ampmLower || ampmUpper))) {\n if (amOrpm[0].parser(amOrpm[1]) === 'pm') {\n isPM = true;\n }\n\n targetParam = hourFormat12;\n } else if (hourFormat12) {\n targetParam = hourFormat12;\n } else {\n targetParam = hourFormat24;\n }\n\n if (!targetParam) { return null; }\n\n val = targetParam[0].parser(targetParam[1]);\n if (isPM) {\n val += 12;\n }\n return val;\n }\n ],\n MINUTE: [definitions.M,\n defaultResolver\n ],\n SECOND: [definitions.S,\n defaultResolver\n ]\n };\n};\n\n/*\n * Finds token from the format rule specified by a user.\n * @param format {String} : The format of the input date specified by the user\n * @return {Array} : An array of objects which contains the available token and their occurence index in the format\n */\nDateTimeFormatter.findTokens = function (format) {\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenLiterals = Object.keys(definitions);\n const occurrence = [];\n let i;\n let forwardChar;\n\n while ((i = format.indexOf(tokenPrefix, i + 1)) >= 0) {\n forwardChar = format[i + 1];\n if (tokenLiterals.indexOf(forwardChar) === -1) { continue; }\n\n occurrence.push({\n index: i,\n token: forwardChar\n });\n }\n\n return occurrence;\n};\n\n/*\n * Format any JS date to a specified date given by user.\n *\n * @param date {Number | Date} : The date object which is to be formatted\n * @param format {String} : The format using which the date will be formatted for display\n */\nDateTimeFormatter.formatAs = function (date, format) {\n const nDate = convertToNativeDate(date);\n const occurrence = DateTimeFormatter.findTokens(format);\n const definitions = DateTimeFormatter.getTokenDefinitions();\n let formattedStr = String(format);\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n let token;\n let formattedVal;\n let i;\n let l;\n\n for (i = 0, l = occurrence.length; i < l; i++) {\n token = occurrence[i].token;\n formattedVal = definitions[token].formatter(nDate);\n formattedStr = formattedStr.replace(new RegExp(tokenPrefix + token, 'g'), formattedVal);\n }\n\n return formattedStr;\n};\n\n/*\n * Parses the user specified date string to extract the date time params.\n *\n * @return {Array} : Value of date time params in an array [year, month, day, hour, minutes, seconds, milli]\n */\nDateTimeFormatter.prototype.parse = function (dateTimeStamp, options) {\n const tokenResolver = DateTimeFormatter.tokenResolver();\n const dtParams = this.extractTokenValue(dateTimeStamp);\n const dtParamSeq = DateTimeFormatter.DATETIME_PARAM_SEQUENCE;\n const noBreak = options && options.noBreak;\n const dtParamArr = [];\n const args = [];\n let resolverKey;\n let resolverParams;\n let resolverFn;\n let val;\n let i;\n let param;\n let resolvedVal;\n let l;\n let result = [];\n\n for (resolverKey in tokenResolver) {\n if (!{}.hasOwnProperty.call(tokenResolver, resolverKey)) { continue; }\n\n args.length = 0;\n resolverParams = tokenResolver[resolverKey];\n resolverFn = resolverParams.splice(resolverParams.length - 1, 1)[0];\n\n for (i = 0, l = resolverParams.length; i < l; i++) {\n param = resolverParams[i];\n val = dtParams[param.name];\n\n if (val === undefined) {\n args.push(null);\n } else {\n args.push([param, val]);\n }\n }\n\n resolvedVal = resolverFn.apply(this, args);\n\n if ((resolvedVal === undefined || resolvedVal === null) && !noBreak) {\n break;\n }\n\n dtParamArr[dtParamSeq[resolverKey]] = resolvedVal;\n }\n\n if (dtParamArr.length && this.checkIfOnlyYear(dtParamArr.length))\n {\n result.unshift(dtParamArr[0], 0, 1); }\n else {\n result.unshift(...dtParamArr);\n }\n\n return result;\n};\n\n/*\n * Extract the value of the token from user specified date time string.\n *\n * @return {Object} : An key value pair which contains the tokens as key and value as pair\n */\nDateTimeFormatter.prototype.extractTokenValue = function (dateTimeStamp) {\n const format = this.format;\n const definitions = DateTimeFormatter.getTokenDefinitions();\n const tokenPrefix = DateTimeFormatter.TOKEN_PREFIX;\n const occurrence = DateTimeFormatter.findTokens(format);\n const tokenObj = {};\n\n let lastOccurrenceIndex;\n let occObj;\n let occIndex;\n let targetText;\n let regexFormat;\n\n let l;\n let i;\n\n regexFormat = String(format);\n\n const tokenArr = occurrence.map(obj => obj.token);\n const occurrenceLength = occurrence.length;\n for (i = occurrenceLength - 1; i >= 0; i--) {\n occIndex = occurrence[i].index;\n\n if (occIndex + 1 === regexFormat.length - 1) {\n lastOccurrenceIndex = occIndex;\n continue;\n }\n\n if (lastOccurrenceIndex === undefined) {\n lastOccurrenceIndex = regexFormat.length;\n }\n\n targetText = regexFormat.substring(occIndex + 2, lastOccurrenceIndex);\n regexFormat = regexFormat.substring(0, occIndex + 2) +\n RegExp.escape(targetText) +\n regexFormat.substring(lastOccurrenceIndex, regexFormat.length);\n\n lastOccurrenceIndex = occIndex;\n }\n\n for (i = 0; i < occurrenceLength; i++) {\n occObj = occurrence[i];\n regexFormat = regexFormat.replace(tokenPrefix + occObj.token, definitions[occObj.token].extract());\n }\n\n const extractValues = dateTimeStamp.match(new RegExp(regexFormat)) || [];\n extractValues.shift();\n\n for (i = 0, l = tokenArr.length; i < l; i++) {\n tokenObj[tokenArr[i]] = extractValues[i];\n }\n return tokenObj;\n};\n\n/*\n * Give back the JS native date formed from user specified date string\n *\n * @return {Date} : Native JS Date\n */\nDateTimeFormatter.prototype.getNativeDate = function (dateTimeStamp) {\n let date = null;\n if (Number.isFinite(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n } else if (!this.format && Date.parse(dateTimeStamp)) {\n date = new Date(dateTimeStamp);\n }\n else {\n const dtParams = this.dtParams = this.parse(dateTimeStamp);\n if (dtParams.length) {\n this.nativeDate = new Date(...dtParams);\n date = this.nativeDate;\n }\n }\n return date;\n};\n\nDateTimeFormatter.prototype.checkIfOnlyYear = function(len) {\n return len === 1 && this.format.match(/y|Y/g).length;\n};\n\n/*\n * Represents JS native date to a user specified format.\n *\n * @param format {String} : The format according to which the date is to be represented\n * @return {String} : The formatted date string\n */\nDateTimeFormatter.prototype.formatAs = function (format, dateTimeStamp) {\n let nativeDate;\n\n if (dateTimeStamp) {\n nativeDate = this.nativeDate = this.getNativeDate(dateTimeStamp);\n } else if (!(nativeDate = this.nativeDate)) {\n nativeDate = this.getNativeDate(dateTimeStamp);\n }\n\n return DateTimeFormatter.formatAs(nativeDate, format);\n};\n\nexport { DateTimeFormatter as default };\n","/**\n * Generates domain for measure field.\n *\n * @param {Array} data - The array of data.\n * @return {Array} Returns the measure domain.\n */\nexport default (data) => {\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n\n data.forEach((d) => {\n if (d < min) {\n min = d;\n }\n if (d > max) {\n max = d;\n }\n });\n\n return [min, max];\n};\n","/* eslint-disable */\nconst OBJECTSTRING = 'object';\nconst objectToStrFn = Object.prototype.toString;\nconst objectToStr = '[object Object]';\nconst arrayToStr = '[object Array]';\n\nfunction checkCyclicRef(obj, parentArr) {\n let i = parentArr.length;\n let bIndex = -1;\n\n while (i) {\n if (obj === parentArr[i]) {\n bIndex = i;\n return bIndex;\n }\n i -= 1;\n }\n\n return bIndex;\n}\n\nfunction merge(obj1, obj2, skipUndef, tgtArr, srcArr) {\n var item,\n srcVal,\n tgtVal,\n str,\n cRef;\n // check whether obj2 is an array\n // if array then iterate through it's index\n // **** MOOTOOLS precution\n\n if (!srcArr) {\n tgtArr = [obj1];\n srcArr = [obj2];\n }\n else {\n tgtArr.push(obj1);\n srcArr.push(obj2);\n }\n\n if (obj2 instanceof Array) {\n for (item = 0; item < obj2.length; item += 1) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (typeof tgtVal !== OBJECTSTRING) {\n if (!(skipUndef && tgtVal === undefined)) {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = tgtVal instanceof Array ? [] : {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n }\n }\n else {\n for (item in obj2) {\n try {\n srcVal = obj1[item];\n tgtVal = obj2[item];\n }\n catch (e) {\n continue;\n }\n\n if (tgtVal !== null && typeof tgtVal === OBJECTSTRING) {\n // Fix for issue BUG: FWXT-602\n // IE < 9 Object.prototype.toString.call(null) gives\n // '[object Object]' instead of '[object Null]'\n // that's why null value becomes Object in IE < 9\n str = objectToStrFn.call(tgtVal);\n if (str === objectToStr) {\n if (srcVal === null || typeof srcVal !== OBJECTSTRING) {\n srcVal = obj1[item] = {};\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else if (str === arrayToStr) {\n if (srcVal === null || !(srcVal instanceof Array)) {\n srcVal = obj1[item] = [];\n }\n cRef = checkCyclicRef(tgtVal, srcArr);\n if (cRef !== -1) {\n srcVal = obj1[item] = tgtArr[cRef];\n }\n else {\n merge(srcVal, tgtVal, skipUndef, tgtArr, srcArr);\n }\n }\n else {\n obj1[item] = tgtVal;\n }\n }\n else {\n if (skipUndef && tgtVal === undefined) {\n continue;\n }\n obj1[item] = tgtVal;\n }\n }\n }\n return obj1;\n}\n\n\nfunction extend2 (obj1, obj2, skipUndef) {\n //if none of the arguments are object then return back\n if (typeof obj1 !== OBJECTSTRING && typeof obj2 !== OBJECTSTRING) {\n return null;\n }\n\n if (typeof obj2 !== OBJECTSTRING || obj2 === null) {\n return obj1;\n }\n\n if (typeof obj1 !== OBJECTSTRING) {\n obj1 = obj2 instanceof Array ? [] : {};\n }\n merge(obj1, obj2, skipUndef);\n return obj1;\n}\n\nexport { extend2 as default };\n","import { DataFormat } from '../enums';\n\n/**\n * Checks whether the value is an array.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an array otherwise returns false.\n */\nexport function isArray (val) {\n return Array.isArray(val);\n}\n\n/**\n * Checks whether the value is an object.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is an object otherwise returns false.\n */\nexport function isObject (val) {\n return val === Object(val);\n}\n\n/**\n * Checks whether the value is a string value.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is a string value otherwise returns false.\n */\nexport function isString (val) {\n return typeof val === 'string';\n}\n\n/**\n * Checks whether the value is callable.\n *\n * @param {*} val - The value to be checked.\n * @return {boolean} Returns true if the value is callable otherwise returns false.\n */\nexport function isCallable (val) {\n return typeof val === 'function';\n}\n\n/**\n * Returns the unique values from the input array.\n *\n * @param {Array} data - The input array.\n * @return {Array} Returns a new array of unique values.\n */\nexport function uniqueValues (data) {\n return [...new Set(data)];\n}\n\nexport const getUniqueId = () => `id-${new Date().getTime()}${Math.round(Math.random() * 10000)}`;\n\n/**\n * Checks Whether two arrays have same content.\n *\n * @param {Array} arr1 - The first array.\n * @param {Array} arr2 - The 2nd array.\n * @return {boolean} Returns whether two array have same content.\n */\nexport function isArrEqual(arr1, arr2) {\n if (!isArray(arr1) || !isArray(arr2)) {\n return arr1 === arr2;\n }\n\n if (arr1.length !== arr2.length) {\n return false;\n }\n\n for (let i = 0; i < arr1.length; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * It is the default number format function for the measure field type.\n *\n * @param {any} val - The input value.\n * @return {number} Returns a number value.\n */\nexport function formatNumber(val) {\n return val;\n}\n\n/**\n * Returns the detected data format.\n *\n * @param {any} data - The input data to be tested.\n * @return {string} Returns the data format name.\n */\nexport const detectDataFormat = (data) => {\n if (isString(data)) {\n return DataFormat.DSV_STR;\n } else if (isArray(data) && isArray(data[0])) {\n return DataFormat.DSV_ARR;\n } else if (isArray(data) && (data.length === 0 || isObject(data[0]))) {\n return DataFormat.FLAT_JSON;\n }\n return null;\n};\n","export { default as DateTimeFormatter } from './date-time-formatter';\nexport { default as columnMajor } from './column-major';\nexport { default as generateMeasureDomain } from './domain-generator';\nexport { default as extend2 } from './extend2';\nexport * from './helper';\n","import { defReducer, fnList } from '../operator';\n\n/**\n * A page level storage which stores, registers, unregisters reducers for all the datamodel instances. There is only one\n * reducer store available in a page. All the datamodel instances receive same instance of reducer store. DataModel\n * out of the box provides handful of {@link reducer | reducers} which can be used as reducer funciton.\n *\n * @public\n * @namespace DataModel\n */\nclass ReducerStore {\n constructor () {\n this.store = new Map();\n this.store.set('defReducer', defReducer);\n\n Object.entries(fnList).forEach((key) => {\n this.store.set(key[0], key[1]);\n });\n }\n\n /**\n * Changes the `defaultReducer` globally. For all the fields which does not have `defAggFn` mentioned in schema, the\n * value of `defaultReducer` is used for aggregation.\n *\n * @public\n * @param {string} [reducer='sum'] - The name of the default reducer. It picks up the definition from store by doing\n * name lookup. If no name is found then it takes `sum` as the default reducer.\n * @return {ReducerStore} Returns instance of the singleton store in page.\n */\n defaultReducer (...params) {\n if (!params.length) {\n return this.store.get('defReducer');\n }\n\n let reducer = params[0];\n\n if (typeof reducer === 'function') {\n this.store.set('defReducer', reducer);\n } else {\n reducer = String(reducer);\n if (Object.keys(fnList).indexOf(reducer) !== -1) {\n this.store.set('defReducer', fnList[reducer]);\n } else {\n throw new Error(`Reducer ${reducer} not found in registry`);\n }\n }\n return this;\n }\n\n /**\n *\n * Registers a {@link reducer | reducer}.\n * A {@link reducer | reducer} has to be registered before it is used.\n *\n * @example\n * // find the mean squared value of a given set\n * const reducerStore = DataModel.Reducers();\n *\n * reducers.register('meanSquared', (arr) => {\n * const squaredVal = arr.map(item => item * item);\n * let sum = 0;\n * for (let i = 0, l = squaredVal.length; i < l; i++) {\n * sum += squaredVal[i++];\n * }\n *\n * return sum;\n * })\n *\n * // datamodel (dm) is already prepared with cars.json\n * const dm1 = dm.groupBy(['origin'], {\n * accleration: 'meanSquared'\n * });\n *\n * @public\n *\n * @param {string} name formal name for a reducer. If the given name already exists in store it is overridden by new\n * definition.\n * @param {Function} reducer definition of {@link reducer} function.\n *\n * @return {Function} function for unregistering the reducer.\n */\n register (name, reducer) {\n if (typeof reducer !== 'function') {\n throw new Error('Reducer should be a function');\n }\n\n name = String(name);\n this.store.set(name, reducer);\n\n return () => { this.__unregister(name); };\n }\n\n __unregister (name) {\n if (this.store.has(name)) {\n this.store.delete(name);\n }\n }\n\n resolve (name) {\n if (name instanceof Function) {\n return name;\n }\n return this.store.get(name);\n }\n}\n\nconst reducerStore = (function () {\n let store = null;\n\n function getStore () {\n if (store === null) {\n store = new ReducerStore();\n }\n return store;\n }\n return getStore();\n}());\n\nexport default reducerStore;\n","/**\n * The wrapper class on top of the primitive value of a field.\n *\n * @todo Need to have support for StringValue, NumberValue, DateTimeValue\n * and GeoValue. These types should expose predicate API mostly.\n */\nclass Value {\n\n /**\n * Creates new Value instance.\n *\n * @param {*} val - the primitive value from the field cell.\n * @param {string | Field} field - The field from which the value belongs.\n */\n constructor (val, field) {\n Object.defineProperty(this, '_value', {\n enumerable: false,\n configurable: false,\n writable: false,\n value: val\n });\n\n this.field = field;\n }\n\n /**\n * Returns the field value.\n *\n * @return {*} Returns the current value.\n */\n get value () {\n return this._value;\n }\n\n /**\n * Converts to human readable string.\n *\n * @override\n * @return {string} Returns a human readable string of the field value.\n *\n */\n toString () {\n return String(this.value);\n }\n\n /**\n * Returns the value of the field.\n *\n * @override\n * @return {*} Returns the field value.\n */\n valueOf () {\n return this.value;\n }\n}\n\nexport default Value;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","(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(\"hyperdis\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"hyperdis\"] = factory();\n\telse\n\t\troot[\"hyperdis\"] = 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 = 0);\n","const makeEntry = (arr, sCon) => {\n arr.forEach((elem) => {\n if (elem === undefined || elem === null) {\n return;\n }\n sCon[elem] = 1;\n });\n};\n\nexport default class ForeignSet {\n constructor (arr) {\n this._set = {};\n makeEntry(arr, this._set);\n }\n\n append (arr) {\n makeEntry(arr, this._set);\n return this;\n }\n\n toArray () {\n return Object.keys(this._set);\n }\n\n static difference (set1, set2) {\n let key;\n const filteredKeys = [],\n s1 = set1._set,\n s2 = set2._set;\n for (key in s1) {\n if (!({}).hasOwnProperty.call(s1, key)) {\n continue;\n }\n if (key in s2) {\n continue;\n }\n filteredKeys.push(key);\n }\n return new ForeignSet(filteredKeys);\n }\n}\n","/* global window */\n\nimport ForeignSet from './set';\n\nconst\n 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 minMsThreshold = 16,\n /* istanbul ignore next */win = typeof window === 'undefined' ? (this || {}) : window,\n /* istanbul ignore next */ reqAnimFrame = win.requestAnimationFrame || win.webkitRequestAnimationFrame ||\n win.mozRequestAnimationFrame || win.oRequestAnimationFrame ||\n win.msRequestAnimationFrame ||\n function (callback) {\n setTimeout(callback, minMsThreshold);\n },\n\n getTimeBasedId = () => {\n if (getTimeBasedId.__lastTime === new Date().getTime()) {\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n }\n\n getTimeBasedId.__id = 0;\n getTimeBasedId.__lastTime = new Date().getTime();\n return (getTimeBasedId.__lastTime).toString() + (getTimeBasedId.__id++).toString();\n },\n pullableRecent = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const\n hist = node.history,\n l = hist.length - 1;\n return [hist[l - 1 < 0 ? 0 : l - 1], hist[l]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n pullableEnd = (nodes, fn) => {\n let nFn = () => {\n fn(...nodes.map((node) => {\n const hist = node.history;\n return [hist[0], hist[hist.length - 1]];\n }));\n };\n nFn.__id = getTimeBasedId();\n return nFn;\n },\n unique = fns => fns\n .reduce((store, fn) => {\n // @warn function with side effect, it mutates the store passed during initialization\n if (fn.__id in store.map) {\n return store;\n }\n\n store.map[fn.__id] = 1;\n store.unique.push(fn);\n\n return store;\n }, { map: {}, unique: [] })\n .unique,\n compose = fns => () => {\n fns.forEach(fn => fn());\n },\n flat = (...params) => {\n const res = [];\n params.forEach(param => res.push(...param));\n return res;\n },\n identityMap = arrays => arrays,\n splitPathProp = (path) => {\n const pathArr = path.split('.'),\n len = pathArr.length;\n return [pathArr.slice(0, len - 1), pathArr[len - 1]];\n },\n scheduler = (onFinishCallback) => {\n let queue = [],\n animationFrame = null;\n\n onFinishCallback = onFinishCallback &&\n typeof onFinishCallback === 'function' && onFinishCallback || (() => { });\n\n return (listeners, payload) => {\n [].push.apply(queue, listeners);\n if (animationFrame === null) {\n animationFrame = reqAnimFrame(() => {\n const tempQ = queue.slice(0);\n queue.length = 0;\n animationFrame = null;\n\n unique(tempQ).forEach(fn => fn());\n onFinishCallback(payload);\n });\n }\n };\n },\n fetch = namedNode => (...params) => params.map((param) => {\n const node = namedNode[param];\n return {\n name: node.name,\n qualifiedName: node.qualifiedName,\n value: node.seed\n };\n }),\n fetchAggregator = (...params) => ({\n dependencies: params.slice(0, params.length - 1),\n fn: params[params.length - 1]\n }),\n getUpstreamNodes = (list) => {\n let res = [];\n const map = {};\n list.forEach(node => map[node.qualifiedName] = -1);\n function rec (arr) {\n arr.forEach((node) => {\n let qname,\n placedIndex,\n preArr,\n postArr;\n if (!((qname = node.qualifiedName) in map)) {\n map[qname] = res.push(node) - 1;\n } else {\n placedIndex = map[qname];\n if (placedIndex !== -1 && placedIndex !== res.length - 1) {\n // If not the last element, readjust the array so that the later dependency position is saved\n preArr = res.slice(0, placedIndex);\n postArr = res.slice(placedIndex + 1);\n res = preArr.concat(postArr);\n\n // reset the index in map\n postArr.forEach((elem, i) => map[elem.qualifiedName] = i + preArr.length);\n map[qname] = res.push(node) - 1;\n }\n }\n rec(node.outgoingEdges);\n });\n }\n rec(list);\n return res;\n },\n resolver = {\n accumulate: (...params) => {\n const resp = {};\n params.forEach((nodeDetails) => {\n Object.assign(resp, { [nodeDetails.name]: nodeDetails.value });\n });\n return resp;\n },\n identity: nodeDetails => nodeDetails.value\n };\n\nfunction resolveDependencyOrder (node, resolved, resolveMap) {\n let qname;\n node.edges.forEach((neighbour) => {\n resolveDependencyOrder(neighbour, resolved, resolveMap);\n });\n\n if (node.isRoot() || (qname = node.qualifiedName) in resolveMap) {\n return;\n }\n resolved.push(node);\n resolveMap[qname] = 1;\n}\n\nclass CustomResolver {\n constructor (resolver) {\n this.fn = resolver;\n this.dep = [];\n }\n\n addDependencies(...dep) {\n this.dep.push(...dep);\n return this;\n }\n\n getDependencies () {\n return this.dep;\n }\n\n get () {\n return this.fn;\n }\n}\n\nexport {\n isSimpleObject,\n scheduler,\n compose,\n flat,\n identityMap,\n pullableEnd,\n pullableRecent,\n unique,\n splitPathProp,\n resolver,\n ForeignSet,\n resolveDependencyOrder,\n fetch,\n fetchAggregator,\n CustomResolver,\n getUpstreamNodes\n};\n","export default class GraphNode {\n constructor (name, qualifiedName, options) {\n /* istanbul ignore next */options = options || {};\n this.name = name;\n this.qualifiedName = qualifiedName;\n this.edges = [];\n this.outgoingEdges = [];\n this._seed = null;\n this.requireResolve = true;\n this.retriever = options.retriever;\n this.history = [];\n this.resolver = null;\n this.electricEdges = [];\n }\n\n addDependencies (...dep) {\n this.edges.push(...dep);\n dep.forEach(entry => entry.outgoingEdges.push(this));\n return this;\n }\n\n addElectricNode (node) {\n this.electricEdges.push(node);\n return this;\n }\n\n get seed () {\n return this._seed;\n }\n\n set seed (value) {\n this._seed = value;\n this.requireResolve = true;\n return this;\n }\n\n resolve () {\n this.seed = this.resolver(...this.retrieveDetails());\n this.history.push(this.seed);\n this.requireResolve = false;\n return this;\n }\n\n retrieveDetails () {\n if (this.edges.length === 0) {\n return [{\n name: this.name,\n qualifiedName: this.qualifiedName,\n value: this.seed\n }];\n }\n return this.retriever(...this.edges.map(edge => edge.qualifiedName));\n }\n\n repeatHead () {\n const\n history = this.history,\n head = history[history.length - 1];\n // @todo- Akash, write test case if history.length === 0 to pass code coverage\n if (history.length === 0) {\n return this;\n }\n history.push(head);\n return this;\n }\n\n flush () {\n const hist = this.history,\n head = hist[hist.length - 1];\n hist.length = 0;\n hist.push(head);\n return this;\n }\n\n isRoot () {\n return this.name === null;\n }\n}\n","import {\n pullableRecent,\n pullableEnd\n} from './utils';\n\nexport default class ElectricNode {\n constructor () {\n this.edges = [];\n this.listeners = {\n nextFrame: [],\n currentFrame: []\n };\n }\n\n addEdges (...nodes) {\n this.edges.push(...nodes);\n return this;\n }\n\n regListenerForCurrFrame (fn) {\n const lstnrs = this.listeners.currentFrame;\n let index = lstnrs.push(pullableRecent(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.currentFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n regListenerForNextFrame (fn) {\n const lstnrs = this.listeners.nextFrame;\n let index = lstnrs.push(pullableEnd(this.edges, fn)) - 1;\n\n return () => {\n this.listeners.nextFrame = lstnrs.filter((fn, i) => i !== index);\n };\n }\n\n hasNextFrameListener () {\n return !!this.listeners.nextFrame.length;\n }\n}\n","import {\n isSimpleObject,\n resolver,\n // upstreamNodes,\n flat,\n resolveDependencyOrder,\n getUpstreamNodes,\n ForeignSet,\n fetch,\n CustomResolver,\n scheduler\n} from './utils';\nimport Node from './graph-node';\nimport ElectricNode from './electric-node';\n\nexport default class Graph {\n constructor () {\n this.qualifiedNodeMap = {};\n this.retriever = fetch(this.qualifiedNodeMap);\n this.root = new Node(null, null, { retriever: this.retriever });\n this.root.resolver = resolver.accumulate;\n\n this._wholeSet = null;\n this._propagate = true;\n this.propagationOverride = {\n currentFrameListeners: false,\n nextFrameListeners: false\n };\n\n this._schedule = scheduler((payload) => {\n let qname;\n for (qname in payload.flushTarget) {\n if (!({}).hasOwnProperty.call(this.qualifiedNodeMap, qname)) {\n return;\n }\n this.qualifiedNodeMap[qname].flush();\n }\n });\n }\n\n createNodesFrom (obj, mount) {\n let val,\n resolveReqList;\n const qualifiedNodeMap = this.qualifiedNodeMap,\n root = this.root,\n retriever = this.retriever;\n\n (function rec (objn, qualifiedName, history) {\n let key,\n qname,\n perv,\n node;\n\n for (key in objn) {\n if (!({}).hasOwnProperty.call(objn, key)) {\n continue;\n }\n qname = `${qualifiedName}${key}`;\n node = new Node(key, qname, { retriever });\n qualifiedNodeMap[qname] = node;\n\n if ((perv = history.perv) !== undefined) {\n perv.addDependencies(node);\n } else {\n // top most level entries\n root.addDependencies(node);\n }\n\n if (isSimpleObject(val = objn[key])) {\n rec(val, `${qualifiedName}${key}.`, { perv: node });\n node.resolver = resolver.accumulate;\n } else if (val instanceof CustomResolver) {\n node.resolver = val.get();\n node.addDependencies(...val.getDependencies().map(qname => qualifiedNodeMap[qname]));\n } else {\n node.resolver = resolver.identity;\n node.seed = val;\n // node.resolve();\n }\n }\n }(obj, mount === null ? '' : `${mount}.`, {\n perv: qualifiedNodeMap[mount]\n }));\n\n this._wholeSet = new ForeignSet(Object.keys(this.qualifiedNodeMap));\n\n // Recalculate the model without firing the listeners\n // @todo selective branch resolve. Currently resolve gets called even for a branch which was updated\n resolveReqList = this.constructor.getResolvedList(root).concat(root).filter(node => node.requireResolve);\n resolveReqList.forEach(node => node.resolve());\n getUpstreamNodes(resolveReqList).forEach(node => node.resolve());\n return this;\n }\n\n getNodeValue (prop) {\n if (prop in this.qualifiedNodeMap) {\n return this.qualifiedNodeMap[prop].seed;\n }\n return undefined;\n }\n\n createElectricNodeOf (props, fnSpec) {\n const nodes = props.map(prop => this.qualifiedNodeMap[prop]),\n eNode = new ElectricNode().addEdges(...nodes);\n\n nodes.forEach(node => node.addElectricNode(eNode));\n return eNode[`regListenerFor${fnSpec.type}`](fnSpec.fn);\n }\n\n update (...params) {\n let changedSet,\n upstreamNodes;\n const\n electricEdges = [],\n nodes = params.map((entry) => {\n entry[0].seed = entry[1];\n return entry[0];\n });\n nodes.forEach(node => node.resolve());\n electricEdges.push(...flat(...nodes.map(node => node.electricEdges)));\n changedSet = new ForeignSet(nodes.map(node => node.qualifiedName));\n\n if (!this._propagate) {\n this.__execUniqueElectricEdges(electricEdges);\n this._propagate = true;\n return this;\n }\n\n upstreamNodes = getUpstreamNodes(nodes);\n upstreamNodes.forEach(upstreamNode => upstreamNode.resolve());\n changedSet.append(upstreamNodes.map(node => node.qualifiedName));\n electricEdges.push(...flat(...upstreamNodes.map(node => node.electricEdges)));\n\n this.__execUniqueElectricEdges(Array.from(new Set(electricEdges)), changedSet);\n return this;\n }\n\n __execUniqueElectricEdges (electricEdges, changedSet) {\n const\n cfLstnrs = [], // current frame listeners\n nfLstnrs = []; // next frame listeners\n if (changedSet) {\n const\n differenceSet = ForeignSet.difference(this._wholeSet, changedSet),\n entries = differenceSet.toArray();\n\n entries.forEach(entry => this.qualifiedNodeMap[entry].repeatHead());\n }\n\n electricEdges.forEach((e) => {\n cfLstnrs.push(...e.listeners.currentFrame);\n });\n electricEdges.forEach((e) => {\n nfLstnrs.push(...e.listeners.nextFrame);\n });\n\n !this.propagationOverride.currentFrameListeners && cfLstnrs.forEach(fn => fn());\n !this.propagationOverride.nextFrameListeners && this._schedule(nfLstnrs, { flushTarget: changedSet });\n this.resetPropagationOverride();\n return this;\n }\n\n resetNodeValue (...qnames) {\n const nodes = qnames.map(qname => this.qualifiedNodeMap[qname]),\n args = nodes.map(node => [node, node.seed]);\n this.update(...args);\n return this;\n }\n\n static getResolvedList (node) {\n const resolved = [];\n resolveDependencyOrder(node, resolved, {});\n return resolved;\n }\n\n stopPropagation () {\n this._propagate = false;\n return this;\n }\n\n resetPropagationOverride () {\n this.propagationOverride.currentFrameListeners = false;\n this.propagationOverride.nextFrameListeners = false;\n return this;\n }\n\n setPropagationOverride (key) {\n this.propagationOverride[`${key}Listeners`] = true;\n return this;\n }\n\n getNodeFromQualifiedName (qname) {\n return this.qualifiedNodeMap[qname];\n }\n}\n","import Graph from './graph';\nimport { CustomResolver, fetchAggregator } from './utils';\n\n/**\n * The container class for Hyperdis. Hyperdis is an enabler for observable object with few interesting features like,\n * calculated property, next frame and same frame listeners, multiple listeners etc with a dependency resolving system.\n * It internally uses a graph to hold the hierarchial relationship of a object. Model is merely a container which\n * ties all the components together.\n *\n * @todo Circular dependency detection is not present\n *\n * @example check src/index.spec.js\n * @class\n */\nclass Model {\n constructor () {\n this._graph = new Graph();\n this._lockFlag = false;\n this._reqQ = [];\n }\n\n /**\n * Static method to create and init the model with an observable seed\n *\n * @param {Object} obj The target object which is required to be made observable\n * @return {Model} instance of the observable object model\n */\n static create (obj) {\n return new Model()._addPropInModel(null, obj);\n }\n\n /**\n * Appends more observable property on the already observable instance. This mutates the original model.\n *\n * This function works in two mode. One being\n * @param {String} mountPoint the property on which the new set of properties will be mounted. If its a nested\n * property then the mountPoint has to be written such a way so it feels like you are\n * accessing the object. If the mount point is not found then he obeservables are added in\n * the root.\n * @param {Object} The target object which is required to be made observable\n *\n * Another being\n * @param {Object} The target object which is required to be made observable\n *\n * @return {Model} instance of the observable object model\n */\n append (...params) {\n let mountPoint,\n obj;\n\n if (params.length === 1) {\n mountPoint = null;\n obj = params[0];\n } else {\n mountPoint = params[0];\n obj = params[1];\n }\n\n this._addPropInModel(mountPoint, obj);\n return this;\n }\n\n /**\n * Creates a calculated variable from existing variable. This variable can't be updated from outside.\n * @param {string} mountpoint property path on which the new variable will be placed\n * @param {string} name name of the variable. If the variable could have hierarchy like `limits.start`\n * @param {Function} fn funtion where the dependent variables are injected based on the dependency requirement\n */\n calculatedProp (...params) {\n let calculationConfig,\n customResolver,\n varName,\n mount,\n fetchFn;\n\n if (params.length > 2) {\n mount = params[0];\n varName = params[1];\n fetchFn = params[2];\n } else {\n mount = null;\n varName = params[0];\n fetchFn = params[1];\n }\n\n calculationConfig = fetchFn(fetchAggregator);\n customResolver = new CustomResolver(calculationConfig.fn);\n customResolver.addDependencies(...calculationConfig.dependencies);\n\n this._addPropInModel(mount, { [varName]: customResolver });\n return this;\n }\n\n // eslint-disable-next-line require-jsdoc\n _addPropInModel (mountPoint, obj) {\n this._graph.createNodesFrom(obj, mountPoint);\n return this;\n }\n\n /**\n * Register a listener in the current frame when a property or group of properties is changed.\n *\n * @example\n * This function takes a single or group of property and handler which is called when any of the properties are\n * changed.\n * When a single property is changed the handler is called with two parameter, what was the old value of the state\n * property and what is the new value.\n * myState.on('range.start', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 9);\n * // Output\n * Value before prop change 1\n * Value after prop change 9\n *\n * If a handler is registered on change of a property which has another state property as value, then the handler\n * gets called whenever any state property connected to it gets changed\n *\n * myState.on('range', (oldValue, newValue) => {\n * console.log('Value before prop change', oldValue);\n * console.log('Value after prop change', newValue);\n * });\n *\n * myState.prop('range.start', 10);\n * myState.prop('range.type.absolute', false);\n *\n * // Output\n * Value before prop change\n * range {\n * start: 9,\n * end: 5,\n * type: {\n * absolute: true\n * }\n * }\n * Value after prop change\n * range: {\n * start: 10,\n * end: 5,\n * type: {\n * absolute: false\n * }\n * }\n * If a handler is registered with more than one property change then, the handler is called when any of the\n * properties gets changed. In this cast the handler is called with more than one parameter: each for one state\n * property which is registered for listening. Each parameter is of type array containing [oldValue, newValue]\n *\n * myState.on('range.start', 'range.end', (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * myState.prop('range.start', 12);\n *\n * // Output\n * Start [10, 12]\n * End [5, 5]\n *\n * myState.prop('range.end', 7);\n *\n * // Output\n * Start [12, 12]\n * End [5, 7]\n *\n * The on returns a function which is when called the listener registered gets unregistered\n *\n * let unsub = myState.on(['range.start', 'range.end'], (start, end) => {\n * console.log('Start', start);\n * console.log('End', end);\n * });\n *\n * // Unsubscribe\n * unsub()\n *\n * On takes an optional boolean value as the last parameter, which if passed as a true value the handler gets called\n * during registration itself.\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n on (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed in the current stack frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'CurrFrame',\n fn\n });\n\n if (instantCall) {\n // Bar current next frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('nextFrame').resetNodeValue(...props);\n }\n return unsub;\n }\n\n /**\n * Register a listener for the next frame when a property or group of properties is changed.\n *\n * @example\n * See the examples for the on listener\n *\n * @param {Array.} props List of properties which is of interest\n * @param {Function} fn Listener to be executed when any of them is changed. The listener is called with the old\n * value and new value of the properties. Here the oldvalue is last value of the last frame\n * @param {*} instantCall When registered if the function is to be triggered with the value of the property\n *\n * @return {Function} function to unsubscribe from the listeners registry\n */\n next (props, fn, instantCall) {\n const\n propsArr = props instanceof Array ? props : [props],\n // All there listeners will be executed at the tick of next animation frame\n unsub = this._graph.createElectricNodeOf(propsArr, {\n type: 'NextFrame',\n fn\n });\n\n // @todo check support for this from the graph side\n if (instantCall) {\n // Bar current frame listeners from getting fired\n this._graph.stopPropagation().setPropagationOverride('currentFrame').resetNodeValue(...props);\n }\n\n return unsub;\n }\n\n /**\n * Lock queues the request of property change and releases the change when unlock is called. This is helpful when\n * multiple property is getting called and the model listeners are to be fired once at the end of update.\n *\n * @return {Model} instance of the model\n */\n lock () {\n this._lockFlag = true;\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * Unlock unleashes the change done after the lock was called.\n\n * @return {Model} instance of the model\n */\n unlock () {\n this._lockFlag = false;\n this.setProp(...this._reqQ);\n this._reqQ.length = 0;\n return this;\n }\n\n /**\n * This acts as getter and setter. If the function is called by passing only one argument, it retrieve the value\n * associated with the property. If the same function is called using two parameters, first one being the property\n * and second one being the value, then the value is set for the property and the handlers are called (if any)\n * which got registered using the on function\n *\n * Getter\n * @param {string} prop property path whose value to be retrieved\n * @return {Object} value of the property at the time of call\n *\n * Setter\n * @param {string} property property path whose value to be ser\n * @return {Model} instance of the model\n */\n prop (...params) {\n let prop,\n val,\n len;\n\n switch (len = params.length) {\n case 1:\n prop = params[0];\n break;\n\n case 2:\n prop = params[0];\n val = params[1];\n break;\n\n default:\n return this;\n }\n\n if (len === 2) {\n this._lockFlag ? this._reqQ.push([prop, val]) : this.setProp([prop, val]);\n return this;\n }\n\n return this._graph.getNodeValue(prop);\n }\n\n // eslint-disable-next-line require-jsdoc\n setProp (...props) {\n // Filter out the calculated variables, so that it cant be changed from outside\n // @todo if a node is not leafValue, and change is called, ignore it too\n // props = props.filter(prop => !(VirtualObj.walkTill(prop[0].split('.'), this._vObj).leafValue()\n // instanceof CalculatedVar));\n\n if (props.length === 0) {\n return this;\n }\n\n this._graph.update(...props.map(prop => [this._graph.getNodeFromQualifiedName(prop[0]), prop[1]]));\n return this;\n }\n\n /**\n * Retrieves the graph representation of the object\n * @return {Graph} instance of the graph associated to the model\n */\n graph () {\n return this._graph;\n }\n\n /**\n * Get serialized data from the model\n *\n * @return {Object} Serialized data\n */\n serialize () {\n return this._graph.root.seed;\n }\n}\n\nexport default Model;\n","import Model from './model';\n\nexport default Model;\n","const Muze = require('./muze');\n\nmodule.exports = Muze.default ? Muze.default : Muze;\n","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 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","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 {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","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","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","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(date - date.getMilliseconds());\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, durationSecond} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\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, durationSecond} from \"./duration\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\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","export const UNIT_GLOBAL_NAMESPACE = 'app.units';\nexport const UNIT_LOCAL_NAMESPACE = 'local.units';\nexport const LAYER_LOCAL_NAMESPACE = 'local.layers';\nexport const LAYER_GLOBAL_NAMESPACE = 'app.layers';\nexport const GROUP_GLOBAL_NAMESPACE = 'app.group';\nexport const GROUP_LOCAL_NAMESPACE = 'local.group';\nexport const CANVAS_LOCAL_NAMESPACE = 'local.canvas';\nexport const CANVAS_GLOBAL_NAMESPACE = 'app.canvas';\n\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 MATRIX_CREATED: 'matrixCreated'\n};\n\nexport default CommonProps;\n","export const COORD_TYPES = {\n POLAR: 'polar',\n CARTESIAN: 'cartesian'\n};\nexport const DATA_TYPE = {\n FUNCTION: 'function',\n STRING: 'string',\n NUMBER: 'number',\n BOOLEAN: 'Boolean'\n};\nexport const SORT_ORDER_ASCENDING = 'asc';\nexport const SORT_ORDER_DESCENDING = 'desc';\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","import { defaultValue } from '../common-utils';\n\nconst sortSelection = (dataObjects, updateData, sortFn) =>\n (a, b) => {\n const kA = a[0];\n const kB = b[0];\n return sortFn([a[0], dataObjects.get(kA), updateData.get(kA)], [kB, dataObjects.get(kB), updateData.get(kB)]);\n };\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 (idGetter) {\n this._dataObjects = new Map();\n this._updateData = new Map();\n this._enterData = new Map();\n this._exitData = new Map();\n this._idGetter = idGetter;\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) {\n const entryData = new Map();\n const exitdata = new Map();\n const tempMap = new Map();\n const duplicateData = new Map();\n const updatedData = this._updateData;\n const idGetter = this._idGetter;\n\n newData.forEach((...params) => {\n const key = idGetter ? idGetter(...params) : params[1];\n if (!tempMap.has(key)) {\n tempMap.set(key, params[0]);\n } else {\n duplicateData.push(key, params[0]);\n }\n });\n\n let val;\n // prepare enter data\n let entries = tempMap.entries();\n while (val = entries.next().value) {\n if (!updatedData.has(val[0])) {\n entryData.set(val[0], val[1]);\n } else {\n updatedData.set(val[0], val[1]);\n }\n }\n // prepare exit data\n entries = updatedData.entries();\n while (val = entries.next().value) {\n if (!tempMap.has(val[0])) {\n exitdata.set(val[0], val[1]);\n }\n }\n\n // put duplicate data to exit list\n entries = duplicateData.entries();\n while (val = entries.next().value) {\n exitdata.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = updatedData;\n newSelection._dataObjects = this._dataObjects;\n newSelection._enterData = entryData;\n newSelection._exitData = exitdata;\n\n return newSelection;\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 Selection\n */\n append (callback) {\n let val;\n const dataObjects = new Map();\n const data = new Map();\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n dataObjects.set(val[0], callback(val[1]));\n data.set(val[0], val[1]);\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = data;\n newSelection._dataObjects = dataObjects;\n\n return newSelection;\n }\n\n /**\n * This method returns an enter selection that\n * allows or update operations.\n *\n * @return {Selection} Instance of enter selection.\n * @memberof Selection\n */\n enter () {\n this._mode = 'enter';\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 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 (target) {\n const mergedObjects = new Map();\n const mergedData = new Map();\n let val;\n let entries;\n\n // merge Object and data present in this selection\n entries = this._updateData.entries();\n while (val = entries.next().value) {\n if (!this._exitData.has(val[0])) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], this._dataObjects.get(val[0]));\n }\n }\n\n // merge object from target selection\n entries = target._updateData.entries();\n while (val = entries.next().value) {\n if (!(mergedData.has(val[0]) || target._exitData.has(val[0]))) {\n mergedData.set(val[0], val[1]);\n mergedObjects.set(val[0], target._dataObjects.get(val[0]));\n }\n }\n\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = mergedData;\n newSelection._dataObjects = mergedObjects;\n\n return newSelection;\n }\n\n each (fn) {\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n fn(val[1], this._updateData.get(val[0]), val[0]);\n }\n }\n\n map (fn) {\n const newdata = new Map();\n let val;\n const entries = this._dataObjects.entries();\n\n while (val = entries.next().value) {\n newdata.set(val[0], fn(val[1], this._updateData.get(val[0]), val[0]));\n }\n const newSelection = new Selection(this._idGetter);\n newSelection._updateData = this._updateData;\n newSelection._dataObjects = newdata;\n\n return newSelection;\n }\n\n remove () {\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n\n currentData.clear();\n\n return this;\n }\n\n sort (sortFn) {\n const updateData = this._updateData;\n const dataObjects = this._dataObjects;\n const sortSel = sortSelection(dataObjects, updateData, sortFn);\n\n this._updateData = new Map([...updateData.entries()].sort(sortSel));\n this._dataObjects = new Map([...dataObjects.entries()].sort(sortSel));\n return this;\n }\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 let val;\n const objects = [];\n const dataObjects = this._dataObjects;\n // select the data to create object\n const mode = defaultValue(this._mode, 'update');\n const currentData = this[`_${mode}Data`];\n const entries = currentData.entries();\n\n while (val = entries.next().value) {\n if (dataObjects.has(val[0])) {\n objects.push(dataObjects.get(val[0]));\n }\n }\n\n return objects;\n }\n}\n\nexport default Selection;\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","/* global window, requestAnimationFrame, cancelAnimationFrame */\nimport { FieldType, DimensionSubtype, DateTimeFormatter, DM_DERIVATIVES, default as DataModel } 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 { dataSelect } from './DataSystem';\nimport { DATA_TYPE, SORT_ORDER_ASCENDING, SORT_ORDER_DESCENDING } from './enums';\nimport * as STACK_CONFIG from './enums/stack-config';\n\nconst { CATEGORICAL, TEMPORAL } = DimensionSubtype;\nconst { STRING, FUNCTION } = DATA_TYPE;\nconst { InvalidAwareTypes } = DataModel;\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.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.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 const domArr = [];\n data = data[0] instanceof Array ? data : [data];\n switch (fieldType) {\n case CATEGORICAL:\n domain = [].concat(...data.map(arr => arr.map(d => d[fields[0]]).filter(d => d !== undefined)));\n break;\n default:\n for (let i = 0, len = data.length; i < len; i++) {\n const arr = data[i];\n const [field0, field1] = fields;\n const arr0 = arr.filter(d => !isNaN(d[field0]));\n const arr1 = arr.filter(d => !isNaN(d[field1]));\n if (arr0.length || arr1.length) {\n const firstMin = getMin(arr0, field0);\n const secondMin = getMin(arr1, field1);\n const firstMax = getMax(arr0, field0);\n const secondMax = getMax(arr1, field1);\n domArr.push([Math.min(firstMin, secondMin), Math.max(firstMax, secondMax)]);\n }\n }\n domain = domArr.length ? [Math.min(...domArr.map(d => d[0])), Math.max(...domArr.map(d => d[1]))] : [];\n break;\n }\n return domain;\n};\n\nconst sanitizeDomainWhenEqual = (domain) => {\n if (domain[0] === domain[1]) {\n domain[0] = domain[0] > 0 ? 0 : domain[0];\n domain[1] = domain[1] > 0 ? domain[1] : 0;\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 && dom.length);\n if (domains.length) {\n if (fieldType === CATEGORICAL) {\n domain = [].concat(...domains);\n } else {\n domain = [Math.min(...domains.map(d => d[0])), Math.max(...domains.map(d => d[1]))];\n }\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\nconst getNearestValue = (data, key) => {\n const filterData = data.filter(d => typeof d === 'number');\n return filterData[getClosestIndexOf(filterData, key)];\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 *\n * @export\n * @param {Object} graph graph whose dependency order has to be generated\n * @return {Object}\n */\nconst getDependencyOrder = (graph) => {\n const dependencyOrder = [];\n const visited = {};\n const keys = Object.keys(graph);\n /**\n * DESCRIPTION TODO\n *\n * @export\n * @param {Object} name\n * @return {Object}\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\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 * 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\nconst generateGetterSetters = (context, props) => {\n Object.entries(props).forEach((propInfo) => {\n const prop = propInfo[0];\n const { sanitization, preset, onset, typeChecker, defaultValue: defVal } = propInfo[1];\n const prototype = context.constructor.prototype;\n if (!(Object.hasOwnProperty.call(prototype, prop))) {\n if (defVal) {\n context[`_${prop}`] = defVal;\n }\n context[prop] = (...params) => {\n if (params.length) {\n let value = params[0];\n if (sanitization) {\n value = sanitization(context, params[0], context[`_${prop}`]);\n }\n if (preset) {\n preset(context, value);\n }\n if (typeChecker && !typeChecker(value)) {\n return context[`_${prop}`];\n }\n context[`_${prop}`] = value;\n if (onset) {\n onset(context, value);\n }\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 *\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\n .registerImmediateListener(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\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 */\nconst createSelection = (sel, appendObj, data, idFn) => {\n let selection = sel || dataSelect(idFn);\n\n selection = selection.data(data);\n\n const enter = selection.enter().append(appendObj);\n const mergedSelection = enter.merge(selection);\n\n const exitSelection = selection.exit();\n exitSelection.getObjects().forEach(inst => inst.remove());\n exitSelection.remove();\n return mergedSelection;\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 shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => r + r + g + g + b + b);\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? rgbToHsv(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : '';\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\\((\\d.+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*(\\d*(?:\\.\\d+)?)\\)$/;\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\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 *\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 *\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 } else {\n filteredDataModel = dataModel.select(() => false, {\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, ...params) => {\n const propListenerMap = listenerMap(context, ...params);\n for (const key in propListenerMap) {\n if ({}.hasOwnProperty.call(propListenerMap, key)) {\n const { namespace } = params[1];\n let ns = null;\n if (namespace) {\n ns = namespace;\n }\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, false, {\n namespace: ns\n });\n }\n }\n};\n\nconst isValidValue = value => !isNaN(value) && value !== -Infinity && value !== Infinity;\n/**\n *\n *\n * @param {*} str\n *\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 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};\n\nconst timeDurations = [\n ['millisecond', 'second', 'minute', 'hour', 'day', 'month', 'year'],\n [1, 1000, 60000, 3600000, 86400000, 2592000000, 31536000000]\n];\n\nconst getNearestInterval = (interval) => {\n const index = getClosestIndexOf(timeDurations[1], interval);\n return timeDurations[0][index];\n};\n\nconst formatTemporal = (value, interval) => {\n const nearestInterval = getNearestInterval(interval);\n return DateTimeFormatter.formatAs(value, timeFormats[nearestInterval]);\n};\n\nconst temporalFields = (dataModel) => {\n const filteredFields = {};\n Object.entries(dataModel.getFieldspace().getDimension()).forEach(([fieldName, fieldObj]) => {\n if (fieldObj.subtype() === TEMPORAL) {\n filteredFields[fieldName] = fieldObj;\n }\n });\n return filteredFields;\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\nconst getValueParser = config => (val) => {\n if (val instanceof InvalidAwareTypes) {\n return val in config ? config[val] : `${val}`;\n }\n return val;\n};\n\nconst retrieveNearestGroupByReducers = (dataModel, ...measureFieldNames) => {\n const filteredReducers = {};\n if (dataModel instanceof DataModel) {\n const derivations = [...dataModel.getDerivations().reverse(), ...dataModel.getAncestorDerivations().reverse()];\n const nearestReducers = defaultValue(\n getObjProp(derivations.find(derv => derv.op === DM_DERIVATIVES.GROUPBY), 'criteria'), {});\n\n const measures = dataModel.getFieldspace().getMeasure();\n measureFieldNames = measureFieldNames.length ? measureFieldNames : Object.keys(measures);\n measureFieldNames.forEach((measureName) => {\n if (nearestReducers[measureName]) {\n filteredReducers[measureName] = nearestReducers[measureName];\n } else {\n const measureField = measures[measureName];\n if (measureField) {\n filteredReducers[measureName] = measureField.defAggFn();\n }\n }\n });\n }\n return filteredReducers;\n};\n\nconst retrieveFieldDisplayName = (dm, fieldName) => dm.getFieldspace().fieldsObj()[fieldName].displayName();\n/**\n * Fetches the nearest sort operation details by traversing the chain of parent DataModels\n * @param {Object} dataModel Instance of DataModel\n *\n * @return {Array|null} sort criteria, null if no sort operation found\n */\nconst nearestSortingDetails = (dataModel) => {\n const allDerivations = [...dataModel.getAncestorDerivations(), ...dataModel.getDerivations()];\n const nearestSortDerivation = allDerivations.reverse().find(derivation => derivation.op === DM_DERIVATIVES.SORT);\n\n return nearestSortDerivation ? nearestSortDerivation.criteria : null;\n};\n\n/**\n * Map containing key, value sortingOrder pairs\n */\nconst sortOrderMap = {\n [SORT_ORDER_ASCENDING]: (firstVal, secondVal) => firstVal.localeCompare(secondVal),\n [SORT_ORDER_DESCENDING]: (firstVal, secondVal) => secondVal.localeCompare(firstVal)\n};\n\n/**\n * Sort categorical field based on it's sorting order\n * @param {string} sortOrder Order by which field is to be sorted (asc or desc or func)\n * @param {string} firstVal First sort parameter\n * @param {string} secondVal Second sort parameter\n * @return {number} position\n*/\nconst sortCategoricalField = (sortOrder, firstVal, secondVal) => {\n const sortOrderType = typeof sortOrder;\n\n if (sortOrderType === FUNCTION) {\n return sortOrder(firstVal, secondVal);\n } else if (sortOrderType === STRING) {\n return sortOrderMap[sortOrder](firstVal, secondVal);\n }\n return null;\n};\n\nconst intersect = (arr1, arr2, accessors = [v => v, v => v]) => {\n const [fn1, fn2] = accessors;\n const set = new Set(arr2.map(v => fn2(v)));\n return arr1.filter(value => set.has(fn1(value)));\n};\n\nexport {\n getValueParser,\n require,\n intersect,\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 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 getDependencyOrder,\n objectIterator,\n intSanitizer,\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 getNearestValue,\n retrieveNearestGroupByReducers,\n nearestSortingDetails,\n createSelection,\n formatTemporal,\n temporalFields,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField\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 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 (idFn) {\n return new Selection(idFn);\n}\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","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 { 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 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","import Model from 'hyperdis';\nimport { defaultValue, getObjProp } from './common-utils';\n\nconst initProp = (obj, props, val = () => ({})) => {\n props.forEach((prop) => {\n if (!obj[prop]) {\n obj[prop] = val();\n }\n obj = obj[prop];\n });\n return obj;\n};\n\nconst fetchPropValues = (propNames, params, deps) => params.map((param, i) => {\n const prop = propNames[i];\n\n return param.map(val => (val === undefined || val === null ? val : val[deps[prop]]));\n});\n\nconst addListenerToNamespace = (namespaceInf, fn, context) => {\n let key = namespaceInf.key;\n const namespace = namespaceInf.id;\n const listeners = context._listeners;\n\n if (namespace) {\n !listeners.get(namespace) && (listeners.set(namespace, new Map()));\n const namespaceListeners = listeners.get(namespace);\n\n if (!key) {\n key = namespaceListeners.size;\n }\n namespaceListeners.set(key, fn);\n } else {\n key = key || listeners.size;\n listeners.set(key, fn);\n }\n};\n\nconst setContexts = (contexts, propObj, contextMap) => {\n for (const key of propObj.keys()) {\n contexts[key] = {\n context: contextMap[key],\n deps: propObj.get(key).depProps\n };\n }\n return contexts;\n};\n\nconst registerPropInMaps = (store, props, namespaceInf, type) => {\n const {\n _registeredListeners: registeredListeners,\n _propListenerMap: propListenerMap\n } = store;\n const {\n subNamespace,\n namespace: ns\n } = namespaceInf;\n\n initProp(registeredListeners, [ns]);\n props.forEach((prop) => {\n const subNamespaces = defaultValue(getObjProp(registeredListeners, ns, prop, 'subNamespace'), []);\n let fns = defaultValue(getObjProp(propListenerMap, prop, type, 'fns'), 0);\n\n fns++;\n subNamespace && subNamespaces.push(subNamespace);\n registeredListeners[ns][prop] = {\n subNamespace: subNamespaces,\n allProps: props,\n subNamespaces: {}\n };\n initProp(propListenerMap, [prop, type]);\n propListenerMap[prop][type] = {\n fns,\n _fnCount: fns\n };\n });\n};\n\nconst registerListener = (context, type, ...options) => {\n const [propList, callBack, instantCall, namespaceInf = {}] = options;\n let props = propList;\n\n if (!Array.isArray(propList)) {\n props = [propList];\n }\n\n const { namespace: ns } = namespaceInf;\n const callbackFn = ((propNames, namespaceVal) => (...params) => {\n const { _savedCommits: commits, _propListenerMap: propListenerMap } = context;\n\n if (!propNames.some(prop => getObjProp(propListenerMap, prop, 'disabled'))) {\n if (namespaceVal) {\n const listenersObj = context._registeredListeners[namespaceVal];\n const contextMap = context._contextMap[namespaceVal];\n const contextsObj = {};\n\n propNames.forEach((prop) => {\n const commitsObj = defaultValue(getObjProp(commits, prop, type), {});\n const listeners = listenersObj[prop].subNamespaces;\n const propDeps = propListenerMap[prop][type];\n\n for (const nm in commitsObj) {\n const fnInf = defaultValue(propDeps[nm], { fns: 0 });\n let { fns } = fnInf;\n\n if (fns > 0) {\n setContexts(contextsObj, listeners[nm], contextMap);\n fns--;\n }\n\n if (fns <= 0) {\n delete commitsObj[nm];\n }\n fnInf.fns = fns;\n }\n });\n for (const key in contextsObj) {\n const obj = contextsObj[key];\n\n callBack(obj.context, ...fetchPropValues(propNames, params, obj.deps));\n }\n } else {\n callBack(...params);\n }\n }\n })(props, ns, type);\n\n const fn = context.model[type](props, callbackFn, instantCall);\n\n if (ns) {\n registerPropInMaps(context, props, namespaceInf, type);\n }\n addListenerToNamespace(namespaceInf, fn, context);\n};\n\nconst retrieveNamespaces = (names, key) => {\n if (names instanceof Object) {\n return [names[key]];\n } else if (names instanceof Array) {\n return names;\n }\n return [names];\n};\n\nconst createMap = () => new Map();\n\nconst listenerTypes = ['next', 'on'];\n\nconst removePropValue = (context, map, propInf) => {\n const { subNamespace: sns, prop, propListenerMap } = propInf;\n const propObj = propListenerMap[prop];\n\n listenerTypes.forEach((type) => {\n if (type in propObj) {\n delete propObj[type][sns];\n }\n });\n if (map.has(sns)) {\n const value = context.get(prop);\n\n if (value instanceof Object && sns in value) {\n delete value[sns];\n }\n map.delete(sns);\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 */\nexport class 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 = new Map();\n this._registeredListeners = {};\n this._contextMap = {};\n this._commits = {};\n this._savedCommits = {};\n this._queuedProps = {};\n this._propListenerMap = {};\n this._locked = false;\n }\n\n lockModel () {\n this.model.lock();\n this._locked = true;\n return this;\n }\n\n unlockModel () {\n this._locked = false;\n this.model.unlock();\n return this;\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 lockCommits (props) {\n props.forEach((prop) => {\n this._commits[prop] = {\n locked: true,\n queue: []\n };\n });\n return this;\n }\n\n unlockCommits (props) {\n const commitsObj = this._commits;\n\n this.lockModel();\n props.forEach((prop) => {\n commitsObj[prop].locked = false;\n const queuedProps = {};\n const { queue } = commitsObj[prop];\n\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n if (namespace) {\n const propObj = initProp(queuedProps, [propName, namespace]);\n\n Object.assign(propObj, value);\n }\n });\n queue.forEach((params) => {\n const [propName, value, namespace] = params;\n\n this.commit(propName, propName in queuedProps ? queuedProps[propName][namespace] : value,\n namespace);\n });\n delete commitsObj[prop];\n });\n this.unlockModel();\n return this;\n }\n\n addSubNamespace (sns, namespace, context) {\n // Get all the listeners registered by the component\n const listeners = this._registeredListeners[namespace];\n const propListenerMap = this._propListenerMap;\n\n initProp(this._contextMap, [namespace]);\n this._contextMap[namespace][sns] = context;\n for (const key in listeners) {\n const obj = listeners[key];\n const propObj = propListenerMap[key];\n const propFns = listenerTypes.reduce((acc, type) => {\n const val = defaultValue(getObjProp(propObj, type, 'fns'), 0);\n val && (acc[type] = val);\n return acc;\n }, {});\n const { allProps, subNamespaces, subNamespace } = obj;\n const snsArr = subNamespace.length ? subNamespace : [sns];\n\n snsArr.forEach((ns) => {\n const nsObj = ns instanceof Function ? ns(context) : ns;\n const names = retrieveNamespaces(nsObj, key);\n const depProps = allProps.reduce((acc, prop) => {\n acc[prop] = ns instanceof Function ? nsObj[prop] : ns;\n return acc;\n }, {});\n\n names.forEach((nm) => {\n initProp(subNamespaces, [nm], createMap).set(sns, {\n depProps\n });\n\n for (const type in propFns) {\n initProp(propObj, [type, nm]);\n const fns = propFns[type];\n\n propObj[type][nm] = {\n fns,\n _fnCount: fns\n };\n }\n });\n });\n }\n return this;\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, namespace, disableListener = false) {\n let sanitizedVal = value;\n const commits = this._commits;\n const savedCommits = this._savedCommits;\n const locked = getObjProp(commits, propName, 'locked');\n const propListenerMap = this._propListenerMap[propName] || {};\n\n propListenerMap.disabled = disableListener;\n\n if (locked) {\n commits[propName].queue.push([propName, value, namespace]);\n return this;\n }\n\n if (namespace) {\n if (this._locked) {\n const queuedProps = initProp(this._queuedProps, [propName]);\n queuedProps[namespace] = value;\n sanitizedVal = queuedProps;\n } else {\n sanitizedVal = defaultValue(this.get(propName), {});\n sanitizedVal[namespace] = value;\n }\n\n listenerTypes.forEach((type) => {\n initProp(savedCommits, [propName, type]);\n savedCommits[propName][type][namespace] = true;\n if (getObjProp(propListenerMap, type, namespace)) {\n propListenerMap[type][namespace].fns = propListenerMap[type][namespace]._fnCount;\n }\n });\n }\n\n this.model.prop(propName, sanitizedVal);\n return this;\n }\n\n /**\n * This method is used to register a callback 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 (...params) {\n registerListener(this, 'next', ...params);\n return this;\n }\n\n /**\n * This method is used to register a callback 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 (...params) {\n registerListener(this, 'on', ...params);\n }\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, subNamespace) {\n const value = this.model.prop(propName);\n return subNamespace ? value && value[subNamespace] : value;\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 append (...params) {\n this.model.append(...params);\n return this;\n }\n\n unsubscribeAll () {\n Object.values(this._listeners).forEach(fn => fn());\n return this;\n }\n\n unsubscribe (namespaceInf = {}) {\n const { id, key } = namespaceInf;\n const listenersMap = this._listeners;\n const listeners = listenersMap.get(id);\n\n if (key) {\n const fn = listenersMap.get(key);\n\n fn && fn();\n } else {\n for (const fn of listeners.values()) {\n fn();\n }\n listenersMap.set(id, []);\n }\n return this;\n }\n\n removeSubNamespace (subNamespace, namespace) {\n const {\n _registeredListeners: listenerMap,\n _contextMap: contextMap,\n _propListenerMap: propListenerMap\n } = this;\n const listenersObj = listenerMap[namespace];\n\n for (const prop in listenersObj) {\n const { subNamespaces } = listenersObj[prop];\n const propInf = {\n subNamespace,\n prop,\n propListenerMap\n };\n\n if (subNamespaces[subNamespace]) {\n removePropValue(this, subNamespaces[subNamespace], propInf);\n delete subNamespaces[subNamespace];\n } else {\n for (const ns in subNamespaces) {\n const snsMap = subNamespaces[ns];\n\n removePropValue(this, snsMap, propInf);\n if (!snsMap.size) {\n delete subNamespaces[ns];\n }\n }\n }\n }\n delete contextMap[namespace][subNamespace];\n return this;\n }\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}\n */\nexport const transactor = (holder, options, model, namespaceInf = {}) => {\n let conf;\n const store = model instanceof Store ? model : new Store({});\n const stateProps = {};\n const { namespace, subNamespace } = namespaceInf;\n\n for (const prop in options) {\n if ({}.hasOwnProperty.call(options, prop)) {\n conf = options[prop];\n const nameSpaceProp = namespace ? `${namespace}.${prop}` : prop;\n\n if (subNamespace) {\n const value = defaultValue(store.get(nameSpaceProp), {});\n value[subNamespace] = conf.value;\n stateProps[nameSpaceProp] = value;\n } else {\n stateProps[prop] = conf.value;\n }\n\n holder[prop] = ((context, meta, nsProp) => (...params) => {\n let val;\n let compareTo;\n const paramsLen = params.length;\n const prevVal = context.get(nsProp, subNamespace);\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] :\n 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.get(nsProp, subNamespace);\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.commit(nsProp, spreadParams ? values : values[0], subNamespace);\n } else {\n context.commit(nsProp, spreadParams ? val : val[0], subNamespace);\n }\n return holder;\n }\n // No parameters are passed hence its a getter\n return context.get(nsProp, subNamespace);\n })(store, conf.meta, nameSpaceProp, subNamespace);\n }\n }\n\n if (subNamespace) {\n for (const key in stateProps) {\n store.commit(key, stateProps[key][subNamespace], subNamespace);\n }\n } else if (namespace === undefined) {\n store.append(stateProps);\n } else {\n store.append(namespace, stateProps);\n }\n\n return [holder, store];\n};\n","var lib={init:function init(win){var doc=win.document,nav=win.navigator,userAgent=nav.userAgent,DIV=\"DIV\",ceil=Math.ceil,floor=Math.floor,clsNameSpace=\"fusioncharts-smartlabel-\",containerClass=clsNameSpace+\"container\",classNameWithTag=clsNameSpace+\"tag\",classNameWithTagBR=clsNameSpace+\"br\";lib={win:win,containerClass:containerClass,classNameWithTag:classNameWithTag,classNameWithTagBR:classNameWithTagBR,maxDefaultCacheLimit:1000,classNameReg:/\\bfusioncharts-smartlabel-tag\\b/,classNameBrReg:/\\bfusioncharts-smartlabel-br\\b/,spanAdditionRegx:/(<[^<\\>]+?\\>)|(&(?:[a-z]+|#[0-9]+);|.)/ig,spanAdditionReplacer:\"$1$2\",spanRemovalRegx:new RegExp(\"\\\\]+?\"+classNameWithTag+\"[^\\\\>]{0,}\\\\>(.*?)\\\\<\\\\/span\\\\>\",\"ig\"),xmlTagRegEx:new RegExp(\"<[^>][^<]*[^>]+>\",\"i\"),brRegex:new RegExp(\"({br[ ]*})|()|()|()|()\",\"g\"),ltgtRegex:/<|>/g,htmlSpecialEntityRegex:/&|"|<|>/g,brReplaceRegex://ig,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 childRetriverFn,childRetriverString,noClassTesting;if(doc.getElementsByClassName){childRetriverFn=\"getElementsByClassName\";childRetriverString=classNameWithTag;noClassTesting=true}else{childRetriverFn=\"getElementsByTagName\";childRetriverString=\"span\";noClassTesting=false}return{isIE:/msie/i.test(userAgent)&&!win.opera,hasSVG:Boolean(win.SVGAngle||doc.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\",\"1.1\")),isHeadLess:new RegExp(\" HtmlUnit\").test(userAgent),isWebKit:new RegExp(\" AppleWebKit/\").test(userAgent),childRetriverFn:childRetriverFn,childRetriverString:childRetriverString,noClassTesting:noClassTesting}},createContainer:function createContainer(containerParent){var body,container;if(containerParent&&(containerParent.offsetWidth||containerParent.offsetHeight)){if(containerParent.appendChild){containerParent.appendChild(container=doc.createElement(DIV));container.className=containerClass;container.setAttribute(\"aria-hidden\",\"true\");container.setAttribute(\"role\",\"presentation\");return container}}else{body=doc.getElementsByTagName(\"body\")[0];if(body&&body.appendChild){container=doc.createElement(DIV);container.className=containerClass;container.setAttribute(\"aria-hidden\",\"true\");container.setAttribute(\"role\",\"presentation\");body.appendChild(container);return container}}},getNearestBreakIndex:function getNearestBreakIndex(text,maxWidth,sl){if(!text||!text.length){return 0}var difference,getWidth=sl._getWidthFn(),charLen=0,increment=0,oriWidth=getWidth(text),avgWidth=oriWidth/text.length;difference=maxWidth;charLen=ceil(maxWidth/avgWidth);if(oriWidthtext.length){difference=maxWidth-oriWidth;charLen=text.length}while(difference>0){difference=maxWidth-getWidth(text.substr(0,charLen));increment=floor(difference/avgWidth);if(increment){charLen+=increment}else{return charLen}}while(difference<0){difference=maxWidth-getWidth(text.substr(0,charLen));increment=floor(difference/avgWidth);if(increment){charLen+=increment}else{return charLen}}return charLen},parseStyle:function parseStyle(){var style=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};var parsedStyle={};parsedStyle.fontSize=(style.fontSize||style[\"font-size\"]||\"12px\")+\"\";parsedStyle.fontVariant=style.fontVariant||style[\"font-variant\"]||\"normal\";parsedStyle.fontWeight=style.fontWeight||style[\"font-weight\"]||\"normal\";parsedStyle.fontStyle=style.fontStyle||style[\"font-style\"]||\"normal\";parsedStyle.fontFamily=style.fontFamily||style[\"font-family\"]||\"Verdana,sans\";return parsedStyle},setLineHeight:function setLineHeight(styleObj){var fSize=styleObj.fontSize;styleObj.lineHeight=styleObj.lineHeight||styleObj[\"line-height\"]||parseInt(fSize,10)*1.2+\"px\";return styleObj},_getCleanHeight:function _getCleanHeight(height){height=height.replace(/px/g,\"\");return Number(height)},_getDimentionUsingDiv:function _getDimentionUsingDiv(){var text=arguments.length>0&&arguments[0]!==undefined?arguments[0]:\"\";var sl=arguments.length>1?arguments[1]:undefined;var container=sl._container;if(text instanceof Array){text=text.join(\"\")}container.innerHTML=text;return{width:container.offsetWidth,height:container.offsetHeight}},_getDimentionUsingCanvas:function _getDimentionUsingCanvas(){var text=arguments.length>0&&arguments[0]!==undefined?arguments[0]:\"\";var sl=arguments.length>1?arguments[1]:undefined;var ctx=sl.ctx,style=sl.style,height=lib._getCleanHeight(style.lineHeight);if(!(text instanceof Array)){text=text.replace(/
/g,\"\")}else{text=text.join(\"\");text=text.replace(/
/g,\"\")}return{width:ctx.measureText(text).width,height:height}},_hasOnlyBRTag:function _hasOnlyBRTag(){var input=arguments.length>0&&arguments[0]!==undefined?arguments[0]:\"\";return!lib.xmlTagRegEx.test(input)&&lib.brRegex.test(input)},_getDimentionOfMultiLineText:function _getDimentionOfMultiLineText(){var rawText=arguments.length>0&&arguments[0]!==undefined?arguments[0]:\"\";var sl=arguments.length>1?arguments[1]:undefined;var i,len,text=rawText.replace(lib.brRegex,\"
\"),textAr=lib._getTextArray(text),width=0,maxWidth=0,getWidth=sl._getWidthFn(),height=lib._getCleanHeight(sl.style.lineHeight),textHeight=height,textWidth,indiSizeStore={};for(i=0,len=textAr.length;i\"){maxWidth=Math.max(maxWidth,width);width=0;textHeight+=height}else{textWidth=getWidth(textAr[i]);width+=textWidth;indiSizeStore[textAr[i]]=textWidth}}maxWidth=Math.max(maxWidth,width);return{height:textHeight,width:maxWidth,detailObj:indiSizeStore}},_getTextArray:function _getTextArray(){var text=arguments.length>0&&arguments[0]!==undefined?arguments[0]:\"\";var i,j,len,tempLen,brText,tempText,finaltextAr=[];brText=text.split(\"
\");len=brText.length;for(i=0;i\")}}return finaltextAr},_findLastIndex:function _findLastIndex(){var array=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var item=arguments.length>1?arguments[1]:undefined;var i,len=array.length;for(i=len-1;i>=0;i--){if(array[i]===item){return i}}return-1}};return lib}};export default lib;","import lib from\"./lib\";var slLib=lib.init(window),doc=slLib.win.document,documentSupport=slLib.getDocumentSupport(),SVG_BBOX_CORRECTION=documentSupport.isWebKit?0:4.5;function ContainerManager(parentContainer,isBrowserLess,maxContainers){var svg;maxContainers=maxContainers>5?maxContainers:5;maxContainers=maxContainers<20?maxContainers:20;this.maxContainers=maxContainers;this.first=null;this.last=null;this.containers={};this.length=0;this.rootNode=parentContainer;if(isBrowserLess){svg=doc.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");svg.setAttributeNS(\"http://www.w3.org/2000/svg\",\"xlink\",\"http://www.w3.org/1999/xlink\");svg.setAttributeNS(\"http://www.w3.org/2000/svg\",\"height\",\"0\");svg.setAttributeNS(\"http://www.w3.org/2000/svg\",\"width\",\"0\");this.svgRoot=svg;this.rootNode.appendChild(svg)}}ContainerManager.prototype.get=function(style){var diff,key,containerObj,containers=this.containers,len=this.length,max=this.maxContainers,keyStr=\"\";for(key in slLib.supportedStyle){if(style[key]!==undefined){keyStr+=slLib.supportedStyle[key]+\":\"+style[key]+\";\"}}if(!keyStr){return false}if(containerObj=containers[keyStr]){if(this.first!==containerObj){if(containerObj.prev){containerObj.prev.next=containerObj.next}if(containerObj.next){containerObj.next.prev=containerObj.prev}containerObj.next=this.first;containerObj.next.prev=containerObj;if(this.last===containerObj){this.last=containerObj.prev}containerObj.prev=null;this.first=containerObj}}else{if(len>=max){diff=len-max+1;while(diff--){this.removeContainer(this.last)}}containerObj=this.addContainer(keyStr)}return containerObj};ContainerManager.prototype._makeDivNode=function(container){var node,keyStr=container.keyStr;if(!container.node){container.node=doc.createElement(\"div\");container.node.className=\"fusioncharts-div\";this.rootNode.appendChild(container.node)}node=container.node;if(documentSupport.isIE&&!documentSupport.hasSVG){node.style.setAttribute(\"cssText\",keyStr)}else{node.setAttribute(\"style\",keyStr)}node.setAttribute(\"aria-hidden\",\"true\");node.setAttribute(\"role\",\"presentation\");node.style.display=\"inline-block\";node.innerHTML=slLib.testStrAvg;container.lineHeight=node.offsetHeight;container.avgCharWidth=node.offsetWidth/3;if(documentSupport.isBrowserLess){if(!container.svgText){container.svgText=doc.createElementNS(\"http://www.w3.org/2000/svg\",\"text\");this.svgRoot.appendChild(node)}node=container.svgText;node.setAttribute(\"style\",keyStr);node.textContent=slLib.testStrAvg;container.lineHeight=node.getBBox().height;container.avgCharWidth=(node.getBBox().width-SVG_BBOX_CORRECTION)/3;node.textContent=\"...\";container.ellipsesWidth=node.getBBox().width-SVG_BBOX_CORRECTION;node.textContent=\".\";container.dotWidth=node.getBBox().width-SVG_BBOX_CORRECTION}else{node.innerHTML=\"...\";container.ellipsesWidth=node.offsetWidth;node.innerHTML=\".\";container.dotWidth=node.offsetWidth;node.innerHTML=\"\"}};ContainerManager.prototype.addContainer=function(keyStr){var container;this.containers[keyStr]=container={next:null,prev:null,node:null,ellipsesWidth:0,lineHeight:0,dotWidth:0,avgCharWidth:4,keyStr:keyStr,charCache:{}};container.next=this.first;if(container.next){container.next.prev=container}this.first=container;if(!this.last){this.last=container}this.length+=1;return container};ContainerManager.prototype.removeContainer=function(cObj){var keyStr=cObj.keyStr;if(!keyStr||!this.length||!cObj){return}this.length-=1;if(cObj.prev){cObj.prev.next=cObj.next}if(cObj.next){cObj.next.prev=cObj.prev}if(this.first===cObj){this.first=cObj.next}if(this.last===cObj){this.last=cObj.prev}if(cObj.node){cObj.node.parentNode.removeChild(cObj.node)}delete this.containers[keyStr]};ContainerManager.prototype.dispose=function(){var key,containers=this.containers;this.maxContainers=null;for(key in containers){this.removeContainer(containers[key])}this.rootNode.parentNode.removeChild(this.rootNode);this.rootNode=null;this.first=null;this.last=null};export default ContainerManager;","import lib from\"./lib\";import ContainerManager from\"./container-manager\";var slLib=lib.init(window),doc=slLib.win.document,M=slLib.win.Math,max=M.max,round=M.round,htmlSplCharSpace={\" \":\" \"},documentSupport=slLib.getDocumentSupport(),SVG_BBOX_CORRECTION=documentSupport.isWebKit?0:4.5;function SmartLabelManager(container,useEllipses,options){var wrapper,prop,max,isBrowserLess=false,canvas=window.document.createElement(\"canvas\");options=options||{};options.maxCacheLimit=isFinite(max=options.maxCacheLimit)?max:slLib.maxDefaultCacheLimit;if(typeof container===\"string\"){container=doc.getElementById(container)}wrapper=slLib.createContainer(container);wrapper.innerHTML=slLib.testStrAvg;if(documentSupport.isHeadLess||!documentSupport.isIE&&!wrapper.offsetHeight&&!wrapper.offsetWidth){isBrowserLess=true}wrapper.innerHTML=\"\";for(prop in slLib.parentContainerStyle){wrapper.style[prop]=slLib.parentContainerStyle[prop]}this.parentContainer=wrapper;this.ctx=canvas&&canvas.getContext&&canvas.getContext(\"2d\");this._containerManager=new ContainerManager(wrapper,isBrowserLess,10);this._showNoEllipses=!useEllipses;this._init=true;this.style={};this.oldStyle={};this.options=options;this.setStyle()}SmartLabelManager.textToLines=function(smartlabel){smartlabel=smartlabel||{};if(!smartlabel.text){smartlabel.text=\"\"}else if(typeof smartlabel.text!==\"string\"){smartlabel.text=smartlabel.text.toString()}smartlabel.lines=smartlabel.text.split(/\\n|/ig);return smartlabel};SmartLabelManager.prototype._calCharDimWithCache=function(){var text=arguments.length>0&&arguments[0]!==undefined?arguments[0]:\"\";var calculateDifference=arguments.length>1?arguments[1]:undefined;var length=arguments.length>2?arguments[2]:undefined;if(!this._init){return false}var size,tw,twi,cachedStyle,asymmetricDifference,maxAdvancedCacheLimit=this.options.maxCacheLimit,style=this.style||{},cache,advancedCacheKey,cacheName,cacheInitName;cache=this._advancedCache=this._advancedCache||(this._advancedCache={});advancedCacheKey=this._advancedCacheKey||(this._advancedCacheKey=[]);cacheName=text+style.fontSize+style.fontFamily+style.fontWeight+style.fontStyle;cacheInitName=text+\"init\"+style.fontSize+style.fontFamily+style.fontWeight+style.fontStyle;if(!this.ctx&&htmlSplCharSpace[text]){text=htmlSplCharSpace[text]}if(!calculateDifference){asymmetricDifference=0}else{if((asymmetricDifference=cache[cacheInitName])===undefined){tw=this._getDimention(text.repeat?text.repeat(length):Array(length+1).join(text)).width;twi=this._getDimention(text).width;asymmetricDifference=cache[cacheInitName]=(tw-length*twi)/(length+1);advancedCacheKey.push(cacheInitName);if(advancedCacheKey.length>maxAdvancedCacheLimit){delete cache[advancedCacheKey.shift()]}}}if(cachedStyle=cache[cacheName]){return{width:cachedStyle.width,height:cachedStyle.height}}size=this._getDimention(text);size.width+=asymmetricDifference;cache[cacheName]={width:size.width,height:size.height};advancedCacheKey.push(cacheName);if(advancedCacheKey.length>maxAdvancedCacheLimit){delete cache[advancedCacheKey.shift()]}return size};SmartLabelManager.prototype._getDimention=function(text){if(this.requireDiv||!this.ctx){return slLib._getDimentionUsingDiv(text,this)}else{return slLib._getDimentionUsingCanvas(text,this)}};SmartLabelManager.prototype._getWidthFn=function(){var sl=this,contObj=sl._containerObj,svgText=contObj.svgText;if(svgText){return function(str){var bbox,width;svgText.textContent=str;bbox=svgText.getBBox();width=bbox.width-SVG_BBOX_CORRECTION;if(width<1){width=bbox.width}return width}}else{return function(str){if(sl.requireDiv||!sl.ctx){return slLib._getDimentionUsingDiv(str,sl).width}else{return slLib._getDimentionUsingCanvas(str,sl).width}}}};SmartLabelManager.prototype._isSameStyle=function(){var sl=this,oldStyle=sl.oldStyle||{},style=sl.style;if(style.fontSize!==oldStyle.fontSize||style.fontFamily!==oldStyle.fontFamily||style.fontStyle!==oldStyle.fontStyle||style.fontWeight!==oldStyle.fontWeight||style.fontVariant!==oldStyle.fontVariant){return false}return true};SmartLabelManager.prototype._setStyleOfCanvas=function(){if(this._isSameStyle()){return}var sl=this,style=sl.style,hashString,sCont,fontStyle=style.fontStyle,fontVariant=style.fontVariant,fontWeight=style.fontWeight,fontSize=style.fontSize,fontFamily=style.fontFamily;fontSize+=fontSize.indexOf(\"px\")===-1?\"px\":\"\";hashString=fontStyle+\" \"+fontVariant+\" \"+fontWeight+\" \"+fontSize+\" \"+fontFamily;sl.ctx.font=hashString;sCont=this._containerObj=this._containerManager.get(style);if(this._containerObj){this._container=sCont.node;this._context=sCont.context;this._cache=sCont.charCache;this._lineHeight=sCont.lineHeight;this._styleNotSet=false}else{this._styleNotSet=true}sCont.ellipsesWidth=sl._calCharDimWithCache(\"...\",false).width;sCont.dotWidth=sl._calCharDimWithCache(\".\",false).width;sCont.lineHeight=this._lineHeight=sCont.lineHeight||slLib._getCleanHeight(style.lineHeight);this.oldStyle=style};SmartLabelManager.prototype._setStyleOfDiv=function(){var sCont,style=this.style;this._containerObj=sCont=this._containerManager.get(style);if(!sCont.node){this._containerManager._makeDivNode(this._containerObj)}if(this._containerObj){this._container=sCont.node;this._context=sCont.context;this._cache=sCont.charCache;this._lineHeight=sCont.lineHeight;this._styleNotSet=false}else{this._styleNotSet=true}};SmartLabelManager.prototype._updateStyle=function(){return this.requireDiv||!this.ctx?this._setStyleOfDiv():this._setStyleOfCanvas()};SmartLabelManager.prototype.setStyle=function(style){this.style=slLib.parseStyle(style);slLib.setLineHeight(this.style);return this};SmartLabelManager.prototype.useEllipsesOnOverflow=function(useEllipses){if(!this._init){return this}this._showNoEllipses=!useEllipses;return this};SmartLabelManager.prototype.getSmartText=function(text,maxWidth,maxHeight,noWrap){if(!this._init){return false}if(text===undefined||text===null){text=\"\"}else if(typeof text!==\"string\"){text=text.toString()}var len,trimStr,tempArr,tmpText,maxWidthWithEll,toolText,oriWidth,oriHeight,newCharIndex,nearestChar,tempChar,getWidth,initialLeft,initialTop,getOriSizeImproveObj,spanArr,x,y,minWidth,elem,chr,elemRightMostPoint,elemLowestPoint,lastBR,removeFromIndex,removeFromIndexForEllipses,hasHTMLTag=false,maxStrWidth=0,lastDash=-1,lastSpace=-1,lastIndexBroken=-1,strWidth=0,strHeight=0,oriTextArr=[],i=0,ellipsesStr=this._showNoEllipses?\"\":\"...\",lineHeight,context,container,sCont,ellipsesWidth,dotWidth,canvas=this.ctx,characterArr=[],dashIndex=-1,spaceIndex=-1,lastLineBreak=-1,hasOnlyBrTag,dimentionObj,fastTrim=function fastTrim(str){str=str.replace(/^\\s\\s*/,\"\");var ws=/\\s/,i=str.length;while(ws.test(str.charAt(i-=1))){}return str.slice(0,i+1)},smartLabel={text:text,maxWidth:maxWidth,maxHeight:maxHeight,width:null,height:null,oriTextWidth:null,oriTextHeight:null,oriText:text,isTruncated:false};hasHTMLTag=slLib.xmlTagRegEx.test(text);hasOnlyBrTag=slLib._hasOnlyBRTag(text);this.requireDiv=hasHTMLTag&&!hasOnlyBrTag;this._updateStyle();lineHeight=this._lineHeight;context=this._context;container=this._container;sCont=this._containerObj;ellipsesWidth=sCont.ellipsesWidth;dotWidth=sCont.dotWidth;toolText=text.replace(slLib.spanAdditionRegx,\"$2\");getWidth=this._getWidthFn();if(lineHeight-maxHeight<=1&&lineHeight-maxHeight>=0){maxHeight*=1.2}if(canvas||container){if(!documentSupport.isBrowserLess){if(!hasHTMLTag){tmpText=text=text.replace(slLib.ltgtRegex,function(match){return match===\"<\"?\"<\":\">\"});getOriSizeImproveObj=this.getOriSize(tmpText,true,{hasHTMLTag:hasHTMLTag,hasOnlyBrTag:hasOnlyBrTag,cleanText:true});smartLabel.oriTextWidth=oriWidth=getOriSizeImproveObj.width;smartLabel.oriTextHeight=oriHeight=getOriSizeImproveObj.height}else if(hasOnlyBrTag){text=text.replace(slLib.brRegex,\"
\");dimentionObj=slLib._getDimentionOfMultiLineText(text,this);smartLabel.oriTextWidth=oriWidth=dimentionObj.width;smartLabel.oriTextHeight=oriHeight=dimentionObj.height}else{container.innerHTML=text;smartLabel.oriTextWidth=oriWidth=container.offsetWidth;smartLabel.oriTextHeight=oriHeight=container.offsetHeight}if(oriHeight<=maxHeight&&oriWidth<=maxWidth){smartLabel.width=smartLabel.oriTextWidth=oriWidth;smartLabel.height=smartLabel.oriTextHeight=oriHeight;return smartLabel}if(lineHeight>maxHeight){smartLabel.text=\"\";smartLabel.width=smartLabel.oriTextWidth=0;smartLabel.height=smartLabel.oriTextHeight=0;return smartLabel}}text=fastTrim(text).replace(/(\\s+)/g,\" \");maxWidthWithEll=this._showNoEllipses?maxWidth:maxWidth-ellipsesWidth;if(!hasHTMLTag||hasOnlyBrTag){oriTextArr=slLib._getTextArray(text);len=oriTextArr.length;trimStr=\"\";tempArr=[];tempChar=oriTextArr[0];if(this._cache[tempChar]){minWidth=this._cache[tempChar].width}else{minWidth=getWidth(tempChar);this._cache[tempChar]={width:minWidth}}if(maxWidthWithEll>minWidth&&!hasOnlyBrTag){tempArr=text.substr(0,slLib.getNearestBreakIndex(text,maxWidthWithEll,this)).split(\"\")}else if(minWidth>maxWidth){smartLabel.text=\"\";smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0;return smartLabel}else if(ellipsesStr){maxWidthWithEll=maxWidth-2*dotWidth;if(maxWidthWithEll>minWidth){ellipsesStr=\"..\"}else{maxWidthWithEll=maxWidth-dotWidth;if(maxWidthWithEll>minWidth){ellipsesStr=\".\"}else{maxWidthWithEll=0;ellipsesStr=\"\"}}}i=tempArr.length;strWidth=getWidth(tempArr.join(\"\"));strHeight=this._lineHeight;if(noWrap){for(;i\"){strHeight+=this._lineHeight;lastIndexBroken=i;maxStrWidth=max(maxStrWidth,strWidth);strWidth=0;trimStr=null;continue}if(this._cache[tempChar]){minWidth=this._cache[tempChar].width}else{if(!getOriSizeImproveObj||!(minWidth=getOriSizeImproveObj.detailObj[tempChar])){minWidth=getWidth(tempChar)}this._cache[tempChar]={width:minWidth}}strWidth+=minWidth;if(strWidth>maxWidthWithEll){if(!trimStr){trimStr=tempArr.slice(0,-1).join(\"\")}if(strWidth>maxWidth){smartLabel.text=fastTrim(trimStr)+ellipsesStr;smartLabel.tooltext=smartLabel.oriText;smartLabel.width=max(maxStrWidth,strWidth);smartLabel.height=strHeight;return smartLabel}}}smartLabel.text=tempArr.join(\"\");smartLabel.width=max(maxStrWidth,strWidth);smartLabel.height=strHeight;return smartLabel}else{for(;i\"){maxStrWidth=max(maxStrWidth,strWidth);strHeight+=this._lineHeight;if(strHeight<=maxHeight){lastIndexBroken=i;strWidth=0;trimStr=null;continue}else if(strHeight>maxHeight){trimStr=tempArr.slice(0,-1).join(\"\");smartLabel.text=fastTrim(trimStr)+ellipsesStr;smartLabel.tooltext=toolText;smartLabel.width=maxStrWidth;smartLabel.height=strHeight-this._lineHeight;return smartLabel}}if(this._cache[tempChar]){minWidth=this._cache[tempChar].width}else{if(!getOriSizeImproveObj||!(minWidth=getOriSizeImproveObj.detailObj[tempChar])){minWidth=getWidth(tempChar)}this._cache[tempChar]={width:minWidth}}strWidth+=minWidth;if(strWidth>maxWidthWithEll){if(!trimStr){trimStr=tempArr.slice(0,-1).join(\"\")}if(strWidth>maxWidth){if(oriTextArr[i+1]===\"
\"){continue}lastSpace=slLib._findLastIndex(oriTextArr.slice(0,tempArr.length),\" \");lastDash=slLib._findLastIndex(oriTextArr.slice(0,tempArr.length),\"-\");if(lastSpace>lastIndexBroken){strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join(\"\"));tempArr.splice(lastSpace,1,\"
\");lastIndexBroken=lastSpace;newCharIndex=lastSpace+1}else if(lastDash>lastIndexBroken){if(lastDash===tempArr.length-1){strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join(\"\"));tempArr.splice(lastDash,1,\"
-\")}else{strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastSpace).join(\"\"));tempArr.splice(lastDash,1,\"-
\")}lastIndexBroken=lastDash;newCharIndex=lastDash+1}else{tempArr.splice(tempArr.length-1,1,\"
\"+oriTextArr[i]);lastLineBreak=tempArr.length-2;strWidth=getWidth(tempArr.slice(lastIndexBroken+1,lastLineBreak+1).join(\"\"));lastIndexBroken=lastLineBreak;newCharIndex=i}strHeight+=this._lineHeight;if(strHeight>maxHeight){smartLabel.text=fastTrim(trimStr)+ellipsesStr;smartLabel.tooltext=smartLabel.oriText;smartLabel.width=maxWidth;smartLabel.height=strHeight-this._lineHeight;return smartLabel}else{maxStrWidth=max(maxStrWidth,strWidth);trimStr=null;if(!hasOnlyBrTag){nearestChar=slLib.getNearestBreakIndex(text.substr(newCharIndex),maxWidthWithEll,this);strWidth=getWidth(text.substr(newCharIndex,nearestChar||1));if(tempArr.length)/g,\"$1\");container.innerHTML=text;spanArr=container[documentSupport.childRetriverFn](documentSupport.childRetriverString);for(x=0,y=spanArr.length;xmaxWidth||!len){smartLabel.text=\"\";smartLabel.width=smartLabel.oriTextWidth=smartLabel.height=smartLabel.oriTextHeight=0;return smartLabel}else if(minWidth>maxWidthWithEll&&!this._showNoEllipses){maxWidthWithEll=maxWidth-2*dotWidth;if(maxWidthWithEll>minWidth){ellipsesStr=\"..\"}else{maxWidthWithEll=maxWidth-dotWidth;if(maxWidthWithEll>minWidth){ellipsesStr=\".\"}else{maxWidthWithEll=0;ellipsesStr=\"\"}}}initialLeft=characterArr[0].elem.offsetLeft;initialTop=characterArr[0].elem.offsetTop;if(noWrap){for(;imaxWidthWithEll){if(!removeFromIndexForEllipses){removeFromIndexForEllipses=i}if(container.offsetWidth>maxWidth){removeFromIndex=i;i=len}}}}else{for(;imaxWidthWithEll){if(!removeFromIndexForEllipses){removeFromIndexForEllipses=i}if(elemRightMostPoint>maxWidth){lastSpace=characterArr[i].spaceIdx;lastDash=characterArr[i].dashIdx;if(lastSpace>lastIndexBroken){characterArr[lastSpace].elem.innerHTML=\"
\";lastIndexBroken=lastSpace}else if(lastDash>lastIndexBroken){if(lastDash===i){characterArr[lastDash].elem.innerHTML=\"
-\"}else{characterArr[lastDash].elem.innerHTML=\"-
\"}lastIndexBroken=lastDash}else{elem.parentNode.insertBefore(lastBR=doc.createElement(\"br\"),elem)}if(elem.offsetHeight+elem.offsetTop>maxHeight){if(lastBR){lastBR.parentNode.removeChild(lastBR)}else if(lastIndexBroken===lastDash){characterArr[lastDash].elem.innerHTML=\"-\"}else{characterArr[lastSpace].elem.innerHTML=\" \"}removeFromIndex=i;i=len}else{removeFromIndexForEllipses=null}}}else{if(elemLowestPoint>maxHeight){removeFromIndex=i;i=len}}}}if(removeFromIndex=removeFromIndexForEllipses;i-=1){elem=characterArr[i].elem;elem.parentNode.removeChild(elem)}for(;i>=0;i-=1){elem=characterArr[i].elem;if(slLib.classNameBrReg.test(elem.className)){elem.parentNode.removeChild(elem)}else{i=0}}}smartLabel.text=container.innerHTML.replace(slLib.spanRemovalRegx,\"$1\").replace(/\\&\\;/g,\"&\");if(smartLabel.isTruncated){smartLabel.text+=ellipsesStr;smartLabel.tooltext=toolText}}smartLabel.height=container.offsetHeight;smartLabel.width=container.offsetWidth;return smartLabel}else{smartLabel.error=new Error(\"Body Tag Missing!\");return smartLabel}};SmartLabelManager.prototype.getOriSize=function(){var text=arguments.length>0&&arguments[0]!==undefined?arguments[0]:\"\";var detailedCalculationFlag=arguments.length>1&&arguments[1]!==undefined?arguments[1]:true;var config=arguments.length>2&&arguments[2]!==undefined?arguments[2]:{};if(!this._init){return false}if(text===undefined||text===null){text=\"\"}else if(typeof text!==\"string\"){text=text.toString()}var textArr,letter,lSize,i,l,cumulativeSize=0,height=0,container,indiSizeStore={},hasHTMLTag=config.hasHTMLTag,hasOnlyBrTag=config.hasOnlyBrTag;if(typeof hasHTMLTag===\"undefined\"){hasHTMLTag=slLib.xmlTagRegEx.test(text)}if(typeof hasOnlyBrTag===\"undefined\"){hasOnlyBrTag=slLib._hasOnlyBRTag(text)}this.requireDiv=hasHTMLTag&&!hasOnlyBrTag;if(!config.cleanText){text=text.replace(slLib.ltgtRegex,function(match){return match===\"<\"?\"<\":\">\"})}this._updateStyle();container=this._container;if(hasOnlyBrTag){return slLib._getDimentionOfMultiLineText(text,this)}if(!detailedCalculationFlag){return this._calCharDimWithCache(text)}if(hasHTMLTag){container.innerHTML=text;return{width:container.offsetWidth,height:container.offsetHeight}}textArr=text.split(\"\");for(i=0,l=textArr.length;i {\n events.forEach((event) => {\n EVENT_LIST.push(`${composition}.${event}`);\n });\n});\n\nexport default EVENT_LIST;\n","import EVENT_LIST from './event-list';\nimport { createPromise } from './helper';\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] = resolver(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 const promise = this._makeNotifierPromise(eventName);\n this._promises.set(eventName, promise);\n createPromise(promise, eventName, this);\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","/**\n * Creates a new promise when the given promise is resolved. This needs to be done so that after the lifecycle event\n * is completed, then again when the event gets completed, then a new promise gets resolved.\n *\n * @param {Promise} promise Instance of promise\n * @param {string} eventName name of event\n * @param {LifeCycleManager} context Instance of lifecyclemanager\n */\nexport const createPromise = (promise, eventName, context) => {\n promise.then(() => {\n const prm = context._makeNotifierPromise(eventName);\n context._promises.set(eventName, prm);\n createPromise(prm, eventName, context);\n });\n};\n","import { default as DataModel } from 'datamodel';\nimport * as scales from './scales';\nimport * as colorSchemes from './color-schemes';\nimport * as STATE_NAMESPACES from './enums/namespace';\n\nconst InvalidAwareTypes = DataModel.InvalidAwareTypes;\n\nexport {\n InvalidAwareTypes,\n DataModel\n};\n\nexport {\n ReservedFields,\n CommonProps,\n COORD_TYPES\n} from './enums';\n\nexport { STATE_NAMESPACES };\n\nexport {\n scales,\n colorSchemes\n};\n\nexport {\n getNearestValue,\n getValueParser,\n transformColors,\n detectColor,\n hslToRgb,\n rgbToHsv,\n hexToHsv,\n hsvToRgb,\n escapeHTML,\n angleToRadian,\n generateGetterSetters,\n getArraySum,\n ERROR_MSG,\n interpolator,\n colorInterpolator,\n numberInterpolator,\n piecewiseInterpolator,\n reqAnimFrame,\n cancelAnimFrame,\n nextAnimFrame,\n getMax,\n getMin,\n getDomainFromData,\n getUniqueId,\n mergeRecursive,\n unionDomain,\n replaceCSSPrefix,\n symbolFns,\n defaultValue,\n easeFns,\n clone,\n interpolateArray,\n getMinPoint,\n getMaxPoint,\n getClosestIndexOf,\n registerListeners,\n Voronoi,\n checkExistence,\n sanitizeIP,\n getMinDiff,\n capitalizeFirst,\n getWindow,\n getQualifiedClassName,\n getDependencyOrder,\n objectIterator,\n intSanitizer,\n enableChainedTransaction,\n isHTMLElem,\n isEqual,\n isSimpleObject,\n nextFrame,\n getObjProp,\n getDataModelFromIdentifiers,\n getDataModelFromRange,\n transposeArray,\n toArray,\n extendsClass,\n concatModels,\n assembleModelFromIdentifiers,\n isValidValue,\n nestCollection,\n stack,\n getSymbol,\n Scales,\n Symbols,\n pathInterpolators,\n hslInterpolator,\n getSmallestDiff,\n require,\n formatTemporal,\n nearestSortingDetails,\n createSelection,\n temporalFields,\n retrieveNearestGroupByReducers,\n retrieveFieldDisplayName,\n sanitizeDomainWhenEqual,\n sortCategoricalField,\n intersect\n} from './common-utils';\n\nexport {\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 hasTouch\n} from './renderer-utils';\n\nexport {\n Store,\n transactor\n} from './store';\n\nexport {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'd3-time';\n\nexport { default as Smartlabel } from 'fusioncharts-smartlabel';\nexport { dataSelect } from './DataSystem';\n\nexport { default as LifeCycleManager } from './lifecycle-manager';\n\nexport {\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n DateTimeFormatter,\n DM_DERIVATIVES,\n GROUP_BY_FUNCTIONS\n} from 'datamodel';\n\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 SelectionSet from './selection-set';\n\nexport default SelectionSet;\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. This keeps\n * information of which rows are in previous and new entry set and previous and new exit set. This is initialized by\n * {@link Firebolt}.\n *\n * @public\n *\n * @class SelectionSet\n */\nclass SelectionSet {\n /**\n * Creates an instance of selection set\n *\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. This also moves the other rows to exit set.\n *\n * @public\n * @param {Array.} ids Array of unique ids.\n *\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 an array of ids to the old entry set.\n *\n * @param {Array.} ids Array of unique ids\n *\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 * Moves all ids which in new entry set to old entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\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 * Moves an array of ids which are in new exit set to old exit set.\n *\n * @public\n *\n * @param {Array.} ids Array of unique ids.\n *\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 an array of ids from the selection set. It also moves the remaining row ids to entry set.\n *\n * @public\n * @param {Array.} ids Array of unique ids\n *\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 an array of ids in the selection set to initial state. It sets the value of every unique id value to\n * null in the selection set which means they are neither in entry set nor in exit set. If no ids are passed,\n * then it resets all the ids to null.\n *\n * @public\n *\n * @param {Array} ids Array of unique ids.\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 *\n * @public\n *\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 *\n * @public\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 /**\n * Returns a set of unique ids which are already present in exit set.\n *\n * @public\n * @param {Array} addSet Array of unique ids which are added\n *\n * @return {Array} Array of unique ids which are already in old exit set or new exit set\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 array of ids which are in the exit set.\n *\n * @public\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 /**\n * Gets all the ids which are either in exit or entry set.\n *\n * @public\n * @return {Array} Array of unique ids\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, retrieveNearestGroupByReducers } from 'muze-utils';\nimport * as SELECTION from '../enums/selection';\n\nexport const initializeSideEffects = (context, sideEffects) => {\n const sideEffectsMap = context._sideEffects;\n sideEffects = sideEffects instanceof Array ? sideEffects : Object.values(sideEffects);\n sideEffects.forEach((SideEffect) => {\n const formalName = SideEffect.formalName();\n const sideEffectInstance = sideEffectsMap[formalName];\n sideEffectsMap[formalName] = sideEffectInstance || new SideEffect(context);\n });\n return sideEffectsMap;\n};\n\nexport const setSideEffectConfig = (sideEffects, config) => {\n for (const key in sideEffects) {\n const sideEffect = sideEffects[key];\n const formalName = sideEffect.constructor.formalName();\n const sideEffectConf = config[formalName];\n\n sideEffectConf && sideEffect.config(sideEffectConf);\n }\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 mergedEnter: [SELECTION.SELECTION_NEW_ENTRY, SELECTION.SELECTION_OLD_ENTRY],\n mergedExit: [SELECTION.SELECTION_NEW_EXIT, SELECTION.SELECTION_OLD_EXIT],\n complete: []\n};\n\nexport const getModelFromSet = (type, model, set) => {\n const conditions = conditionsMap[type];\n if (model && conditions) {\n return model.select((fields, i) =>\n (conditions.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 if (type === 'mergedEnter') {\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 let aggFns = retrieveNearestGroupByReducers(model);\n if (!existingModel) {\n existingModel = models[type] = model;\n } else if (`${model.getSchema().map(d => d.name).sort()}` ===\n `${existingModel.getSchema().map(d => d.name).sort()}`) {\n aggFns = Object.assign({}, retrieveNearestGroupByReducers(existingModel));\n existingModel = models[type] = model.union(existingModel);\n } else {\n existingModel = model;\n }\n combinedSet[type].model = existingModel;\n combinedSet[type].aggFns = aggFns;\n });\n }\n });\n return combinedSet;\n};\n","import {\n mergeRecursive,\n hasTouch,\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 setSideEffectConfig\n} from './helper';\n\n/**\n * This class is responsible for dispatching behavioural actions and side effects. It also keeps the information of\n * registered physical actions, behavioural actions and side effects. Also, it keeps the map of physical and behavioural\n * actions and behavioural actions and side effects. Whenever any behavioural action is dispatched, it also propagates\n * the rows which got affected to the other datamodels. This class is initialized by {@link VisualUnit} and legend to\n * manage it's interaction.\n *\n * @public\n * @class Firebolt\n * @module Firebolt\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 this._propagationBehaviourMap = {};\n this._sourceBehaviours = {};\n this._actionBehaviourMap = {};\n this._config = {};\n this._behaviourEffectMap = {};\n this._entryExitSet = {};\n this._actionHistory = {};\n this._queuedSideEffects = {};\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 this._config = mergeRecursive(this._config, config[0]);\n setSideEffectConfig(this.sideEffects(), this._config);\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 this.initializeSideEffects();\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, key = 'default') {\n const behaviourConditions = this._sourceBehaviours[behaviour] || (this._sourceBehaviours[behaviour] = {});\n if (value instanceof Function) {\n behaviourConditions[key] = value;\n } else {\n behaviourConditions[key] = () => value;\n }\n return this;\n }\n\n changeSideEffectStateOnPropagation (sideEffect, value, key = 'default') {\n const sideEffectConditions = this._sourceSideEffects[sideEffect] || (this._sourceSideEffects[sideEffect] = {});\n if (value instanceof Function) {\n sideEffectConditions[key] = value;\n } else {\n sideEffectConditions[key] = () => value;\n }\n }\n\n removeSideEffectPolicy (sideEffect, key) {\n delete this._sourceSideEffects[sideEffect][key];\n return this;\n }\n\n removeBehaviourPolicy (behaviour, key) {\n delete this._sourceBehaviours[behaviour][key];\n return this;\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 this.mapActionsAndBehaviour(key);\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 this._entryExitSet[key] = null;\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 /**\n * Allows to propagate the datamodel with only the supplied fields. When propagation is done, then the fields\n * which are supplied for the specified behavioural action is propagated.\n *\n * @public\n *\n * @param {string} action Name of behavioural action. If '*' is specified, then for all behavioural actions it is\n * applied.\n * @param {Array} fields Array of field names which will be propagated.\n * @param {boolean} append If true, then it is appended to the existing propagation data model fields else only\n * those fields are projected from propagation data model and propagated.\n *\n * @return {Firebolt} Instance of firebolt\n */\n propagateWith (action, fields, append = false) {\n const behaviouralActions = this._actions.behavioural;\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\n /**\n * Map actions and behaviours\n * @return {Firebolt} Firebolt instance\n */\n mapActionsAndBehaviour (phyAction) {\n const initedPhysicalActions = this._actions.physical;\n const map = this._actionBehaviourMap;\n\n for (const action in map) {\n if (!({}).hasOwnProperty.call(action, map) && action === (phyAction || action)) {\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 bind && this.bindActionWithBehaviour(initedPhysicalActions[action],\n target, mapObj.behaviours);\n }\n }\n return this;\n }\n\n registerPhysicalBehaviouralMap (map) {\n this._actionBehaviourMap = mergeRecursive(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 (!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 return {\n model: filteredDataModel,\n uids: criteria === null ? null : (propagationInf.data ? propagationInf.entryRowIds :\n filteredDataModel[0].getUids())\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 /**\n * Returns the entry and exit set information of the specified behavioural action.\n *\n * @public\n *\n * @param {string} behaviour Name of behavioural action.\n *\n * @return {Object} Entry exit set information.\n */\n getEntryExitSet (behaviour) {\n return this._entryExitSet[behaviour];\n }\n}\n","import { getSetInfo, getMergedSet, getSourceFields } from '../../helper';\n\n/**\n * This is the base class has all the common functionalities needed for all behavioural actions. Any other behavioural\n * action needs to extend this class.\n *\n * @public\n * @class GenericBehaviour\n * @module GenericBehaviour\n */\nexport default class GenericBehaviour {\n constructor (firebolt) {\n this.firebolt = firebolt;\n this._enabled = true;\n }\n\n /**\n * Returns entry and exit set information. This method is called by firebolt when ```dispatchBehaviour``` is called\n * dynamically or when any physical action is triggered on the chart.\n *\n * @param {Object} payload Payload information.\n * @param {Object|Array} payload.criteria Identifiers of data interacted with.\n *\n * @return {Array} Entry and exit set information.\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 /**\n * Updates the selection set by adding uids to the instance of {@link SelectionSet} or removing them.\n * {@link SelectionSet} keeps the information of which rows are in the entry set and exit set.\n *\n * @public\n * @param {Array} addSet Array of row ids which got affected during interaction.\n * @param {SelectionSet} selectionSet Instance of selection set.\n *\n * @return {GenericBehaviour} Instance of behaviour.\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 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 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, MeasureSubtype } 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;\n const yFieldType = fieldsConfig[yField].def.subtype;\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 === MeasureSubtype.CONTINUOUS ? (yFieldType === MeasureSubtype.CONTINUOUS ?\n ['x', 'y'] : ['y']) : ['x'];\n const criteria = {};\n const isXDimension = xFieldType === DimensionSubtype.CATEGORICAL;\n const isYDimension = yFieldType === DimensionSubtype.CATEGORICAL;\n const xRange = xAxis.invertExtent(stPos.x, endPos.x);\n const yRange = yAxis.invertExtent(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","const ANCHORS = 'anchors';\nconst TOOLTIP = 'tooltip';\nconst BRUSH_ANCHORS = 'brush-anchors';\nconst PERSISTENT_ANCHORS = 'persistent-anchors';\nconst FILTER = 'filter';\nconst HIGHLIGHTER = 'highlighter';\nconst CROSSLINE = 'crossline';\n\nexport {\n ANCHORS,\n BRUSH_ANCHORS,\n PERSISTENT_ANCHORS,\n FILTER,\n HIGHLIGHTER,\n CROSSLINE,\n TOOLTIP\n};\n","export const PROPS = {\n valueParser: {\n defaultValue: val => val\n }\n};\n","import GenericSideEffect from './generic-sideeffect';\n\nexport default GenericSideEffect;\n","import { mergeRecursive, getUniqueId, generateGetterSetters } from 'muze-utils';\nimport { PROPS } from './props';\n\n/**\n * This is the base class of all side effects. It contains all common methods like setting configuration, disabling,\n * enabling side effect, etc. Every new side effect has to inherit this class or {@link SpawnableSideEffect} or\n * {@link SurrogateSideEffect} class. All side effects are initialized by firebolt. The instance of firebolt is\n * passed on initialization. The firebolt instance contains ```context``` which is the instance of visual unit with\n * which the firebolt is attached.\n *\n * @public\n * @class\n * @module GenericSideEffect\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 generateGetterSetters(this, PROPS);\n this.config(this.constructor.defaultConfig());\n }\n\n /**\n * Returns the default configuration of the side effect.\n *\n * @public\n * @return {Object} Default configuration of side effect.\n */\n static defaultConfig () {\n return {};\n }\n\n /**\n * Returns the formal name of a side effect. This method must be implemented by all side effects which changes\n * or adds any element in the visualization.\n *\n * @return {string} Formal name of side effect.\n */\n static formalName () {\n return 'generic';\n }\n\n static target () {\n return 'all';\n }\n\n /**\n * Returns true if the side effects mutates the data of chart.\n *\n * @public\n *\n * @return {boolean} If the side effect mutates the data of chart.\n */\n static mutates () {\n return false;\n }\n\n /**\n * Sets or gets the configuration of side effect.\n *\n * When setter,\n * @param {Object} config Configuration of side effect.\n * @return {GenericSideEffect} Side effect instance.\n *\n * When getter,\n * @return {Object} Side effect configuration.\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 /**\n * Applies the interaction effect on the chart. This is where the implemntation of the side effect is defined.\n *\n * @param {Object} selectionSet Contains the entry and exit set of data which got affected during interaction.\n * @param {Object} selectionSet.mergedEnter Combined previous entry and new entry set.\n * @param {DataModel} selectionSet.mergedEnter.model Instance of data model containing all rows which got\n * affected during interaction.\n * @param {Array} selectionSet.mergedEnter.uids Ids of all rows which were affected during interaction.\n * @param {Object} selectionSet.mergedExit Combined previous exit and new exit set.\n * @param {DataModel} selectionSet.mergedExit.model Instance of data model containing rows which were not affected\n * during interaction.\n * @param {Array} selectionSet.mergedExit.uids Ids of all rows which were not affected during interaction.\n * @param {Object} selectionSet.entrySet Entry set information.\n * @param {Array} selectionSet.entrySet[0].uids All row ids which got affected during previous interaction.\n * @param {Array} selectionSet.entrySet[1].uids All row ids which got affected during current interaction.\n * @param {Array} selectionSet.exitSet[0].uids All row ids which were not affected during previous interaction.\n * @param {Array} selectionSet.exitSet[1].uids All row ids which were not affected during current interaction.\n * @param {Object} payload Payload information of the behavioural action on trigger of which this side effect\n * is applied.\n * @param {Object} options Optional information for side effect like strategy, etc.\n */\n apply () {\n return this;\n }\n\n /**\n * Adds a new strategy method for this side effect. The strategy method is implemented by side effect class.\n *\n * @param {string} name Name of the strategy.\n * @param {Function} fn Strategy method.\n *\n * @return {GenericSideEffect} Instance of side effect.\n */\n setStrategy (name, fn) {\n if (fn) {\n this._strategies[name] = fn;\n }\n return this;\n }\n}\n","import GenericSideEffect from './generic';\n\n/**\n * This class is inherited by all side effects which changes the look of any existing elements in the visualization.\n * For example, if a side effect wants to change the color of bar plots, then it is a surrogate side effect.\n *\n * To use this,\n * ```\n * const SurrogateSideEffect = muze.SideEffects.standards.SurrogateSideEffect;\n *\n * class BarColorChanger extends SurrogateSideEffect {\n * static formalName () {\n * return 'colorChanger';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n *\n * @module SurrogateSideEffect\n * @class\n * @extends GenericSideEffect\n */\nexport default class SurrogateSideEffect extends GenericSideEffect {\n /**\n * Applies or removes interaction styles from plot elements. An array of row ids needs to be passed\n * which identifies the plot elements and applies styles to them.\n *\n * To apply the interaction style,\n * ```\n * const entryRowIds = entrySet[0].uids;\n * const interactionStyle = [{\n * type: 'fill',\n * intensity: [0, 0, 15, 0] // hsla configuration\n * }];\n *\n * this.applyInteractionStyle(entryRowIds, interactionStyle, 'brighten', true);\n * ```\n * @public\n * @param {Array} set Array of row ids.\n * @param {Array} config Style configuration.\n * @param {Object} config[0] fill or stroke configuration.\n * @param {string} config[0].type Type of style - fill or stroke.\n * @param {Array} config[0].intensity hsla configuration.\n * @param {string} interactionType Type of interaction. This is needed for storing the styles for\n * each type of interaction in the plot elements.\n * @param {boolean} apply Whether to apply or remove the interaction style.\n *\n * @return {SurrogateSideEffect} Instance of surrogate side effect.\n */\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 return this;\n }\n}\n","import { makeElement } from 'muze-utils';\n\nimport GenericSideEffect from './generic';\n\n/**\n * Any side effect which will add any new element to the chart like drawing a rectangular box or any annotation over\n * the chart needs to inherit this class. This class has methods which returns the container where the dom elements\n * needs to be created.\n *\n * To use this,\n * ```\n * const SpawnableSideEffect = muze.SideEffects.standards.SpawnableSideEffect;\n *\n * class SelectionBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'selectionBox';\n * }\n *\n * // Implement the logic of applying the style here.\n * apply () {\n * }\n * }\n * ```\n * @public\n * @class\n * @extends GenericSideEffect\n * @module SpawnableSideEffect\n */\nexport default class SpawnableSideEffect extends GenericSideEffect {\n /**\n * Creates a html or svg element in the container.\n *\n * @public\n * @param {SVGElement|HTMLElement} container Container where the dom element will be rendered.\n * @param {string} elemType Type of dom element.\n * @param {Array} data Array of objects with which the dom elements will be binded.\n * @param {string} className class name of the element.\n *\n * @return {Selection} D3 Selection of the element.\n */\n createElement (container, elemType, data, className, callbacks) {\n return makeElement(container, elemType, data, className, callbacks);\n }\n\n /**\n * Returns the drawing information for side effect like svg container, dimensions of the visual unit.\n *\n * @public\n * @return {Object} Drawing information for side effect.\n * ```\n * sideEffectGroup: // svg container where the side effect needs to be appended.\n * svgContainer: // svg container of the {@link VisualUnit}.\n * htmlContainer: // html div container of the {@link VisualUnit}.\n * width: // Width of the {@link VisualUnit}\n * height: // Height of the {@link VisualUnit}\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 selectElement,\n mergeRecursive,\n makeElement,\n setAttrs,\n setStyles,\n getSymbol,\n isSimpleObject\n} from 'muze-utils';\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._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._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(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","export const SELECTION_SUMMARY = 'selectionSummary';\nexport const HIGHLIGHT_SUMMARY = 'highlightSummary';\n","import {\n FieldType,\n GROUP_BY_FUNCTIONS,\n formatTemporal,\n DimensionSubtype,\n MeasureSubtype,\n DataModel,\n defaultValue,\n retrieveFieldDisplayName,\n nestCollection,\n getObjProp,\n intersect\n} from 'muze-utils';\nimport { SELECTION_SUMMARY, HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\n\nconst { SUM, COUNT } = GROUP_BY_FUNCTIONS;\nconst { InvalidAwareTypes } = DataModel;\n\nconst formatters = (formatter, interval, valueParser) => ({\n [DimensionSubtype.TEMPORAL]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatTemporal(Number(value), interval)),\n [MeasureSubtype.CONTINUOUS]: value => (value instanceof InvalidAwareTypes ? valueParser(value) :\n formatter(value.toFixed(2))),\n [DimensionSubtype.CATEGORICAL]: value => valueParser(value)\n});\n\nconst getTabularData = (dataObj, fieldInf) => {\n const rows = [];\n const { data, schema } = dataObj;\n rows.push(schema.map(d => fieldInf[d.name].displayName));\n\n data.forEach((d) => {\n const row = [];\n schema.forEach((fieldObj, i) => {\n const value = fieldInf[fieldObj.name].fn(d[i]);\n row.push(value);\n });\n rows.push(row);\n });\n return rows;\n};\n\nconst getKeyValue = (field, value, classPrefix, margin) => {\n const keyObj = {\n value: field,\n className: `${classPrefix}-tooltip-key`\n };\n if (margin !== undefined) {\n keyObj.style = {\n 'margin-left': `${margin}px`\n };\n }\n return [keyObj, {\n value,\n className: `${classPrefix}-tooltip-value`\n }];\n};\n\nconst generateRetinalFieldsValues = (valueArr, retinalFields, content, context) => {\n const { fieldsConfig, dimensionMeasureMap, axes, config, fieldInf, dataLen } = context;\n const { classPrefix, margin, separator } = config;\n const colorAxis = axes.color[0];\n const shapeAxis = axes.shape[0];\n const sizeAxis = axes.size[0];\n\n for (const retField in retinalFields) {\n const retIndex = fieldsConfig[retField].index;\n const retinalFieldValue = valueArr[retIndex];\n const measuresArr = dimensionMeasureMap[retField];\n const icon = {\n type: 'icon',\n color: colorAxis.getColor(retinalFieldValue),\n shape: shapeAxis.getShape(retinalFieldValue),\n size: sizeAxis.getSize(retinalFieldValue) * config.iconScale\n };\n const { displayName, fn } = fieldInf[retField];\n const formattedRetinalValue = fn(retinalFieldValue);\n\n if (dataLen === 1) {\n content.push(getKeyValue(displayName, formattedRetinalValue, classPrefix));\n } else {\n const hasMultipleMeasures = measuresArr.length > 1;\n hasMultipleMeasures && (content.push([icon, formattedRetinalValue]));\n measuresArr.forEach((measure) => {\n const measureIndex = fieldsConfig[measure].index;\n const { displayName: dName, fn: formatterFn } = fieldInf[measure];\n const value = formatterFn(valueArr[measureIndex]);\n content.push(hasMultipleMeasures ?\n getKeyValue(`${dName}${separator}`, value, classPrefix, margin) :\n [icon, ...getKeyValue(formattedRetinalValue, value, classPrefix)\n ]);\n });\n }\n }\n};\n\nconst getFieldInf = (schema, dataModel, context) => {\n const { valueParser, timeDiffs } = context;\n const fieldsObj = dataModel.getFieldspace().fieldsObj();\n const defFormatter = formatters(null, null, valueParser)[DimensionSubtype.CATEGORICAL];\n\n return schema.reduce((inf, field) => {\n const { subtype, name, type } = field;\n const interval = subtype === DimensionSubtype.TEMPORAL ? timeDiffs[name] : 0;\n const nf = type === FieldType.MEASURE ? fieldsObj[name].numberFormat() : val => val;\n inf[name] = {\n fn: defaultValue(formatters(nf, interval, valueParser)[subtype], defFormatter),\n displayName: `${retrieveFieldDisplayName(dataModel, name)}`\n };\n return inf;\n }, {});\n};\n\nexport const buildTooltipData = (dataModel, config = {}, context) => {\n let nestedDataObj;\n let fieldValues = [];\n const { data, schema } = dataModel.getData();\n const fieldspace = dataModel.getFieldspace();\n const fieldsConfig = dataModel.getFieldsConfig();\n const { color, shape, size } = context.firebolt.context.retinalFields();\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 containsDetailField = !!intersect(schema, detailFields).length;\n const dataLen = data.length;\n const {\n dimensionMeasureMap,\n axes\n } = context;\n const fieldInf = getFieldInf(schema, dataModel, context);\n\n let displayFormat;\n if (dataLen > 1 && containsDetailField) {\n fieldValues = getTabularData({\n data,\n schema,\n fieldspace\n }, fieldInf);\n displayFormat = 'table';\n } else {\n const retinalFields = [color.field, shape.field, size.field].reduce((acc, field) => {\n field && fieldsConfig[field].def.type === FieldType.DIMENSION && (acc[field] = 1);\n return acc;\n }, {});\n const filteredDimensions = dimensions.filter(field => !retinalFields[field.name]);\n const indices = filteredDimensions.map(dim => fieldsConfig[dim.name].index);\n const allMeasures = [...new Set(...Object.values(dimensionMeasureMap))];\n const filteredMeasures = dataLen > 1 ? measures.filter(d => allMeasures.indexOf(d.name) === -1) : measures;\n\n nestedDataObj = nestCollection({\n data,\n keys: indices\n });\n nestedDataObj = !getObjProp(nestedDataObj[0], 'key') ? [{\n values: nestedDataObj\n }] : nestedDataObj;\n\n const generateTooltipContent = (nestedData, index = 0, content = []) => {\n const { classPrefix, separator } = config;\n\n for (let i = 0, len = nestedData.length; i < len; i++) {\n const dataObj = nestedData[i];\n const values = dataObj.values;\n const field = getObjProp(schema, indices[index], 'name');\n\n if (field) {\n const { displayName, fn } = fieldInf[field];\n const formattedValue = fn(dataObj.key);\n content.push(getKeyValue(`${displayName}${separator}`, formattedValue, classPrefix));\n }\n\n if (values[0] && values[0].key) {\n generateTooltipContent(values, index + 1, content);\n } else {\n for (let j = 0, len2 = values.length; j < len2; j++) {\n const valueArr = values[j];\n generateRetinalFieldsValues(valueArr, retinalFields, content, {\n fieldInf,\n axes,\n config,\n fieldsConfig,\n dimensionMeasureMap,\n dataLen\n });\n\n filteredMeasures.forEach((measure) => {\n const { name } = measure;\n const { displayName, fn } = fieldInf[name];\n content.push(getKeyValue(`${displayName}${separator}`,\n fn(valueArr[fieldsConfig[name].index]), classPrefix));\n });\n }\n }\n }\n };\n generateTooltipContent(nestedDataObj, 0, fieldValues);\n }\n\n return {\n content: fieldValues,\n displayFormat\n };\n};\n\nexport const strategies = {\n [SELECTION_SUMMARY]: (dm, config, context) => {\n const { selectionSet } = context;\n const aggFns = selectionSet.mergedEnter.aggFns;\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] = aggFns[v.name] === COUNT ? SUM : aggFns[v.name];\n return acc;\n }, {\n saveChild: false\n }));\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 const data = aggregatedModel.getData().data;\n measureNames.forEach((measure) => {\n const value = data[0][fieldsConf[measure].index];\n value instanceof InvalidAwareTypes ? values.push([]) : values.push([`(${aggFns[measure].toUpperCase()})`,\n `${retrieveFieldDisplayName(dm, measure)}`,\n {\n value: `${value.toFixed(2)}`,\n style: {\n 'font-weight': 'bold'\n }\n }]);\n });\n if (measureNames.length === 1) {\n values = [[...values[0], ...values[1]]];\n }\n return values;\n },\n [HIGHLIGHT_SUMMARY]: (data, config, context) => buildTooltipData(data, config, context)\n};\n","import { Tooltip as TooltipRenderer } from '@chartshq/muze-tooltip';\nimport { FieldType, mergeRecursive, defaultValue } from 'muze-utils';\nimport { spaceOutBoxes } from '../helper';\nimport { strategies } from './strategies';\nimport { FRAGMENTED } from '../../enums/constants';\nimport { TOOLTIP } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\nimport { HIGHLIGHT_SUMMARY } from '../../enums/tooltip-strategies';\n\nconst configResolvers = {\n [HIGHLIGHT_SUMMARY]: (specificConf, config) => defaultValue(specificConf, config),\n default: specificConf => defaultValue(specificConf, {})\n};\n\nconst sanitizeConfig = (config, context) => {\n const strategyObj = context._strategies;\n const sanitizedConf = Object.assign({}, config);\n for (const key in strategyObj) {\n sanitizedConf[key] = defaultValue(configResolvers[key], configResolvers.default)(config[key], config);\n }\n return sanitizedConf;\n};\n\nexport default class Tooltip extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._tooltips = {};\n this._strategies = mergeRecursive({}, strategies);\n this._strategy = HIGHLIGHT_SUMMARY;\n }\n\n static defaultConfig () {\n return {\n padding: 5,\n offset: {\n x: 0,\n y: 0\n },\n highlightSummary: {\n dataTransform: (dt, fields) => (fields ? dt.project(fields, { saveChild: false }) : dt\n )\n },\n selectionSummary: {\n dataTransform: (dt, fields) => {\n const fieldspace = dt.getFieldspace();\n const dimensions = Object.keys(fieldspace.getDimension());\n const measures = Object.keys(fieldspace.getMeasure());\n const projectedFields = defaultValue(fields, measures.length ? [measures[0]] : []);\n return dt.project([...dimensions, ...projectedFields], {\n saveChild: false\n });\n }\n }\n };\n }\n\n static formalName () {\n return TOOLTIP;\n }\n\n config (...params) {\n if (params.length) {\n const config = this._config = mergeRecursive(this._config, sanitizeConfig(params[0], this));\n const strategyObj = this._strategies;\n for (const key in strategyObj) {\n const formatter = config[key].formatter;\n this.setStrategy(key, formatter);\n }\n return this;\n }\n return this._config;\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)) {\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 const strategy = defaultValue(options.strategy, this._strategy);\n const strategyConf = config[strategy];\n const { dataTransform, fields: projectFields } = strategyConf;\n const strategyObj = this._strategies;\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 const dt = dataTransform(dataModels[i], projectFields, this);\n\n enter[i] = true;\n const { parentContainer: layoutContainer, parentContainerDimensions } = drawingInf;\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 sourceInf.valueParser = context.valueParser();\n sourceInf.selectionSet = selectionSet;\n tooltipInst.context(sourceInf);\n const strategyFn = strategyObj[strategy];\n tooltipInst.content(strategy, dt, {\n formatter: strategyFn,\n order: options.order\n })\n .config(this.config())\n .extent({\n x: 0,\n y: 0,\n width: parentContainerDimensions.width,\n height: parentContainerDimensions.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 { CROSSLINE } from '../../enums/side-effects';\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 layers = this.firebolt.context.layers();\n const plotWidth = Math.max(...layers.map(layer => layer.getPlotSpan()[type]));\n const pad = Math.max(...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 !isNaN(px) && 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';\nimport { HIGHLIGHTER } from '../../enums/side-effects';\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 strategy(selectionSet, this, options.strategy || this._strategy);\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, getObjProp } from 'muze-utils';\nimport { CLASSPREFIX } from '../../enums/constants';\nimport { ANCHORS } from '../../enums/side-effects';\nimport SpawnableSideEffect from '../spawnable';\n\nimport './styles.scss';\n\nconst addLayer = (layerRegistry, context, sideEffect) => {\n context.addLayer((layerDefs) => {\n const layers = [];\n\n if (layerDefs) {\n layerDefs.forEach((layerDef) => {\n const mark = layerDef.mark;\n const layerCls = layerRegistry[mark];\n\n if (layerCls && layerCls.shouldDrawAnchors()) {\n const depLayerEncoding = layerDef.def.encoding;\n const encoding = {\n x: getObjProp(depLayerEncoding, 'x', 'field'),\n y: getObjProp(depLayerEncoding, 'y', 'field'),\n color: getObjProp(depLayerEncoding, 'color', 'field'),\n size: {\n field: getObjProp(depLayerEncoding, 'size', 'field'),\n value: sideEffect.defaultSizeValue()\n }\n };\n const commonName = sideEffect.constructor.formalName();\n const name = `${layerDef.def.name}-${commonName}`;\n\n layers.push({\n name,\n mark: 'point',\n groupId: commonName,\n className: sideEffect.constructor.defaultConfig().className,\n encoding,\n transform: {\n type: 'identity'\n },\n calculateDomain: false,\n transition: sideEffect.getTransitionConfig(),\n source: dm => dm.select(() => false, {\n saveChild: false\n }),\n interactive: false,\n owner: layerDef.def.name\n });\n }\n });\n }\n return layers;\n });\n};\n\nexport default class AnchorEffect extends SpawnableSideEffect {\n constructor (...params) {\n super(...params);\n this._layersMap = {};\n this.addAnchorLayers();\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 () {\n const context = this.firebolt.context;\n const layerRegistry = context.registry().layerRegistry;\n\n addLayer(layerRegistry, context, this);\n return this;\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 dataModel = selectionSet.mergedEnter.model;\n const formalName = this.constructor.formalName();\n\n const context = this.firebolt.context;\n const layers = context.layers().filter(layer => layer.config().groupId === formalName);\n\n layers.forEach((layer) => {\n const linkedLayer = context.getLayerByName(layer.config().owner);\n const [transformedData, schema] = linkedLayer.getTransformedDataFromIdentifiers(dataModel);\n const transformedDataModel = new DataModel(transformedData, schema);\n\n layer.data(transformedDataModel);\n });\n return this;\n }\n}\n","import AnchorEffect from './anchors';\nimport { CLASSPREFIX } from '../enums/constants';\nimport { PERSISTENT_ANCHORS } from '../enums/side-effects';\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';\nimport { BRUSH_ANCHORS } from '../enums/side-effects';\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: 'selectionSummary',\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 TEXT = 'text';\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 RADIUS: 'radius',\n RADIUS0: 'radius0',\n ANGLE: 'angle',\n ANGLE0: 'angle0'\n};\n\nexport const ASCENDING = 'asc';\n\nexport const AGG_FN_SUM = 'sum';\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","import { COORD_TYPES, mergeRecursive } from 'muze-utils';\nimport * as PROPS from '../enums/props';\n\nconst { CARTESIAN } = COORD_TYPES;\nexport const props = {\n axes: {},\n mount: {},\n measurement: {},\n metaInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {\n defaultValue: CARTESIAN\n },\n [PROPS.CONFIG]: {\n value: null,\n sanitization: (context, config) => {\n context._customConfig = config;\n const constructor = context.constructor;\n const newConf = mergeRecursive({}, constructor.defaultConfig());\n\n return constructor.defaultPolicy(newConf, config);\n }\n }\n};\n","export const DATA = 'data';\nexport const CONFIG = 'config';\nexport const MEASUREMENT = 'measurement';\nexport const DOMAIN = 'domain';\nexport const MOUNT = 'mount';\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 BAND = 'band';\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 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\nexport const DEFAULT_ANGLE_DOMAIN = [1];\nexport const MIN_NO_OF_TICKS = 2;\nexport const DEFAULT_NO_OF_TICKS = 10;\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 *\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 *\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 adjustRange: false,\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: null,\n smartTicks: null\n },\n orientation: 'left',\n numberFormat: val => val,\n padding: 0.3,\n nice: true,\n numberOfTicks: null,\n rotate: false,\n show: true,\n showAxisName: true,\n showInnerTicks: true,\n showOuterTicks: true,\n style: {},\n type: 'linear',\n tickFormat: null,\n tickValues: null,\n xOffset: 0,\n yOffset: 0\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) => {\n let rotation;\n const axis = instance.axis();\n const config = instance.config();\n const renderConfig = instance.renderConfig();\n const smartTicks = instance.smartTicks();\n const scale = axis.scale();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n const ticks = labelFunc();\n const {\n orientation,\n fixedBaseline,\n type\n } = config;\n const {\n labels\n } = renderConfig;\n\n rotation = labels.rotation;\n\n const tickSize = instance.getTickSize();\n tickText.each(function (d, index) {\n let yShift;\n let xShift;\n let datum = smartTicks[index] ? smartTicks[index].text : d;\n\n datum = datum.toString();\n\n const tickLabelDim = labelManager.getOriSize(datum);\n\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 = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift + xShift / 2 : xShift;\n selectElement(this)\n .attr('transform', `translate(${-xShift + tickSize}\n ${-yShift - tickSize}) rotate(${rotation})`);\n } else {\n xShift = (fixedBaseline && ticks[0] === d && type === LINEAR) ? xShift - xShift / 2 : xShift;\n\n selectElement(this)\n .attr('transform', `translate(${xShift - tickSize}\n ${yShift + tickSize}) rotate(${rotation})`);\n }\n selectElement(this).transition()\n .duration(1000).text(datum);\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 renderConfig = axisInstance.renderConfig();\n const labelManager = axisInstance.dependencies().labelManager;\n const {\n orientation,\n classPrefix\n } = config;\n const {\n labels\n } = renderConfig;\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 && (orientation === TOP || orientation === BOTTOM)) {\n rotateAxis(axisInstance, tickText, labelManager);\n } else if (!rotation && !isSmartTicks) {\n tickText.attr('transform', '');\n } else {\n tickText.text('');\n if (orientation === TOP || orientation === BOTTOM) {\n tickText.attr('y', 0)\n .attr('x', 0)\n .attr('transform', '')\n .text('');\n const tspan = makeElement(tickText, 'tspan', (d, i) => {\n if (_smartTicks[i]) {\n return _smartTicks[i].lines;\n } return [];\n }, `${classPrefix}-smart-text`);\n\n tspan.attr('dy', '0')\n .style('opacity', '0')\n\n .transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .attr('dy', (d, i) => {\n if (orientation === BOTTOM || i !== 0) {\n return _smartTicks[0].oriTextHeight;\n }\n return -_smartTicks[0].oriTextHeight * (_smartTicks[0].lines.length - 1) - tickSize;\n })\n .style('opacity', 1)\n .text(e => e)\n .attr('x', 0);\n } else {\n const tspan = makeElement(tickText, 'tspan', (d, i) => _smartTicks[i].lines, `${classPrefix}-smart-text`);\n tspan.text(e => e);\n }\n }\n\n return tickText;\n};\n\nconst setFixedBaseline = (axisInstance) => {\n const {\n fixedBaseline\n } = axisInstance.config();\n const {\n showInnerTicks\n } = axisInstance.renderConfig();\n const domain = axisInstance.domain();\n if (fixedBaseline && domain.length && showInnerTicks) {\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 availableSpace\n } = measures;\n\n switch (orientation) {\n case AxisOrientation.LEFT:\n textNode.attr('transform',\n `translate(${-(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})rotate(-90)`);\n break;\n case AxisOrientation.RIGHT:\n textNode.attr('transform',\n `translate(${(availableSpace.width - axisNameHeight)},${availableSpace.height / 2})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 renderConfig = axisInstance.renderConfig();\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 _tickLabelStyle: tickLabelStyle,\n _tickFormatter: axisTickFormatter\n } = axisInstance;\n const {\n orientation,\n axisNamePadding,\n className,\n id,\n classPrefix\n } = config;\n const {\n show,\n xOffset,\n yOffset,\n showAxisName,\n labels,\n smartAxisName\n } = renderConfig;\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 const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n const ticks = axis.tickValues() || labelFunc();\n\n axis.tickFormat(axisTickFormatter(ticks));\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.axisComponentDimensions().largestTickDimensions;\n\n // Draw axis ticks\n selectContainer.attr('transform', `translate(${xOffset},${yOffset})`);\n setFixedBaseline(axisInstance);\n if (labels.smartTicks === false || tickSize === 0) {\n selectContainer.transition()\n .duration(1000)\n .on('end', axisInstance.registerAnimationDoneHook())\n .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\n changeTickOrientation(selectContainer, axisInstance, tickSize);\n\n // Create axis name\n const textNode = makeElement(selectContainer, 'text', [smartAxisName], `${classPrefix}-axis-name`)\n .attr('text-anchor', 'middle')\n .classed(`${classPrefix}-axis-name-${id}`, true)\n .text(d => d.text);\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 const measures = {\n labelProps,\n tickSize,\n axisNamePadding,\n axisNameHeight: smartAxisName.height,\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 {\n timeMillisecond,\n timeSecond,\n timeMinute,\n timeHour,\n timeDay,\n timeWeek,\n timeMonth,\n timeYear\n} from 'muze-utils';\n\nconst durationSecond = 1000;\nconst durationMinute = durationSecond * 60;\nconst durationHour = durationMinute * 60;\nconst durationDay = durationHour * 24;\nconst durationWeek = durationDay * 7;\nconst durationMonth = durationDay * 30;\nconst durationYear = durationDay * 365;\n\n// Longest Word for each level based on which tick skipping is decided\nconst longestWord = {\n month: 'September',\n quarter: 'October',\n halfYearly: 'July',\n year: 9999,\n day: 'September',\n hour: '24 AM',\n mintues: '60:60',\n seconds: ':60',\n week: 'Wed 31'\n};\n\n// These are the various levels of ticks that can be shown by Muze.\n// Each level is described as how frequently the ticks appear\n// The format is as follows:\n// [Frequency, Milliseconds, Name of Seconds, Tick Generator, Level Type]\nconst tickIntervals = [\n [1, 1, 'milliseconds', timeMillisecond.every(1), 'seconds'],\n [1, durationSecond, 'seconds', timeSecond.every(1), 'seconds'],\n [5, 5 * durationSecond, 'five seconds', timeSecond.every(5), 'seconds'],\n [10, 10 * durationSecond, 'ten seconds', timeSecond.every(10), 'seconds'],\n [15, 15 * durationSecond, 'fifteen seconds', timeSecond.every(15), 'seconds'],\n [30, 30 * durationSecond, 'thirty seconds', timeSecond.every(30), 'seconds'],\n [1, durationMinute, 'minute', timeMinute.every(1), 'minutes'],\n [5, 5 * durationMinute, 'five minutes', timeMinute.every(5), 'minutes'],\n [10, 10 * durationMinute, 'ten minutes', timeMinute.every(10), 'minutes'],\n [15, 15 * durationMinute, 'fifteen minutes', timeMinute.every(15), 'minutes'],\n [30, 30 * durationMinute, 'thirty minutes', timeMinute.every(30), 'minutes'],\n [1, durationHour, 'hour', timeHour.every(1), 'hour'],\n [3, 3 * durationHour, 'three hours', timeHour.every(3), 'hour'],\n [6, 6 * durationHour, 'six hours', timeHour.every(6), 'hour'],\n [12, 12 * durationHour, 'twelve hours', timeHour.every(12), 'hour'],\n [1, durationDay, 'daily', timeDay.every(1), 'day'],\n [1, durationWeek, 'weekly', timeWeek.every(1), 'week'],\n [1, durationMonth, 'monthly', timeMonth.every(1), 'week'],\n [3, 3 * durationMonth, 'quaterly', timeMonth.every(3), 'quarter'],\n [6, 6 * durationMonth, 'half yearly', timeMonth.every(6), 'halfYearly'],\n [1, durationYear, 'yearly', timeYear.every(1), 'year'],\n [2, 2 * durationYear, '2 year', timeYear.every(2), 'year'],\n [3, 3 * durationYear, '3 year', timeYear.every(3), 'year'],\n [5, 5 * durationYear, '5 year', timeYear.every(5), 'year'],\n [10, 10 * durationYear, 'decade', timeYear.every(10), 'year'],\n [100, 100 * durationYear, 'century', timeYear.every(100), 'year'],\n [1000, 1000 * durationYear, 'millenium', timeYear.every(1000), 'year']\n];\n/**\n * Get the actual tick interval based on the available width, number of ticks\n * and the distance between two ticks\n *\n * @param {Object} context Axis Context\n * @param {number} noOfTicks Number of Ticks based on which interval is calculated\n * @return {number} The width for the tick interval\n */\nconst getActualTickInterval = (context, noOfTicks) => {\n const minTickDistance = context._minTickDistance;\n const minWidthBetweenTicks = minTickDistance.width;\n\n const { width } = context.availableSpace();\n const actualTickInterval = Math.floor(((width - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks));\n\n return actualTickInterval;\n};\n\n/**\n * Get the tick interval based on the current level of ticks. Levels are decided on\n * the number of ticks that are possible to show\n *\n * @param {Object} context Axis Context\n * @param {string} type Type of level (yearly, monthly, etc)\n * @return {number} The width for the tick interval\n */\nconst getTickIntervalBasedOnCurrentLevel = (context, type) => {\n const labelManager = context._dependencies.labelManager;\n const longestWordType = longestWord[type];\n const measure = labelManager.getOriSize(longestWordType);\n\n return measure.width;\n};\n\nconst getTickIntervalFnBasedOnNumberOfTicks = (interval, count, context) => {\n let possibleTickLevelIndex = tickIntervals.length - 1;\n let maxPossibleTicks = 1;\n let tickIntervalLevelInfo = null;\n\n // Decide possible tick level based on min tick width (with ellipses)\n for (let i = tickIntervals.length - 1; i >= 0; i--) {\n const tickIntervalInfo = tickIntervals[i];\n const numOfPossibleTicks = Math.floor(interval / tickIntervalInfo[1]);\n if (numOfPossibleTicks <= count) {\n possibleTickLevelIndex = i;\n maxPossibleTicks = numOfPossibleTicks;\n }\n }\n\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex];\n\n // Get actual tick interval based on the level of ticks generated\n const actualTickInterval = getActualTickInterval(context, maxPossibleTicks);\n\n // Maximum Possible tick Interval for a particular level based on a pre decided set of values\n const maxTickInterval = getTickIntervalBasedOnCurrentLevel(context, tickIntervalLevelInfo[4]);\n\n // Display the next level involving tick skipping if current level does not meet the requirement\n // for displaying max tick\n if (actualTickInterval < maxTickInterval && possibleTickLevelIndex < tickIntervals.length - 1) {\n tickIntervalLevelInfo = tickIntervals[possibleTickLevelIndex + 1];\n }\n return tickIntervalLevelInfo[3];\n};\n\nexport const getSkippedTicks = (context, maxPossibleTicks) => {\n let actualNumberOfTicks = maxPossibleTicks;\n const domain = context.domain();\n const minDiff = context._minDiff;\n // Get the interval in ms from the domain\n const millisecondInterval = domain[1] - domain[0];\n // Get number of ticks based on the minimum difference in the data\n const numOfTicksAccordingToMinDiff = Math.floor(millisecondInterval / minDiff);\n\n // Show ticks according to min diff if possible\n if (maxPossibleTicks >= numOfTicksAccordingToMinDiff) {\n actualNumberOfTicks = numOfTicksAccordingToMinDiff;\n }\n\n return getTickIntervalFnBasedOnNumberOfTicks(millisecondInterval, actualNumberOfTicks, context);\n};\n","import { BOTTOM, TOP, LEFT, RIGHT } from '../enums/axis-orientation';\nimport { getSkippedTicks } from './skip-ticks';\nimport { TIME, LINEAR, BAND } from '../enums/scale-type';\n\nexport const applyTickSkipping = (context) => {\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n\n const { width } = context.availableSpace();\n\n const maxTicks = Math.floor((width + minWidthBetweenTicks) / (minTickWidth + minWidthBetweenTicks));\n\n const ticks = context.scale().ticks(getSkippedTicks(context, maxTicks));\n\n context.renderConfig({\n tickValues: ticks\n });\n};\n\nconst adjustHorizontalRange = (range, diff) => {\n range[0] += diff;\n range[1] -= diff;\n return range;\n};\n\nconst adjustVerticalRange = (range, diff) => {\n range[0] -= diff;\n range[1] += diff;\n return range;\n};\n\nconst rangeAdjustmentMap = {\n [TOP]: adjustHorizontalRange,\n [BOTTOM]: adjustHorizontalRange,\n [LEFT]: adjustVerticalRange,\n [RIGHT]: adjustVerticalRange\n};\n\nexport const setAxisRange = (context, type, rangeBounds, offset) => {\n context.range(rangeBounds);\n offset && context.renderConfig({ [`${type}Offset`]: offset });\n};\n\nconst getAxisOffset = (timeDiff, range, domain) => {\n const avWidth = Math.abs(range[1] - range[0]);\n const pvr = avWidth / (domain[1] - domain[0]);\n const width = (pvr * timeDiff);\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 getAdjustedRange = (minDiff, range, domain, config) => {\n const {\n orientation,\n adjustRange\n } = config;\n const diff = getAxisOffset(minDiff, range, domain);\n\n if (adjustRange) {\n return rangeAdjustmentMap[orientation](range, diff);\n }\n return range;\n};\n\nexport const spaceSetter = (context, spaceConfig) => {\n let tickInterval;\n let heightForTicks;\n const config = context.config();\n const {\n width: availWidth,\n height: availHeight,\n padding\n } = context.availableSpace();\n const {\n top,\n left,\n bottom,\n right\n } = padding;\n const {\n isOffset\n } = spaceConfig;\n const {\n showAxisName,\n labels\n } = context.renderConfig();\n const {\n rotation\n } = labels;\n const {\n fixedBaseline,\n axisNamePadding,\n tickValues\n } = config;\n const {\n tickDimensions,\n allTickDimensions,\n axisNameDimensions,\n tickSize\n } = context.getAxisDimensions();\n const {\n height: tickDimHeight,\n width: tickDimWidth\n } = tickDimensions;\n\n const namePadding = showAxisName ? axisNamePadding : 0;\n const labelConfig = { smartTicks: true, rotation: labels.rotation };\n const minTickDistance = context._minTickDistance;\n const minTickSpace = context._minTickSpace;\n const minDiff = context._minDiff;\n const domain = context.domain();\n const axisNameHeight = axisNameDimensions.height;\n const minWidthBetweenTicks = minTickDistance.width;\n const minTickWidth = minTickSpace.width;\n const minTickHeight = minTickSpace.height;\n\n return {\n [TIME]: {\n x: () => {\n !tickValues && context.applyTickSkipping();\n const noOfTicks = context.getTickValues().length;\n\n // Get the Tick Interval\n tickInterval = ((availWidth - (noOfTicks - 1) * (minWidthBetweenTicks)) / noOfTicks);\n\n // Get height for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation;\n // Remove ticks if not enough height\n if (tickInterval < minTickHeight) {\n heightForTicks = availHeight;\n tickInterval = minTickHeight;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n const tickShifter = Math.min(tickInterval, tickDimWidth);\n // set range for axis\n setAxisRange(context, 'y', getAdjustedRange(minDiff, [tickShifter / 2,\n availWidth - left - right - tickShifter / 2], domain, config),\n isOffset ? availHeight : null);\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n\n return labelConfig;\n },\n y: () => {\n let widthForTicks = availWidth;\n const tickShifter = tickDimHeight / 2;\n\n setAxisRange(context, 'x', getAdjustedRange(minDiff,\n [availHeight - top - bottom - tickShifter, tickShifter], domain, config),\n isOffset ? availWidth : null);\n\n if ((availWidth - axisNameHeight - namePadding) <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [BAND]: {\n x: () => {\n setAxisRange(context, 'y', [0, availWidth - left - right], isOffset ? availHeight : null);\n const range = context.range();\n\n // Get Tick Interval\n tickInterval = ((range[1] - range[0]) / (tickValues || domain).length) - minWidthBetweenTicks;\n\n // Get height available for ticks\n heightForTicks = availHeight - axisNameHeight - tickSize - namePadding;\n\n if (tickInterval < minTickWidth && rotation !== 0) {\n // set smart ticks and rotation config\n labelConfig.rotation = rotation === null ? -90 : rotation;\n labelConfig.smartTicks = false;\n\n tickInterval = Math.max(heightForTicks, minTickWidth);\n } else if (tickValues) {\n const interval = (availWidth / domain.length) - minWidthBetweenTicks;\n if (interval < minTickWidth) {\n context.range([minTickHeight / 2, availWidth - minTickHeight / 2]);\n }\n }\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n\n context.maxTickSpaces({\n width: tickInterval,\n height: heightForTicks,\n noWrap: rotation !== null\n });\n return labelConfig;\n },\n y: () => {\n setAxisRange(context, 'x', [availHeight - bottom, top], isOffset ? availWidth : null);\n\n let widthForTicks = availWidth - axisNameHeight - tickSize - namePadding;\n if (widthForTicks <= minWidthBetweenTicks) {\n widthForTicks = 0;\n context.renderConfig({ showInnerTicks: false, showOuterTicks: false });\n }\n\n context.maxTickSpaces({\n width: widthForTicks,\n height: availHeight,\n noWrap: true\n });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n }\n },\n [LINEAR]: {\n x: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimWidth / 2;\n\n const baseline = fixedBaseline ? 0 : tickShifter;\n\n setAxisRange(context, 'y', [baseline + left, availWidth - right - tickShifter],\n isOffset ? availHeight : null);\n\n const range = context.range();\n\n // Get Tick widths and available space\n const totalTickWidth = allTickDimensions.length * (tickDimWidth + minWidthBetweenTicks);\n const availableWidth = range[1] - range[0];\n\n // Rotate labels if not enough width\n if (availableWidth < totalTickWidth && labels.rotation !== null) {\n if (availHeight - tickDimWidth - namePadding - tickSize > axisNameHeight) {\n labelConfig.rotation = null;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: true\n });\n } else {\n labelConfig.rotation = -90;\n context.renderConfig({\n showInnerTicks: true,\n showAxisName: false\n\n });\n }\n }\n\n if (availHeight < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n return labelConfig;\n },\n y: () => {\n labelConfig.smartTicks = false;\n const tickShifter = tickDimensions.height / 2;\n const baseline = fixedBaseline ? 1 : tickShifter;\n\n setAxisRange(context, 'x', [availHeight - bottom - baseline, tickShifter + top],\n isOffset ? availWidth : null);\n\n // Remove display of ticks if no space is left\n if (availWidth < tickDimWidth + axisNameHeight + namePadding) {\n context.renderConfig({ showInnerTicks: false });\n if (availWidth < axisNameHeight) {\n context.renderConfig({ show: false });\n }\n }\n return labelConfig;\n }\n }\n };\n};\n","import { defaultValue } from 'muze-utils';\nimport { TOP, LEFT, BOTTOM } from '../enums/axis-orientation';\nimport { MIN_NO_OF_TICKS, DEFAULT_NO_OF_TICKS } from '../enums/constants';\nimport { setAxisRange, getAdjustedRange } from './space-setter';\n\nexport const getRotatedSpaces = (rotation = 0, width, height) => {\n let rotatedHeight = height;\n let rotatedWidth = width;\n if (rotation) {\n const angle = ((rotation || 0) * Math.PI) / 180;\n rotatedWidth = Math.abs(height * Math.sin(angle)) + Math.abs(width * Math.cos(angle));\n rotatedHeight = Math.abs(width * Math.sin(angle)) + Math.abs(height * Math.cos(angle));\n }\n return { width: rotatedWidth, height: rotatedHeight };\n};\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.renderConfig({ xOffset: x, yOffset: y });\n};\n\nexport const getNumberOfTicks = (availableSpace, labelDim, axis, axisInstance) => {\n let numberOfValues = 0;\n let tickValues = [];\n let { numberOfTicks } = axisInstance.config();\n const ticks = axis.scale().ticks();\n const tickLength = ticks.length;\n const minTickDistance = axisInstance._minTickDistance.width;\n\n numberOfValues = tickLength;\n\n if (tickLength * (labelDim + minTickDistance) > availableSpace) {\n numberOfValues = Math.floor(availableSpace / (labelDim + minTickDistance));\n }\n\n numberOfTicks = numberOfTicks || numberOfValues;\n numberOfValues = Math.min(numberOfTicks, Math.max(MIN_NO_OF_TICKS, numberOfValues));\n\n tickValues = axis.scale().ticks(numberOfValues);\n\n if (tickValues.length > numberOfValues) {\n tickValues = tickValues.filter((e, i) => i % 2 === 0);\n }\n\n if (numberOfValues === MIN_NO_OF_TICKS) {\n tickValues = axis.scale().ticks(DEFAULT_NO_OF_TICKS);\n tickValues = [tickValues[0], tickValues[tickValues.length - 1]];\n }\n return tickValues;\n};\n\nexport const getAxisComponentDimensions = (context) => {\n let largestTick = '';\n let largestTickDimensions = { width: 0, height: 0 };\n let smartTick = {};\n let axisTicks;\n const allTickDimensions = [];\n const scale = context.scale();\n const { tickValues, showAxisName } = context.renderConfig();\n const { name } = context.config();\n const { labelManager } = context.dependencies();\n const labelFunc = scale.ticks || scale.quantile || scale.domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(context._tickLabelStyle);\n\n // get the values along the domain\n axisTicks = tickValues || labelFunc();\n\n // Get the tick labels\n axisTicks = axisTicks.map((originalLabel, i) => {\n const label = context.getFormattedText(originalLabel, i, axisTicks);\n\n // convert to string for quant values\n const tickDimensions = labelManager.getOriSize(label);\n\n // Get spaces for all labels\n allTickDimensions.push(tickDimensions);\n\n // Getting largest label\n if (tickDimensions.width > largestTickDimensions.width) {\n largestTick = label;\n smartTick = context.smartTicks() ? context.smartTicks()[i] : {};\n\n largestTickDimensions = tickDimensions;\n smartTick = smartTick || tickDimensions;\n }\n return label;\n });\n\n labelManager.setStyle(context._axisNameStyle);\n const axisNameDimensions = showAxisName ? labelManager.getOriSize(name) : { width: 0, height: 0 };\n\n return {\n axisNameDimensions,\n largestTick,\n largestTickDimensions,\n allTickDimensions,\n axisTicks,\n smartTick,\n tickSize: context.getTickSize()\n };\n};\n\nexport const computeAxisDimensions = (context) => {\n let tickDimensions = {};\n const { labels } = context.renderConfig();\n const { smartTicks, rotation } = labels;\n const {\n largestTickDimensions,\n axisTicks,\n smartTick,\n axisNameDimensions,\n allTickDimensions,\n tickSize\n } = getAxisComponentDimensions(context);\n const { height: labelHeight, width: labelWidth } = largestTickDimensions;\n\n // get the domain of axis\n const domain = context.domain();\n // const angle = ((rotation || 0) * Math.PI) / 180;\n\n if (domain.length === 0) {\n return null;\n }\n\n if (smartTicks) {\n tickDimensions = smartTick;\n } else {\n tickDimensions = { width: labelWidth, height: labelHeight };\n }\n tickDimensions = getRotatedSpaces(rotation, tickDimensions.width, tickDimensions.height);\n\n if (tickSize === 0) {\n tickDimensions = { width: 0, height: 0 };\n }\n return {\n allTickDimensions,\n tickSize,\n tickDimensions,\n axisNameDimensions,\n largestTickDimensions,\n axisTicks\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getHorizontalAxisSpace = (context, axisDimensions, range) => {\n let width;\n let height;\n const domain = context.domain();\n const minTickDistance = context._minTickDistance.width;\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n width = range && range.length ? range[1] - range[0] : ((tickDimWidth + minTickDistance) * 3);\n\n height = 0;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\n\n width = ((max - min) / Math.abs(minTickDiff)) * (tickDimWidth + context._minTickDistance.width);\n }\n if (!range || !range.length) {\n height = Math.max(tickDimWidth, tickDimHeight);\n } else {\n height = tickDimHeight;\n }\n\n height += (showAxisName ? axisDimHeight + axisNamePadding : 0) + tickSize;\n\n return {\n width,\n height\n };\n};\n\n/**\n *\n *\n * @param {*} axisDimensions\n * @param {*} config\n * @param {*} range\n *\n */\nexport const getVerticalAxisSpace = (context, axisDimensions) => {\n let height;\n let width;\n const domain = context.domain();\n const { tickSize, tickDimensions, axisNameDimensions } = axisDimensions;\n const { axisNamePadding, tickValues } = context.config();\n const { showAxisName } = context.renderConfig();\n const { height: axisDimHeight } = axisNameDimensions;\n const { height: tickDimHeight, width: tickDimWidth } = tickDimensions;\n\n height = 0;\n width = tickDimWidth;\n if (tickValues) {\n const minTickDiff = context.getMinTickDifference();\n const [min, max] = [\n Math.min(...tickValues, ...domain),\n Math.max(...tickValues, ...domain)\n ];\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 axisDimensions = context.getAxisDimensions();\n\n const { orientation } = context.config();\n const { show } = context.renderConfig();\n const { largestTickDimensions, axisTicks, allTickDimensions } = axisDimensions;\n const { height: largestDimHeight } = largestTickDimensions;\n const minTickWidth = context._minTickDistance.width;\n if (orientation === TOP || orientation === BOTTOM) {\n let {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n\n if (!range || !range.length) {\n width = allTickDimensions.reduce((t, n) =>\n t + Math.min(n.width, n.height) + minTickWidth, 0);\n }\n\n if (show === false) {\n height = 0;\n width = 0;\n }\n return {\n width,\n height\n };\n }\n\n let {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n if (!height || height === 0) {\n height = axisTicks.length * (largestDimHeight + context._minTickDistance.height);\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 axisDimensions = context.getAxisDimensions();\n const { orientation } = context.config();\n const { show, showAxisName } = context.renderConfig();\n const { axisNameDimensions } = axisDimensions;\n\n if (show === false) {\n return {\n width: 0,\n height: 0\n };\n }\n\n const { width: axisNameWidth } = axisNameDimensions;\n\n if (orientation === TOP || orientation === BOTTOM) {\n const {\n width,\n height\n } = getHorizontalAxisSpace(context, axisDimensions, range);\n const axisWidth = Math.max(width, axisNameWidth);\n\n return {\n width: axisWidth,\n height\n };\n }\n const {\n width,\n height\n } = getVerticalAxisSpace(context, axisDimensions, range);\n\n const effHeight = Math.max(height, showAxisName ? axisNameWidth : 0);\n\n return {\n width,\n height: effHeight\n };\n};\n\n/**\n * Overwrites domain with user defined domain (if present)\n * @param {Object} context reference to current axes\n * @param {Array} domain default domain\n *\n * @return {Array} domain\n */\nexport const getValidDomain = (context, domain) => {\n const { domain: userDom } = context.config();\n\n if (userDom) {\n domain = userDom;\n }\n\n return defaultValue(domain, []);\n};\n\nexport const setContinousAxisDomain = (context, domain) => {\n const { nice } = context.config();\n const scale = context.scale.bind(context);\n\n scale().domain(domain);\n nice && scale().nice();\n context._domain = scale().domain();\n};\n\n/**\n * Checks if any of the properties have changed between two objects\n * @param {Object} obj first object\n * @param {Object} obj1 second object\n * @param {Array} properties properties to be compared between two objects\n *\n * @return {Boolean} boolean value\n */\nexport const hasAxesConfigChanged = (obj = {}, obj1 = {}, properties) => {\n if (!Object.keys(obj).length || !Object.keys(obj1).length) {\n return false;\n }\n return properties.some(key => obj[key] !== obj1[key]);\n};\n\nexport const resetTickInterval = (context, domain) => {\n const {\n orientation,\n isOffset\n } = context.config();\n\n const minDiff = context._minDiff;\n // Set available space on interaction\n if (context.range().length && (orientation === TOP || orientation === BOTTOM)) {\n context.applyTickSkipping();\n const {\n largestTickDimensions\n } = context.getAxisDimensions();\n\n const noOfTicks = context.getTickValues().length;\n\n const { width, height, padding } = context.availableSpace();\n const {\n left,\n right\n } = padding;\n // Get the Tick Interval\n const tickInterval = Math.min(largestTickDimensions.width,\n ((width - (noOfTicks - 1) * (context._minTickDistance.width)) / noOfTicks));\n\n context.maxTickSpaces({\n width: tickInterval\n });\n\n const adjustedRange = getAdjustedRange(minDiff, [tickInterval / 2,\n width - left - right - tickInterval / 2], domain, context.config());\n\n // set range for axis\n setAxisRange(context, 'y', adjustedRange, isOffset ? height : null);\n\n context.setTickConfig();\n }\n};\n\nexport const getSmartAxisName = (name, width, labelManager) => {\n const oriSize = labelManager.getOriSize(name);\n\n labelManager.useEllipsesOnOverflow(true);\n\n return labelManager.getSmartText(name, width, oriSize.height, true);\n};\n","import { mergeRecursive } from 'muze-utils';\nimport { hasAxesConfigChanged } from './helper';\n\nexport const PROPS = {\n availableSpace: {},\n axisDimensions: {},\n axisComponentDimensions: {},\n config: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._config || {});\n const mockedOldConfig = mergeRecursive({}, oldConfig);\n value = mergeRecursive(mockedOldConfig, value);\n\n value.axisNamePadding = Math.max(value.axisNamePadding, 0);\n const shouldAxesScaleUpdate = hasAxesConfigChanged(\n value, oldConfig, ['interpolator', 'exponent', 'base', 'orientation']\n );\n const tickFormatter = context.sanitizeTickFormatter(value);\n\n if (shouldAxesScaleUpdate) {\n context._scale = context.createScale(value);\n context._axis = context.createAxis(value);\n }\n\n context._tickFormatter = ticks => tickFormatter(ticks);\n\n context.resetRenderConfig(value);\n return value;\n }\n },\n renderConfig: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._renderConfig || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n logicalSpace: {},\n mount: {\n },\n range: {\n sanitization: (context, value) => {\n context.scale().range(value);\n context.logicalSpace(null);\n return value;\n }\n },\n\n smartTicks: {},\n tickSize: {},\n maxTickSpaces: {\n sanitization: (context, value) => {\n const oldConfig = Object.assign({}, context._maxTickSpaces || {});\n value = mergeRecursive(oldConfig, value);\n return value;\n }\n },\n valueParser: {\n defaultValue: val => val\n }\n};\n","import {\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 { spaceSetter } from './space-setter';\nimport {\n getAxisComponentDimensions,\n computeAxisDimensions,\n calculateContinousSpace,\n setOffset,\n getValidDomain,\n getSmartAxisName\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._axisDimensions = {};\n this._smartTicks = [];\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\n dependencies.labelManager.setStyle(this._tickLabelStyle);\n const dist = dependencies.labelManager.getOriSize('w');\n\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\n this._minTickSpace = dependencies.labelManager.getOriSize('www...');\n\n generateGetterSetters(this, PROPS);\n this.config(simpleConfig);\n\n this._scale = this.createScale(this._config);\n this._axis = this.createAxis(this._config);\n this._animationDonePromises = [];\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 resetDomain () {\n this._domain = [];\n return this;\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 *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n this.scale().domain(domainValue);\n this._domain = this.scale().domain();\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\n return this._domain;\n }\n\n setAxisComponentDimensions () {\n this.axisComponentDimensions(getAxisComponentDimensions(this));\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n dependencies () {\n return this._dependencies;\n }\n\n /**\n *\n *\n *\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 sanitizeTickFormatter (value) {\n const { tickFormat, numberFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(numberFormat(val), val, i, ticks);\n }\n\n return () => val => numberFormat(val);\n }\n\n resetRenderConfig (config) {\n const {\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n } = config;\n this.renderConfig({\n labels,\n show,\n showInnerTicks,\n showOuterTicks,\n showAxisName,\n xOffset,\n yOffset,\n tickValues,\n smartAxisName\n });\n return this;\n }\n\n resetLogicalSpace () {\n this.logicalSpace(null);\n this.range([]);\n\n this.resetRenderConfig(this.config());\n }\n\n getFormattedText (text, index, axisTicks) {\n const formatter = this._tickFormatter;\n\n return formatter(axisTicks)(text, index);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n createAxis (config) {\n const { orientation } = config;\n const axisClass = axisOrientationMap[orientation];\n\n if (axisClass) {\n const axis = axisClass(this.scale());\n return axis;\n }\n return null;\n }\n\n setTickValues (tickValues) {\n const renderConfig = this.renderConfig();\n this.config({ ...renderConfig, tickValues });\n this.tickValues = tickValues;\n this.axis().tickValues(tickValues);\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 let labelConfig = {};\n const {\n orientation\n } = this.config();\n\n this.availableSpace({ width, height, padding });\n const type = this.constructor.type();\n\n if (orientation === TOP || orientation === BOTTOM) {\n labelConfig = spaceSetter(this, { isOffset })[type].x();\n } else {\n labelConfig = spaceSetter(this, { isOffset })[type].y();\n }\n\n // Set config\n this.renderConfig({\n labels: labelConfig\n });\n this.setTickConfig();\n this.setSmartAxisName();\n return this;\n }\n\n setSmartAxisName () {\n const { orientation, name } = this.config();\n const dimType = (orientation === TOP || orientation === BOTTOM) ? 'width' : 'height';\n const widthDim = this.availableSpace()[dimType];\n const labelManager = this.dependencies().labelManager;\n labelManager.setStyle(this._axisNameStyle);\n this.renderConfig({\n smartAxisName: getSmartAxisName(name, widthDim, labelManager)\n });\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\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 *\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 (...params) {\n this.axisDimensions(computeAxisDimensions(this, ...params));\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 }\n setOffset(this);\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 return this.scale().invert(value);\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 *\n * @return {Array} range values\n */\n getNearestRange (v1, v2) {\n return [v1, v2];\n }\n\n invertExtent (v1, v2) {\n return [this.invert(v1), this.invert(v2)];\n }\n\n getMinTickDifference () {\n return this.domain();\n }\n\n getFormattedTickValues (tickValues) {\n return tickValues;\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 /**\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 this.setTickConfig();\n renderAxis(this);\n }\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n remove () {\n selectElement(this.mount()).remove();\n return this;\n }\n\n /**\n *\n *\n * @memberof SimpleAxis\n */\n unsubscribe () {\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n isReverse () {\n const range = this.range();\n return range[0] > range[1];\n }\n\n /**\n *\n *\n *\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 * Notifies when all animations/transitions of the axis are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n}\n\n","import { sanitizeDomainWhenEqual } from 'muze-utils';\nimport { 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 if (domain.length) {\n domain = sanitizeDomainWhenEqual(domain);\n }\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 const scale = this._scale;\n if (domainVal <= 0) {\n return scale(scale.domain()[0]);\n }\n\n return scale(domainVal) + 0.5;\n }\n\n sanitizeDomain (domain) {\n if (domain[0] <= 0) {\n domain[0] = Math.max(1, domain[0]);\n }\n if (domain[1] <= 0) {\n domain[1] = Math.max(1, domain[1]);\n }\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 {\n getNumberOfTicks,\n getValidDomain,\n setContinousAxisDomain\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 *\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 *\n *\n * @static\n *\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 *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\n const axis = this.axis();\n axis.tickSizeInner(showInnerTicks === false ? 0 : 6);\n axis.tickSizeOuter(showOuterTicks === false ? 0 : 6);\n\n return axis.tickSize();\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainVal = this._interpolator.sanitizeDomain(getValidDomain(this, domain[0]));\n setContinousAxisDomain(this, domainVal);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n return this;\n }\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 (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @param {*} tickValues\n *\n * @memberof SimpleAxis\n */\n setTickConfig () {\n const {\n tickValues,\n showInnerTicks\n } = this.renderConfig();\n const axis = this.axis();\n\n if (!showInnerTicks) {\n axis.tickValues([]);\n return this;\n }\n\n if (tickValues) {\n tickValues instanceof Array && this.axis().tickValues(tickValues);\n }\n const newTickValues = this.getTickValues();\n\n axis.tickValues(newTickValues);\n const smartLabel = this.dependencies().labelManager;\n smartLabel.setStyle(this._tickLabelStyle);\n const formatter = this._tickFormatter(newTickValues);\n const smartTicks = newTickValues.map((val, i) => {\n const text = formatter(val, i);\n const tickSpace = smartLabel.getOriSize(text);\n\n tickSpace.text = text;\n return tickSpace;\n });\n\n this.smartTicks(smartTicks);\n return this;\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickValues () {\n let labelDim = 0;\n const {\n orientation\n\n } = this.config();\n const {\n tickValues\n } = this.renderConfig();\n const range = this.range();\n const axis = this.axis();\n\n const availableSpace = Math.abs(range[0] - range[1]);\n\n const labelProps = this.axisComponentDimensions().largestTickDimensions;\n\n if (tickValues) {\n return 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.renderConfig().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 } = this.config();\n const {\n labels\n } = this.renderConfig();\n\n const {\n rotation\n } = labels;\n const axis = this.axis();\n const ticks = axis.tickValues();\n const smartTicks = this.smartTicks();\n\n if (smartTicks && smartTicks.length) {\n const { width, height } = this.smartTicks()[0];\n\n axis.tickTransform((d) => {\n if (d === ticks[0]) {\n if ((orientation === LEFT || orientation === RIGHT)) {\n return `translate(0, -${(height) / 3}px)`;\n }\n\n if ((orientation === TOP || orientation === BOTTOM) && !rotation) {\n return `translate(${width / 2}px, ${0}px)`;\n }\n } return '';\n });\n }\n return tickText;\n }\n\n}\n","import SimpleAxis from './simple-axis';\nimport { BAND } from '../enums/scale-type';\nimport { calculateBandSpace, setOffset, getRotatedSpaces } from './helper';\n\nexport default class BandAxis extends SimpleAxis {\n /**\n *\n *\n * @static\n *\n * @memberof BandAxis\n */\n static type () {\n return BAND;\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks = '';\n let smartlabel;\n const domain = this.domain();\n const { labelManager } = this._dependencies;\n const { padding } = this.config();\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n tickValues && this.axis().tickValues(tickValues);\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n // Update padding between plots\n if (typeof padding === 'number') {\n const paddingNormalized = Math.min(1, Math.max(0, padding));\n this.scale().padding(paddingNormalized);\n }\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n this.smartTicks(smartTicks);\n return this;\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 }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n /**\n *\n *\n * @memberof BandAxis\n */\n getTickValues () {\n return this.axis().scale().domain();\n }\n\n formatTickValue (val) {\n return this.valueParser()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return ticks => (val, i) => tickFormat(this.formatTickValue(val), val, i, ticks);\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof BandAxis\n */\n getUnitWidth () {\n return this.scale().bandwidth();\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\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 invertExtent (v1, v2) {\n return this.scale().invertExtent(v1, v2);\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 const scale = this.scale();\n const range = scale.range();\n const reverse = range[0] > range[1];\n\n const extent = this.invertExtent(v1, v2);\n const p1 = scale(reverse ? extent[extent.length - 1] : extent[0]);\n const p2 = scale(reverse ? extent[0] : extent[extent.length - 1]) + scale.bandwidth();\n return [p1, p2];\n }\n}\n","import { getSmallestDiff } from 'muze-utils';\nimport SimpleAxis from './simple-axis';\nimport { TIME } from '../enums/scale-type';\nimport { calculateBandSpace, getRotatedSpaces, getValidDomain, setContinousAxisDomain, setOffset,\n resetTickInterval } from './helper';\nimport { applyTickSkipping } from './space-setter';\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 *\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 *\n * @memberof TimeAxis\n */\n static type () {\n return TIME;\n }\n\n formatTickValue (val) {\n return this.scale().tickFormat()(val);\n }\n\n sanitizeTickFormatter (value) {\n const { tickFormat } = value;\n\n if (tickFormat) {\n return (ticks) => {\n const rawTicks = ticks.map(t => t.getTime());\n return (val, i) => tickFormat(this.formatTickValue(val), val.getTime(), i, rawTicks);\n };\n }\n return () => val => this.formatTickValue(val);\n }\n\n /**\n *\n *\n *\n * @memberof SimpleAxis\n */\n getTickSize () {\n const {\n showInnerTicks,\n showOuterTicks\n } = this.renderConfig();\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 *\n * @memberof TimeAxis\n */\n getTickValues () {\n return this.renderConfig().tickValues || this.scale().ticks();\n }\n\n /**\n *\n *\n * @param {*} diff\n *\n * @memberof TimeAxis\n */\n minDiff (diff) {\n this._minDiff = Math.min(this._minDiff, diff);\n return this;\n }\n\n applyTickSkipping () {\n applyTickSkipping(this);\n }\n\n /**\n *\n *\n * @param {*} d\n *\n * @memberof SimpleAxis\n */\n domain (...domain) {\n if (domain.length) {\n const domainValue = getValidDomain(this, domain[0]);\n setContinousAxisDomain(this, domainValue);\n this.setAxisComponentDimensions();\n this.logicalSpace(null);\n\n resetTickInterval(this, domainValue);\n return this;\n }\n return this._domain;\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 }\n setOffset(this);\n\n return this.logicalSpace();\n }\n\n getMinTickDifference () {\n return getSmallestDiff(this.config().tickValues);\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 (...params) {\n super.setAvailableSpace(...params);\n this.getTickSize();\n return this;\n }\n\n /**\n *\n *\n * @returns\n * @memberof BandAxis\n */\n setTickConfig () {\n let smartTicks;\n let smartlabel;\n\n const { labels, tickValues } = this.renderConfig();\n const { height: availHeight, width: availWidth, noWrap } = this.maxTickSpaces();\n const { labelManager } = this._dependencies;\n const domain = this.getTickValues();\n\n tickValues && this.axis().tickValues(tickValues);\n\n const { width, height } = getRotatedSpaces(labels.rotation, availWidth, availHeight);\n\n smartTicks = tickValues || domain;\n\n // set the style on the shared label manager instance\n labelManager.setStyle(this._tickLabelStyle);\n\n if (domain && domain.length) {\n const values = tickValues || domain;\n const tickFormatter = this._tickFormatter(values);\n smartTicks = values.map((d, i) => {\n labelManager.useEllipsesOnOverflow(true);\n\n smartlabel = labelManager.getSmartText(tickFormatter(d, i), width, height, noWrap);\n return labelManager.constructor.textToLines(smartlabel);\n });\n }\n\n this.smartTicks(smartTicks);\n return this;\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 { InvalidAwareTypes, getObjProp } from 'muze-utils';\n\nexport const treatNullMeasures = (domainVal, scaledVal, minDomainScaledVal) => {\n if (domainVal instanceof InvalidAwareTypes) {\n return minDomainScaledVal;\n }\n return scaledVal;\n};\n\nexport const resolveAxisConfig = (propVal, defaultVal, context) => {\n const constructor = getObjProp(propVal, 'constructor');\n switch (constructor) {\n case Function:\n return propVal(defaultVal, context);\n case Array:\n return propVal;\n default:\n return defaultVal;\n }\n};\n","import { numberInterpolator, piecewiseInterpolator, hslInterpolator, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { CONTINOUS, DISCRETE } from '../enums/constants';\nimport { LINEAR, SEQUENTIAL, ORDINAL, QUANTILE } from '../enums/scale-type';\nimport { getHslString } from './props';\nimport { treatNullMeasures } from '../helper';\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*\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 *\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 *\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 *\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(sanitizeDomainWhenEqual(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 *\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 *\n */\nconst indexedRange = (domainValue, scale, domain) => {\n const numVal = (domainValue - domain[0]) / (domain[domain.length - 1] - domain[0]);\n\n return treatNullMeasures(domainValue, scale(numVal), scale(0));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n */\nconst normalRange = (domainValue, scale, domain) => treatNullMeasures(domainValue, scale(domainValue),\n scale(domain[0]));\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) =>\n strategies()[`${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, getActualHslColor } 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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return COLOR;\n }\n\n /**\n *\n *\n * @param {*} colorStrategy\n *\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 *\n * @memberof ColorAxis\n */\n setColorStrategy (domainType, rangeType, schemeType) {\n return strategyGetter(domainType, rangeType, schemeType);\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getHslString (hslColorArray) {\n return getHslString(hslColorArray);\n }\n /**\n *\n *\n * @param {*} domainVal\n *\n * @memberof ColorAxis\n */\n getColor (domainVal) {\n return this.getHslString(this.getRawColor(domainVal));\n }\n /**\n *\n *\n * @param {*} domainVal\n *\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 if (color) {\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 }\n return [...this.config().value];\n }\n\n /**\n *\n *\n * @param {*} [domain=[]]\n *\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 getHslArray (color) {\n return getActualHslColor(color);\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';\nimport { treatNullMeasures } from '../helper';\n\n/**\n *\n *\n * @param {*} domain\n *\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 *\n */\nconst normalDomain = (domain) => {\n const uniqueVals = domain;\n return { uniqueVals, domain };\n};\n\n/**\n *\n *\n * @param {*} domain\n * @param {*} intervals\n *\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 *\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 treatNullMeasures(domainValue, interpolator(numVal), interpolator(domain[0]));\n};\n\n/**\n *\n *\n * @param {*} domainValue\n * @param {*} scale\n * @param {*} domain\n *\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, domain) =>\n treatNullMeasures(domainValue, scale(domainValue), scale(domain[0]));\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 *\n * @memberof ColorAxis\n */\n setStrategy (domainType, rangeType) {\n return strategyGetter(domainType, rangeType);\n }\n\n /**\n *\n *\n *\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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SIZE;\n }\n\n /**\n *\n *\n * @param {*} domainVal\n *\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, InvalidAwareTypes } 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 *\n * @memberof ColorAxis\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof ColorAxis\n */\n static type () {\n return SHAPE;\n }\n\n /**\n *\n *\n * @param {*} value\n *\n * @memberof ShapeAxis\n */\n getShape (value) {\n if (!this.scale() || !this.domain() || !value || value instanceof InvalidAwareTypes) {\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 *\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 { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n config: {\n sanitization: (context, config) => mergeRecursive(context.config(), config),\n preset: (context, config) => {\n const { range, domain } = config;\n range && context.range(range);\n domain && context.domain(domain);\n }\n },\n domain: {},\n range: {}\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, Symbols, mergeRecursive, generateGetterSetters } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { DEFAULT_ANGLE_DOMAIN } from '../enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst { pie } = Symbols;\n\nconst createAngleValues = (context) => {\n const angleData = context._angleFn(context._domain);\n angleData.forEach((v) => {\n v.startAngle -= Math.PI / 2;\n v.endAngle -= Math.PI / 2;\n });\n context._angleValues = angleData.reduce((values, d) => {\n const key = d.data;\n !values[key] && (values[key] = []);\n values[key].push(d);\n return values;\n }, {});\n};\n\n/**\n* This class is used to instantiate a AngleAxis.\n* @class AngleAxis\n*/\nexport default class AngleAxis {\n\n /**\n * Creates an instance of AngleAxis.\n * @param {Object} config input parameters.\n * @memberof AngleAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._range = [0, 360];\n this._angleFn = pie()\n .value(d => (typeof d === 'string' ? 1 : d))\n .sortValues(null);\n this._angleValues = {};\n }\n\n static defaultConfig () {\n return {};\n }\n\n createScale (strategy) {\n const {\n range\n } = this.config();\n return createScale({\n type: strategy.scale,\n range\n });\n }\n\n getScaleValue (domainVal) {\n return this._angleValues[domainVal];\n }\n\n padAngle (angle) {\n this._angleFn = this._angleFn.padAngle(angle);\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n const domain = domainVal[0].length ? domainVal[0] : DEFAULT_ANGLE_DOMAIN;\n this._domain = resolveAxisConfig(customDomain, domain, this);\n createAngleValues(this);\n return this;\n }\n return this._domain;\n }\n\n range (...range) {\n if (range.length) {\n const { range: customRange } = this.config();\n this._range = resolveAxisConfig(customRange, range[0], this);\n const domain = this.domain();\n const [startAngle, endAngle] = this._range;\n this._angleFn\n .startAngle((startAngle / 180) * Math.PI)\n .endAngle(Math.PI * endAngle / 180);\n if (domain && domain.length) {\n createAngleValues(this);\n }\n return this;\n }\n return this._range;\n }\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\nexport const ANGLE0 = 'angle0';\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 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 * Ordering type\n */\nexport const ASCENDING = 'asc';\n/**\n * Ordering type\n */\nexport const DESCENDING = 'desc';\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, mergeRecursive, generateGetterSetters, sanitizeDomainWhenEqual } from 'muze-utils';\nimport { createScale } from '../scale-creator';\nimport { LINEAR } from '../../../visual-group/src/enums/constants';\nimport { PROPS } from './props';\nimport { resolveAxisConfig } from '../helper';\n\nconst adjustDomain = (context) => {\n const minOuterRadius = context.config().minOuterRadius;\n const domain = context._domain;\n if (context._range.length) {\n const scale = context._scale;\n const value = scale.invert(minOuterRadius) - scale.invert(0);\n context._domain = [domain[0] - value, domain[1]];\n scale.domain(context._domain);\n }\n};\n\n/**\n* This class is used to instantiate a RadiusAxis.\n* @class RadiusAxis\n*/\nexport default class RadiusAxis {\n\n /**\n * Creates an instance of RadiusAxis.\n * @param {Object} config input parameters.\n * @memberof RadiusAxis\n */\n constructor (config = {}) {\n this._id = getUniqueId();\n generateGetterSetters(this, PROPS);\n this._range = [];\n this._radiusFactor = 1;\n this._config = mergeRecursive({}, this.constructor.defaultConfig());\n this.config(config);\n this._scale = this.createScale({\n scale: LINEAR\n });\n }\n\n static defaultConfig () {\n return {\n padding: [0, 1],\n minOuterRadius: 10\n };\n }\n\n config (...params) {\n if (params.length) {\n const config = mergeRecursive(this.config(), params[0]);\n this._config = config;\n return this;\n }\n return this._config;\n }\n\n createScale (strategy) {\n return createScale({\n type: strategy.scale,\n range: this.range()\n });\n }\n\n domain (...domainVal) {\n if (domainVal.length) {\n const { domain: customDomain } = this.config();\n let domain = resolveAxisConfig(customDomain, domainVal[0], this);\n domain = sanitizeDomainWhenEqual(domain);\n this._scale.domain(domain);\n this._domain = domain;\n adjustDomain(this);\n }\n return this._domain;\n }\n\n getInnerRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[0];\n }\n return this._scale(domainVal);\n }\n\n getOuterRadius (domainVal) {\n if (domainVal === undefined) {\n return this.range()[1];\n }\n const radius = this._scale(domainVal) * this._radiusFactor;\n return radius;\n }\n\n range (...range) {\n if (range.length) {\n const { padding, range: customRange } = this.config();\n const sanitizedRange = range[0].map((v, i) => v + (i ? -padding[i] : padding[i]));\n const rangeVal = resolveAxisConfig(customRange, sanitizedRange, this);\n this._range = rangeVal;\n this._scale.range(rangeVal);\n adjustDomain(this);\n }\n return this._range;\n }\n\n setRadiusFactor (val) {\n this._radiusFactor = val;\n return this;\n }\n}\n","import * as ScaleType from './enums/scale-type';\n\nconst DATA_TYPES = {\n DIMENSION: 'dimension',\n CATEGORICAL: 'categorical',\n MEASURE: 'measure',\n TEMPORAL: '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.TEMPORAL]: ScaleType.TIME\n};\n\n","import { nestCollection, InvalidAwareTypes } 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 const groupedData = nestCollection({\n keys: groupByIndices,\n data\n });\n\n groupedData.forEach((d) => {\n const key = d.key;\n if (InvalidAwareTypes.isInvalid(key)) {\n d.key = InvalidAwareTypes.getInvalidType(key);\n }\n });\n return groupedData;\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 retrieveNearestGroupByReducers,\n getObjProp,\n COORD_TYPES,\n CommonProps\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { transformFactory } from '@chartshq/transform';\nimport { IDENTITY, STACK, GROUP, COLOR, SHAPE, SIZE, ENCODING, AGG_FN_SUM, ASCENDING, TEXT } from '../enums/constants';\n\nconst BAND = ScaleType.BAND;\nconst { POLAR, CARTESIAN } = COORD_TYPES;\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.forEach((elem) => {\n elem.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 *\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 *\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\nexport const encodingFieldInfRetriever = {\n [POLAR]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.RADIUS, ENCODING.RADIUS0, ENCODING.ANGLE, ENCODING.ANGLE0, COLOR, SHAPE, SIZE, TEXT]\n .forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n });\n return encodingInf;\n },\n [CARTESIAN]: (encoding, fieldsConfig) => {\n const encodingInf = {};\n [ENCODING.X, ENCODING.Y, ENCODING.X0, ENCODING.Y0, COLOR, SHAPE, SIZE, TEXT].forEach((e) => {\n const field = getObjProp(encoding, e, 'field');\n encodingInf[`${e}Field`] = field;\n encodingInf[`${e}FieldIndex`] = getObjProp(fieldsConfig, field, 'index');\n encodingInf[`${e}FieldType`] = getObjProp(fieldsConfig, field, 'def', 'type');\n encodingInf[`${e}FieldSubType`] = getObjProp(fieldsConfig, field, 'def', 'subtype');\n });\n\n return encodingInf;\n }\n};\n\n/**\n *\n *\n * @param {*} dataModel\n * @param {*} config\n * @param {*} transformType\n *\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\nconst dataNormalizers = {\n [POLAR]: (transformedData, encodingFieldInf, fieldsConfig) => {\n const {\n radiusFieldIndex,\n angleFieldIndex,\n radius0FieldIndex,\n angle0FieldIndex\n } = encodingFieldInf;\n const fieldsLen = Object.keys(fieldsConfig).length;\n\n /**\n * Returns normalized data from transformed data. It recursively traverses through\n * the transformed data if there it is nested.\n */\n return transformedData.map(data => data.map((d) => {\n const pointObj = {\n radius: d[radiusFieldIndex],\n angle: angleFieldIndex !== undefined ? d[angleFieldIndex] : 1,\n radius0: d[radius0FieldIndex],\n angle0: d[angle0FieldIndex]\n };\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n return pointObj;\n })).filter(d => d.length);\n },\n [CARTESIAN]: (transformedData, encodingFieldInf, fieldsConfig, transformType) => {\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 transformedData.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.source = tuple;\n pointObj.rowId = tuple[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = tuple[encodingFieldInf[`${enc}FieldIndex`]];\n });\n } else {\n pointObj = {\n x: d[xFieldIndex],\n y: d[yFieldIndex],\n x0: d[x0FieldIndex],\n y0: d[y0FieldIndex]\n };\n pointObj.source = d;\n pointObj.rowId = d[fieldsLen];\n [COLOR, SHAPE, SIZE, TEXT].forEach((enc) => {\n pointObj[enc] = d[encodingFieldInf[`${enc}FieldIndex`]];\n });\n }\n return pointObj;\n });\n }).filter(d => d.length);\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, context) => {\n const transformType = context.transformType();\n const transformedDataArr = transformType === IDENTITY ? [transformedData] : transformedData;\n const encodingFieldInf = context.encodingFieldsInf();\n const fieldsConfig = context.data().getFieldsConfig();\n return dataNormalizers[context.coord()](transformedDataArr, encodingFieldInf, fieldsConfig, transformType);\n};\n\nexport const domainCalculator = {\n [POLAR]: (data, layerInst) => {\n const config = layerInst.config();\n const { sort } = config;\n let angleValues = data[0];\n const radius0Field = getObjProp(config.encoding.radius0, 'field');\n if (sort) {\n angleValues = angleValues.sort((a, b) => (sort === ASCENDING ? a.radius - b.radius : b.radius - a.radius));\n }\n const radiusDomain = getDomainFromData(data, [ENCODING.RADIUS, radius0Field ?\n ENCODING.RADIUS0 : ENCODING.RADIUS]);\n return {\n radius: radiusDomain,\n angle: angleValues.map(d => d.angle),\n angle0: angleValues.map(d => d.angle0)\n };\n },\n [CARTESIAN]: (data, layerInst) => {\n const transformType = layerInst.transformType();\n const encodingFieldInf = layerInst.encodingFieldsInf();\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};\n\nexport const attachDataToVoronoi = (voronoi, points) => {\n voronoi.data([].concat(...points).filter(d => d.rowId !== 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\nexport const renderLayer = (context) => {\n const mount = context.mount();\n if (mount) {\n context.render(mount);\n context.dependencies().throwback.commit(CommonProps.ON_LAYER_DRAW, true, context.metaInf().parentNamespace);\n }\n};\n\nconst transformResolverPredicates = [\n encodingFieldInf => !encodingFieldInf.xField || !encodingFieldInf.yField,\n (encodingFieldInf, context, groupByField) => {\n const fieldsConfig = context.data().getFieldsConfig();\n return !groupByField || getObjProp(fieldsConfig[groupByField], 'def', 'type') === FieldType.MEASURE;\n },\n encodingFieldInf => encodingFieldInf.xFieldType === FieldType.DIMENSION &&\n encodingFieldInf.yFieldType === FieldType.DIMENSION,\n (encodingFieldInf, context, groupByField) => {\n const dimensionField = ['xField', 'yField'].find(type =>\n encodingFieldInf[`${type}Type`] === FieldType.DIMENSION);\n return (dimensionField && encodingFieldInf[dimensionField] === groupByField);\n }\n];\n\nexport const resolveInvalidTransformType = (context) => {\n const encodingFieldInf = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n\n if (transformResolverPredicates.some(fn => fn(encodingFieldInf, context, groupByField))) {\n return IDENTITY;\n }\n return null;\n};\n\nexport const getValidTransform = context => resolveInvalidTransformType(context) || context.config().transform.type;\n\nexport const getValidTransformForAggFn = (context) => {\n const resolvedInvalidTransformType = resolveInvalidTransformType(context);\n if (resolvedInvalidTransformType) {\n return resolvedInvalidTransformType;\n }\n\n const {\n xField,\n yField,\n xFieldType,\n yFieldType\n } = context.encodingFieldsInf();\n const groupByField = context.config().transform.groupBy;\n const isCustomTransformTypeProvided = !!getObjProp(context._customConfig, 'transform', 'type');\n let transformType = context.config().transform.type;\n\n if (!isCustomTransformTypeProvided && groupByField && xFieldType !== yFieldType) {\n const measureField = xFieldType === FieldType.MEASURE ? xField : yField;\n const { [measureField]: aggFn } = retrieveNearestGroupByReducers(context.data(), measureField);\n transformType = aggFn === AGG_FN_SUM ? STACK : GROUP;\n }\n\n return transformType;\n};\n\nexport const getMarkId = (source, schema) => source.filter((val, i) => schema[i] &&\n schema[i].type === FieldType.DIMENSION).join();\n\nexport const resolveEncodingValues = (data, i, dataArr, layerInst) => {\n const transformedValues = {};\n const values = data.values;\n const encoding = layerInst.config().encoding;\n for (const key in values) {\n const value = getObjProp(encoding[key], 'value');\n if (value instanceof Function) {\n transformedValues[key] = value(values, i, dataArr, layerInst);\n } else {\n transformedValues[key] = values[key];\n }\n }\n return transformedValues;\n};\n\nexport const getColorMetaInf = (color, colorAxis) => ({\n originalColor: colorAxis.getHslArray(color),\n stateColor: {},\n colorTransform: {}\n});\n\nconst getCoordValue = (radius, trig, angle, offset) => radius * Math[trig](angle) + offset;\n\nconst coordValueGetter = (radius, angle, xOffset, yOffset) => ({\n x: getCoordValue(radius, 'cos', angle, xOffset),\n y: getCoordValue(radius, 'sin', angle, yOffset)\n});\n\nexport const toCartesianCoordinates = (points, measurement, rangePlot = false) => {\n const xOffset = measurement.width / 2;\n const yOffset = measurement.height / 2;\n for (let i = 0, len = points.length; i < len; i++) {\n const point = points[i];\n const { angle, radius, radius0, angle0 } = point.update;\n point.update = coordValueGetter(radius, angle, xOffset, yOffset);\n if (rangePlot) {\n const update = point.update = coordValueGetter(radius0, angle0, xOffset, yOffset);\n const { x: x0, y: y0 } = coordValueGetter(radius, angle, xOffset, yOffset);\n update.x0 = x0;\n update.y0 = y0;\n }\n }\n return points;\n};\n\nexport const sortData = (data, axes) => {\n const { x: xAxis, y: yAxis } = axes;\n const axisArr = [xAxis, yAxis];\n for (let i = 0, len = axisArr.length; i < len; i++) {\n const axis = axisArr[i];\n if (axis.constructor.type() === BAND) {\n const key = i ? 'y' : 'x';\n const dom = axis.domain();\n const indices = dom.reduce((acc, v, idx) => {\n acc[v] = idx;\n return acc;\n }, {});\n data.sort((a, b) => indices[a[key]] - indices[b[key]]);\n break;\n }\n }\n return data;\n};\n","import * as PROPS from '../enums/props';\n\nexport const localOptions = {\n [PROPS.DATA]: {\n value: null\n }\n};\n","import { STATE_NAMESPACES } from 'muze-utils';\nimport * as PROPS from '../enums/props';\nimport { encodingFieldInfRetriever } from '../helpers';\n\nexport const listenerMap = [\n {\n props: [`${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}.${PROPS.DATA}`],\n type: 'registerImmediateListener',\n listener: (context, [, data]) => {\n const config = context.config();\n if (data && config) {\n if (context._cacheEnabled) {\n context._cachedData.push(data);\n } else {\n context._cachedData = [data];\n }\n const encodingValue = config.encoding;\n if (encodingValue) {\n const fieldsConfig = data.getFieldsConfig();\n const encodingFieldsInf = encodingFieldInfRetriever[context.coord()](encodingValue, fieldsConfig);\n context.encodingFieldsInf(encodingFieldsInf);\n context.resolveTransformType();\n context._transformedData = context.getTransformedData(data, config,\n context.transformType(), encodingFieldsInf);\n context._normalizedData = context.getNormalizedData(context._transformedData, fieldsConfig);\n if (config.calculateDomain !== false) {\n const domain = context.calculateDomainFromData(context._normalizedData,\n context.encodingFieldsInf(), context.data().getFieldsConfig());\n context.domain(domain);\n }\n }\n }\n },\n namespace: context => context.metaInf().namespace\n }\n];\n","import {\n getUniqueId,\n mergeRecursive,\n FieldType,\n selectElement,\n ReservedFields,\n DataModel,\n clone,\n generateGetterSetters,\n STATE_NAMESPACES,\n COORD_TYPES,\n transactor,\n defaultValue,\n getObjProp\n} from 'muze-utils';\nimport { SimpleLayer } from '../simple-layer';\nimport * as PROPS from '../enums/props';\nimport { props } from './props';\nimport {\n transformData,\n getNormalizedData,\n applyInteractionStyle,\n getValidTransform,\n domainCalculator,\n renderLayer\n} from '../helpers';\nimport { localOptions } from './local-options';\nimport { listenerMap } from './listener-map';\n\nconst layerNs = [STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * An abstract class which gives definition of common layer functionality like\n * - transforming data for various modes. Supported modes: identity, group and stack.\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 * @module BaseLayer\n */\nexport default class BaseLayer extends SimpleLayer {\n\n /**\n * Creates a layer using a configuration and data.\n *\n * @public\n * @constructor\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.size 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} dependencies.smartLabel Smartlabel singleton instance\n */\n constructor (data, axes, config, dependencies = {}) {\n super();\n\n generateGetterSetters(this, props);\n this.axes(axes);\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 this._animationDonePromises = [];\n this._graphicElems = {};\n this._customConfig = null;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys(localOptions).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getListeners () {\n return {\n store: [...listenerMap, {\n type: 'registerChangeListener',\n props: [`${layerNs[1]}.${PROPS.DATA}`,\n ...['x', 'y', 'radius'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context) => {\n renderLayer(context);\n },\n subNamespace: (context) => {\n const { unitRowIndex, unitColIndex, namespace } = context.metaInf();\n return {\n [`${layerNs[1]}.${PROPS.DATA}`]: namespace,\n [`${groupNs}.domain.x`]: `${unitColIndex}0`,\n [`${groupNs}.domain.y`]: `${unitRowIndex}0`,\n [`${groupNs}.domain.radius`]: `${unitRowIndex}-${unitColIndex}`\n };\n }\n }],\n throwback: []\n };\n }\n\n static getQualifiedStateProps () {\n const layerState = BaseLayer.getState();\n return layerState.map((state, i) => Object.keys(state).map(prop => `${layerNs[i]}.${prop}`));\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { namespace } = this.metaInf();\n store.addSubNamespace(namespace, BaseLayer.formalName(), this);\n\n transactor(this, localOptions, store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE}`\n });\n return this;\n }\n return this._store;\n }\n\n domain (...dom) {\n const prop = `${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`;\n const store = this.store();\n if (dom.length) {\n const { parentNamespace, namespace } = this.metaInf();\n const domain = defaultValue(store.get(prop, parentNamespace), {});\n domain[namespace] = dom[0];\n this.store().commit(prop, domain, parentNamespace);\n return this;\n }\n return this.store().get(prop, this.metaInf().namespace);\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 * .layers([\n * mark: 'bar',\n * encoding: { ... }\n * ])\n * ```\n *\n * @static\n * @public\n *\n * @return {string} name of layer\n */\n static formalName () {\n return 'base';\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 *\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 * @public\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 * @public\n *\n * @return {string} id of the layer\n */\n id () {\n return this._id;\n }\n\n /**\n * Returns the transformed data based on given transform type.\n * It first 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 */\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 categorical 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 = domainCalculator[this.coord()](data, this);\n }\n return domains;\n }\n\n static 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 { parentNamespace, namespace } = this.metaInf();\n const domains = getObjProp(this.store()\n .get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, parentNamespace), namespace);\n return encodingType !== undefined ? domains[encodingType] || [] : domains;\n }\n\n /**\n * Normalizes the transformed data and returns it.\n *\n * @param {string} encodingType type of encoding x, y, etc.\n * @return {Object} Axis domains\n */\n getNormalizedData (transformedData) {\n return getNormalizedData(transformedData, this);\n }\n\n /**\n * Gets the nearest point closest to the given x and y coordinate. If no nearest point is found, then it returns\n * null.\n *\n * @public\n *\n * @param {number} x X Coordinate.\n * @param {number} y Y Coordinate.\n *\n * @return {Object} Information of the nearest point.\n * ```\n * {\n * // id property contains the field names and their corresponding values in a 2d array. This is the data\n * // associated with the nearest point.\n * id: // Example data: [['Origin'], ['USA']],\n * dimensions: // Physical dimensions of the point.\n * layerId: // Id of the layer instance.\n * }\n * ```\n */\n getNearestPoint () {\n return null;\n }\n\n applyInteractionStyle (interactionType, selectionSet, apply, styles) {\n const interactionConfig = this.config().interaction || {};\n\n let interactionStyles = interactionConfig[interactionType];\n interactionStyles = styles || interactionStyles;\n if (interactionStyles) {\n applyInteractionStyle(this, selectionSet, interactionStyles, {\n apply,\n interactionType\n });\n }\n }\n\n disableUpdate () {\n this._updateLock = true;\n return this;\n }\n\n enableUpdate () {\n this._updateLock = false;\n return this;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransform(this);\n }\n\n transformType () {\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 *\n * @memberof BaseLayer\n */\n elemType () {\n return 'g';\n }\n\n /**\n * Disposes the entire layer.\n *\n * @return {BaseLayer} Instance of layer.\n */\n remove () {\n const { namespace, parentNamespace } = this.metaInf();\n const store = this.store();\n store.removeSubNamespace(namespace, BaseLayer.formalName());\n const layersDomain = store.get(`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`);\n const unitDom = layersDomain[parentNamespace];\n unitDom && (delete unitDom[namespace]);\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 *\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 *\n * @memberof BaseLayer\n */\n getIdentifiersFromData (data) {\n const schema = this.data().getSchema();\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 hasPlotSpan () {\n return false;\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 * Returns the information of the marks corresponding to the supplied identifiers. Identifiers are a set of field\n * names and their corresponding values in an array. It can also be an instance of datamodel.\n *\n * For example,\n * ```\n * const identifiers = [\n * ['Origin', 'Cylinders'],\n * ['USA', '8']\n * ];\n * const points = barLayer.getPointsFromIdentifiers(identifiers);\n * ```\n * @public\n * @param {Array|DataModel} identifiers Identifiers of the marks.\n * @param {Object} config Optional configuration which describes how to get the information.\n * @param {boolean} config.getAllAttrs If true, then returns all the information of the points, else returns only\n * the positions of the points.\n * @param {boolean} config.getBBox If true, then returns the bounding box of all the marks.\n *\n * @return {Array} Array of points contains\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 { source, rowId } = 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] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -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._normalizedData;\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.source;\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.source;\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().getSchema()];\n }\n\n /**\n * Returns the dom elements associated with the supplied set of row ids.\n * Each element in the layer is mapped with a row of the datamodel. When given an array of row ids, it returns all\n * the elements which is mapped with those row ids.\n *\n * @public\n * @param {Array} set Array of row ids\n *\n * @return {Selection} D3 Selection of dom elements.\n */\n getPlotElementsFromSet (set) {\n const graphicElems = this._graphicElems;\n const elems = [];\n for (let i = 0, len = set.length; i < len; i++) {\n const elem = graphicElems[set[i]];\n if (elem) {\n elems.push(elem);\n }\n }\n return elems;\n }\n\n /**\n * Notifies when all animations/transitions of the layer are completed.\n *\n * @public\n * @return {Promise} Returns a promise to notify the animation completion.\n */\n animationDone () {\n return Promise.all(this._animationDonePromises);\n }\n\n registerAnimationDoneHook () {\n let resolveFn;\n const promise = new Promise((resolve) => {\n resolveFn = resolve;\n });\n this._animationDonePromises.push(promise);\n\n return () => {\n resolveFn();\n };\n }\n\n getRenderProps () {\n if (this.coord() === COORD_TYPES.POLAR) {\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.radius`];\n }\n const { unitRowIndex: rowIndex, unitColIndex: colIndex } = this.metaInf();\n return [`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.y.${rowIndex}0`,\n `${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.x.${colIndex}0`];\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\nconst filterFn = (d) => {\n const { update } = d;\n return update.y !== null && update.x !== null;\n};\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 { layer, 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(filterFn);\n\n filteredPoints = points;\n if (connectNullData) {\n filteredPoints = points.filter(filterFn);\n }\n\n updateStyle(mount, style);\n let element = makeElement(mount, 'path', points.length ? [points[0].className] : []);\n element.attr('class', d => d);\n if (!transition.disabled) {\n element = element.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\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 InvalidAwareTypes,\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 {\n attachDataToVoronoi,\n animateGroup,\n positionPoints,\n getIndividualClassName,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to render straight or smoothed line paths. The mark type of this layer is ```line```.\n *\n * @public\n *\n * @class\n * @module LineLayer\n * @extends BaseLayer\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 static formalName () {\n return 'line';\n }\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 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 static 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) {\n let points = [];\n const axes = this.axes();\n const xAxis = axes.x;\n const yAxis = axes.y;\n const colorAxis = axes.color;\n const { xFieldType, yFieldType } = 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 sortData(data, axes);\n points = data.map((d, i) => {\n const xPx = xAxis.getScaleValue(d.x) + xAxis.getUnitWidth() / 2;\n const yPx = yAxis.getScaleValue(d.y) + yAxis.getUnitWidth() / 2;\n const color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color\n },\n data: d\n }, i, data, this);\n\n const point = {\n enter: {},\n update: {\n x: d.x instanceof InvalidAwareTypes ? null : resolvedEncodings.x,\n y: d.y instanceof InvalidAwareTypes ? null : resolvedEncodings.y\n },\n style: {\n stroke: resolvedEncodings.color,\n 'fill-opacity': 0\n },\n rowId: d.rowId,\n source: d.source,\n meta: getColorMetaInf(resolvedEncodings.color, colorAxis)\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\n points = points.filter((point) => {\n const { update } = point;\n return !isNaN(update.x) && !isNaN(update.y);\n });\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 normalizedData = this._normalizedData;\n const transformedData = this._transformedData;\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);\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.source[colorFieldIndex] !== null &&\n d.source[colorFieldIndex] !== undefined);\n\n if (colorValFn) {\n color = colorValFn(dataArr, i, normalizedData);\n } else {\n color = axes.color.getColor(colorVal && colorVal.source[colorFieldIndex]);\n }\n\n style = this.getPathStyle(color);\n this.getDrawFn()({\n layer: this,\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].source[colorFieldIndex] || d[0].rowId);\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 { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\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 { layer, 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(points.length ? [points[0].className] : []);\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 .on('end', layer.registerAnimationDoneHook())\n .attr('d', updateAreaPath(filteredPoints))\n .each(function (d) {\n const element = selectElement(this);\n element.attr('class', d);\n Object.keys(style).forEach(key => element.style(key, style[key]));\n });\n};\n\nexport default drawArea;\n","import { FieldType, InvalidAwareTypes, getObjProp } 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 {\n getAxesScales,\n positionPoints,\n getIndividualClassName,\n getValidTransformForAggFn,\n getColorMetaInf,\n resolveEncodingValues,\n sortData\n} from '../../helpers';\n\n/**\n * Area layer renders a closed path. The mark type of this layer is ```area```. This layer can be used\n * to create stacked or multi-series areas and vertical range area plots by using the encoding properties.\n *\n * To create this layer using layer configuration from canvas,\n * ```\n * canvas.layers([{\n * mark: 'area',\n * transform: {\n * type: 'stack' // Produces a stacked area.\n * }\n * }]);\n * ```\n *\n * @public\n *\n * @class\n * @module AreaLayer\n * @extends LineLayer\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 *\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 && getObjProp(domains[type], 'length')) {\n domains[type][0] = Math.min(domains[type][0], 0);\n domains[type][1] = Math.max(0, domains[type][1]);\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) {\n let points = [];\n const transformType = this.transformType();\n const axes = this.axes();\n const colorAxis = axes.color;\n const config = this.config();\n const fieldsConfig = this.data().getFieldsConfig();\n const { xField, yField, y0Field } = this.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 const minYVal = yAxis.domain()[0];\n const basePos = minYVal < 0 ? yAxis.getScaleValue(0) : yAxis.getScaleValue(minYVal);\n sortData(data, axes);\n points = data.map((d, i) => {\n let color;\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) : basePos;\n color = colorAxis.getColor(d.color);\n const invalidY = d.y instanceof InvalidAwareTypes;\n const invalidY0 = d.y0 instanceof InvalidAwareTypes;\n const resolvedValues = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, this);\n color = resolvedValues.color;\n const point = {\n enter: {\n x: xPx,\n y: invalidY ? null : basePos,\n y0: invalidY0 ? null : basePos\n },\n update: {\n x: xPx,\n y: invalidY ? null : resolvedValues.y,\n y0: invalidY0 ? null : resolvedValues.y0\n },\n source: d.source,\n rowId: d.rowId,\n className: classNameFn ? classNameFn(d, i, data, this) : '',\n style: {\n fill: color\n },\n meta: getColorMetaInf(color, colorAxis)\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 points = points.filter((point) => {\n const update = point.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n\n resolveTransformType () {\n this._transformType = getValidTransformForAggFn(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 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 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 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 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 Symbols,\n FieldType,\n ReservedFields\n} from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { BaseLayer } from '../../base-layer';\nimport { getIndividualClassName, resolveEncodingValues, getColorMetaInf } from '../../helpers';\nimport { tweenPie, tweenExitPie, getPreviousPoint } from './arc-helper';\nimport './styles.scss';\n\nconst arc = Symbols.arc;\n\n/**\n * Arc Layer creates a plot with polar coordinates.\n *\n * @public\n *\n * @class\n * @module ArcLayer\n * @extends BaseLayer\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 static formalName () {\n return 'arc';\n }\n\n elemType () {\n return 'path';\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 { source, rowId } = dataPoint;\n return {\n id: this.getIdentifiersFromData(source, rowId),\n layerId: this.id()\n };\n }\n return null;\n }\n\n translatePoints (data) {\n const { angle, color: colorAxis, radius: radiusAxis } = this.axes();\n const pieIndex = {};\n const prevData = this._points[0] || [];\n const points = [];\n const angleV = {};\n\n this._prevPieData = {};\n prevData.forEach((e, index) => {\n this._prevPieData[e.rowId] = [e, index];\n pieIndex[e.index] = e;\n });\n data.forEach((d, i) => {\n const angles = angle.getScaleValue(d.angle);\n if (angles) {\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const uid = d.rowId;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n radius: radiusAxis.getOuterRadius(d.radius),\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color: colorAxis.getColor(d.color),\n angle0: startAngle,\n angle: endAngle,\n startAngle,\n endAngle,\n startAngle0: startAngle,\n endAngle0: endAngle\n },\n data: d\n }, i, data, this);\n const color = resolvedEncodings.color;\n points.push({\n source: d.source,\n index: i,\n enter: {},\n update: {\n angle0: resolvedEncodings.angle0,\n angle: resolvedEncodings.angle,\n radius0: resolvedEncodings.radius0,\n radius: resolvedEncodings.radius\n },\n color,\n meta: getColorMetaInf(color, colorAxis),\n rowId: uid,\n _previousInfo: this._prevPieData[uid] ? this._prevPieData[uid][0] :\n getPreviousPoint(pieIndex, i, this)\n });\n }\n });\n return points;\n }\n\n /**\n *\n *\n * @param {Object} container\n * @return {}\n * @memberof ArcLayer\n */\n render (container) {\n const measurement = this.measurement();\n const {\n classPrefix,\n defClassName,\n cornerRadius,\n padAngle,\n padRadius,\n transition\n } = this.config();\n const qualClassName = getQualifiedClassName(defClassName, this.id(), classPrefix);\n // This returns a function that generates the arc path based on the datum provided\n const path = this._arcFn = arc()\n .cornerRadius(cornerRadius)\n .startAngle(d => d.update.angle0 + Math.PI / 2)\n .endAngle(d => d.update.angle + Math.PI / 2)\n .padAngle(padAngle)\n .padRadius(padRadius)\n .outerRadius(d => d.update.radius)\n .innerRadius(d => d.update.radius0);\n\n this._points = this._normalizedData.map(arr => this.translatePoints(arr));\n const graphicElems = this._graphicElems = {};\n // Creating the group that holds all the arcs\n const g = makeElement(selectElement(container), 'g', this._points, `${qualClassName[0]}-group`)\n .classed(`${qualClassName[1]}-group`, true)\n .attr('transform', `translate(${measurement.width / 2},\n ${measurement.height / 2})`);\n const tween = (elem) => {\n makeElement(elem, 'path', d => [d], `${qualClassName[0]}-path`)\n .style('fill', d => d.color)\n .each(function (d) {\n graphicElems[d.rowId] = selectElement(this);\n })\n .transition()\n .duration(transition.duration)\n .on('end', this.registerAnimationDoneHook())\n .attrTween('d', (...params) => tweenPie(path, params))\n .attr('class', (d, i) => {\n const individualClass = getIndividualClassName(d, i, this._points, 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', d => d, `${qualClassName[0]}`,\n {\n update: tween,\n exit: tweenExit\n })\n .attr('class', (d, i) => `${qualClassName[0]} ${qualClassName[1]}-${i}`);\n tweenExitPie(consecutiveExits, transition, path);\n return this;\n }\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 { source, rowId } = tData;\n return fieldNames.every((field, idx) => {\n if (field in fieldsConfig && fieldsConfig[field].def.type === FieldType.DIMENSION) {\n return values.findIndex(d => d[idx] === source[fieldsConfig[field].index]) !== -1;\n } else if (field === ReservedFields.ROW_ID) {\n return values.findIndex(d => d[idx] === rowId) !== -1;\n } return true;\n });\n });\n\n const pieSliceInf = filteredPies[0];\n if (pieSliceInf) {\n const measurement = this.measurement();\n const centroid = this._arcFn.centroid(pieSliceInf);\n return [{\n x: centroid[0] + measurement.width / 2,\n y: centroid[1] + measurement.height / 2,\n width: 2,\n height: 2\n }];\n }\n return [];\n }\n}\n","import { getObjProp, interpolator, FieldType, selectElement } from 'muze-utils';\nimport { ANGLE, RADIUS, SIZE, COLOR } from '../../enums/constants';\n\nexport const getPreviousPoint = (prevData, currIndex, context) => {\n const prevArc = prevData[currIndex - 1];\n const nextArc = prevData[currIndex];\n const [startAngle, endAngle] = context.axes().angle.range();\n if (prevArc && nextArc) {\n return {\n update: {\n angle0: getObjProp(prevArc, 'update', 'angle'),\n angle: getObjProp(nextArc, 'update', 'angle0')\n }\n };\n } else if (!nextArc) {\n return {\n update: {\n angle0: (endAngle - 90) * Math.PI * 2 / 360,\n angle: (endAngle - 90) * Math.PI * 2 / 360\n }\n };\n }\n return {\n update: {\n angle0: (startAngle - 90) * Math.PI * 2 / 360,\n angle: (startAngle - 90) * Math.PI * 2 / 360\n }\n };\n};\n\nexport const tweenPie = (path, b) => {\n const datum = b[0];\n return function (t) {\n return path(interpolator()(datum._previousInfo, datum)(t));\n };\n};\n\nexport const tweenExitPie = (consecutiveExits, transition, path) => {\n if (consecutiveExits.length > 0) {\n consecutiveExits.forEach((consecutiveExitArr) => {\n const startAngle = consecutiveExitArr[0].datum.update.angle0;\n const endAngle = consecutiveExitArr[consecutiveExitArr.length - 1].datum.update.angle;\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 return path(interpolator()(datum, {\n update: {\n angle0: mid,\n angle: mid,\n radius: datum.radius,\n radius0: datum.radius0\n }\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, layerInst) => {\n const selection = selectElement(container).selectAll('g').data(data);\n const { smartLabel } = layerInst._dependencies;\n const graphicElems = layerInst._graphicElems;\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 graphicElems[dataObj.rowId] = element;\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 textEl.attr('alignment-baseline', dataObj['alignment-baseline']);\n textEl.attr('transform', `rotate(${dataObj.rotation} ${update.x} ${update.y})`);\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 size: {},\n radius: {},\n angle: {},\n text: {\n value: '',\n formatter: (val, i, data, context) => {\n const valueParser = context.valueParser();\n return valueParser(val);\n },\n background: {\n padding: 10\n }\n },\n rotation: {\n value: 0\n },\n 'alignment-baseline': {\n value: 'middle'\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 { positionPoints, getIndividualClassName, resolveEncodingValues, getColorMetaInf, toCartesianCoordinates }\n from '../../helpers';\nimport { TEXT_ANCHOR_MIDDLE, ENCODING } from '../../enums/constants';\n\nimport './styles.scss';\n\nconst defaultEncoding = defaultConfig.encoding;\nconst alignmentBaseLine = defaultEncoding['alignment-baseline'].value;\nconst defRotation = defaultEncoding.rotation.value;\n\nconst pointTranslators = {\n polar: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { radius: radiusAxis, color: colorAxis, angle: angleAxis } = axes;\n const { formatter: textFormatter } = textEncoding;\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\n const angleV = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const source = d.source;\n const text = d.text;\n\n const color = colorAxis.getColor(d.color);\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n\n const angle = (startAngle + endAngle) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n angle,\n radius,\n color,\n text,\n startAngle,\n endAngle,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n angle: resolvedVal.angle,\n radius: resolvedVal.radius\n },\n text: textFormatter ? textFormatter(text, i, data, layerInst) : resolvedVal.text,\n color: resolvedVal.color,\n rotation: resolvedVal.rotation,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedVal['alignment-baseline'],\n meta: getColorMetaInf(resolvedVal.color, colorAxis),\n style: {},\n source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = toCartesianCoordinates(positionPoints(layerInst, points), layerInst.measurement());\n\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n },\n cartesian: (data, config, layerInst) => {\n let points = [];\n const axes = layerInst.axes();\n const colorAxis = axes.color;\n const encoding = layerInst.config().encoding;\n const textEncoding = encoding.text;\n const { field: textField, value, formatter: textFormatter } = textEncoding;\n const fieldsConfig = layerInst.data().getFieldsConfig();\n\n const backgroundEncoding = encoding.text.background;\n const backgroundPadding = backgroundEncoding.padding;\n const backgroundValue = backgroundEncoding.value;\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.source;\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 = colorAxis.getColor(d.color, colorAxis);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n text: textValue,\n color,\n rotation: defRotation,\n 'alignment-baseline': alignmentBaseLine\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n },\n text: textFormatter(resolvedEncodings.text, i, data, layerInst),\n color: resolvedEncodings.color,\n background: {\n value: backgroundValue instanceof Function ? backgroundValue(d, i, data, layerInst) : null,\n padding: backgroundPadding\n },\n 'alignment-baseline': resolvedEncodings['alignment-baseline'],\n rotation: resolvedEncodings.rotation,\n meta: getColorMetaInf(resolvedEncodings.color, colorAxis),\n style: {},\n source: d.source,\n rowId: d.rowId\n };\n\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n\n points = positionPoints(layerInst, points);\n points = points.filter((d) => {\n const update = d.update;\n return !isNaN(update.x) && !isNaN(update.y);\n });\n return points;\n }\n};\n\n/**\n * This layer is used to create labels for each data point. It has an encoding property ```text```\n * which determines from which field's data the value of the label will be taken. The text encoding\n * property is necessary for the layer to render the text.The mark type of this layer is ```text```.\n *\n * @public\n *\n * @class\n * @module TextLayer\n * @extends BaseLayer\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 getPointTranslator (val) {\n return pointTranslators[val];\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, config = {}) {\n return pointTranslators[this.coord()](data, config, this);\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 const config = this.config();\n const normalizedData = this._normalizedData;\n const className = config.className;\n const qualifiedClassName = getQualifiedClassName(config.defClassName, this.id(), config.classPrefix);\n const containerSelection = selectElement(container);\n\n containerSelection.classed(`${qualifiedClassName.join(' ')} ${className}`, true);\n this._graphicElems = {};\n\n createElements({\n data: normalizedData,\n append: 'g',\n selector: 'g',\n container,\n each: (dataArr, group) => {\n const node = group.node();\n const points = this.translatePoints(dataArr, {}, this);\n setStyles(node, {\n 'text-anchor': TEXT_ANCHOR_MIDDLE\n });\n drawText(node, points, {\n className: qualifiedClassName[0]\n }, this);\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 *\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, groupElement) {\n const { shape, size, update } = d;\n\n if (shape instanceof Promise) {\n shape.then((res) => {\n d.shape = res;\n createShape(d, groupElement);\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 makeElement(groupElement, () => newShape, [1]);\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, groupElement);\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 const { layer, container, points, transition, className } = params;\n const { duration, effect, disabled } = transition;\n const mount = selectElement(container);\n const graphicElems = layer._graphicElems;\n mount.attr('class', className);\n return makeElement(mount, 'g', points, null, {\n enter: (group, d) => {\n const { enter } = d;\n group.attr('transform', `translate(${enter.x},${enter.y})`);\n },\n update: (group, d) => {\n createShape(d, group);\n graphicElems[d.rowId] = group;\n const { update, style } = d;\n objectIterator(style, key => group.style(key, style[key]));\n group.attr('class', className);\n group.classed(d.className, true);\n if (!disabled) {\n group = group.transition()\n .duration(transition.duration)\n .on('end', layer.registerAnimationDoneHook());\n }\n group.attr('transform', `translate(${update.x},${update.y})`);\n },\n exit: (exitGroup) => {\n if (!disabled) {\n exitGroup.transition().ease(easeFns[effect])\n .duration(duration)\n .on('end', () => exitGroup.remove())\n .style('fill-opacity', 0)\n .style('stroke-opacity', 0);\n } else {\n exitGroup.remove();\n }\n }\n }, params.keyFn);\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 {\n attachDataToVoronoi,\n positionPoints,\n getPlotMeasurement,\n getIndividualClassName,\n getMarkId,\n getColorMetaInf,\n resolveEncodingValues\n} from '../../helpers';\n\nimport './styles.scss';\n\n/**\n * This layer is used to create various symbols for each data point. This is commonly used in\n * scatterplot visualizations. The mark type of this layer is ```point```.\n *\n * @public\n *\n * @class\n * @module PointLayer\n * @extends BaseLayer\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 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 static formalName () {\n return 'point';\n }\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, config = {}) {\n let points = [];\n const encoding = this.config().encoding;\n const axes = this.axes();\n const {\n x,\n y\n } = encoding;\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 measurement = this.measurement();\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 size = sizeAxis.getSize(d.size);\n const shape = shapeAxis.getShape(d.shape);\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 let color = colorAxis.getColor(d.color);\n\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n color,\n shape,\n size,\n data: d\n },\n data: d\n }, i, data, this);\n color = resolvedEncodings.color;\n const style = {\n fill: color,\n stroke: color\n };\n const pos = {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y\n };\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: pos,\n update: pos,\n shape: resolvedEncodings.shape,\n size: Math.abs(resolvedEncodings.size),\n meta: getColorMetaInf(color, colorAxis),\n style,\n source: d.source,\n rowId: d.rowId\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._transformedData.map(d => d.key);\n const { transition, className, defClassName, classPrefix } = config;\n const normalizedData = this._normalizedData;\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 this._graphicElems = {};\n\n const schema = this.data().getSchema();\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 layer: this,\n container: group.node(),\n points,\n interpolate: config.interpolate,\n className: seriesClassName,\n transition,\n keyFn: v => getMarkId(v.source, schema)\n });\n }\n }, data => data[0].rowId);\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 [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, 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 { source, rowId } = point.data.data;\n const identifiers = this.getIdentifiersFromData(source, rowId);\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 = (layer, elem, datum, index, context) => {\n const { transition } = context;\n const { duration, disabled, effect } = transition;\n const selection = elem;\n\n const selTransition = disabled ? selection :\n selection.transition()\n .duration(duration)\n .ease(easeFns[effect])\n .on('end', layer.registerAnimationDoneHook());\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 { layer, points, container, keyFn } = params;\n const graphicElems = layer._graphicElems;\n const updateFns = {\n enter (elem, d) { barEnterFn(elem, d); },\n update (elem, d, i) {\n graphicElems[d.rowId] = elem;\n transitionBars(layer, elem, d, i, params);\n }\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 { MeasureSubtype, DimensionSubtype } from 'muze-utils';\nimport { STACK } from '../../enums/constants';\nimport { positionPoints, getIndividualClassName, getColorMetaInf, resolveEncodingValues } from '../../helpers';\n\nconst positionRetriever = {\n x: (xPx, isNegativeVal, barBasePos) => (isNegativeVal ? [xPx, barBasePos] : [barBasePos, xPx]),\n y: (yPx, isNegativeVal, barBasePos) => (isNegativeVal ? [barBasePos, yPx] : [yPx, barBasePos])\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fieldInfo\n * @param {*} config\n * @param {*} data\n *\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 === MeasureSubtype.CONTINUOUS || 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 minDomVal = axis.domain()[0];\n const barBasePos = minDomVal < 0 ? axis.getScaleValue(0) : axis.getScaleValue(minDomVal);\n pos = axis.getScaleValue(data[type]);\n let endPos = axis.getScaleValue(data[`${type}0`]);\n\n enterSpace = 0;\n const isNegativeVal = data[type] < 0;\n if (transformType !== STACK) {\n [pos, endPos] = positionRetriever[type](pos, isNegativeVal, barBasePos);\n }\n space = Math.abs(pos - endPos);\n enter = barBasePos;\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 *\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 sizeEncoding = encoding.size || {};\n const {\n x0Field,\n y0Field,\n xFieldSubType,\n yFieldSubType\n } = context.encodingFieldsInf();\n const measurement = context.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\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\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 let color = colorAxis.getColor(d.color);\n\n const update = dimensions.update;\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: update.x,\n y: update.y,\n width: update.width,\n height: update.height,\n color\n },\n data: d\n }, i, data, context);\n color = resolvedEncodings.color;\n const { x, y, width, height } = resolvedEncodings;\n if (!isNaN(x) && !isNaN(y) && d.rowId !== undefined) {\n let point = null;\n point = {\n enter: dimensions.enter,\n update: {\n x,\n y,\n width,\n height\n },\n source: d.source,\n rowId: d.rowId,\n style: {\n fill: color\n },\n meta: getColorMetaInf(color, colorAxis)\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 getQualifiedClassName,\n selectElement,\n createElements,\n clipElement,\n DimensionSubtype,\n FieldType,\n MeasureSubtype,\n Scales,\n getNearestValue,\n getObjProp\n} from 'muze-utils';\nimport { BaseLayer } from '../../base-layer';\nimport { drawRects } from './renderer';\nimport { defaultConfig } from './default-config';\nimport { getPlotMeasurement, getValidTransformForAggFn } 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 rectangle marks. The mark type of this layer is ```bar```. This layer can be used\n * to create stacked or grouped bars, range bars, heatmap plots and also reference bands by using\n * the encoding properties.\n *\n * @public\n *\n * @class\n * @module BarLayer\n * @extends BaseLayer\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 *\n * @memberof BarLayer\n */\n elemType () {\n return 'rect';\n }\n\n /**\n *\n *\n * @static\n *\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 *\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 *\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 && getObjProp(domain[d], 'length')) {\n if (encodingFieldInf[`${d}0Field`]) {\n domain[d] = domain[d].sort((a, b) => a - b);\n } else {\n domain[d][0] = Math.min(domain[d][0], 0);\n domain[d][1] = Math.max(0, domain[d][1]);\n }\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 normalizedDataArr = this._normalizedData;\n const transformedData = this._transformedData;\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 this._graphicElems = {};\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 layer: this,\n container: group.node(),\n points,\n className: seriesClassName,\n transition,\n style: {},\n keyFn: d => dimensions.map(key => d.source[key]).join('-')\n });\n }\n });\n return this;\n }\n\n /**\n *\n *\n * @param {*} normalizedData\n * @param {*} keys\n *\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 resolveTransformType () {\n this._transformType = getValidTransformForAggFn(this);\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 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 === MeasureSubtype.CONTINUOUS) {\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 value = getNearestValue(filterData, value);\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.source;\n if (values) {\n identifiers = this.getIdentifiersFromData(values, pointFound.rowId);\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 hasPlotSpan () {\n return true;\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 interpolate: 'linear',\n encoding: {\n color: { },\n x: {},\n y: {},\n x0: {},\n y0: {},\n radius: {},\n radius0: {},\n angle: {},\n angle0: {},\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\n","import { selectElement, Symbols, pathInterpolators } from 'muze-utils';\n\nconst line = Symbols.line;\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, interpolate, layer } = params;\n const mount = selectElement(container);\n const ticks = mount.selectAll('path').data(points, keyFn);\n const ticksEnter = ticks.enter().append('path');\n const graphicElems = layer._graphicElems;\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 graphicElems[d.rowId] = selection;\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 curveInterpolatorFn = pathInterpolators[interpolate];\n const linepath = line()\n .curve(curveInterpolatorFn)\n .x(e => e[0])\n .y(e => e[1]);\n d.className && selection.classed(d.className, true);\n selection.attr('d', linepath([[update.x, update.y], [x0, y0]]));\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 { ENCODING } from '../../enums/constants';\nimport drawTicks from './renderer';\nimport './styles.scss';\nimport { getAxesScales, positionPoints, getIndividualClassName,\n getColorMetaInf, resolveEncodingValues, toCartesianCoordinates } from '../../helpers';\n\nconst pointTranslators = {\n polar: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const { radius: radiusAxis, angle: angleAxis, angle0: angle0Axis } = axes;\n const measurement = layerInst.measurement();\n\n const colorAxis = axes.color;\n const angleV = {};\n const angle0V = {};\n for (let i = 0, len = data.length; i < len; i++) {\n const d = data[i];\n const color = colorAxis.getColor(d.color);\n const angles = angleAxis.getScaleValue(d.angle);\n !angleV[d.angle] && (angleV[d.angle] = 0);\n const { startAngle, endAngle } = angles[angleV[d.angle]++];\n const angles0 = angle0Axis.getScaleValue(d.angle0);\n !angle0V[d.angle0] && (angle0V[d.angle0] = 0);\n const { startAngle: startAngle0, endAngle: endAngle0 } = angles0[angle0V[d.angle0]++];\n const radius = radiusAxis.getOuterRadius(d.radius);\n const angle = (startAngle + endAngle) / 2;\n const angle0 = (startAngle0 + endAngle0) / 2;\n const resolvedVal = resolveEncodingValues({\n values: {\n radius,\n radius0: radiusAxis.getInnerRadius(d.radius0),\n color,\n angle,\n angle0,\n startAngle,\n endAngle,\n startAngle0,\n endAngle0\n },\n data: d\n }, i, data, layerInst);\n const point = {\n enter: {},\n update: {\n radius: resolvedVal.radius,\n radius0: resolvedVal.radius0,\n angle: resolvedVal.angle,\n angle0: resolvedVal.angle0\n },\n style: {\n stroke: resolvedVal.color\n },\n source: d.source,\n rowId: d.rowId,\n meta: getColorMetaInf(resolvedVal.color, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n }\n points = toCartesianCoordinates(positionPoints(layerInst, points), measurement, true);\n return points;\n },\n cartesian: (data, config = {}, layerInst) => {\n const axes = layerInst.axes();\n let points = [];\n const {\n xAxis,\n yAxis\n } = getAxesScales(axes);\n const {\n xField,\n yField,\n x0Field,\n y0Field,\n xFieldType,\n yFieldType\n } = layerInst.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 measurement = layerInst.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.source;\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 color = colorAxis.getColor(d.color);\n const resolvedEncodings = resolveEncodingValues({\n values: {\n x: xPx,\n y: yPx,\n x0: x0Px,\n y0: y0Px,\n color\n },\n data: d\n }, i, data, layerInst);\n\n if (!isNaN(xPx) && !isNaN(yPx)) {\n const point = {\n enter: {},\n update: {\n x: resolvedEncodings.x,\n y: resolvedEncodings.y,\n x0: resolvedEncodings.x0,\n y0: resolvedEncodings.y0\n },\n style: {\n stroke: resolvedEncodings.color\n },\n source: row,\n rowId: d.rowId,\n meta: getColorMetaInf(resolvedEncodings.color, colorAxis)\n };\n point.className = getIndividualClassName(d, i, data, layerInst);\n points.push(point);\n layerInst.cachePoint(d[key], point);\n }\n }\n points = positionPoints(layerInst, points);\n return points;\n }\n};\n\n/**\n * This layer is used to create small lines. The orientation of the line is determined by the positional\n * encoding properties x0 and y0. The mark type of the layer is ```tick```.\n *\n * @public\n *\n * @class\n * @module TickLayer\n * @extends BaseLayer\n */\nexport default class TickLayer extends PointLayer {\n\n /**\n *\n *\n * @staticg\n *\n * @memberof TickLayer\n */\n static defaultConfig () {\n return defaultConfig;\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static formalName () {\n return 'tick';\n }\n\n /**\n *\n *\n * @static\n *\n * @memberof TickLayer\n */\n static drawFn () {\n return drawTicks;\n }\n\n /**\n *\n *\n *\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, config) {\n return pointTranslators[this.coord()](data, config, this);\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","export 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 { 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. It also registers the definition of composite layers.\n *\n * @public\n *\n * @module LayerFactory\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, ...params) => {\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(...params);\n });\n return instances.length === 1 ? instances[0] : instances;\n },\n getLayerClass: mark => factoryObj._layerRegistry[mark],\n /**\n * Registers a new composite layer definition in the layer factory.\n *\n * @public\n *\n * @param {string} layerType Mark type of the new composite layer.\n * @param {Array} layerDefs Layer definitions of the composite layer.\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 layerFactory from './layer-factory';\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 LAYER_TYPES from './enums/layer-types';\nimport { TickLayer } from './layers/tick';\n\nexport const DEFAULT_LAYERS = {\n [LAYER_TYPES.AREA_LAYER]: AreaLayer,\n [LAYER_TYPES.ARC_LAYER]: ArcLayer,\n [LAYER_TYPES.LINE_LAYER]: LineLayer,\n [LAYER_TYPES.TEXT_LAYER]: TextLayer,\n [LAYER_TYPES.POINT_LAYER]: PointLayer,\n [LAYER_TYPES.TICK_LAYER]: TickLayer,\n [LAYER_TYPES.BAR_LAYER]: BarLayer,\n [LAYER_TYPES.BASE_LAYER]: BaseLayer\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\n/**\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 * @module\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 { 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","import {\n FieldType,\n getDependencyOrder,\n getObjProp,\n defaultValue,\n objectIterator,\n unionDomain,\n makeElement,\n DimensionSubtype,\n toArray,\n MeasureSubtype,\n getNearestValue\n} from 'muze-utils';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\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 (getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION && measures.length) {\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, namespaces) => {\n let instances = existingLayer;\n const dependencies = context._dependencies;\n const metaInf = context.metaInf();\n if (!existingLayer) {\n instances = layerFactory.getLayerInstance(definition);\n toArray(instances).forEach((inst, i) => {\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: namespaces[i],\n parentNamespace: metaInf.namespace\n })\n .dependencies(dependencies)\n .store(context.store());\n });\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.coord(context.coord());\n instance.config(def);\n instance.valueParser(context.valueParser());\n instance.dataProps({\n timeDiffs: context._timeDiffs\n });\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 sanitizeLayerDef = (layerDefs) => {\n const sanitizedDefs = [];\n layerDefs.forEach((layerDef, i) => {\n const def = layerDef.def;\n const mark = layerDef.mark;\n if (!def) {\n const sConf = layerFactory.getSerializedConf(layerDef.mark, layerDef);\n if (!sConf.name) {\n sConf.name = `${mark}-${i}`;\n }\n sanitizedDefs.push({\n mark: layerDef.mark,\n def: sConf\n });\n } else {\n if (!def.name) {\n def.name = `${mark}-${i}`;\n }\n sanitizedDefs.push(layerDef);\n }\n });\n return sanitizedDefs;\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) :\n (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 const axisArr = axes[key] || [];\n const axisIndex = axisInf[key] >= 0 ? axisInf[key] : axisArr.length - 1;\n axes[key] && (axesObj[key] = defaultValue(axes[key][axisIndex]));\n }\n });\n Object.keys(axesObj).length && layer.axes(axesObj);\n });\n};\n\nconst { X, Y, RADIUS, ANGLE, ANGLE0, RADIUS0 } = ENCODING;\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, ANGLE, ANGLE0, RADIUS].forEach((type) => {\n let index;\n const specificField = getObjProp(encoding, type, 'field');\n const encodingField = type === RADIUS ? defaultValue(specificField, getObjProp(encoding, RADIUS0, 'field'))\n : getObjProp(encoding, type, 'field');\n const field = defaultValue(getObjProp(axis, type), encodingField);\n if (fields[type] && fields[type].length) {\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\nconst getValidDomain = (domain, domain1, encodingType, fieldType) => {\n if (encodingType === ANGLE || encodingType === ANGLE0) {\n return domain.concat(domain1.filter(d => domain.indexOf(d) === -1));\n }\n return unionDomain([domain, domain1], fieldType);\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 domains = domainValues.reduce((fieldDomain, domain) => {\n const encodingType = domain[0];\n const axisIndex = layerAxisIndex[layerId][encodingType];\n const field = getObjProp(axisFields, encodingType, axisIndex);\n !fieldDomain[encodingType] && (fieldDomain[encodingType] = {});\n const encodingDomain = fieldDomain[encodingType];\n if (field) {\n const fieldStr = `${field}`;\n encodingDomain[fieldStr] = encodingDomain[fieldStr] || [];\n encodingDomain[fieldStr] = getValidDomain(encodingDomain[fieldStr],\n domain[1], encodingType, fieldsConfig[field.getMembers()[0]].def.subtype);\n }\n return fieldDomain;\n }, domains);\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 const layerDepOrder = getDependencyOrder(context._layerDepOrder);\n const groups = {};\n makeElement(layerParentGroup, 'g', orderedLayers, null, {\n update: (group, layer) => {\n groups[layer.alias()] = {\n group,\n layer\n };\n }\n });\n\n const layerSeq = layerDepOrder.map(name => groups[name]);\n layerSeq.forEach((o) => {\n const layer = o.layer;\n const group = o.group;\n layer.measurement(measurement);\n layer.dataProps({\n timeDiffs: context._timeDiffs\n });\n layer.config().render !== false && layer.mount(group.node());\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].def.subtype;\n const yFieldType = fieldsConfig[yField].def.subtype;\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 !== MeasureSubtype.CONTINUOUS && yFieldType !== MeasureSubtype.CONTINUOUS)) {\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 = getNearestValue(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 createRenderPromise = (unit) => {\n const renderedPromise = unit._renderedPromise;\n renderedPromise.then(() => {\n unit._renderedPromise = new Promise((resolve) => {\n unit._renderedResolve = resolve;\n });\n createRenderPromise(unit);\n });\n};\n\nexport const getRadiusRange = (width, height, config = {}) => {\n const {\n innerRadius,\n outerRadius\n } = config;\n\n return [innerRadius || 0, outerRadius || Math.min(height,\n width) / 2];\n};\n\nexport const setAxisRange = (context) => {\n const axes = context.axes();\n const { radius: radiusAxes } = axes;\n if (radiusAxes) {\n radiusAxes.forEach((axis) => {\n axis.range(getRadiusRange(context.width(), context.height()));\n });\n }\n};\n\nexport const isXandYMeasures = (context) => {\n const { x: xFields, y: yFields } = context.fields();\n const [xMeasures, yMeasures] = [xFields, yFields].map(fields => fields\n .every(field => field.type() === FieldType.MEASURE));\n return xMeasures && yMeasures;\n};\n\nconst getKey = (arr, row) => {\n let key = row[arr[0]];\n for (let i = 1, len = arr.length; i < len; i++) {\n key = `${key},${row[arr[i]]}`;\n }\n return key;\n};\n\nexport const getValuesMap = (model, context) => {\n const valuesMap = {};\n const { data: dataArr, schema, uids } = model.getData();\n const fieldsConfig = model.getFieldsConfig();\n const fieldIndices = isXandYMeasures(context) ? schema.map((d, i) => i) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldsConfig[d].index);\n dataArr.forEach((row, i) => {\n const key = getKey(fieldIndices, row);\n valuesMap[key] = uids[i];\n });\n return valuesMap;\n};\n\nexport const getSelectionRejectionModel = (model, propModel, measures, propValuesMap) => {\n let rejectionModel;\n const { data, schema } = propModel.getData();\n const entryRowIds = [];\n const exitRowIds = [];\n\n if (schema.length) {\n const fieldMap = model.getFieldsConfig();\n const rowIdsObj = {};\n const filteredSchema = measures ? schema.map((d, idx) => idx) :\n Object.keys(model.getFieldspace().getDimension()).map(d => fieldMap[d].index);\n data.forEach((row) => {\n const key = getKey(filteredSchema, row);\n const id = propValuesMap[key];\n if (key in propValuesMap) {\n entryRowIds.push(id);\n rowIdsObj[id] = 1;\n }\n });\n rejectionModel = model.select((fields, i) => {\n if (!rowIdsObj[i]) {\n exitRowIds.push(i);\n return true;\n }\n return false;\n }, {\n saveChild: false\n });\n } else {\n rejectionModel = propModel;\n }\n\n return {\n model: [propModel, rejectionModel],\n entryRowIds,\n exitRowIds\n };\n};\n\n","export const CLASSPREFIX = 'muze';\nexport const IDFIELD = '__id__';\nexport const GRID_LINE_PARENT_GROUP_CLASS = 'grid-lines';\nexport const GRID_BAND_PARENT_GROUP_CLASS = 'grid-bands';\nexport const GRID_PARENT_GROUP = 'grid-parent-group';\nexport const BAND = 'band';\nexport const TICK = 'tick';\nexport const GRID_BAND = 'gridBands';\nexport const GRID_LINE = 'gridLines';\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","import { getObjProp, defaultValue, makeElement, DimensionSubtype, DataModel, createSelection } from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport { layerFactory, LAYER_TYPES } from '@chartshq/visual-layer';\nimport {\n GRID_BAND,\n GRID_LINE,\n GRID_BAND_PARENT_GROUP_CLASS,\n GRID_LINE_PARENT_GROUP_CLASS,\n GRID_PARENT_GROUP\n} from '../enums/constants';\n\nconst { BAR_LAYER, TICK_LAYER } = LAYER_TYPES;\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 === GRID_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 === GRID_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 === GRID_BAND) {\n return gridBandColor[i % 2];\n }\n return isNegativeDomain && data[orientation] === 0 ? zeroLineColor : gridLineColor;\n }\n };\n const { color, shape, size } = context.axes();\n return {\n definition: {\n defClassName: `${defClassName}-${orientation}`,\n className: config.className,\n name: orientation,\n calculateDomain: false,\n individualClassName: (data, i) => {\n let className;\n const isNegativeDomain = isLinearScale && axis.domain()[0] < 0;\n if (isNegativeDomain && data.y === 0 && type !== GRID_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 === GRID_BAND ? 0 : undefined,\n encoding\n },\n axes: {\n [orientation]: axis,\n color: color[0],\n shape: shape[0],\n size: size[0]\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 axes = context.axes();\n if (!axes[axisType]) {\n return null;\n }\n const show = defaultValue(config[axisType] && config[axisType].show,\n getDefaultVisibilty(config.show, axes[axisType][0]));\n\n return show ? getLayerDefinition(context, axes, type, axisType) : null;\n}).filter(d => d !== null);\n\nconst dimensionSubTypes = Object.values(DimensionSubtype).reduce((acc, v) => {\n acc[v] = 1;\n return acc;\n}, {});\nconst getValidSubtype = subtype => (!dimensionSubTypes[subtype] ? DimensionSubtype.CATEGORICAL : subtype);\n\nexport const getGridLayerData = (axes, fields, fieldsConfig) => {\n const gridData = {};\n\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: getValidSubtype(subtype)\n }, {\n name: 'ydim',\n type: 'dimension',\n subtype: getValidSubtype(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) => {\n const vuConf = context.config();\n const metaInf = context.metaInf();\n const store = context.store();\n const timeDiffs = context._timeDiffs;\n [GRID_BAND, GRID_LINE].forEach((type) => {\n let mark;\n let config;\n if (type === GRID_BAND) {\n mark = BAR_LAYER;\n config = vuConf.gridBands;\n } else {\n mark = TICK_LAYER;\n config = vuConf.gridLines;\n }\n const definitions = getGridLayerDefinitions(context, config, type);\n\n const sel = `_${type}Selection`;\n context[sel] = createSelection(context[sel], (atomicDef) => {\n const inst = layerFactory.getLayerInstance({ mark });\n inst.dependencies(context._dependencies);\n const name = atomicDef.definition.name;\n inst.metaInf({\n unitRowIndex: metaInf.rowIndex,\n unitColIndex: metaInf.colIndex,\n namespace: `${metaInf.namespace}${type}${name}`,\n parentNamespace: metaInf.namespace\n })\n .store(store);\n return inst;\n }, definitions, atomicDef => atomicDef.definition.name);\n context[sel].each((layer, atomicDef) => {\n const definition = atomicDef.definition;\n const sConf = layerFactory.getSerializedConf(mark, definition);\n const axesObj = atomicDef.axes;\n layer.config(sConf)\n .dataProps({\n timeDiffs\n })\n .axes(axesObj);\n });\n context[`_${type}`] = context[sel].getObjects();\n });\n};\n\nexport const attachDataToGridLineLayers = (context) => {\n const axes = context.axes();\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n if (gridLines.length || gridBands.length) {\n const gridLayerData = getGridLayerData(axes, context.fields(), context.data().getFieldsConfig());\n [].concat(...gridBands, ...gridLines).forEach((inst) => {\n inst.data(inst.axes().x ? gridLayerData.x : gridLayerData.y);\n });\n }\n};\n\nexport const renderGridLineLayers = (context, container) => {\n const config = context.config();\n const classPrefix = config.classPrefix;\n const gridLines = context._gridLines;\n const gridBands = context._gridBands;\n const measurement = {\n width: context.width(),\n height: context.height()\n };\n const gridLineParentGroup = makeElement(container, 'g', [1], `${classPrefix}-${GRID_PARENT_GROUP}`);\n\n [[gridLines, `${classPrefix}-${GRID_LINE_PARENT_GROUP_CLASS}`],\n [gridBands, `${classPrefix}-${GRID_BAND_PARENT_GROUP_CLASS}`]].forEach((entry) => {\n const [instances, parentGroupClass] = entry;\n const mountPoint = makeElement(gridLineParentGroup, 'g', [1], `.${parentGroupClass}`);\n const className = `${parentGroupClass}-group`;\n makeElement(mountPoint, 'g', instances, `.${className}`, {\n update: (group, instance) => {\n instance.dataProps({ timeDiffs: context._timeDiffs })\n .measurement(measurement)\n .mount(group.node());\n }\n });\n });\n};\n","import { STATE_NAMESPACES, temporalFields, getObjProp, defaultValue } from 'muze-utils';\nimport * as PROPS from './enums/reactive-props';\nimport {\n transformDataModels,\n getDimensionMeasureMap,\n attachDataToLayers,\n attachAxisToLayers,\n unionDomainFromLayers\n} from './helper';\n\nimport { createGridLineLayer } from './helper/grid-lines';\n\nconst removeExitLayers = (layerDefs, context) => {\n const layersMap = context._layersMap;\n const markSet = {};\n layerDefs.forEach((layerDef, i) => {\n const id = defaultValue(layerDef.name, `${layerDef.mark}-${i}`);\n markSet[id] = true;\n });\n\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};\n\nexport const calculateDomainListener = (context) => {\n const { namespace } = context.metaInf();\n const domain = unionDomainFromLayers(context.layers(), context.fields(), context._layerAxisIndex,\n context.data().getFieldsConfig());\n context.store().commit(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.${PROPS.DOMAIN}`, domain, namespace);\n};\n\nexport const listenerMap = [\n {\n type: 'registerImmediateListener',\n props: [PROPS.LAYERDEFS],\n listener: (context, [, layerDefs]) => {\n const fieldsVal = context.fields();\n if (layerDefs && fieldsVal) {\n removeExitLayers(layerDefs, context);\n const queuedLayerDefs = context._queuedLayerDefs;\n let layerDefArr = layerDefs;\n queuedLayerDefs.forEach((defFn) => {\n layerDefArr = [...layerDefArr, ...defFn(layerDefs)];\n });\n context.addLayer(layerDefArr);\n const adjustRange = context.layers().some(inst => inst.hasPlotSpan());\n ['x', 'y'].forEach((type) => {\n const axisArr = defaultValue(getObjProp(context.axes(), type), []);\n axisArr.forEach((axis) => {\n axis.config({\n adjustRange\n });\n });\n });\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'initialized',\n formalName: 'layer'\n });\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA],\n listener: (context, [, dataModel]) => {\n if (dataModel) {\n const axesObj = context.axes();\n const timeDiffs = {};\n const timeDiffsByField = {};\n\n Object.entries(temporalFields(dataModel)).forEach(([fieldName, fieldObj]) => {\n timeDiffsByField[fieldName] = fieldObj.minimumConsecutiveDifference();\n });\n\n Object.entries(context.fields()).forEach(([type, [field]]) => {\n if (field) {\n const timeDiff = timeDiffsByField[`${field}`];\n if (timeDiff) {\n timeDiffs[type] = timeDiff;\n axesObj[type].forEach(axis => axis.minDiff(timeDiff));\n }\n }\n });\n\n context._timeDiffsByField = timeDiffsByField;\n context._timeDiffs = timeDiffs;\n const firebolt = context.firebolt();\n const originalData = context.cachedData()[0];\n firebolt.createSelectionSet(context.data().getUids());\n firebolt.attachPropagationListener(originalData);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.CONFIG],\n listener: (context, [, config]) => {\n if (config) {\n context.firebolt().config(config.interaction);\n createGridLineLayer(context);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.DATA, PROPS.TRANSFORM],\n listener: (context, [, dataModel], [, transform]) => {\n if (dataModel) {\n const dataModels = transformDataModels(transform, dataModel);\n const metaInf = context.metaInf();\n context.store().commit(`${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}.${PROPS.TRANSFORMEDDATA}`,\n dataModels, metaInf.namespace);\n }\n }\n },\n {\n type: 'registerImmediateListener',\n props: [PROPS.TRANSFORMEDDATA, PROPS.LAYERS],\n listener: (context, [, transformedData], [, layers]) => {\n const layerAxisIndexVal = context._layerAxisIndex;\n const axesVal = context.axes();\n const dataModel = context.data();\n if (transformedData && layers && axesVal && layerAxisIndexVal) {\n context._lifeCycleManager.notify({ client: layers, action: 'beforeupdate', formalName: 'layer' });\n attachDataToLayers(layers, dataModel, transformedData);\n context._dimensionMeasureMap = getDimensionMeasureMap(layers,\n dataModel.getFieldsConfig(), context.retinalFields());\n attachAxisToLayers(axesVal, layers, layerAxisIndexVal);\n context._lifeCycleManager.notify({ client: layers, action: 'updated', formalName: 'layer' });\n }\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 TRANSFORM = 'transform';\nexport const TRANSFORMEDDATA = 'transformedData';\nexport const DATADOMAIN = 'dataDomain';\nexport const FIELDS = 'fields';\nexport const LAYERAXISINDEX = 'layerAxisIndex';\nexport const LAYERS = 'layers';\nexport const DOMAIN = 'domain';\n\n","import { mergeRecursive } from 'muze-utils';\nimport { FACET_BY_FIELDS, RETINAL_FIELDS, PARENT_ALIAS, CACHED_DATA } from './enums/constants';\n\nexport const PROPS = {\n [FACET_BY_FIELDS]: {},\n [RETINAL_FIELDS]: {},\n [PARENT_ALIAS]: {},\n [CACHED_DATA]: {},\n detailFields: {},\n axes: {\n defaultValue: {\n x: [],\n y: []\n }\n },\n fields: {\n defaultValue: {\n x: [],\n y: []\n },\n sanitization: (context, value) => mergeRecursive({\n x: [],\n y: []\n }, value)\n },\n metaInf: {},\n registry: {},\n parentContainerInf: {},\n valueParser: {\n defaultValue: val => val\n },\n coord: {}\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 derivedSchema = data[0].map(d => ({\n name: `${d}`,\n type: FieldType.DIMENSION,\n subtype: d.subtype()\n }));\n const dataAtFirstPos = data[1];\n\n data1.forEach((d) => {\n const tuple = {};\n schema1.forEach((obj, i) => {\n tuple[obj.name] = d[i];\n });\n derivedSchema.forEach((obj, i) => {\n tuple[obj.name] = dataAtFirstPos[i];\n });\n jsonData.push(tuple);\n });\n\n return new DataModel(jsonData, [...schema1, ...derivedSchema]);\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, intersect } from 'muze-utils';\nimport { Firebolt, SIDE_EFFECTS } from '@chartshq/muze-firebolt';\nimport { isXandYMeasures, getSelectionRejectionModel } from '../helper';\nimport { payloadGenerator } from './payload-generator';\nimport { propagateValues } from './data-propagator';\n\nconst sideEffectPolicy = (propPayload, context, propagationInf) => {\n const { sourceIdentifiers, propagationData } = propagationInf;\n const fieldsConfig = sourceIdentifiers.getFieldsConfig();\n const sourceIdentifierFields = Object.keys(fieldsConfig).filter(field =>\n fieldsConfig[field].def.type !== FieldType.MEASURE);\n const propFields = Object.keys(propagationData[0].getFieldsConfig());\n const hasCommonCanvas = propPayload.sourceCanvas === context.parentAlias();\n return intersect(sourceIdentifierFields, propFields).length || hasCommonCanvas;\n};\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 const disabledSideEffects = [SIDE_EFFECTS.TOOLTIP, SIDE_EFFECTS.HIGHLIGHTER, SIDE_EFFECTS.ANCHORS,\n SIDE_EFFECTS.BRUSH_ANCHORS, SIDE_EFFECTS.PERSISTENT_ANCHORS];\n disabledSideEffects.forEach((sideEffect) => {\n this.changeSideEffectStateOnPropagation(sideEffect, sideEffectPolicy, 'sourceTargetPolicy');\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 sideEffectCheckers = Object.values(sourceSideEffects[se.name || se] || {});\n\n return sideEffectCheckers.length ? sideEffectCheckers.every(checker =>\n checker(propagationInf.propPayload, context, {\n sourceIdentifiers: propagationInf.sourceIdentifiers,\n propagationData: propagationInf.data\n })) : 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 isMutableAction = false;\n const context = this.context;\n if (!context.mount()) {\n return;\n }\n const {\n model: propagationData,\n entryRowIds,\n exitRowIds\n } = getSelectionRejectionModel(context.data(), data, isXandYMeasures(context), context._cachedValuesMap());\n const {\n enabled: enabledFn,\n sourceIdentifiers,\n action,\n payload: propPayload\n } = config;\n\n const payloadFn = payloadGenerator[action] || payloadGenerator.__default;\n const payload = payloadFn(context, propagationData, config);\n const sourceBehaviours = this._sourceBehaviours;\n const filterFns = Object.values(sourceBehaviours[action] || sourceBehaviours['*'] || {});\n let enabled = filterFns.every(fn => fn(propPayload || {}, context, {\n sourceIdentifiers,\n propagationData\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: propagationData,\n entryRowIds,\n exitRowIds,\n propPayload,\n sourceIdentifiers,\n persistent: false,\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 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 { SpawnableSideEffect } from '@chartshq/muze-firebolt';\n\nexport const initSideEffects = (sideEffects, firebolt) => {\n for (const key in sideEffects) {\n if ({}.hasOwnProperty.call(sideEffects, key)) {\n sideEffects[key] instanceof SpawnableSideEffect && sideEffects[key].drawingContext(() => {\n const context = firebolt.context;\n return context.getDrawingContext();\n });\n sideEffects[key].valueParser(firebolt.context.valueParser());\n }\n }\n};\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","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 minOuterRadius: 10,\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","import { mergeRecursive, DataModel } from 'muze-utils';\nimport { defaultConfig } from './default-config';\nimport { CONFIG, LAYERDEFS, TRANSFORM, DATA, LAYERS, TRANSFORMEDDATA } from './enums/reactive-props';\nimport { sanitizeLayerDef, getValuesMap } from './helper';\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 meta: {\n preset: layerDef => sanitizeLayerDef(layerDef)\n }\n },\n [TRANSFORM]: {\n value: null\n },\n [LAYERS]: {\n value: null\n },\n [DATA]: {\n value: null,\n meta: {\n typeCheck: d => d instanceof DataModel,\n preset: (data, context) => {\n context._cachedValuesMap = ((model) => {\n let valuesMap = null;\n return () => {\n if (valuesMap) {\n return valuesMap;\n }\n valuesMap = getValuesMap(model, context);\n return valuesMap;\n };\n })(data);\n if (context._cache) {\n const cachedData = context.cachedData();\n context.cachedData([...cachedData, data]);\n } else {\n const oldData = context.cachedData()[0];\n oldData && oldData.unsubscribe('propagation');\n context.cachedData([data]);\n }\n }\n }\n },\n [TRANSFORMEDDATA]: {\n value: null\n },\n width: {\n value: null\n },\n height: {\n value: null\n }\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n setAttrs,\n getUniqueId,\n getQualifiedClassName,\n selectElement,\n transactor,\n makeElement,\n generateGetterSetters,\n getDataModelFromIdentifiers,\n isSimpleObject,\n transposeArray,\n CommonProps,\n toArray,\n STATE_NAMESPACES\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 getLayerAxisIndex,\n sanitizeLayerDef,\n createSideEffectGroup,\n resolveEncodingTransform,\n createRenderPromise,\n setAxisRange\n} from './helper';\nimport { renderGridLineLayers, attachDataToGridLineLayers } from './helper/grid-lines';\nimport { calculateDomainListener, listenerMap } from './listener-map';\nimport { PROPS } from './props';\nimport UnitFireBolt from './firebolt';\nimport { initSideEffects, dispatchQueuedSideEffects, clearActionHistory } from './firebolt/helper';\nimport './styles.scss';\nimport localOptions from './local-options';\nimport { WIDTH, HEIGHT } from './enums/reactive-props';\n\nconst FORMAL_NAME = 'unit';\nconst unitNs = [STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE];\nconst groupNs = STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE;\n\n/**\n * Visual Unit is hierarchical component created by {@link VisualGroup}. This component accepts layer definitions\n * and creates concrete layer instances from them, binds data and attaches axis to them. It also retreives the domain\n * from the layers and unions them and sets them on corresponding axis instances. This also creates the parent svg\n * groups for all the layers and delegates the rendering to all the layers.\n *\n * @public\n * @module VisualUnit\n * @class\n */\nexport default class VisualUnit {\n\n /**\n * Creates instance of visualization unit.\n *\n * @param {Object} registry Component registry\n * @param {Object} dependencies Dependencies required by visual unit.\n */\n constructor (registry, dependencies) {\n this._id = getUniqueId();\n this._dependencies = dependencies;\n this._renderedResolve = null;\n this._renderedPromise = new Promise((resolve) => {\n this._renderedResolve = resolve;\n });\n createRenderPromise(this);\n this._lifeCycleManager = dependencies.lifeCycleManager;\n this._layersMap = {};\n this._gridLinesSelection = null;\n this._gridBandsSelection = null;\n this._gridLines = [];\n this._gridBands = [];\n this._layerAxisIndex = {};\n this._queuedLayerDefs = [];\n layerFactory.setLayerRegistry(registry.layerRegistry);\n generateGetterSetters(this, PROPS);\n this.registry(registry);\n this.cachedData([]);\n }\n\n static formalName () {\n return FORMAL_NAME;\n }\n\n static getState () {\n return [\n {\n domain: null\n },\n Object.keys((localOptions)).reduce((acc, v) => {\n acc[v] = localOptions[v].value;\n return acc;\n }, {})\n ];\n }\n\n static getQualifiedStateProps () {\n const unitState = VisualUnit.getState();\n return unitState.map((state, i) => Object.keys(state).map(prop => `${unitNs[i]}.${prop}`));\n }\n\n static getListeners () {\n return {\n store: [...listenerMap.map((d) => {\n const o = Object.assign({}, d);\n const localNs = unitNs[1];\n o.props = o.props.map(prop => `${localNs}.${prop}`);\n return o;\n }), {\n type: 'registerImmediateListener',\n props: [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`],\n listener: calculateDomainListener\n }, {\n type: 'registerImmediateListener',\n props: [`${unitNs[1]}.${WIDTH}`,\n `${unitNs[1]}.${HEIGHT}`,\n ...['x', 'y'].map(type => `${groupNs}.domain.${type}`)],\n listener: (context, [, width], [, height]) => {\n if (width && height) {\n attachDataToGridLineLayers(context);\n }\n },\n subNamespace: (context) => {\n const { rowIndex, colIndex, namespace } = context.metaInf();\n return {\n [`${unitNs[1]}.${WIDTH}`]: namespace,\n [`${unitNs[1]}.${HEIGHT}`]: namespace,\n [`${groupNs}.domain.x`]: `${colIndex}0`,\n [`${groupNs}.domain.y`]: `${rowIndex}0`\n };\n }\n }],\n throwback: [\n {\n type: 'registerChangeListener',\n props: [CommonProps.ON_LAYER_DRAW],\n listener: (context, [, drawn]) => {\n if (drawn) {\n const firebolt = context.firebolt();\n dispatchQueuedSideEffects(firebolt);\n clearActionHistory(firebolt);\n }\n context._renderedResolve();\n context._lifeCycleManager.notify({\n client: context.layers(),\n action: 'drawn',\n formalName: 'layer'\n });\n }\n }\n ]\n };\n }\n\n store (...params) {\n if (params.length) {\n const store = this._store = params[0];\n const { throwback, fireboltDeps } = this._dependencies;\n const { namespace } = this.metaInf();\n\n store.addSubNamespace(namespace, FORMAL_NAME, this);\n throwback.addSubNamespace(namespace, FORMAL_NAME, this);\n transactor(this, localOptions, store, {\n subNamespace: namespace,\n namespace: `${STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE}`\n });\n\n this.firebolt(new UnitFireBolt(this, {\n physical: Object.assign({}, physicalActions, fireboltDeps.physicalActions),\n behavioural: Object.assign({}, behaviouralActions, fireboltDeps.behaviouralActions),\n physicalBehaviouralMap: actionBehaviourMap\n }, Object.assign({}, sideEffects, fireboltDeps.sideEffects), behaviourEffectMap));\n return this;\n }\n return this._store;\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 * Returns the instance of firebolt associated with this visual unit. Firebolt dispatches the behavioural actions\n * when any physical action happens on the elements of visual unit.\n *\n * @public\n *\n * @return {Firebolt} Instance of firebolt.\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 * Returns the unique id of this visual unit.\n *\n * @public\n * @return {string} Unique identifier.\n */\n id () {\n return this._id;\n }\n\n lockModel () {\n this.store().lockModel();\n return this;\n }\n\n unlockModel () {\n this.store().unlockModel();\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 *\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\n setAxisRange(this);\n renderGridLineLayers(this, node);\n renderLayers(this, node, this.layers(), {\n width,\n height\n });\n this._sideEffectGroup = createSideEffectGroup(node, `${classPrefix}-${sideEffectClassName}`);\n const firebolt = this.firebolt();\n initSideEffects(firebolt.sideEffects(), firebolt);\n return this;\n }\n\n done () {\n return this._renderedPromise;\n }\n\n /**\n * Caches all the datamodels in an array from the next `data()` call on visual unit until `clearCaching()` or\n * `resetData()` is called on it.\n *\n * @public\n * @return {VisualUnit} Instance of visual unit.\n */\n\n enableCaching () {\n this._cache = true;\n return this;\n }\n\n /**\n * Clears all the previous cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n clearCaching () {\n this._cache = false;\n this.cachedData([this.cachedData()[0]]);\n return this;\n }\n\n /**\n * Returns the drawing information from visual unit.Drawing context contains the dimensions of unit and the svg\n * container of the visual unit.\n *\n * @public\n *\n * @return {Object} Drawing information.\n * ```\n * {\n * htmlContainer: // Html container of svg container of the visual unit\n * svgContainer: // Root svg container\n * width: // Width of the visual unit\n * height: // Height of the visual unit\n * sideEffectGroup: // Svg group for drawing side effect elements.\n * parentContainer: // Parent html container of the visual unit.\n * xOffset: // x offset space from the starting x position of the container,\n * yOffset: // y offset space from the starting y position of the container\n * }\n * ```\n */\n getDrawingContext () {\n const rootSvg = this._rootSvg && this._rootSvg.node();\n const width = this.width();\n const height = this.height();\n const { el, dimensions } = this.parentContainerInf();\n return {\n htmlContainer: this.mount(),\n svgContainer: rootSvg,\n width,\n height,\n sideEffectGroup: this._sideEffectGroup,\n parentContainer: el,\n parentContainerDimensions: dimensions,\n xOffset: 0,\n yOffset: 0\n };\n }\n\n /**\n * Returns the serialized configuration of visual unit.\n *\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.axes().map(axis => axis.serialize())\n };\n }\n\n mount (...mount) {\n if (mount.length) {\n this._mount = mount[0];\n this.render(mount[0]);\n this.firebolt().mapActionsAndBehaviour();\n return this;\n }\n return this._mount;\n }\n\n /**\n * Adds a new layer to the visual unit. It takes a layer definition and creates layer instances from them. It does\n * not render the layers. It returns the layer instances in an array. If the layer definition is a composite layer,\n * then multiple layer instances will be returned in the array.\n *\n * To add a layer in the unit,\n * ```\n * unit.addLayer({\n * name: 'bullet',\n * mark: 'bar',\n * encoding: {\n * x: 'Year',\n * y: 'Acceleration',\n * color: 'Origin'\n * }\n * });\n * ```\n * @public\n * @param {Object} layerDef Definition of new layer.\n *\n * @return {Array} Array of layer instances.\n */\n addLayer (layerDefinition) {\n if (layerDefinition instanceof Function) {\n this._queuedLayerDefs.push(layerDefinition);\n return this;\n }\n const layerDefinitions = sanitizeLayerDef(toArray(layerDefinition));\n\n const layersMap = this._layersMap;\n const markSet = {};\n const store = {\n layers: {},\n components: {\n unit: this\n }\n };\n let layerIndex = 0;\n const metaInf = this.metaInf();\n const layers = layerDefinitions.sort((a, b) => a.order - b.order).reduce((layersArr, layerDef) => {\n const definition = layerDef.def;\n const markId = definition.name;\n const defArr = toArray(definition);\n const namespaces = [];\n defArr.forEach((def) => {\n def.order = layerDef.order + layerIndex;\n const namespace = `${metaInf.namespace}-${def.mark}-${getUniqueId()}`;\n namespaces.push(namespace);\n });\n layerIndex += defArr.length;\n const instances = getLayerFromDef(this, definition, layersMap[markId], namespaces);\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\n store.unit = this;\n const layerdeps = {};\n const layersArr = [].concat(...Object.values(this._layersMap));\n layersArr.forEach((layer) => {\n const alias = layer.alias();\n store.layers[alias] = layer;\n layerdeps[alias] = [];\n });\n layers.forEach((layer) => {\n const depArr = resolveEncodingTransform(layer, store);\n layerdeps[layer.alias()] = depArr;\n });\n\n this._layerDepOrder = layerdeps;\n this._layerAxisIndex = Object.assign(this._layerAxisIndex, getLayerAxisIndex(layers, this.fields()));\n this.layers(layersArr);\n return layers;\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n remove () {\n const formalName = this.constructor.formalName();\n const { lifeCycleManager, throwback } = this._dependencies;\n const { namespace } = this.metaInf();\n lifeCycleManager.notify({ client: this, action: 'beforeremove', formalName: 'unit' });\n const layers = this.layers();\n this.store().removeSubNamespace(namespace, formalName);\n throwback.removeSubNamespace(namespace, FORMAL_NAME);\n selectElement(this.mount()).remove();\n this.firebolt().remove();\n // Remove layers\n lifeCycleManager.notify({ client: layers, action: 'beforeremove', formalName: 'layer' });\n [...layers, ...this._gridLines, ...this._gridBands].forEach(layer => layer.remove());\n lifeCycleManager.notify({ client: 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 *\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 * Resets the data of visual unit to original data model. It also clears the cached data.\n *\n * @public\n * @segment VisualUnit\n * @return {VisualUnit} Instance of visual unit.\n */\n resetData () {\n this.data(this.cachedData()[0]);\n return this;\n }\n\n /**\n *\n *\n *\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 getDataDomain () {\n return this.store().get(`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`, this.metaInf().namespace);\n }\n\n /**\n *\n *\n *\n * @memberof VisualUnit\n */\n getDefaultTargetContainer () {\n const { classPrefix, defClassName } = this.config();\n return [`.${classPrefix}-${defClassName}`];\n }\n\n /**\n * Returns an array of layer instances which matches the supplied mark type.\n *\n * @public\n *\n * @param {string} type Mark type of layer.\n *\n * @return {Array} Array of layer instances.\n */\n getLayersByType (type) {\n const layers = getLayersBy(this.layers(), 'type', type);\n return layers;\n }\n\n /**\n * Returns the layer instance which matches the supplied layer name. If no layer is found, then it returns\n * undefined.\n *\n * @public\n * @param {string} name Name of layer.\n *\n * @return {VisualUnit} Layer instance.\n */\n getLayerByName (name) {\n const layers = getLayersBy(this.layers(), 'name', name);\n return layers[0];\n }\n\n /**\n * Returns the point located nearest to the supplied x and y position. It returns the unique identifiers of the\n * point. This function also accepts an additional configuration `getAllPoints` inside `config` object in the third\n * argument which if set to true, then it returns the identifiers of all the points which falls on the nearest\n * x value or y value if any one of the field is a dimension. Additionally, a target property is also returned\n * which contains the identifier of the nearest point. If no nearest point is found, then it returns identifier\n * as null.\n *\n * @public\n *\n * @param {number} x X Position of the point from where nearest point is to be found.\n * @param {number} y Y Position of the point from where nearest point is to be found.\n * @param {Object} config Additional configuration options.\n * @param {boolean} config.getAllPoints If true, then returns all the points nearest to the x value or y value if\n * it is dimension.\n * @param {Object} config.data Data associated with the nearest point.\n * @return {Object} Nearest point information\n * ```\n * {\n * id: [['Origin'], ['USA'], ['Japan']], // Identifiers of all the points closest to the x value.\n * target: [['Origin'], ['Japan']] // Identifier of the nearest point.\n * }\n * ```\n */\n getNearestPoint (x, y, config) {\n let pointObj = {\n id: null\n };\n const dimValue = getNearestDimensionalValue(this, {\n x,\n y\n });\n\n if (dimValue !== null && config.getAllPoints) {\n pointObj.id = dimValue;\n const pointInf = this.getMarkInfFromLayers(x, y, config);\n pointObj.target = pointInf && pointInf.id ? pointInf.id : pointObj.id;\n return pointObj;\n }\n\n const markInf = this.getMarkInfFromLayers(x, y, config) || { 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 * Get the information of all the marks such as x, y position and size from supplied identifiers. It\n * returns an array of points whose data matches the given identifiers.\n *\n * @public\n *\n * @param {Array|Object} identifiers Field names and their corresponding values.\n * ```\n * identifiers can be given in an array of array,\n * ['Origin', 'Name'], // Names of the fields supplied in first array\n * ['USA', 'ford'], // Data values of each field supplied in rest of the arrays.\n * ['Japan', 'ford']\n * or in an object,\n * {\n * Origin: ['USA']\n * }\n * ```\n * @param {Object} config Optional configurations which decides which information of the mark will\n * be retrieved.\n * @param {boolean} [config.getAllAttrs = false] If true, then returns all the information of each mark.\n * @param {boolean} [config.getBBox = false] If true, then returns the bounding box of each mark.\n *\n * @return {Array} Array of objects containing the information of each point.\n * ```\n * By default, the method returns the array of points in this structure,\n * [\n * {\n * x: 20,\n * y: 100,\n * width: 200,\n * height: 100\n * }\n * ]\n * If 'config.getAllAttrs' is true, then it returns all the information of each mark,\n * [\n * // Positions of mark on initial state of transition.\n * enter: {\n * x: 0,\n * y: 0\n * },\n * // Final positions of the mark\n * update: {\n * x: 20,\n * y: 10\n * },\n * style: // css styles of each mark\n * source: [200, 'USA'] // Row information of each mark\n * id: 20 // Row id of each mark\n * ]\n * ```\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 * Removes the layer instance which matches the supplied layer name.\n *\n * @public\n * @param {string} name Name of layer\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayerByName (name) {\n removeLayersBy('name', name);\n return this;\n }\n\n /**\n * Removes all the layer instances which matches the supplied mark type.\n *\n * @public\n * @param {string} type Mark type of layer.\n *\n * @return {VisualUnit} Instance of visual unit.\n */\n removeLayersByType (type) {\n removeLayersBy('type', type);\n return this;\n }\n}\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 * This is a wrapper on top of multiple variables which are of same type but they are shown in the same axis.This is\n * required in case of range plots or ohlc plots where one plot is mapped to multiple measure fields. At that time,\n * we need to create a composed variable from multiple variables. This class just wraps them into one variable instance\n * and provides methods to get the type and other common functionalities which can be performed on a simple variable\n * instance.\n *\n * @public\n * @class ComposeVars\n */\nclass ComposedVars extends Variable {\n\n /**\n * Creates an instance of ComposeVars.\n *\n * @param {Array} vars Array of SimpleVars.\n */\n constructor (...vars) {\n super();\n this.vars(vars);\n }\n\n vars (...params) {\n if (params.length) {\n this._vars = params[0];\n return this;\n }\n return this._vars;\n }\n\n data (...dm) {\n if (dm.length) {\n this.vars().forEach(d => d.data(dm[0]));\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n /**\n * Get all the field names from composed variable instance.\n *\n * @public\n * @return {Array} Array of field names.\n */\n getMembers () {\n const vars = this.vars();\n return vars.map(member => member.getMembers()[0]);\n }\n\n /**\n * Type of field associated with this composed variable.\n *\n * @return {string} Type of variable (Measure/Dimension).\n */\n type () {\n return this.vars()[0].type();\n }\n\n toString () {\n return this.vars().map(d => d.toString()).join(',');\n }\n\n /**\n * Returns the number formatter function of the variable.\n *\n * @return {Function} Number formatter function of the variable.\n */\n numberFormat () {\n return this.vars()[0].numberFormat();\n }\n\n format (values) {\n return this.vars()[0].format(values);\n }\n\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.vars()[0]].def;\n }\n\n /**\n * Returns the subtype of the fields associated with this variable instance.\n *\n * @public\n * @return {string} Subtype of the variable.\n */\n subtype () {\n return this.vars()[0].subtype();\n }\n\n /**\n * Returns the consecutive minimum difference of the field values.\n *\n * @public\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n return this.vars()[0].getMinDiff();\n }\n\n /**\n * Returns the display name of the fields.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return this.vars().map(d => d.displayName()).join(',');\n }\n}\n\nexport default ComposedVars;\n","import { DateTimeFormatter, retrieveFieldDisplayName, DimensionSubtype } from 'muze-utils';\nimport Variable from './variable';\n\n/**\n * This is a wrapper on top of fields passed in rows or columns in canvas. This is used to get the type of field or\n * get min difference from the field values.\n *\n * @public\n * @class SimpleVariable\n */\nexport default class SimpleVariable extends Variable {\n\n /**\n * Creates an instance of simple variable instance.\n *\n * @param {string} name Field name.\n */\n constructor (name) {\n super();\n this.oneVar(name);\n }\n\n /**\n * Gets the field name associated with this variable instance.\n *\n * @public\n * @return {string} Name of the field.\n */\n oneVar (...oneV) {\n if (oneV.length) {\n this._oneVar = oneV[0];\n return this;\n }\n return this._oneVar;\n }\n\n data (...dm) {\n if (dm.length) {\n this._data = dm[0];\n return this;\n }\n return this._data;\n }\n\n toString () {\n return this.oneVar();\n }\n\n /**\n * Gets the number formatter function of this variable.\n *\n * @public\n * @return {Function} Number formatter function.\n */\n numberFormat () {\n if (this.type() === 'measure') {\n const formatter = this.data().getFieldspace().getMeasure()[this.oneVar()];\n return formatter.numberFormat();\n } return val => val;\n }\n\n format (values) {\n if (values && this.subtype() === 'temporal') {\n const formatter = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n const dtFormat = new DateTimeFormatter(formatter);\n values = values.map(e => dtFormat.getNativeDate(e));\n }\n return values;\n }\n\n /**\n * Returns a formatter function which transforms the input value to its original form.\n *\n * @public\n * @return {Function} Returns raw formatter function.\n */\n rawFormat () {\n if (this.subtype() === DimensionSubtype.TEMPORAL) {\n const dateFormat = this.data().getFieldspace().getDimension()[this.oneVar()].schema().format;\n return val => DateTimeFormatter.formatAs(val, dateFormat);\n }\n return val => val;\n }\n\n /**\n * Return the field names associated with this variable instance.\n *\n * @public\n * @return {Array} Array of fields.\n */\n getMembers () {\n return [this.oneVar()];\n }\n\n /**\n * Returns the type of the variable. Whether it is measure or dimension.\n *\n * @public\n * @return {string} Type of variable.\n */\n type () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.type;\n }\n\n /**\n * Returns the subtype of the variable. Subtype can be categorical or temporal. If no subtype is found, then it\n * returns the type of the variable.\n *\n * @public\n * @return {string} Subtype of variable.\n */\n subtype () {\n const fieldDef = this.data().getFieldsConfig()[this.oneVar()].def;\n return fieldDef.subtype || fieldDef.type;\n }\n\n /**\n * Returns the minimum consecutive difference between the data values of this variable.\n *\n * @return {number} Minimum consecutive difference.\n */\n getMinDiff () {\n const fieldSpace = this.data().getFieldspace();\n return fieldSpace.fieldsObj()[this.oneVar()].minimumConsecutiveDifference();\n }\n\n /**\n * Returns true if two variable instances are same.If both variable has the same field names, they are equal.\n *\n * @return {Boolean} Whether two variable instances are same.\n */\n equals (varInst) {\n return this.oneVar() === varInst.oneVar();\n }\n\n /**\n * Returns the display name of the field.\n *\n * @return {string} returns the display name.\n */\n displayName () {\n return retrieveFieldDisplayName(this.data(), this.oneVar());\n }\n\n /**\n * Returns the schema defination of the field.\n *\n * @return {Object} schema def\n */\n getSchemaDef () {\n return this.data().getFieldsConfig()[this.oneVar()].def;\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 *\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 *\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 *\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 *\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 *\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 *\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 temporal: ScaleType.TIME,\n measure: ScaleType.LINEAR,\n continuous: ScaleType.LINEAR\n};\n","import { mergeRecursive, getObjProp } from 'muze-utils';\nimport { AxisOrientation } from '@chartshq/muze-axis';\nimport { ENCODING } from '@chartshq/visual-layer';\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, COLOR, SHAPE, SIZE, ANGLE0 } from '../enums/constants';\n\n/**\n *\n *\n * @param {*} axisInfo\n * @param {*} field\n * @param {*} axesCreators\n *\n */\nconst getAxisConfig = (axisInfo, field, axesCreators, indices, facetFields) => {\n let axisOrientation;\n const { index, axisIndex, axisType } = axisInfo;\n const { config, position } = axesCreators;\n const { rowIndex, columnIndex } = indices;\n const rawUserAxisConfig = config.axes ? (config.axes[axisType] || {}) : {};\n\n // Change config object to a function if not already one\n const userAxisConfigFn = typeof rawUserAxisConfig !== 'function' ?\n () => rawUserAxisConfig : rawUserAxisConfig;\n const userAxisConfig = userAxisConfigFn(rowIndex, columnIndex, {\n axisFields: field.getMembers(),\n facetFields\n });\n\n // If current config does not specifes config for an axis, retain old config\n if (!userAxisConfig) {\n return {};\n }\n\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.displayName(),\n field: field.toString(),\n numberFormat: field.numberFormat(),\n orientation: axisOrientation,\n showAxisName: true,\n show: true,\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 *\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\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 [min[0], max[0]],\n [min[1], max[1]]\n ];\n};\n\n/**\n *\n *\n * @param {*} axisType\n * @param {*} fieldInfo\n * @param {*} axesCreators\n * @param {*} groupAxes\n *\n */\nexport const generateAxisFromMap = (axisType, fieldInfo, axesCreators, axesInfo, indices, facetFields) => {\n let axisKey;\n const { groupAxes, valueParser } = axesInfo;\n const currentAxes = [];\n const { fields, index } = fieldInfo;\n const { cacheMaps } = axesCreators;\n const map = cacheMaps[`${axisType}AxesMap`];\n\n const commonAxisKey = getAxisKey(axisType, index);\n fields.forEach((field, axisIndex) => {\n axisKey = getAxisKey(axisType, index, axisIndex, dataTypeScaleMap[field.subtype()]);\n const axisConfig = getAxisConfig({ index, axisIndex, axisType }, field, axesCreators, indices, facetFields);\n\n let axis;\n if (!map.has(axisKey)) {\n axis = createSimpleAxis(axisConfig, field, axesCreators);\n } else {\n axis = map.get(axisKey);\n axis._rotationLock = false;\n axis.config(axisConfig);\n }\n axis.valueParser(valueParser);\n currentAxes.push(axis);\n map.set(axisKey, axis);\n });\n\n if (currentAxes.length) {\n map.set(commonAxisKey, currentAxes);\n groupAxes.add(commonAxisKey);\n }\n\n return currentAxes;\n};\n\nexport const sanitizeIndividualLayerConfig = (encodingConfigs, def) => {\n [COLOR, SHAPE, SIZE].forEach((axis) => {\n if (encodingConfigs[axis] && encodingConfigs[axis].field) {\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 }\n });\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 *\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 *\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 *\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\nexport const resolveAxisConfig = (context, fieldInf, axisInfo) => {\n const { rowIndex, columnIndex, axesObj } = axisInfo;\n const { config, facetFields, resolver } = context;\n const resolverAxes = resolver.axes();\n const { RADIUS, ANGLE } = ENCODING;\n [RADIUS, ANGLE, ANGLE0].forEach((enc) => {\n const axesArr = resolverAxes[enc];\n if (!axesArr[rowIndex]) {\n axesArr[rowIndex] = [];\n }\n axesArr[rowIndex][columnIndex] = axesObj[enc];\n const axisConfig = getObjProp(config.axes, enc) || {};\n\n axesObj[enc].forEach((axis, i) => {\n let userConfig = axisConfig;\n if (axisConfig instanceof Function) {\n userConfig = axisConfig(rowIndex, columnIndex, {\n axisFields: [fieldInf[enc][i]],\n facetFields\n });\n }\n axis.config(userConfig);\n });\n });\n};\n","import { layerFactory } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n unionDomain,\n COORD_TYPES,\n toArray,\n sortCategoricalField\n} from 'muze-utils';\nimport { ScaleType } from '@chartshq/muze-axis';\nimport {\n generateAxisFromMap,\n getDefaultMark,\n getIndex,\n getLayerConfFromFields,\n getAdjustedDomain,\n sanitizeIndividualLayerConfig\n} from './encoder-helper';\nimport { retriveDomainFromData } from '../group-helper';\n\nimport { ROW, COLUMN, COL, LEFT, TOP, MEASURE, BOTH, X, Y } from '../enums/constants';\nimport VisualEncoder from './visual-encoder';\n\nconst CARTESIAN = COORD_TYPES.CARTESIAN;\n\n/**\n *\n *\n * @export\n * @class CartesianEncoder\n * @extends {VisualEncoder}\n */\nexport default class CartesianEncoder extends VisualEncoder {\n\n /**\n *\n *\n *\n * @memberof CartesianEncoder\n */\n static type () {\n return CARTESIAN;\n }\n\n /**\n *\n *\n * @param {*} axesCreators\n * @param {*} fieldInfo\n *\n * @memberof CartesianEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\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 { resolver, facetFields, geomCell } = context;\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, {\n groupAxes: axis === X ? xAxes : yAxes,\n valueParser: resolver.valueParser()\n }, indices, facetFields);\n });\n geomCell.axes(geomCellAxes);\n return geomCellAxes;\n }\n\n unionUnitDomains (context) {\n const store = context.store();\n const resolver = context.resolver();\n const units = resolver.units();\n const domains = {\n 0: {},\n 1: {}\n };\n const config = context.config();\n const fieldsObj = {\n 0: {},\n 1: {}\n };\n\n for (let rIdx = 0, len = units.length; rIdx < len; rIdx++) {\n const unitsArr = units[rIdx];\n for (let cIdx = 0, len2 = unitsArr.length; cIdx < len2; cIdx++) {\n const unit = unitsArr[cIdx];\n const axisFields = unit.fields();\n const encodingDomains = unit.getDataDomain();\n ['x', 'y'].forEach((axisType, axisTypeIndex) => {\n const fieldArr = axisFields[axisType];\n fieldArr.forEach((field, axisIndex) => {\n const key = !axisTypeIndex ? `0${cIdx}${axisIndex}` : `${rIdx}0${axisIndex}`;\n const dom = encodingDomains[axisType];\n const typeOfField = field.subtype();\n fieldsObj[axisTypeIndex][key] = field;\n\n if (dom && Object.keys(dom).length !== 0) {\n domains[axisTypeIndex][key] = unionDomain([(domains[axisTypeIndex] &&\n domains[axisTypeIndex][key]) || [], dom[`${field}`]], typeOfField);\n }\n });\n });\n }\n }\n\n const { x: xAxes, y: yAxes } = resolver.axes();\n store.lockModel();\n [xAxes, yAxes].forEach((axesArr, axisType) => {\n axesArr.forEach((axes, idx) => {\n let key;\n let domain = [];\n let adjustedDomain = [];\n const min = [];\n const max = [];\n const typeOfAxis = axes[0].constructor.type();\n\n if (axes.length > 1 && typeOfAxis === ScaleType.LINEAR && axes[0].config().alignZeroLine) {\n axes.forEach((axis, i) => {\n key = !axisType ? `0${idx}${i}` : `${idx}0${i}`;\n domain = domains[axisType][key];\n min[i] = domain[0];\n max[i] = domain[1];\n });\n adjustedDomain = getAdjustedDomain(max, min);\n } else if (typeOfAxis === ScaleType.BAND) {\n /* Sort categorical fields to ensure consistency across all rows\n only if sorted by user */\n key = !axisType ? `0${idx}0` : `${idx}00`;\n const currentFieldName = fieldsObj[axisType][key].oneVar();\n const sortingOrder = config.sort && config.sort[currentFieldName];\n\n if (sortingOrder) {\n domains[axisType][key].sort((a, b) => sortCategoricalField(sortingOrder, a, b));\n }\n }\n\n axes.forEach((axis, index) => {\n key = !axisType ? `0${idx}${index}` : `${idx}0${index}`;\n domain = adjustedDomain[index] || domains[axisType][key];\n\n domain && axis.domain(domain);\n const type = !axisType ? 'x' : 'y';\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${type}`, domain, `${idx}${index}`);\n });\n });\n });\n store.unlockModel();\n }\n\n /**\n *\n *\n * @param {*} fields\n *\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 *\n * @memberof CartesianEncoder\n */\n fieldSanitizer (datamodel, config) {\n return super.fieldSanitizer(datamodel, config);\n }\n\n /**\n *\n *\n * @param {*} datamodel\n *\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 sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n layerConfig.push(config);\n });\n return layerConfig;\n }\n\n /**\n *\n *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof CartesianEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\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 this.sanitizeLayerConfig(retinalConfig, layerConfig);\n }\n}\n","import { AngleAxis, RadiusAxis } from '@chartshq/muze-axis';\nimport { layerFactory, ENCODING } from '@chartshq/visual-layer';\nimport {\n mergeRecursive,\n STATE_NAMESPACES,\n GROUP_BY_FUNCTIONS,\n COORD_TYPES,\n toArray,\n getObjProp,\n defaultValue\n} from 'muze-utils';\nimport VisualEncoder from './visual-encoder';\nimport { SIZE, MEASURE, ARC, COLOR } from '../enums/constants';\nimport { sanitizeIndividualLayerConfig, resolveAxisConfig } from './encoder-helper';\nimport { SimpleVariable } from '../variable';\n\nconst POLAR = COORD_TYPES.POLAR;\nconst { RADIUS, ANGLE, ANGLE0 } = ENCODING;\n\nconst axesCls = {\n [RADIUS]: RadiusAxis,\n [ANGLE]: AngleAxis,\n [ANGLE0]: AngleAxis\n};\n\nconst getSizeMultiplier = (sizeVal, sizeAxis) => {\n const sizeAxisDomain = sizeAxis.domain();\n const sizeMultiplier = sizeAxis.getSize(sizeVal) / (sizeAxisDomain ? sizeAxis.range()[1] : sizeAxis.config().value);\n return sizeMultiplier;\n};\n\nconst setRadiusFactor = (context) => {\n const data = context.data();\n const sizeField = context.retinalFields().size.field;\n const { radius, size } = context.axes();\n\n if (sizeField && radius && radius.length) {\n const sizeFieldIndex = data.getFieldsConfig()[sizeField].index;\n const sizeVal = data.getData().data.reduce((acc, val) => acc + val[sizeFieldIndex], 1);\n const sizeMultiplier = getSizeMultiplier(sizeVal, size[0]);\n radius.forEach(axis => axis.setRadiusFactor(sizeMultiplier));\n }\n};\n\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 *\n * @memberof PolarEncoder\n */\n createAxis (axesCreators, fieldInfo, context) {\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 const axesObj = {};\n const { geomCell, resolver } = context;\n const layers = resolver.matrixLayers();\n const resolverAxes = resolver.axes();\n const cellLayers = layers[rowIndex][columnIndex];\n const fields = {\n radius: {},\n angle: {},\n angle0: {}\n };\n\n cellLayers.forEach((layerConf) => {\n const def = layerConf.def;\n [ANGLE, ANGLE0, RADIUS].forEach((enc) => {\n const field = getObjProp(def.encoding, enc, 'field');\n field && (fields[enc][field] = 0);\n });\n });\n const fieldInf = {};\n const varInstances = {};\n\n for (const encType in fields) {\n fieldInf[encType] = Object.keys(fields[encType]);\n axesObj[encType] = [];\n varInstances[encType] = [];\n fieldInf[encType].forEach((field, i) => {\n varInstances[encType][i] = new SimpleVariable(field);\n axesObj[encType][i] = new axesCls[encType]();\n });\n axesObj[encType][axesObj[encType].length] = new axesCls[encType]();\n }\n resolveAxisConfig(context, fieldInf, {\n axesObj,\n rowIndex,\n columnIndex\n });\n geomCell.axes(axesObj)\n .fields(Object.assign({}, varInstances, geomCell.fields()));\n resolverAxes.pie = pieAxes;\n return geomCellAxes;\n }\n\n /**\n *\n *\n * @param {*} fields\n *\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 unionUnitDomains (context) {\n const store = context.store();\n store.lockModel();\n const domainProps = {\n radius: [],\n angle: [],\n angle0: []\n };\n const axes = context.resolver().axes();\n context.matrixInstance().value.each((cell, rIdx, cIdx) => {\n const unit = cell.valueOf();\n const unitDomains = unit.getDataDomain();\n const fields = unit.fields();\n setRadiusFactor(unit);\n [RADIUS, ANGLE, ANGLE0].forEach((encType) => {\n const encodingFields = fields[encType];\n const domains = unitDomains[encType] || {};\n encodingFields.forEach((field, i) => {\n !domainProps[encType][rIdx] && (domainProps[encType][rIdx] = []);\n !domainProps[encType][rIdx][cIdx] && (domainProps[encType][rIdx][cIdx] = []);\n domainProps[encType][rIdx][cIdx][i] = domains[`${field}`] || [];\n });\n });\n });\n\n for (const key in domainProps) {\n const specificAxes = axes[key];\n specificAxes.forEach((axesArr, rIdx) => {\n axesArr.forEach((axisArr, cIdx) => {\n axisArr.forEach((axis, i) => {\n axis.domain(defaultValue(getObjProp(domainProps[key], rIdx, cIdx, i), []));\n\n store.commit(`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${key}`, domainProps[key],\n `${rIdx}-${cIdx}`);\n });\n });\n });\n }\n store.unlockModel();\n }\n\n /**\n *\n *\n *\n * @memberof PolarEncoder\n */\n setCommonDomain () {\n // No domain to be set\n return this;\n }\n\n /**\n *\n *\n *\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.groupedModel;\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]: GROUP_BY_FUNCTIONS.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 *\n * @param {*} fields\n * @param {*} userLayerConfig\n *\n * @memberof PolarEncoder\n */\n getLayerConfig (fields, userLayerConfig, retinalConfig) {\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 const sanitizedConfig = this.sanitizeLayerConfig(retinalConfig, layerConfig);\n this.layers(sanitizedConfig);\n return sanitizedConfig;\n }\n\n /**\n *\n *\n * @param {*} layerArray\n *\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 sanitizeLayerConfig (encodingConfigs, userLayerConfig) {\n const layerConfig = [];\n\n userLayerConfig.forEach((config) => {\n const def = toArray(config.def);\n sanitizeIndividualLayerConfig(encodingConfigs, def);\n def.forEach((conf) => {\n const encoding = conf.encoding || (conf.encoding = {});\n !encoding.angle && (encoding.angle = {});\n const angleField = getObjProp(encoding.angle, 'field');\n const angle0Field = getObjProp(encoding.angle0, 'field');\n if (!angleField) {\n Object.assign(encoding.angle, {\n field: encodingConfigs.color && encodingConfigs.color.field\n });\n }\n if (!angle0Field) {\n !encoding.angle0 && (encoding.angle0 = {});\n Object.assign(encoding.angle0, {\n field: encoding.angle.field\n });\n }\n });\n\n layerConfig.push(config);\n });\n return layerConfig;\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 *\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 *\n * @memberof RetinalEncoder\n */\n static type () {\n return 'retinal';\n }\n\n /**\n *\n *\n * @param {*} context\n *\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, FieldType, COORD_TYPES, getObjProp, DataModel } from 'muze-utils';\nimport { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\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 ARC,\n RADIUS,\n ANGLE\n} from '../enums/constants';\n\nconst POLAR = COORD_TYPES.POLAR;\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, ...params) => `${axisName}-axis-${params.join('-')}`;\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 *\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 *\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 *\n */\nexport const headerCreator = (fields, fieldHeaders, TextCell, { classPrefix, labelManager }) => {\n const headers = fields.length > 0 ? fields[0].map((cell, i) => new TextCell({\n type: HEADER,\n className: `${classPrefix}-grid-headers`\n }, {\n 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 *\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 *\n */\nexport const retriveDomainFromData = (datamodel, fieldName) => {\n const field = datamodel.getFieldspace().fields.find(d => d.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\nconst hasPolarEncodings = layerConf => layerConf.mark === ARC || [RADIUS, ANGLE].some(field =>\n getObjProp(layerConf.encoding, field));\n\n/**\n *\n *\n * @param {*} layers\n *\n */\nexport const getEncoder = (layers) => {\n let encoder = new CartesianEncoder();\n\n if (layers.length) {\n // Figuring out the kind of layers the group will have\n encoder = layers.some(layerConf => hasPolarEncodings(layerConf)) ? new PolarEncoder() : encoder;\n }\n return encoder;\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} fields\n * @param {*} userAxisFromConfig\n *\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 *\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\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/**\n * This method sorts the facets fields inplace if field is of categorical type\n * @param {Object} facets Array of facets\n * @param {Array} keys Array of the facet field values\n * @param {Object} config configuration object\n * @return {Array} Returns sorted facets\n */\nexport const sortFacetFields = (facets, keys, config) => {\n /**\n * Check if the facet sorted by the user is plotted\n * If an incorrect field is sorted, return the keys as is\n */\n const schema = [];\n const facetNames = [];\n const sortInfo = [];\n const sortConfig = config.sort;\n\n facets.forEach((facet) => {\n const name = `${facet}`;\n const facetSortConfig = sortConfig[name];\n if (facetSortConfig) {\n sortInfo.push([name, facetSortConfig]);\n }\n schema.push(facet.getSchemaDef());\n });\n\n return new DataModel([facetNames, ...keys], schema).sort(sortInfo, { saveChild: false }).getData().data;\n};\n\nexport const removeExitCells = (resolver) => {\n const exitCells = resolver.cacheMaps().exitCellMap;\n const store = resolver.store();\n const qualifiedStateProps = [].concat(...VisualUnit.getQualifiedStateProps(),\n ...BaseLayer.getQualifiedStateProps());\n store.lockCommits(qualifiedStateProps);\n exitCells.forEach((placeholder) => {\n placeholder.remove();\n });\n store.unlockCommits(qualifiedStateProps);\n};\n","import { DataModel } from 'muze-utils';\nimport { sortFacetFields } from './group-utils';\n\n/**\n* Gets name of fields form the variables\n*\n* @param {*} fields1\n* @param {*} [fields2=[]]\n*\n*/\nconst getFieldNames = fieldVar => fieldVar.reduce((acc, d) => {\n acc = [...acc, ...d.getMembers()];\n return acc;\n}, []);\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareProjectionInfo = (fieldInfo) => {\n const {\n colProjections,\n rowProjections\n } = fieldInfo;\n const uniqueFields = [];\n let indices = [];\n let projections = [];\n\n rowProjections.forEach((rowProj, rIndex) => {\n const newRIndex = rIndex;\n colProjections.forEach((colProj, cIndex) => {\n const newCIndex = cIndex;\n const newRowProj = getFieldNames(rowProj);\n const newColProj = getFieldNames(colProj);\n\n uniqueFields.push([...newRowProj, ...newColProj]);\n indices.push({ rowIndex: newRIndex, colIndex: newCIndex });\n projections.push({ rowFields: rowProj, columnFields: colProj });\n });\n });\n indices = indices.length ? indices : [{ rowIndex: 0, colIndex: 0 }];\n projections = projections.length ? projections : [{ rowFields: [], columnFields: [] }];\n return { uniqueFields, indices, projections };\n};\n\n/**\n*\n*\n* @param {*} fieldInfo\n* @returns\n*/\nconst prepareFacetInfo = (fieldInfo) => {\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const rowFacetNames = getFieldNames(rowFacets);\n const colFacetNames = getFieldNames(colFacets);\n const allFacets = [...rowFacetNames, ...colFacetNames];\n\n return { rowFacetNames, colFacetNames, allFacets, rowFacets, colFacets };\n};\n\n/**\n*\n*\n* @param {*} context\n* @param {*} facetNames\n* @param {*} hashMap\n* @param {*} keys\n* @param {*} index\n* @returns\n*/\nconst prepareHashMaps = (context, facetNames, hashMap, keys, index) => {\n const rowKey = [];\n facetNames.forEach((name) => {\n const key = context._derivation[context._derivation.length - 1].meta.keys[name];\n\n rowKey.push(key);\n });\n\n const joinedRowKey = rowKey.join(',');\n\n if (hashMap[joinedRowKey] === undefined) {\n hashMap[joinedRowKey] = index++;\n keys.push(rowKey);\n }\n return rowKey;\n};\n\nconst createJoinedKeys = keys => keys.map(e => ({\n keyArr: e,\n joinedKey: e.join(',')\n}));\n\n/**\n*\n*\n* @param {*} splitModels\n* @param {*} facetInfo\n* @returns\n*/\nconst getSplitModelHashMap = (splitModels, facetInfo, config) => {\n const {\n rowFacetNames,\n colFacetNames,\n rowFacets,\n colFacets\n } = facetInfo;\n\n const rowKeyHashMap = {};\n const colKeyHashMap = {};\n\n const rowKeys = [];\n const colKeys = [];\n const rowIndex = 0;\n\n const splitModelsHashMap = {};\n\n splitModels.forEach((splitContext) => {\n const rowKey = prepareHashMaps(splitContext, rowFacetNames, rowKeyHashMap, rowKeys, rowIndex);\n const colKey = prepareHashMaps(splitContext, colFacetNames, colKeyHashMap, colKeys, 1);\n\n splitModelsHashMap[`${rowKey}-${colKey}`] = splitContext;\n });\n\n return {\n splitModelsHashMap,\n rowKeys: createJoinedKeys(sortFacetFields(rowFacets, rowKeys, config)),\n colKeys: createJoinedKeys(sortFacetFields(colFacets, colKeys, config))\n };\n};\n\n/**\n * Formats row or columns keys with the provided formatter.\n *\n * @param {Array} keys - The collection of row or column keys.\n * @param {Array} formatterList - The list of corresponding formatter.\n */\nconst formatKeys = (keys, formatterList) => {\n const formattedKeys = [];\n keys.forEach((rKeys, rIdx) => {\n formattedKeys[rIdx] = [];\n rKeys.forEach((key, idx) => {\n formattedKeys[rIdx][idx] = formatterList[idx](key);\n });\n });\n return formattedKeys;\n};\n\n/**\n*\n*\n* @param {Object} context\n* @param {Object} fieldInfo\n* @returns\n*/\nconst splitByColumn = (context, optionalProjections) => {\n const {\n matrix,\n dataModel,\n rowIndex,\n colIndex,\n facetInfo,\n projectionInfo,\n geomCellCreator\n } = context;\n const {\n indices,\n uniqueFields,\n projections\n } = projectionInfo;\n\n const commonFields = optionalProjections;\n\n dataModel.splitByColumn(uniqueFields, commonFields).forEach((model, i) => {\n let { rowIndex: row, colIndex: col } = indices[i];\n row += rowIndex;\n col += colIndex;\n\n matrix[row] = matrix[row] || [];\n\n const projectionIndexObject = {\n indices: {\n rowIndex: row,\n columnIndex: col\n },\n projections: projections[i]\n };\n\n matrix[row][col] = geomCellCreator(model, projectionIndexObject, facetInfo);\n });\n const lastIndex = indices[indices.length - 1];\n\n return {\n rowIndex: lastIndex.rowIndex + rowIndex,\n colIndex: lastIndex.colIndex + colIndex\n };\n};\n\nconst createColumnDataModels = (colContext, fieldInfo, sourceDM) => {\n let context = {};\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n const {\n rowKeyArr,\n rowKey,\n colKeyObj,\n newRowIndex,\n splitModelsHashMap,\n currentColumnIndex\n } = colContext;\n\n const { keyArr: colKeyArr, joinedKey: colKey } = colKeyObj;\n const hashMapKey = splitModelsHashMap[`${rowKey}-${colKey}`];\n\n if (hashMapKey) {\n context = { dataModel: hashMapKey };\n } else {\n const emptyDm = new DataModel([], sourceDM.getData().schema);\n context = { dataModel: emptyDm };\n }\n\n context = {\n ...context,\n ...colContext,\n facetInfo: {\n rowFacets: [rowFacets, rowKeyArr],\n colFacets: [colFacets, colKeyArr]\n },\n rowIndex: newRowIndex,\n colIndex: currentColumnIndex\n };\n const dataModels = splitByColumn(context, fieldInfo.optionalProjections);\n\n return {\n columnIndex: dataModels.colIndex + 1,\n rowIndex: dataModels.rowIndex\n };\n};\n\nconst createRowDataModels = (rowContext, fieldInfo, sourceDM) => {\n let currentColumnIndex = 0;\n let rowIndexForCurrentKey = 0;\n const {\n colKeys,\n rowKeyObj,\n currentRowIndex\n } = rowContext;\n const newRowIndex = currentRowIndex;\n const { keyArr: rowKeyArr, joinedKey: rowKey } = rowKeyObj;\n const colContext = {\n ...rowContext,\n rowKeyArr,\n rowKey,\n newRowIndex\n };\n rowIndexForCurrentKey = currentRowIndex;\n if (colKeys.length) {\n colKeys.forEach((colKeyObj) => {\n colContext.colKeyObj = colKeyObj;\n colContext.currentColumnIndex = currentColumnIndex;\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n });\n } else {\n colContext.colKeyObj = { keyArr: [], joinedKey: '' };\n colContext.currentColumnIndex = currentColumnIndex;\n\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, sourceDM);\n\n currentColumnIndex = columnIndex;\n rowIndexForCurrentKey = rowIndex;\n }\n return {\n rowIndex: ++rowIndexForCurrentKey\n };\n};\n\n/**\n* Gets Matrixes for corresponding datamodel, facets and projections\n*\n* @param {Object} dataModel input datamodel\n* @param {Object} fieldInfo Information about the fields\n* @param {Function} geomCellCreator 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, geomCellCreator, globalConfig) => {\n let currentRowIndex = 0;\n const matrix = [];\n const {\n rowFacets,\n colFacets\n } = fieldInfo;\n\n const projectionInfo = prepareProjectionInfo(fieldInfo);\n const facetInfo = prepareFacetInfo(fieldInfo);\n const allSplitModels = dataModel.splitByRow(facetInfo.allFacets);\n\n const {\n splitModelsHashMap,\n rowKeys,\n colKeys\n } = getSplitModelHashMap(allSplitModels, facetInfo, globalConfig);\n\n const generalContext = {\n matrix,\n geomCellCreator,\n projectionInfo,\n splitModelsHashMap,\n colKeys\n };\n if (rowKeys.length) {\n rowKeys.forEach((rowKeyObj) => {\n const rowContext = {\n ...generalContext,\n rowKeyObj,\n currentRowIndex\n };\n const { rowIndex } = createRowDataModels(rowContext, fieldInfo, dataModel);\n\n currentRowIndex = rowIndex;\n });\n } else if (colKeys.length) {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n\n colKeys.forEach((colKeyObj) => {\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj,\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n });\n } else {\n let currentColumnIndex = 0;\n const newRowIndex = currentRowIndex;\n const colContext = {\n ...generalContext,\n rowKeyArr: [],\n rowKey: '',\n colKeyObj: { keyArr: [], joinedKey: '' },\n newRowIndex,\n currentColumnIndex\n };\n const { columnIndex, rowIndex } = createColumnDataModels(colContext, fieldInfo, dataModel);\n currentRowIndex = rowIndex;\n currentColumnIndex = columnIndex;\n }\n\n const formattedColKeys = formatKeys(colKeys.map(e => e.keyArr),\n colFacets.map(facetField => facetField.rawFormat()));\n const formattedRowKeys = formatKeys(rowKeys.map(e => e.keyArr),\n rowFacets.map(facetField => facetField.rawFormat()));\n\n // Getting column keys\n const transposedColKeys = formattedColKeys.length > 0 ? formattedColKeys[0].map((col, i) =>\n formattedColKeys.map(row => row[i])) : formattedColKeys;\n\n return { matrix, rowKeys: formattedRowKeys, columnKeys: transposedColKeys };\n};\n","import { AxisOrientation } from '@chartshq/muze-axis';\nimport {\n getObjProp,\n FieldType,\n retrieveNearestGroupByReducers,\n mergeRecursive,\n createSelection,\n DataModel\n} from 'muze-utils';\nimport { getMatrixModel } from './matrix-model';\nimport {\n getCellKey,\n isDistributionEqual,\n mutateAxesFromMap,\n getFieldsFromSuppliedLayers,\n extractFields,\n removeExitCells\n} from './group-utils';\nimport { ROW, ROWS, COLUMNS, COL, LEFT, RIGHT, TOP,\n BOTTOM, PRIMARY, SECONDARY, X, Y, TEMPORAL } from '../enums/constants';\nimport { SimpleVariable } from '../variable';\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 *\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 context.retinalConfig);\n const axesCreators = { config, labelManager, axes, cacheMaps };\n\n fieldInfo.normalizedColumns = verticalAxis.fields;\n fieldInfo.normalizedRows = horizontalAxis.fields;\n\n const allFacets = [\n [...facets.rowFacets[0], ...facets.colFacets[0]],\n [...facets.rowFacets[1], ...facets.colFacets[1]]\n ];\n const facetFields = allFacets.slice();\n facetFields[0] = facetFields[0].map(facetField => facetField.oneVar());\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\n const geomCell = !exitCellMap.has(geomCellKey) ? new GeomCell() : exitCellMap.get(geomCellKey);\n\n geomCell.data(datamodel)\n .fields(fields)\n .transform(datamodelTransform)\n .detailFields(detailFields)\n .facetByFields(allFacets);\n\n encoder.createAxis(axesCreators, fieldInfo, Object.assign({}, context, { geomCell, facetFields }));\n entryCellMap.set(geomCellKey, geomCell);\n exitCellMap.delete(geomCellKey);\n\n updateCells(resolver, facets, geomCell);\n\n return entryCellMap.get(geomCellKey);\n};\n\nconst extractAxisIndex = id => getObjProp(id.match(/^[0-9]*?(?=-)/g), 0);\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 */\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((currObj, 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 }).sort((a, b) => extractAxisIndex(a[0]) - extractAxisIndex(b[0]));\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.rowsSecondary = createAxisCells(selObj.rowSec, axes.map(() => []), 0, cells);\n selObj.columnsPrimary = createAxisCells(selObj.colPrime, axes[0], 0, cells);\n selObj.columnsSecondary = createAxisCells(selObj.colSec, 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) => {\n const textCell = new cells.TextCell({}, { labelManager });\n textCell.source(label);\n return textCell;\n }, headers, (key, i) => key + i);\n\nconst extractFacetIndex = id => id.split('-').pop();\n\n/**\n *\n *\n * @param {*} context\n * @param {*} selectionObj\n * @param {*} cells\n * @param {*} labelManager\n *\n */\nconst headerPlaceholderGn = (context, selectionObj, cells, labelManager) => {\n const {\n axis,\n keys,\n type,\n facet\n } = context;\n const counter = axis.length / keys.length;\n const selectionKeys = keys.length ? axis.map((d, i) => keys[Math.floor(i / counter)]) : [];\n\n const selObjUpdater = createSelection(selectionObj[`${type}Headers`], keySet => keySet, selectionKeys,\n (keySet, i) => `${keySet.join(',')}-${i}`)\n .sort((a, b) => extractFacetIndex(a[0]) - extractFacetIndex(b[0]));\n\n return selObjUpdater.map((keySet, data) => {\n let textCells = createTextCells(null, data, cells, labelManager);\n textCells = textCells.map((cell, k) => cell.source(k).config(facet));\n return textCells;\n });\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 facet,\n encoders,\n resolver\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 keys = keys.map(arr => arr.map(val => resolver.valueParser()(val)));\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.facet = facet.rows;\n headers = headerPlaceholderGn(hContext, selectionObj, cells, labelManager);\n } else {\n hContext.facet = facet.columns;\n hContext.keys = keys[0].map((key, i) => keys.map(e => e[i]));\n\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 facet,\n encoders,\n resolver\n } = context;\n const placeholderContext = {\n fields: {\n rows: normalizedRows,\n columns: normalizedColumns\n },\n matrices,\n facetsAndProjections,\n selection,\n axisFrom,\n facet,\n encoders,\n resolver\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]\n .map(e => (e ? e.getObjects()\n .map(f => f.getObjects()) : []));\n let rowPriority = rowSec.length ? 1 : -1;\n rowPrime.length && rowPriority++;\n let colPriority = colSec.length ? 1 : -1;\n colPrime.length && colPriority++;\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 colPriority,\n rowPriority\n };\n};\n\nconst getAxisFields = (projections, fieldHolder = []) =>\n projections.reduce((acc, item) =>\n [...acc, ...item.reduce((ac, field) =>\n (field instanceof SimpleVariable ? [...ac, field.oneVar()] : ac), [])], fieldHolder);\n\nconst sortDmTemporalFields = (resolver, datamodel) => {\n let axisFields = [];\n const projections = resolver.projections();\n axisFields = getAxisFields(projections.rowProjections, getAxisFields(projections.colProjections));\n\n const fieldConfig = datamodel.getFieldsConfig();\n const temporalFields = axisFields.reduce((acc, field) =>\n ((fieldConfig[field].def.subtype === TEMPORAL) ? [...acc, [field]] : acc), []);\n return temporalFields.length ? datamodel.sort(temporalFields, { saveChild: true }) : datamodel;\n};\n\nconst transformDataModel = (dataModel, config, resolver) => {\n let groupedModel;\n\n const fieldsConfig = dataModel.getFieldsConfig();\n const resolvedData = resolver.data();\n const { groupBy, suppliedLayers, facetsAndProjections } = config;\n\n if (resolvedData instanceof DataModel) {\n resolvedData.dispose();\n }\n groupedModel = dataModel.project(dataModel.getSchema().map(d => d.name));\n resolver.data(groupedModel);\n if (!groupBy.disabled) {\n const fields = getFieldsFromSuppliedLayers(suppliedLayers, groupedModel.getFieldsConfig());\n const allFields = extractFields(facetsAndProjections, fields);\n const dimensions = allFields.filter(field =>\n getObjProp(fieldsConfig, field, 'def', 'type') === FieldType.DIMENSION);\n const aggregationFns = groupBy.measures;\n const measureNames = Object.keys(groupedModel.getFieldspace().getMeasure());\n const nearestAggFns = retrieveNearestGroupByReducers(groupedModel, ...measureNames);\n const resolvedAggFns = mergeRecursive(nearestAggFns, aggregationFns);\n\n groupedModel = groupedModel.groupBy(dimensions.length ? dimensions : [''], resolvedAggFns)\n .project(allFields);\n }\n // sort temporal fields if any in the given rows and columns\n groupedModel = sortDmTemporalFields(resolver, groupedModel);\n return groupedModel;\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 facet: globalConfig.facet || {},\n axisFrom: globalConfig.axisFrom || {},\n selection,\n resolver\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 retinalConfig: {\n color: config.color,\n size: config.size,\n shape: config.shape\n }\n };\n\n const groupedModel = transformDataModel(datamodel, {\n facetsAndProjections,\n suppliedLayers: valueCellContext.suppliedLayers,\n groupBy\n }, resolver);\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, globalConfig);\n\n removeExitCells(resolver);\n resolver.cacheMaps().exitCellMap.clear();\n resolver.valueMatrix(valueMatrixInfo.matrix);\n\n const { xAxes, yAxes } = mutateAxesFromMap(resolver.cacheMaps(), resolver.axes());\n\n resolver.axes({\n x: xAxes,\n y: yAxes\n });\n\n resolver.createUnits(componentRegistry, config);\n\n const matrices = {\n valuesMatrix: valueMatrixInfo,\n axesMatrix: resolver.axes()\n };\n // Create all matrices\n const {\n rows,\n columns,\n selectionObj,\n rowPriority,\n colPriority\n } = 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 priority: {\n row: rowPriority,\n col: colPriority\n },\n selection: selectionObj,\n dataModels: {\n groupedModel,\n parentModel: datamodel\n }\n };\n};\n","export const RESOLVER_PROPS = {\n dependencies: {},\n units: {},\n datamodelTransform: {},\n layerConfig: {},\n matrixLayers: {},\n colCells: {},\n rowCells: {},\n rowMatrix: {},\n columnMatrix: {},\n valueMatrix: {},\n encoder: {},\n valueParser: {},\n data: {}\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { generateGetterSetters, STATE_NAMESPACES, getUniqueId } from 'muze-utils';\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';\nimport { RESOLVER_PROPS } from './resolver-props';\n\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 = { rowFacets: [], colFacets: [] };\n this._projections = { rowProjections: [], colProjections: [] };\n this._datamodelTransform = {};\n this._units = [];\n this._cacheMaps = {};\n this._fireboltDeps = {};\n this._axes = {\n x: {},\n y: {},\n color: [],\n size: [],\n shape: [],\n radius: [],\n angle: [],\n angle0: []\n };\n generateGetterSetters(this, RESOLVER_PROPS);\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 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 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 *\n *\n * @param {*} facets\n *\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 *\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 *\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 *\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 radius: [],\n angle: [],\n angle0: [],\n pie: []\n });\n }\n\n setFireboltDependencies (prop, deps) {\n Object.assign(this._fireboltDeps, {\n [prop]: deps\n });\n return this;\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 coord\n } = config;\n const {\n layerRegistry,\n sideEffectRegistry\n } = componentRegistry;\n const {\n smartlabel: smartLabel,\n lifeCycleManager,\n throwback\n } = this.dependencies();\n const fireboltDeps = this._fireboltDeps;\n\n // Provide the source for the matrix\n const units = [[]];\n // Setting unit configuration\n const unitConfig = extractUnitConfig(globalConfig || {});\n const store = this.store();\n store.lockModel();\n\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n let unit = el.source();\n if (!unit) {\n const namespace = `unit${i}-${j}-${getUniqueId()}`;\n\n unit = VisualUnit.create({\n layerRegistry,\n sideEffectRegistry\n }, {\n smartLabel,\n lifeCycleManager,\n throwback,\n fireboltDeps\n });\n unit.metaInf({\n rowIndex: i,\n colIndex: j,\n namespace\n });\n unit.store(store);\n unit.coord(coord);\n el.source(unit);\n }\n !units[i] && (units[i] = []);\n units[i][j] = unit;\n unit.parentAlias(alias)\n .valueParser(this.valueParser())\n .coord(coord);\n el.config(unitConfig);\n });\n store.unlockModel();\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 resetFacetsAndProjections () {\n this._facets = {};\n this._projections = {};\n return this;\n }\n\n /**\n *\n *\n *\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 *\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 const props = [`${STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE}.domain`,\n `${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`];\n const store = this.store();\n store.lockCommits(props);\n store.lockModel();\n this.forEach(VALUE_MATRIX, (i, j, el) => {\n el.axes(Object.assign(el.axes(), retinalAxes));\n el.source() && el.source().retinalFields(config);\n el.layerDef(matrixLayers[i][j]);\n el.updateModel();\n\n units.push(el.source());\n });\n store.unlockModel()\n .unlockCommits([props[0]])\n .unlockCommits([props[1]]);\n lifeCycleManager.notify({ client: units, action: UPDATED, formalName: UNIT });\n return this;\n }\n\n /**\n *\n *\n * @param {*} placeholders\n * @param {*} fieldNames\n *\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 {\n showHeaders,\n classPrefix\n } = config;\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], showHeaders ? TextCell : BlankCell,\n { classPrefix, labelManager }),\n right: headerCreator(rightRows, rowHeaders[1], showHeaders ? TextCell : BlankCell,\n { classPrefix, 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 *\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 store (...params) {\n if (params.length) {\n this._store = params[0];\n return this;\n }\n return this._store;\n }\n\n clear () {\n const cacheMaps = this._cacheMaps;\n for (const key in cacheMaps) {\n cacheMaps[key].clear();\n }\n }\n\n}\n","/**\n * This is a wrapper class over the matrix of cells which gets created in visual group. Visual Group creates left,\n * right, bottom and top and center matrices and wraps them using this class.\n *\n * @public\n * @class ValueMatrix\n */\nclass ValueMatrix {\n\n /**\n * Creates an instance of ValueMatrix.\n *\n * @param {Array} matrixArr Matrix array.\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 instancesById (...id) {\n if (id.length) {\n this._instancesById = id[0];\n return this;\n }\n return this._instancesById;\n }\n\n /**\n * Returns the array of matrices contained in this instance.\n *\n * @public\n * @return {Array} Array of matrices.\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 * Sets a filter criteria. This filter criteria gets applied when each function is called.\n *\n * @public\n * @param {Function} fn Filter function.\n *\n * @return {ValueMatrix} Instance of value matrix.\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 * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\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 * Returns the total width occupied by all the cells of the matrix.\n *\n * @return {Number} Width of the matrix.\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 * Iterates through the two dimensional matrix array and calls the given callback function with the cell instance,\n * row index, column index and the matrix array.\n *\n * @param {Function} fn Callback function which will get called for every cell.\n * @return {ValueMatrix} Instance of the value matrix.\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 findPlaceHolderById (id) {\n return this.instancesById()[id];\n }\n\n clear () {\n this.each(cell => cell.remove());\n this.matrix([]);\n }\n}\n\nexport default ValueMatrix;\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { BaseLayer } from '@chartshq/visual-layer';\nimport { getEncoder, getBorders } from '../group-helper';\nimport { RetinalEncoder } from '../encoder';\nimport { registerDomainChangeListener, unsubscribeChangeListeners } from './change-listener';\nimport ValueMatrix from './value-matrix';\n\nexport const createUnitState = (context) => {\n const [globalState, localState] = VisualUnit.getState();\n const store = context.store();\n store.append(STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.UNIT_LOCAL_NAMESPACE, localState);\n};\n\nexport const initializeGlobalState = (context) => {\n const globalState = context.constructor.getState()[0];\n const store = context.store();\n store.append(STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE, globalState);\n};\n\nexport const createLayerState = (context) => {\n const [globalState, localState] = BaseLayer.getState();\n context.store().append(STATE_NAMESPACES.LAYER_GLOBAL_NAMESPACE, globalState)\n .append(STATE_NAMESPACES.LAYER_LOCAL_NAMESPACE, localState);\n};\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\nexport const setMatrixInstances = (context, placeholder) => {\n let {\n values,\n rows,\n columns\n } = placeholder;\n values = values || [];\n rows = rows || [];\n columns = columns || [];\n context._composition.matrices = {\n value: new ValueMatrix(values),\n left: new ValueMatrix(rows[0]),\n right: new ValueMatrix(rows[1]),\n top: new ValueMatrix(columns[0]),\n bottom: new ValueMatrix(columns[1])\n };\n\n context._dependencies.throwback.commit(CommonProps.MATRIX_CREATED, true);\n return context;\n};\n\nexport const createMatrices = (context) => {\n const rows = context.rows();\n const columns = context.columns();\n const color = context.color();\n const datamodel = context.data();\n const size = context.size();\n const detail = context.detail();\n const layers = context.layers();\n const transform = context.transform();\n const config = context.config();\n const shape = context.shape();\n\n // Get the resolver for the matrices\n const resolver = context.resolver();\n resolver.store(context.store());\n resolver.valueParser(context.valueParser());\n // Prepare configuration for matrix preparation\n let matrixConfig = {\n selection: context.selection(),\n alias: context.alias(),\n globalConfig: config || {},\n rows,\n columns,\n detail,\n layers,\n transform\n };\n\n unsubscribeChangeListeners(context);\n\n const retinalConfig = sanitizeRetinalConfig({\n color,\n shape,\n size\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);\n matrixConfig.coord = encoders.simpleEncoder.constructor.type();\n resolver.encoder(encoders.simpleEncoder);\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 ? config.axisFrom : {}, fields);\n // Setting layers for the code\n layers && resolver.layerConfig(layers);\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));\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 resolver.encoder().unionUnitDomains(context);\n\n registerDomainChangeListener(context);\n return context;\n};\n","import { VisualUnit } from '@chartshq/visual-unit';\nimport { BaseLayer } from '@chartshq/visual-layer';\n\nimport { STATE_NAMESPACES } from 'muze-utils';\n\nexport const setupChangeListeners = (context) => {\n const store = context.store();\n const stores = {\n throwback: context._dependencies.throwback,\n store\n };\n\n ['x', 'y'].forEach((axisType) => {\n store.registerChangeListener([`${STATE_NAMESPACES.GROUP_GLOBAL_NAMESPACE}.domain.${axisType}`], () => {\n const groupAxes = context.resolver().axes();\n groupAxes[axisType].forEach(axes => axes.forEach((axis) => {\n axis.render();\n }));\n });\n });\n\n [VisualUnit, BaseLayer].forEach((comp) => {\n const formalName = comp.formalName();\n ['store', 'throwback'].forEach((type) => {\n const listeners = comp.getListeners()[type];\n const storeInst = stores[type];\n listeners.forEach((listenerInf) => {\n storeInst[listenerInf.type](listenerInf.props, listenerInf.listener, false, {\n namespace: formalName,\n subNamespace: listenerInf.subNamespace\n });\n });\n });\n });\n};\n\nexport const registerDomainChangeListener = (context) => {\n const store = context.store();\n store.registerChangeListener([`${STATE_NAMESPACES.UNIT_GLOBAL_NAMESPACE}.domain`], () => {\n context.resolver().encoder().unionUnitDomains(context);\n }, false, {\n key: 'unionDomain'\n });\n};\n\nexport const unsubscribeChangeListeners = (context) => {\n context.store().unsubscribe({\n key: 'unionDomain'\n });\n};\n","import { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, LAYERS, TRANSFORM, CONFIG } from '../enums/constants';\n\nexport const PROPS = {\n alias: {},\n data: {},\n cornerMatrices: {\n defaultValue: {\n topLeft: [],\n topRight: [],\n bottomLeft: [],\n bottomRight: []\n }\n },\n groupType: {},\n\n metaData: {\n defaultValue: {\n border: {}\n }\n },\n placeholderInfo: {\n defaultValue: {}\n },\n resolver: {},\n valueParser: {\n defaultValue: val => val\n },\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 [CONFIG]: {},\n [ROWS]: {},\n [COLUMNS]: {},\n [COLOR]: {},\n [SHAPE]: {},\n [SIZE]: {},\n [DETAIL]: {},\n [LAYERS]: {},\n [TRANSFORM]: {}\n};\n","import { generateGetterSetters } from 'muze-utils';\nimport localOptions from './local-options';\nimport { SimpleGroup } from '../simple-group';\nimport {\n MatrixResolver,\n findInGroup\n} from '../group-helper';\nimport { createUnitState, initializeGlobalState, setMatrixInstances, createMatrices, createLayerState } from './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 * VisualGroup is instantiated by canvas for creating {@link VisualUnit} and axes instances.It creates the\n * the matrix of visual units and axes. It also creates the layout instance which manages the allocation\n * of space of matrices.\n *\n * To get instance of visual group,\n * ```\n * const visualGroup = canvas.composition().visualGroup;\n * ```\n * @public\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 *\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 generateGetterSetters(this, localOptions);\n // Populate the store with default values\n // initialize group compositions\n this._composition = {};\n // store reference to data\n this._data = [];\n // store reference to mountpoint\n this._mount = null;\n // selection object that takes care of updating of components\n this._selection = {};\n // Create instance of matrix resolver\n this.resolver(new MatrixResolver(this._dependencies));\n // matrix instance store each of the matrices\n setMatrixInstances(this, {});\n // Getting indiviual registered items\n this.registry({\n layerRegistry: componentSubRegistry.layerRegistry.get(),\n cellRegistry: componentSubRegistry.cellRegistry.get()\n });\n }\n\n static getState () {\n return [{\n domain: {\n x: null,\n y: null,\n radius: null,\n angle: null,\n angle0: null\n }\n }, {}];\n }\n\n store (...params) {\n if (params.length) {\n this._store = params[0];\n initializeGlobalState(this);\n createUnitState(this);\n createLayerState(this);\n // Register listeners\n setupChangeListeners(this);\n return this;\n }\n return this._store;\n }\n\n /**\n * Return the instances of matrices created by the visual group.\n *\n * @return {Object} Instance of matrices.\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 visual group.\n *\n * @public\n *\n * @return {Object} Composition of visual group. It contains instance of matrices {@link ValueMatrix}\n * and instances of axis.\n * ```\n * {\n * matrices: {\n * value: // Instance of center value matrix.\n * left: // Instance of left value matrix\n * right: // Instance of right value matrix\n * bottom: // Instance of bottom value matrix\n * top: // Instance of top value matrix.\n * },\n * axes: {\n * x: // Array of x axis.\n * y: // Array of y axis\n * color: // Array of color axis\n * shape: // Array of shape axis\n * size: // Array of size axis.\n * }\n * }\n * ```\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 */\n unlockModel () {\n this.store().model.unlock();\n return this;\n }\n\n /**\n * Returns the channel name of the variable. Channels are rows, columns, color, shape and size.\n *\n * @public\n * @param {string} variable Name of the variable.\n *\n * @return {string} Name of the channel.\n */\n where (variable) {\n return findInGroup(variable, this.resolver().getAllFields());\n }\n\n /**\n * Gets the axis instances of the visual group based on the given axis type.\n *\n * @public\n * @param {string} type Type of axis. X,Y or retinal axes.\n *\n * @return {Array} Array of axis instances.\n */\n getAxes (type) {\n if (type === RETINAL) {\n return this.resolver().getRetinalAxes();\n }\n return this.resolver().getSimpleAxes(type);\n }\n\n /**\n * Returns the instances of cells based on the given type. Type can be given as `row' or `col`.\n *\n * @public\n * @return {Array} Two dimensional array of cells.\n */\n getCells (type) {\n return this.resolver()[`${type}Cells`]();\n }\n\n getFieldsFromChannel (channel) {\n const {\n rowProjections,\n colProjections\n } = this.resolver().getAllFields();\n return channel === Y ? rowProjections : colProjections;\n }\n\n getCellsByFacetKey (facetKey) {\n const resolver = this.resolver();\n const cells = resolver.rowCells()[facetKey] || resolver.colCells()[facetKey] || [];\n return cells;\n }\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 /**\n * Returns the grouped datamodel prepared by visual group. If there is no group by performed, then it returns the\n * original data model passed to visual group.\n *\n * @return {DataModel} Grouped data model.\n */\n getGroupByData () {\n return this._groupedDataModel;\n }\n\n createMatrices () {\n createMatrices(this);\n }\n\n remove () {\n this.matrixInstance().value.clear();\n this.resolver().clear();\n const info = this.placeholderInfo();\n info.rows = null;\n info.columns = null;\n info.values = null;\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 MAXWIDTH = 'max-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 context = firebolt.context;\n const type = context.constructor.type();\n const payload = config.payload;\n const data = context.data();\n const metaData = context.metaData();\n const fieldType = metaData.getData().schema[0].type;\n\n const propPayload = {};\n const sourceId = context._id;\n propPayload.action = propagationBehaviourMap[action] || action;\n propPayload.sideEffects = propagationSideEffects[action];\n propPayload.sourceCanvas = 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.rawVal);\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 === 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.rawVal) !== -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","import { getEvent } from 'muze-utils';\n\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 event = getEvent();\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 const event = getEvent();\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 labelManager: {},\n minTickDistance: {},\n valueParser: {\n defaultValue: val => val\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, i, data, context) => context.valueParser()(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 MAXWIDTH\n} from '../enums/constants';\n\n/**\n *\n *\n * @param {*} scale\n *\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 * Function to recompute the stops in array in case to left and right alignment of legend.\n *\n * @param {string} param - parameter to measure\n * @param {Object} requiredMeasure - required measure parameters\n * @param {Object} availableMeasure - available meassure parameters\n * @param {Array} domainForLegend - array\n * @param {Object} smartLabelCalc - smartLabel Manager\n * @return {Array} - Array\n */\nconst getcomputedArray = (computationhelper, requiredMeasure, availableMeasure, domainForLegend) => {\n // declaring Current and Next Tick Value variable\n let currentTickValue;\n let nextTickValue;\n const upperBound = domainForLegend[domainForLegend.length - 1];\n const param = computationhelper.measureParam;\n const smartLabelCalc = computationhelper.smartLabelCalc;\n\n // calculating pixel required per Tick Values\n const pixelPerTick = (availableMeasure[param] / upperBound);\n\n // checking if available max width is smaller than required width for legend.\n if (availableMeasure[param] >= requiredMeasure[param]) {\n return domainForLegend;\n }\n\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[0]))[param]);\n for (let i = 1; i < domainForLegend.length - 1; i++) {\n nextTickValue = Math.floor((currentTickValue / pixelPerTick) + domainForLegend[i - 1]);\n if (domainForLegend[i] < nextTickValue) {\n domainForLegend.splice(i, 1);\n i -= 1;\n }\n currentTickValue = (smartLabelCalc.getOriSize((domainForLegend[i]))[param]);\n }\n return domainForLegend;\n};\n\n/**\n * function to recompute the Stops Array provided to prevent the Overlapping of values\n * @param {Array} domainForLegend - Stops Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - modified Stops Array\n */\nexport const getInterpolatedArrayData = (domainForLegend, scaleParams) => {\n // defining param for height/width selector\n let measureParam;\n\n // declaring variable for required Width\n let requiredWidth;\n\n // declaring variable for required height\n let requiredHeight;\n\n // declaring the variable for upperbound\n let upperBound = domainForLegend[domainForLegend.length - 1];\n\n // Initializing Minimum Tick Difference Variable and checking if it's less than 1 or not\n let minTickDiff = Math.ceil(domainForLegend[1] - domainForLegend[0]);\n\n // calculating max tick difference\n const maxTickDiff = Math.ceil(upperBound - domainForLegend[0]);\n\n // gradient Alignment\n const { alignment } = scaleParams;\n\n // getting SmartLabel Manager to calculate tick Params\n const smartLabelCalc = scaleParams.smartLabel;\n\n // scale Measurements (i.e MaxWidth and MaxHeight available)\n const availableSpace = scaleParams.measures;\n\n // getting minimum Tick size (i.e height and width)\n const minimumTickSize = scaleParams.minTickDistance;\n\n // getting domain upperbound dimensions\n const { height: tickDimHeight, width: tickDimWidth } = smartLabelCalc.getOriSize((upperBound));\n\n /* Checking if UpperBound of Domain is Floating or Not.\n In case of floating constricting it to 2 decimals after point. */\n if (!Number.isInteger(upperBound)) {\n upperBound = ((upperBound).toFixed(2));\n }\n\n // Calculating minimum tick difference\n minTickDiff = minTickDiff < 1 ? 1 : minTickDiff;\n\n // required width to render legend\n requiredWidth = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * (tickDimWidth + (minimumTickSize.width));\n\n requiredWidth -= Math.abs(maxTickDiff);\n\n // require height to render legend\n requiredHeight = (Math.abs(maxTickDiff) / Math.abs(minTickDiff)) * tickDimHeight;\n\n requiredHeight -= Math.abs(maxTickDiff);\n\n // checking the alignment of legend\n if (alignment === TOP || alignment === BOTTOM) {\n measureParam = WIDTH;\n } else {\n measureParam = HEIGHT;\n }\n\n // calculating computed array\n domainForLegend = getcomputedArray({\n smartLabelCalc,\n measureParam\n }, {\n height: requiredHeight,\n width: requiredWidth\n }, {\n height: availableSpace.maxHeight,\n width: availableSpace.maxWidth\n }, domainForLegend);\n\n return domainForLegend;\n};\n\n/**\n * function to recalculate steps on providing more number of stops than canvas can accomodate.\n * @param {Array} domain - Array\n * @param {Array} steps - Array\n * @param {Object} scaleParams - Scale Parameters\n * @return {Array} - recalculated Step Array\n */\nexport const getInterpolatedData = (domain, steps, scaleParams) => {\n // declaring recomputeSteps Variable\n let recomputeSteps = 0;\n\n const getTickMeasure = scaleParams.smartLabel;\n const { maxWidth, maxHeight } = scaleParams.measures;\n const { alignment } = scaleParams;\n const domainForLegend = [];\n const interpolatedFn = numberInterpolator()(domain[0], domain[1]);\n\n // getting tick measure(i.e height and width)\n const tickValue = getTickMeasure.getOriSize(domain[1].toFixed(2));\n\n // To round the floating values to Integer and checking if value is 1.\n steps = Math.round(steps);\n steps = steps < 1 ? (steps + 1) : steps;\n\n // checking alignment of the Axis\n if (alignment === TOP || alignment === BOTTOM) {\n recomputeSteps = Math.floor(maxWidth / (tickValue.width));\n } else {\n recomputeSteps = Math.floor(maxHeight / (tickValue.height));\n }\n steps = Math.min(steps, recomputeSteps);\n\n // scaling the axis based on steps provided\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 titleWidth = Math.min(measurement.maxWidth, measurement.width);\n\n const titleContainer = makeElement(container, 'table', [1], `${config.classPrefix}-legend-title`)\n .style(WIDTH, `${titleWidth}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, `${titleWidth}px`)\n .style(MAXWIDTH, `${titleWidth}px`)\n .style(HEIGHT, '100%')\n .style('line-height', 1)\n .style('padding', `${measurement.padding}px`)\n .text(title.text)\n .style('overflow-x', 'scroll')\n .node();\n};\n\n/**\n *\n *\n * @param {*} data\n * @param {*} prop\n * @param {*} labelManager\n *\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 *\n */\nexport const getItemMeasures = (context, prop, formatter) => {\n const space = [];\n const data = context.data();\n const labelManager = context._labelManager;\n\n data.forEach((item, index) => {\n const value = prop ? item[prop] : item;\n const { height, width } = labelManager.getOriSize(formatter(value, index, data, context));\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 *\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);\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 const labelWidth = labelSpaces[i].width;\n const newLabelWidth = (maxItemSpaces.width - maxIconWidth);\n iconSpaces[i].width = maxIconWidth;\n itemSpaces[i].width = labelSpaces[i].width + maxIconWidth;\n labelSpaces[i].width = Math.max(labelWidth, newLabelWidth);\n totalWidth = Math.max(totalWidth, itemSpace.width);\n }\n }\n });\n totalWidth = Math.ceil(Math.max(totalWidth, titleWidth)) + effPadding;\n totalHeight += titleHeight + effPadding;\n totalHeight = Math.ceil(totalHeight);\n return { totalHeight, totalWidth, itemSpaces, iconSpaces, maxItemSpaces, maxIconWidth };\n};\n\n/**\n *\n *\n * @param {*} type\n * @param {*} scaleInfo\n * @param {*} domainInfo\n *\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, RIGHT, LEFT, TOP, BOTTOM } 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 const dist = dependencies.labelManager.getOriSize('w');\n this._minTickDistance = { width: dist.width * 3 / 4, height: dist.height / 2 };\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 *\n * @memberof SimpleLegend\n */\n static defaultConfig () {\n return DEFAULT_CONFIG;\n }\n\n /**\n *\n *\n * @static\n *\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 *\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 *\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 *\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, VALUE, 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());\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 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, maxWidth } = this.measurement();\n const { borderStyle, borderColor } = this.config();\n return titleCreator(container, this.title(), {\n height: titleSpaces.height,\n width,\n maxWidth,\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 position\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 let marginPosition;\n switch (position) {\n case TOP:\n marginPosition = `margin-${BOTTOM}`;\n break;\n case LEFT:\n marginPosition = `margin-${RIGHT}`;\n break;\n case BOTTOM:\n marginPosition = `margin-${TOP}`;\n break;\n default:\n marginPosition = `margin-${LEFT}`;\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(`${marginPosition}`, `${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 *\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.rawVal]];\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\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 *\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 *\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 *\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 const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context))\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 const dataArr = container.data();\n container.each(function (d, i) {\n if (d[0] === VALUE) {\n selectElement(this).text(formatter(d[1], i, dataArr, context));\n } else {\n renderIcon(RECT, selectElement(this), d, {\n classPrefix,\n iconWidth,\n iconHeight,\n maxIconWidth,\n color\n });\n }\n });\n};\n","import {\n FieldType,\n DimensionSubtype,\n formatTemporal\n} from 'muze-utils';\nimport 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 *\n * @memberof DiscreteLegend\n */\n static type () {\n return DISCRETE;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof DiscreteLegend\n */\n dataFromScale () {\n const scale = this.scale();\n const { scaleType, domain, scaleFn } = getScaleInfo(scale);\n let domainForLegend = [...new Set(domain)];\n const field = this.metaData().getFieldspace().fields[0];\n const { type, subtype } = field.schema();\n\n domainForLegend = domainForLegend.map((ele, i) => {\n let value = 0;\n let range = 0;\n const rawVal = domainForLegend[i];\n if (type === FieldType.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 let domainVal = rawVal;\n if (subtype === DimensionSubtype.TEMPORAL) {\n domainVal = formatTemporal(domainForLegend[i], field.minimumConsecutiveDifference());\n }\n value = domainVal;\n range = [domainVal];\n }\n return {\n [scaleType]: scale[scaleFn](ele),\n value,\n id: i,\n range,\n rawVal\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 *\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 *\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\n makeElement(linearGradient, 'stop', data, 'stop-gradient')\n .attr('offset', d => `${(d.value - domain[0]) * 100 / (domain[1] - domain[0]) || 1}%`)\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 labels: {\n rotation: null\n }\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 *\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 axis.source().render();\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().tickDimensions;\n const {\n padding,\n margin,\n border,\n titleSpaces,\n maxItemSpaces,\n maxHeight,\n maxWidth,\n height,\n width\n } = context.measurement();\n const gradientDimensions = {};\n\n gradHeight = Math.floor(Math.min(height, maxHeight) - (titleSpaces.height + 2 * margin + 2 * border));\n gradWidth = Math.floor(Math.min(width, maxWidth) - (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\n applyStyle(legendContainer, {\n height: `${maxItemSpaces.height + border + padding}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\n applyStyle(legendContainer, {\n height: `${Math.min(height, maxHeight)}px`,\n width: `${maxWidth}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, getInterpolatedArrayData } 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 *\n * @memberof GradientLegend\n */\n static type () {\n return GRADIENT;\n }\n\n /**\n *\n *\n * @param {*} axis\n *\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 *\n * @memberof GradientLegend\n */\n dataFromScale () {\n let domainForLegend = [];\n const scale = this.scale();\n const { scaleType, domain, steps, scaleFn } = getScaleInfo(scale);\n\n // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\n };\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 // Sorting the domain Array\n domainForLegend = [...new Set(domainForLegend)].sort((a, b) => a - b);\n\n domainForLegend = getInterpolatedArrayData(domainForLegend, scaleParams);\n } else {\n domainForLegend = getInterpolatedData(domain, steps - 1, scaleParams);\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 *\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 *\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 *\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 *\n * @memberof StepLegend\n */\n static type () {\n return STEP;\n }\n\n /**\n *\n *\n * @param {*} scale\n *\n * @memberof StepLegend\n */\n dataFromScale () {\n let domainLeg = [];\n const scale = this.scale();\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 // defining scaleParams\n const scaleParams = {\n smartLabel: this.labelManager(),\n measures: this.measurement(),\n alignment: this.config().position,\n minTickDistance: this.minTickDistance()\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, scaleParams);\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 } else if (domainLeg.length === 1) {\n value = ele.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\n return domainLeg;\n }\n\n /**\n *\n *\n * @param {*} effPadding\n * @param {*} align\n *\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 *\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 *\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';\nexport const MUZE_PREFIX = 'muze';\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';\nexport const HORIZONTAL_CENTER = 'h-center';\nexport const VERTICAL_CENTER = 'v-center';\nexport const HIDDEN = 'hidden';\nexport const OVERFLOW = 'overflow';\nexport const OVERFLOW_X = 'overflow-x';\nexport const OVERFLOW_Y = 'overflow-y';\nexport const AUTO = 'auto';\nexport const VISIBLE = 'visible';\nexport const VERTICAL_SCROLL_BAR = 'verticalScrollBar';\nexport const HORIZONTAL_SCROLL_BAR = 'horizontalScrollBar';\nexport const GRID = 'grid';\nexport const MESSAGE = 'message';\nexport const NO_DATA_MESSAGE = 'No data to display';\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. This is required when we have multiple\n * variables on a single axis and the union of domain of all the variables needs to be set on the axis.\n *\n * To create a new composed variable from multiple fields,\n * ```\n * const sharedVar = share('open', 'high', 'low', 'close');\n * canvas.rows([sharedVar])\n * .columns(['date']);\n * ```\n *\n * @module Operators\n * @public\n * @function share\n * @param {Array} vars Variable names.\n *\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 *\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 string according to the allowed html tags.\n * This is used to render html in canvas components like title and tooltip.\n *\n * To render html in canvas components,\n * ```\n * canvas.title(html`TITLE`);\n * ```\n *\n * @public\n * @module Operators\n * @function html\n * @param {Array.} strings - The string parts of the template.\n * @param {Array} exps - The list of evaluated expression values.\n *\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, CommonProps } 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\nconst listenerFn = (canvas, fn) => () => {\n const valueMatrix = canvas.composition().visualGroup.matrixInstance().value;\n valueMatrix.each(cell => fn(cell.valueOf().firebolt()));\n};\n\nconst canvasIterator = (canvases, iteratorFn, cFn) => {\n canvases.forEach((canvas) => {\n const matrix = canvas.composition().visualGroup.matrixInstance().value;\n matrix.each(cell => iteratorFn(cell.valueOf().firebolt()));\n cFn && cFn(canvas);\n // Also register actions on canvas update\n const throwback = canvas._throwback;\n\n throwback.registerImmediateListener([CommonProps.MATRIX_CREATED],\n listenerFn(canvas, iteratorFn));\n });\n};\n\nconst registerActions = (context, type, fnName, deps) => {\n const canvases = context._registrableComponents;\n\n canvases.forEach((canvas) => {\n const vGroup = canvas.composition().visualGroup;\n\n vGroup.resolver().setFireboltDependencies(type, deps);\n canvas.firebolt()[fnName](deps);\n });\n};\n\n/**\n * This class is initiated only once in lifecycle and is reponsible for regisration of physical and behavioural\n * actions and side effects and the mapping between them.\n *\n * To get the instance of action model\n * ```\n * const ActionModel = muze.ActionModel;\n * ```\n *\n * @public\n * @module ActionModel\n */\nclass ActionModel {\n constructor () {\n this._registrableComponents = [];\n }\n\n /**\n * Takes an array of canvases on which the physical and behavioural actions will get registered.\n *\n * @public\n * @param {Canvas} components Array of canvases\n *\n * @return {ActionModel} Instance of action model.\n */\n for (...components) {\n this._registrableComponents = components;\n return this;\n }\n\n /**\n * Registers physical actions on the canvases. It takes an object with key as the name of action and value having\n * the definition of the action.\n *\n * To register a {@link PhysicalAction},\n * ```\n * const ActionModel = muze.ActionModel;\n * ActionModel\n * // Physical actions will be registered on these canvases.\n * .for(canvas)\n * .registerPhysicalActions({\n * // Key is the name of physical action.\n * ctrlClick: (firebolt) => (targetEl, behaviours) => {\n * targetEl.on('click', function (data) {\n * const event = utils.getEvent();\n * const pos = utils.getClientPoint(event, this);\n * // Get the data point nearest to the mouse position.\n * const nearestPoint = firebolt.context.getNearestPoint(pos, {\n * data\n * });\n * // Prepare the payload\n * const payload = {\n * criteria: nearestPoint.id\n * };\n * behaviours.forEach((behaviour) => firebolt.dispatchBehaviour(behaviour, payload));\n * });\n * }\n * });\n * ```\n * @public\n *\n * @param {Object} action Names of physical actions and their definitions.\n *\n * @return {ActionModel} Instance of the action model.\n */\n registerPhysicalActions (action) {\n registerActions(this, 'physicalActions', 'registerPhysicalActions', action);\n return this;\n }\n\n /**\n * Registers behavioural actions on the canvases. It takes definitions of the behavioural actions and registers\n * them on the canvases. Every behavioural action must inherit the {@link GenericBehaviour} class.\n *\n * To register a behavioural action\n * ```\n * // Define a new behavioural action\n * class SingleSelectBehaviour extends GenericBehaviour {\n * static formalName () {\n * return 'singleSelect';\n * }\n *\n * setSelectionSet (addSet, selectionSet) {\n * if (addSet === null) {\n * selectionSet.reset();\n * } else if (addSet.length) {\n * const existingAddSet = selectionSet.getExistingEntrySet(addSet);\n * if (existingAddSet.length){\n * selectionSet.reset();\n * } else {\n * selectionSet.add(addSet);\n * }\n * } else {\n * selectionSet.reset();\n * }\n * }\n * }\n * muze.ActionModel.registerBehaviouralActions(SingleSelectBehaviour);\n * ```\n *\n * @public\n *\n * @param {GenericBehaviour} actions Definition of behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerBehaviouralActions (...actions) {\n registerActions(this, 'behaviouralActions', 'registerBehaviouralActions', actions);\n return this;\n }\n\n /**\n * Registers the mapping of physical and behavioural actions. This mapping is used to establish which behavioural\n * actions should be dispatched on any triggering of physical actions.\n *\n * To map physical actions with behavioural actions,\n * ```\n * muze.ActionModel.registerPhysicalBehaviouralMap({\n * ctrlClick: {\n * behaviours: ['select'] // This array must be the formal names of the behavioural actions.\n * }\n * });\n * ```\n *\n * @public\n * @param {Object} map Contains the physical and behavioural action map.\n * ```\n * {\n * // Name of the physical action\n * click: {\n * // Target element selector. This is an optional field. If not passed, then by default takes the\n * // container element of visual unit.\n * target: '.muze-layers-area path',\n * // Behaviours which should be dispatched on triggering of the mapped physical action.\n * behaviours: ['select']\n * }\n * }\n * ```\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPhysicalBehaviouralMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPhysicalBehaviouralMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPhysicalBehaviouralMap(map);\n });\n return this;\n }\n\n /**\n * Registers what behaviour to propagate on dispatch of a certain behavioural action. By default, when any\n * behavioural action is dispatched, then the same behavioural action gets propagated to all the other canvases.\n * This can be changed using this api.\n *\n * To register what behaviour should be propagated on dispatch of any behavioural action,\n * ```\n * ActionModel.for(canvas1, canvas2).registerPropagationBehaviourMap({\n * select: 'filter',\n * brush: 'filter'\n * });\n * ```\n *\n * @public\n * @param {Object} map Propagation behaviour map.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerPropagationBehaviourMap (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.registerPropagationBehaviourMap(map);\n }, (canvas) => {\n canvas.firebolt().registerPropagationBehaviourMap(map);\n });\n\n return this;\n }\n\n /**\n * Registers the mapping of side effects and behavioural actions. It takes an object which contains key as the\n * name of behavioural action and the side effects which will be linked to it.\n *\n * To map side effects to select behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: ['infoBox'] // This array must be the formal names of the side effects\n * });\n * ```\n *\n * To map side effects to select behaviour, but disable all the default side effects attached with this behaviour,\n * ```\n * muze.ActionModel.mapSideEffects({\n * select: {\n * effects: ['infoBox'],\n * preventDefaultActions: true\n * }\n * });\n * @public\n * @param {Object} map Mapping of behavioural actions and side effects.\n * ```\n * {\n * select: ['infoBox']\n * }\n * ```\n * @return {ActionModel} Instance of action model.\n */\n mapSideEffects (map) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n firebolt.mapSideEffects(map);\n }, (canvas) => {\n canvas.firebolt().mapSideEffects(map);\n });\n return this;\n }\n\n /**\n * Registers the side effects on the registered canvases. It takes definitions of side effects and registers them\n * on the canvases. Every side effect must inherit the base class {@link GenericSideEffect} or\n * {@link SpawnableSideEffect} or {@link SurrogateSideEffect} class.\n *\n * ```\n * // Define a custom side effect\n * class InfoBox extends SpawnableSideEffect {\n * static formalName () {\n * return 'infoBox';\n * }\n *\n * apply (selectionSet) {\n * }\n * }\n * muze.ActionModel.registerSideEffects(InfoBox);\n * ```\n * @public\n * @param {GenericSideEffect} sideEffects Definition of side effects.\n *\n * @return {ActionModel} Instance of action model.\n */\n registerSideEffects (...sideEffects) {\n registerActions(this, 'sideEffects', 'registerSideEffects', sideEffects);\n return this;\n }\n\n /**\n * Breaks the link between behavioural actions and physical actions. It takes an array of behavioural action\n * and it's physical action.\n *\n * To dissociate behavioural actions from physical actions\n * ```\n * muze.ActionModel.dissociateBehaviour(['select', 'click'], ['highlight', 'hover']);\n * ```\n * @public\n * @param {Array} maps Array of behavioural action and physical action.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateBehaviour (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateBehaviour(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateBehaviour(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * Breaks the link between side effects and behavioural actions. It takes an array of formal names of the side\n * effects and it's linked behavioural action.\n *\n * To dissociate side effects from behavioural actions\n * ```\n * muze.ActionModel.dissociateSideEffect(['crossline', 'highlight'], ['selectionBox', 'brush']);\n * ```\n * @public\n * @param {Array} maps Array of side effects and behavioural actions.\n *\n * @return {ActionModel} Instance of action model.\n */\n dissociateSideEffect (...maps) {\n canvasIterator(this._registrableComponents, (firebolt) => {\n maps.forEach(val => firebolt.dissociateSideEffect(val[0], val[1]));\n }, (canvas) => {\n maps.forEach(val => canvas.firebolt().dissociateSideEffect(val[0], val[1]));\n });\n return this;\n }\n\n /**\n * By default cross interactivity is disabled between canvases. This enables cross interaction between the canvases\n * so that any action happening in one canvas gets dispatched on other canvases as well. An optional policy can also\n * be passed in this method. The policy can be used to control on which canvases the behavioural actions and\n * side effects gets dispatched.\n *\n * To just enable cross interactivity between two canvases,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity();\n * ```\n *\n * To enable cross interactivity but enable any behavioural action only when it is triggered from canvas1.\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * behaviours: {\n * // Here * stands for any behavioural action name. We can also give any name of behavioural action\n * // in place of this.\n * '*': (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n *\n * To enable cross interactivity but enable tooltip effect if the action is propagated from canvas1,\n * ```\n * ActionModel.for(canvas1, canvas2)\n * .enableCrossInteractivity({\n * sideEffects: {\n * tooltip: (propPayload, context) => {\n * return propPayload.sourceCanvas === canvas1.alias();\n * }\n * }\n * });\n * ```\n * @public\n * @param {Object} policy Policy definition.\n *\n * @return {ActionModel} Instance of action model.\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","import { MUZE_PREFIX } from '../constants';\n\nexport const TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 4,\n className: `${MUZE_PREFIX}-title-container`\n};\n\nexport const SUB_TITLE_CONFIG = {\n position: 'top',\n align: 'left',\n padding: 16,\n maxLines: 2,\n className: `${MUZE_PREFIX}-subtitle-container`\n};\n\nexport const MESSAGE_CONFIG = {\n className: `${MUZE_PREFIX}-message-container`\n};\n\nexport const CANVAS = 'canvas';\n\nexport const LAYOUT_ALIGN = {\n TOP: 'top',\n LEFT: 'left',\n RIGHT: 'right',\n BOTTOM: 'bottom'\n};\n","import { mergeRecursive } from 'muze-utils';\nimport {\n ROWS,\n COLUMNS,\n COLOR,\n SHAPE,\n SIZE,\n DETAIL,\n LAYERS,\n TRANSFORM,\n TITLE,\n SUB_TITLE\n} from '../constants';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG } from './defaults';\n/**\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 * @module LocalOptions\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' || !config) {\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' || !config) {\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' || !config) {\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: [],\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};\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' || !title) {\n const t = () => title;\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' || !subtitle) {\n const sub = () => subtitle;\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","export default class LayoutComponent {\n constructor (name, dimensions, seed) {\n this._seed = seed;\n this._boundBox = {\n height: dimensions.height,\n width: dimensions.width,\n top: null,\n left: null\n };\n this._renderAt = null;\n this._alignWith = null;\n this._alignment = null;\n this._target = null;\n this._position = null;\n this._componentName = name;\n this._className = null;\n }\n\n getLogicalSpace () {\n throw new Error('getLogicalSpace is not defined');\n }\n\n setSpatialConfig () {\n throw new Error('setSpatialSpace is not defined');\n }\n\n name (param) {\n if (param) {\n this._componentName = param;\n }\n return this._componentName;\n }\n\n target (param) {\n if (param) {\n this._target = param;\n }\n return this._target;\n }\n\n position (param) {\n if (param) {\n this._position = param;\n }\n return this._position;\n }\n\n alignment (param) {\n if (param) {\n this._alignment = param;\n }\n return this._alignment;\n }\n\n alignWith (param) {\n if (param) {\n this._alignWith = param;\n }\n return this._alignWith;\n }\n\n renderAt (param) {\n if (param) {\n this._renderAt = param;\n }\n return this._renderAt;\n }\n\n boundBox (param) {\n if (param) {\n Object.assign(this._boundBox, param);\n }\n return this._boundBox;\n }\n\n className (param) {\n if (param) {\n this._className = param;\n }\n return this._className;\n }\n\n draw () {\n throw new Error('draw is not defined');\n }\n\n attachListener () {\n return this;\n }\n }\n\n","import LayoutComponent from './layoutComponent';\n\nclass DummyComponent extends LayoutComponent {\n getLogicalSpace () {\n return {\n width: this.boundBox().width,\n height: this.boundBox().height\n };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n return this;\n }\n\n draw () {\n if (!this.component) {\n throw new Error(`Component not set for ${this.componentName}`);\n }\n this.component.mount(document.getElementById(this.renderAt)); // Change the draw method to component draw\n return this;\n }\n}\n\nexport default DummyComponent;\n","export const DEFAULT_CONFIG = {\n classPrefix: 'muze',\n interaction: {\n sideEffect: 'individual'\n },\n pagination: 'scroll',\n scrollBar: {\n thickness: 10,\n speed: 2,\n vertical: {\n align: 'right'\n },\n horizontal: {\n align: 'bottom'\n }\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 facet: {\n rows: {\n minCharacters: 3\n },\n columns: {\n maxLines: 2,\n verticalAlign: 'middle',\n minCharacters: 1\n }\n },\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 invalidValues: {},\n sort: {}\n};\n","import { DEFAULT_CONFIG } from '../../../../muze/src/defaults';\n\nconst DEFAULT_WIDTH = 600;\nconst DEFAULT_HEIGHT = 400;\nconst DEFAULT_CLASS_NAME = `${DEFAULT_CONFIG.classPrefix}-layout-container-component`;\nconst NODE_PREFIX = `${DEFAULT_CONFIG.classPrefix}-layout-container`;\n\nexport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT,\n DEFAULT_CLASS_NAME,\n NODE_PREFIX\n};\n","export default class DefinitionModel {\n constructor (config) {\n this._host = config.host || null;\n this._cut = config.cut || null;\n this._ratioWeight = config.ratioWeight === 0 ? 0 : config.ratioWeight || 1;\n this._preferred = config.preferred || false;\n this._lanes = config.lanes || [];\n this._remainingHeight = 0;\n this._remainingWidth = 0;\n }\n\n host (host) {\n if (host) {\n this._host = host;\n }\n return this._host;\n }\n\n preferred (preferred) {\n if (preferred) {\n this._preferred = preferred;\n }\n return this._preferred;\n }\n\n cut (cut) {\n if (cut) {\n this._cut = cut;\n }\n return this._cut;\n }\n\n ratioWeight (ratioWeight) {\n if (ratioWeight) {\n this._ratioWeight = ratioWeight;\n }\n return this._ratioWeight;\n }\n\n lanes (lanes) {\n if (lanes) {\n this._lanes = lanes;\n }\n return this._lanes;\n }\n\n remainingHeight (remainingHeight) {\n if (remainingHeight) {\n this._remainingHeight = remainingHeight;\n }\n return this._remainingHeight;\n }\n\n remainingWidth (remainingWidth) {\n if (remainingWidth) {\n this._remainingWidth = remainingWidth;\n }\n return this._remainingWidth;\n }\n}\n","import { NODE_PREFIX } from '../../constants/defaults';\nimport DefinitionModel from '../definition-manager/definitionModel';\nimport DummyComponent from '../../layout-component/dummy-component';\n/**\n * Compares two strings in lowercase\n *\n * @export\n * @param {string} value the value to be compared\n * @param {string} compareTo whom the value would be compared\n * @return {boolean} true if values are equal\n */\nexport function isEqual (value, compareTo) {\n if (typeof value !== 'string' || typeof compareTo !== 'string') {\n throw new TypeError('value and compareTo must be string');\n }\n return value.toLowerCase() === compareTo.toLowerCase();\n}\n\nexport const getNodeId = (() => {\n let _uid = 0;\n return () => `${NODE_PREFIX}-${++_uid}`;\n})();\n\nexport function yExtraSpace (node) {\n let smallestHeight = 0;\n if (node.getCutType() === 'v') {\n smallestHeight = smallestExtraHeightHorizontally(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'h') {\n node.children().forEach((child) => {\n smallestHeight += yExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerHeight = node.boundBox().height;\n const hostHeight = node.model().host().getLogicalSpace().height;\n\n smallestHeight = containerHeight - hostHeight;\n if (smallestHeight < 0) {\n smallestHeight = 0;\n }\n } else {\n smallestHeight = 0;\n }\n return smallestHeight;\n}\n\nexport function smallestExtraHeightHorizontally (node) {\n let smallestHeight = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const h = yExtraSpace(child);\n if (h < smallestHeight) {\n smallestHeight = h;\n }\n });\n return smallestHeight;\n}\n\nexport function xExtraSpace (node) {\n let smallestWidth = 0;\n if (node.getCutType() === 'h') {\n smallestWidth = smallestExtraWidthVertically(node); // eslint-disable-line no-use-before-define\n } else if (node.getCutType() === 'v') {\n node.children().forEach((child) => {\n smallestWidth += xExtraSpace(child);\n });\n } else if (node.model().host() && node.model().host().getLogicalSpace) {\n const containerWidth = node.boundBox().width;\n const hostWidth = node.model().host().getLogicalSpace().width;\n smallestWidth = containerWidth - hostWidth;\n if (smallestWidth < 0) {\n smallestWidth = 0;\n }\n } else {\n smallestWidth = 0;\n }\n return smallestWidth;\n}\n\nexport function smallestExtraWidthVertically (node) {\n let smallestWidth = Number.MAX_SAFE_INTEGER;\n node.children().forEach((child) => {\n const w = xExtraSpace(child);\n if (w < smallestWidth) {\n smallestWidth = w;\n }\n });\n return smallestWidth;\n}\n\nexport function determineBoundBox (bb, i, arr, instance) {\n if (i) {\n // if not first sibling, take boundbox from previous sibling\n const lastSibling = arr[i - 1];\n const { top: _top, left: _left, height: _height, width: _width } = lastSibling.boundBox();\n return {\n width: bb.width,\n height: bb.height,\n\n top: instance.parentCut() === 'h'\n ? _top + _height : _top,\n\n left: instance.parentCut() === 'h'\n ? _left : _left + _width\n };\n }\n // if first sibling, take boundbox from parent\n const { top: _top, left: _left } = instance.parent().boundBox();\n return {\n width: bb.width,\n height: bb.height,\n top: _top,\n left: _left\n };\n}\n\n// prepares the targetComponent Map for target Mapping ie. where a component should lie\nexport function prepareTargetComponentMap (context) {\n context.targetComponentMap(new Map());\n context.componentMap().forEach((value) => {\n if (context.targetComponentMap().has(value.target())) {\n context.targetComponentMap().get(value.target()).push(value);\n } else {\n const temp = [];\n temp.push(value);\n context.targetComponentMap().set(value.target(), temp);\n }\n });\n}\n\nexport function getComponent (canvasComponent, componentName) {\n const comp = canvasComponent.find(component => component.name() === componentName);\n return (comp && comp !== -1) ? comp : null;\n}\nexport function createPlaceHolderComponent (height, width, position) {\n const comp = new DummyComponent(0, { height, width });\n comp.name('placeHolder');\n comp.position(position);\n return comp;\n}\n\nexport function placeComponent (definitionModel, component, isPreferred = false, isGridComponent = false) {\n let cut = '';\n let componentRatioWidth = 1;\n let leftOvercomponentRationWidth = 1;\n let leftHeight = 0;\n let leftWidth = 0;\n\n if (!component) {\n return { first: definitionModel, second: definitionModel };\n }\n\n const { height: componentHeight, width: componentWidth } = component.getLogicalSpace();\n const position = component.position();\n if (position === 'top' || position === 'bottom') {\n cut = 'h';\n componentRatioWidth = componentHeight / definitionModel.remainingHeight();\n leftHeight = definitionModel.remainingHeight() - componentHeight;\n leftWidth = definitionModel.remainingWidth();\n } else {\n cut = 'v';\n componentRatioWidth = componentWidth / definitionModel.remainingWidth();\n leftWidth = definitionModel.remainingWidth() - componentWidth;\n leftHeight = definitionModel.remainingHeight();\n }\n leftOvercomponentRationWidth = 1 - componentRatioWidth;\n\n// update parentModel\n definitionModel.cut(cut);\n const firstLaneConfig = {\n host: component.name(),\n cut: null,\n ratioWeight: componentRatioWidth,\n preferred: isGridComponent ? false : isPreferred,\n lanes: []\n };\n const firstLane = new DefinitionModel(firstLaneConfig);\n firstLane.remainingHeight(componentHeight);\n firstLane.remainingWidth(componentWidth);\n\n const secondLaneConfig = {\n host: null,\n cut: null,\n ratioWeight: leftOvercomponentRationWidth,\n preferred: isGridComponent ? false : !isPreferred,\n lanes: []\n };\n const secondLane = new DefinitionModel(secondLaneConfig);\n secondLane.remainingHeight(leftHeight);\n secondLane.remainingWidth(leftWidth);\n if (isPreferred) {\n definitionModel.lanes([firstLane]);\n } else if (position === 'top' || position === 'left') {\n definitionModel.lanes([firstLane, secondLane]);\n } else {\n definitionModel.lanes([secondLane, firstLane]);\n }\n return { first: firstLane, second: secondLane };\n}\n\nexport function placeGridComponent (definitionModel, gridComponents) {\n let tempDefModel = definitionModel;\n const rows = gridComponents.length;\n const column = rows ? gridComponents[0].length : 0;\n const height = gridComponents.reduce((acc, val) => (acc + val[0].getLogicalSpace().height), 0);\n\n for (let i = 0; i < column; i++) {\n const iscolumnPreffered = i === column - 1;\n const columnPlaceHolderComponent = createPlaceHolderComponent(height,\n gridComponents[0][i].getLogicalSpace().width, 'left');\n const { first, second } = placeComponent(tempDefModel, columnPlaceHolderComponent, iscolumnPreffered);\n tempDefModel = first;\n for (let j = 0; j < rows; j++) {\n const rowpreffred = j === (rows - 1);\n tempDefModel = placeComponent(tempDefModel, gridComponents[j][i], rowpreffred, true).second;\n }\n tempDefModel = second;\n }\n return tempDefModel;\n}\n\nexport function negotiateDimension (node) {\n let preferred;\n let cumultiveExtraSpaceAmt = 0;\n let alteredDim;\n let nonAlteredDim;\n\n const childrenLength = node.children().length;\n\n for (let index = 0; index < childrenLength; index++) {\n let fn;\n let extraSpaceAmt;\n const child = node.children()[index];\n\n if (child.parentCut() === 'h') {\n fn = yExtraSpace;\n alteredDim = 'height';\n nonAlteredDim = 'width';\n } else {\n fn = xExtraSpace;\n alteredDim = 'width';\n nonAlteredDim = 'height';\n }\n // if vertical then get extra height from other node and push it to the preferred node.\n // for horizontal cut the same thing is to be done with width\n if (child.isPreferred()) {\n // push extra space in sink. Execute it when all non preferred space are computed.\n preferred = child;\n\n continue; // eslint-disable-line no-continue\n }\n // reduce own height and save it in a var\n cumultiveExtraSpaceAmt += (extraSpaceAmt = fn(child));\n child.boundBox()[alteredDim] -= extraSpaceAmt;\n // update nonaltered dim from parent for any change which happened during negotiation\n child.boundBox()[nonAlteredDim] = child.parent().boundBox()[nonAlteredDim];\n\n negotiateDimension(child);\n }\n\n if (preferred) {\n preferred.boundBox()[alteredDim] += cumultiveExtraSpaceAmt;\n preferred.boundBox()[nonAlteredDim] = preferred.parent().boundBox()[nonAlteredDim];\n negotiateDimension(preferred);\n }\n}\n\nexport function computePosition (node) {\n node.children().forEach((child, i, children) => {\n const boundBox = determineBoundBox(child.boundBox(), i, children, child);\n child.boundBox(boundBox);\n computePosition(child);\n });\n}\n\nexport function allocateBoundingBox (node) {\n const totalWeight = node.children()\n .map(child => child.model().ratioWeight())\n .reduce((carry, val) => carry + val, 0);\n\n node.children().forEach((child, i, children) => {\n const lastSibling = children[i - 1];\n const ratio = child.model().ratioWeight() / totalWeight;\n\n if (child.parentCut() === 'h') {\n child.boundBox({\n top: i ? lastSibling.boundBox().top + lastSibling.boundBox().height : 0,\n left: child.parent().boundBox().left,\n height: child.parent().boundBox().height * ratio,\n width: child.parent().boundBox().width\n });\n } else {\n child.boundBox({\n top: child.parent().boundBox().top,\n left: i ? lastSibling.boundBox().left + lastSibling.boundBox().width : 0,\n height: child.parent().boundBox().height,\n width: child.parent().boundBox().width * ratio\n });\n }\n allocateBoundingBox(child);\n });\n}\n\n","import { getNodeId } from '../helper';\nimport { LayoutComponent } from '../../layout-component';\n\nclass Node {\n constructor (data) {\n this._model = data;\n this._parent = null;\n this._children = [];\n this._parentCut = null;\n this._boundBox = {\n top: null,\n left: null,\n height: null,\n width: null\n };\n\n this._id = this._model.host() instanceof LayoutComponent && this._model.host().renderAt() ?\n this._model.host().renderAt() :\n getNodeId();\n }\n\n addChildren (entries) {\n this._children.push(...entries);\n entries.forEach((e) => { e.parent(this); });\n }\n\n isRoot () {\n return this._parent === null;\n }\n\n isLeaf () {\n return !this._children.length;\n }\n\n getCutType () {\n return this._model.cut();\n }\n\n isPreferred () {\n return !!this._model.preferred();\n }\n\n children (children) {\n if (children) {\n this._children = children;\n }\n return this._children;\n }\n\n parent (parent) {\n if (parent) {\n this._parent = parent;\n }\n return this._parent;\n }\n\n parentCut (parentCut) {\n if (parentCut) {\n this._parentCut = parentCut;\n }\n return this._parentCut;\n }\n\n id (id) {\n if (id) {\n this._id = id;\n }\n return this._id;\n }\n\n model (model) {\n if (model) {\n this._model = model;\n }\n return this._model;\n }\n\n boundBox (bound) {\n if (bound) {\n this._boundBox = {\n top: bound.top,\n left: bound.left,\n height: bound.height,\n width: bound.width\n };\n }\n return this._boundBox;\n }\n /**\n * function to search a node and update it with the config provided.\n * @param {Object} nodeconfig\n */\n updateNode (nodeconfig) {\n if (this._id === nodeconfig._id) {\n this._model.cut(nodeconfig.cut);\n this._model.ratioWeight(nodeconfig.ratioWeight);\n } else {\n this._children.forEach((node) => {\n if (node._id === nodeconfig._id) {\n node.model.cut(nodeconfig.cut);\n node.model.ratioWeight(nodeconfig.ratioWeight);\n return;\n }\n this.searchNode(node, nodeconfig);\n });\n }\n }\n\n // Recursive function to search a node\n searchNode (node, nodeconfig) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeconfig._id) {\n childNode.model().cut(nodeconfig.cut);\n childNode.model().ratioWeight(nodeconfig.ratioWeight);\n } else {\n this.searchNode(childNode, nodeconfig);\n }\n });\n }\n\n /**\n * function to delete a node from tree Structure.\n * @param {String} nodeId - node Id of the Node\n */\n delete (nodeId) {\n this._children.forEach((node) => {\n if (node.id() === nodeId) {\n const index = this._children.indexOf(node);\n this._model.lanes().splice(index, 1);\n }\n this.deleteSearchNode(node, nodeId);\n });\n }\n\n // Recursive function to search a node\n deleteSearchNode (node, nodeId) {\n node.children().forEach((childNode) => {\n if (childNode.id() === nodeId) {\n const index = node.children().indexOf(childNode);\n node.model().lanes().splice(index, 1);\n } else {\n this.deleteSearchNode(childNode, nodeId);\n }\n });\n }\n}\n\nexport default Node;\n","import Node from '../tree';\nimport {\n allocateBoundingBox,\n negotiateDimension,\n computePosition\n} from '../helper';\n\nexport default class LayoutModel {\n constructor (measurements, config) {\n this._measurements = measurements;\n this._config = config;\n this._root = this.createTree(this._config, null);\n this.setBoundBox();\n }\n\n createTree (config, parent) {\n const node = new Node(config);\n if (parent) {\n node.parentCut(parent.getCutType());\n parent.addChildren([node]);\n } else {\n this._root = node;\n }\n for (const lane of config.lanes()) {\n this.createTree(lane, node);\n }\n\n return this._root;\n }\n\n setBoundBox () {\n this._root.boundBox({\n top: 0,\n left: 0,\n width: this._measurements.width,\n height: this._measurements.height\n });\n allocateBoundingBox(this._root);\n }\n\n setHostPosition (node) {\n node.children().forEach((child) => {\n LayoutModel.setHostSpatialConfig(child);\n this.setHostPosition(child);\n });\n }\n\n static setHostSpatialConfig (node) {\n const bb = node.boundBox();\n const host = node.model().host();\n if (host && host.setSpatialConfig) {\n const conf = {\n x: bb.left,\n y: bb.top,\n width: bb.width,\n height: bb.height,\n renderAt: node.id()\n };\n host.setSpatialConfig(conf);\n }\n }\n\n negotiate () {\n negotiateDimension(this._root);\n computePosition(this._root);\n return this;\n }\n\n broadcast () {\n this.setHostPosition(this._root);\n return this;\n }\n\n tree () {\n return this._root;\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\nexport const ROW_MATRIX_INDEX = {\n 0: 'top',\n 1: 'center',\n 2: 'bottom'\n};\n\nexport const COLUMN_MATRIX_INDEX = {\n 0: 'left',\n 1: 'middle',\n 2: 'right'\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';\nexport const VERTICAL = 'vertical';\nexport const HORIZONTAL = 'horizontal';\nexport const GRID = 'grid';\n\nexport const BLANK_BORDERS = 'rgba(0,0,0,0)';\n\nexport const PAGINATION = 'pagination';\nexport const BUFFER = 'buffer';\nexport const HOLISTIC = 'holistic';\nexport const SCROLL = 'scroll';\nexport const MIDDLE = 'middle';\nexport const NO_BORDERS = null;\n\nexport const MAX_WIDTH_AVAIL_FOR_COL_MATRIX = 'maxWidthAvailableForColumnMatrix';\nexport const COLUMN_MATRIX = 'columnMatrix';\nexport const MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX = 'maxHeightAvailableForRowMatrix';\nexport const ROW_MATRIX = 'rowMatrix';\n","/* eslint no-undef: \"off\" */\n/* eslint default-case: \"off\" */\nexport class Utils {\n static isDOMElement (element) {\n return element instanceof Element;\n }\n\n static getID (element) {\n return element.id;\n }\n\n static getElement (id) {\n return document.getElementById(id);\n }\n\n static findContainer (data) {\n return data.filter(coordinate => coordinate.parent == null)[0];\n }\n /**\n * static method to remove the div\n * @param {} divId - div ID to be removed.\n */\n static removeDiv (divId) {\n if (document.getElementById(divId) !== null) { document.getElementById(divId).remove(); }\n }\n}\n","import { DEFAULT_CLASS_NAME } from '../constants/defaults';\nimport { LayoutComponent } from '../layout-component';\n\nexport default class DataPoint {\n constructor (node) {\n this._node = node;\n this._className = node.model().host() instanceof LayoutComponent ?\n node.model().host().className() : DEFAULT_CLASS_NAME;\n }\n\n node () {\n return this._node;\n }\n\n hasHost () {\n return this._node.model().host() instanceof LayoutComponent;\n }\n\n className () {\n return this._className || DEFAULT_CLASS_NAME;\n }\n}\n","import { getnodePoints } from './helper';\n\nexport class DataParser {\n constructor (data) {\n this._data = data;\n }\n\n defaultDataPointLogic () {\n const nodepoints = [];\n getnodePoints(this._data, nodepoints);\n return nodepoints;\n }\n\n}\n","import DataPoint from './data-point';\n\nexport const getnodePoints = (node, nodepoints) => {\n const datapoint = new DataPoint(node);\n nodepoints.push(datapoint);\n node.children().forEach((child) => {\n getnodePoints(child, nodepoints);\n });\n};\n","import { DataParser } from './data-parser';\n\nexport class HTMLDataAdapter extends DataParser {\n getCoordinates () {\n return super.defaultDataPointLogic();\n }\n}\n","export class Renderer {\n\n initRenderer (node, tree) {\n node.__logicalTree = tree;\n }\n}\n","import { HTMLDataAdapter } from '../data-adapters/html-data';\nimport { Utils } from '../utils';\nimport { Renderer } from './renderer';\n\nexport class HTMLRenderer extends Renderer {\n constructor (data) {\n super();\n this._data = data;\n this._coordinates = new HTMLDataAdapter(this._data).getCoordinates();\n }\n\n createhtml (mount, className) {\n const mainDiv = mount;\n super.initRenderer(mainDiv, this._data); // Initialise node with layout id\n this.parentDiv = this.createAndCustomiseParent(className);\n this._coordinates.forEach((node) => {\n if (node.hasHost()) {\n const host = node.node();\n this.parentDiv.appendChild(this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: node.className() }));\n }\n });\n mainDiv.appendChild(this.parentDiv);\n }\n\n createAndPositionDiv (config) {\n const { top, left, height, width, className, id } = config;\n const existingDiv = document.getElementById(id);\n const div = existingDiv || document.createElement('div');\n div.style.position = 'absolute';\n div.style.left = `${left}px`;\n div.style.top = `${top}px`;\n div.style.height = `${height}px`;\n div.style.width = `${width}px`;\n div.id = id;\n div.className = className;\n return div;\n }\n\n createAndCustomiseParent (className) {\n const container = Utils.findContainer(this._coordinates);\n const host = container.node();\n const parentDiv = this.createAndPositionDiv({ ...host.boundBox(),\n id: host.id(),\n className: container.className() });\n parentDiv.className = className;\n parentDiv.style.position = 'relative';\n return parentDiv;\n }\n\n coordinates () {\n return this._coordinates;\n }\n}\n","import { selectElement } from 'muze-utils';\nimport { HTMLRenderer } from '../renderers/html-renderer';\nimport { LayoutComponent } from '../layout-component';\n\nexport const getChildNode = (context, config) =>\n context.renderer().createAndPositionDiv(config);\n\nexport const findNode = (context, nodeID) =>\n context.renderer().coordinates().find(point => point.node().id() === nodeID);\n\nexport const renderHTML = (context) => {\n context.renderer(new HTMLRenderer(context.data()));\n context.renderer().createhtml(context.mount(), context.className());\n};\n\nexport const drawLayout = context => renderHTML(context);\n\nexport const drawComponent = (componentData) => {\n componentData.children().forEach((node) => {\n const host = node.model().host();\n if (host instanceof LayoutComponent) {\n host.draw();\n }\n drawComponent(node);\n });\n};\n\nexport const removeElement = (elemID) => {\n if (elemID) {\n selectElement(`#${elemID}`).remove();\n }\n};\n\nconst setAlignConfig = (alignment, params) => {\n let newNodeConfig = {};\n const { node, refNode } = params;\n switch (alignment) {\n case 'left':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(refNode.left - node.left))\n };\n break;\n\n case 'right':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: node.height,\n width: Math.abs(node.width - Math.abs(node.left + node.width - (refNode.left + refNode.width)))\n };\n break;\n\n case 'top':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: Math.abs(node.height - Math.abs(refNode.top - node.top)),\n width: node.width\n };\n break;\n\n case 'bottom':\n newNodeConfig = {\n top: node.top,\n left: node.left,\n height: Math.abs(node.top - refNode.top + refNode.height),\n width: node.width\n };\n break;\n\n case 'h-center':\n newNodeConfig = {\n top: node.top,\n left: refNode.left,\n height: node.height,\n width: refNode.width\n };\n break;\n\n case 'v-center':\n newNodeConfig = {\n top: refNode.top,\n left: node.left,\n height: refNode.top,\n width: node.width\n };\n break;\n default:\n break;\n }\n return newNodeConfig;\n};\n\nexport const resolveAligment = (context, componentData) => {\n componentData.children().forEach((component) => {\n const host = component.model().host();\n\n if (host instanceof LayoutComponent && host.alignWith()) {\n const componentToAlign = context.componentMap().get(host.alignWith());\n\n if (componentToAlign) {\n const point = findNode(context, component.id()).node();\n const node = point.boundBox();\n const refNode = findNode(context, componentToAlign.renderAt())\n .node()\n .boundBox();\n const newNodeConfig = setAlignConfig(host.alignment(), { node, refNode });\n\n // check if model in parent component\n Object.assign(newNodeConfig, { id: point.id(), className: host.className() });\n context.renderer().createAndPositionDiv(newNodeConfig);\n context.componentMap().get(host.name()).setSpatialConfig({\n x: newNodeConfig.left,\n y: newNodeConfig.top,\n height: newNodeConfig.height,\n width: newNodeConfig.width\n\n });\n }\n }\n\n resolveAligment(context, component);\n });\n};\n","import { Utils } from '../utils';\nimport { drawLayout, resolveAligment, drawComponent } from './helper';\n\nexport class DrawingManager {\n constructor (data, renderer, container) {\n this._data = data.tree;\n this._componentMap = data.componentMap;\n this._layoutClassName = data.layoutClassName;\n this._renderer = renderer;\n this._mount = Utils.isDOMElement(container) ? container : Utils.getElement(container);\n }\n\n draw () {\n drawLayout(this);\n resolveAligment(this, this._data);\n drawComponent(this._data);\n return this;\n }\n\n data (data) {\n if (data) {\n this._data = data;\n }\n return this._data;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n className (param) {\n if (param) {\n this._layoutClassName = param;\n }\n return this._layoutClassName;\n }\n\n renderer (param) {\n if (param) {\n this._renderer = param;\n }\n return this._renderer;\n }\n\n mount (param) {\n if (param) {\n this._mount = param;\n }\n return this._mount;\n }\n}\n","import DefinitionModel from './definitionModel';\nimport { prepareTargetComponentMap, getComponent, placeComponent, placeGridComponent } from '../helper';\n\nexport default class DefinitionManager {\n constructor (componentMap, sequence, totalHeight, totalWidth) {\n this._componentMap = componentMap;\n this._prioritySequence = sequence;\n this._totalHeight = totalHeight;\n this._totalWidth = totalWidth;\n this._targetComponentMap = null;\n }\n\n // create the config model\n generateConfigModel () {\n prepareTargetComponentMap(this);\n const canvasComponent = this._targetComponentMap.get('canvas');\n const definitionModel = new DefinitionModel({});\n let tempDefModel = definitionModel;\n definitionModel.remainingHeight(this._totalHeight);\n definitionModel.remainingWidth(this._totalWidth);\n\n let componentRef = null;\n\n this._prioritySequence.forEach((name) => {\n componentRef = getComponent(canvasComponent, name);\n if (name !== 'grid') {\n tempDefModel = placeComponent(tempDefModel, componentRef).second;\n } else {\n tempDefModel = placeGridComponent(tempDefModel, componentRef.component);\n }\n });\n return definitionModel;\n }\n\n componentMap (param) {\n if (param) {\n this._componentMap = param;\n }\n return this._componentMap;\n }\n\n targetComponentMap (param) {\n if (param) {\n this._targetComponentMap = param;\n }\n return this._targetComponentMap;\n }\n}\n","import { sanitizeConfig } from './helper';\n\nexport class LayoutDef {\n constructor () {\n this._componentMap = new Map();\n this._layoutDefinition = null;\n }\n\n addComponent (component) {\n this._componentMap.set(component.name(), component);\n }\n\n layoutDefinition (def) {\n if (def) {\n this._layoutDefinition = def;\n }\n return this._layoutDefinition;\n }\n\n addMultipleComponent (componentArray) {\n componentArray.forEach((comp) => {\n this.addComponent(comp);\n });\n }\n\n sanitizedDefinition () {\n sanitizeConfig(this, this._layoutDefinition);\n return this.layoutDefinition();\n }\n\n componentMap () {\n return this._componentMap;\n }\n resetComponentMap () {\n this._componentMap.clear();\n }\n}\n","import DefinitionManager from '../layout-definition/definition-manager';\n\nexport function sanitizeConfig (context, hostObj) {\n const hostID = hostObj.host();\n if (hostObj.lanes() && hostObj.lanes().length) {\n hostObj.lanes().forEach(childHost => sanitizeConfig(context, childHost));\n }\n if (hostID != null && typeof (hostID) === 'string') {\n if (context.componentMap().get(hostID) !== undefined) {\n hostObj.host(context.componentMap().get(hostID));\n }\n }\n}\n\nexport function calLayOutDef (context) {\n const { height, width } = context.dimension();\n const defManager = new DefinitionManager(context.layoutDef().componentMap(),\n context.prioritySequence(),\n height,\n width);\n const genLayoutdef = defManager.generateConfigModel();\n return genLayoutdef;\n}\n","import {\n LayoutModel\n} from '../layout-definition';\n\nimport {\n DEFAULT_WIDTH,\n DEFAULT_HEIGHT\n} from '../constants/defaults';\n\nimport {\n GRID\n} from '../../enums/constants';\n\nimport { DrawingManager } from '../drawing-manager';\nimport { removeElement } from '../drawing-manager/helper';\nimport { Utils } from '../utils';\nimport { LayoutDef } from './layout-def';\nimport { calLayOutDef } from './helper';\n\nexport default class LayoutManager {\n constructor (conf) {\n this._renderAt = conf.renderAt;\n this._layoutClassName = conf.className;\n this._dimension = {\n width: conf.width || DEFAULT_WIDTH,\n height: conf.height || DEFAULT_HEIGHT\n };\n\n this._skeletonType = conf.skeletonType || 'html';\n this._layoutDefinition = null;\n this._layoutDef = new LayoutDef();\n this._drawingManager = null;\n this._prioritySequence = [];\n this.tree = null;\n this._rootNodeID = null;\n }\n\n layoutDef (param) {\n if (param) {\n this._layoutDef = param;\n }\n return this._layoutDef;\n }\n\n prioritySequence (param) {\n if (param) {\n this._prioritySequence = param;\n }\n return this._prioritySequence;\n }\n\n dimension (param) {\n if (param) {\n Object.assign(this._dimension, param);\n }\n return this._dimension;\n }\n\n addComponent (component) {\n this._layoutDef.addComponent(component);\n }\n\n addMultipleComponent (componentArray) {\n this._layoutDef.addMultipleComponent(componentArray);\n }\n\n resetNode (node) {\n if (this.con) {\n this.con.resetNode(node);\n }\n }\n\n /**\n * function to update the node and rerender the layout.\n * @param {} config - node configuration to change.\n */\n updateNode (config) {\n this.tree.updateNode(config);\n this._layoutDefinition = this.tree.model;\n this.compute();\n }\n\n compute () {\n //----\n if (Utils.isDOMElement(this._renderAt)) {\n this._renderAt._layout = this;\n } else {\n document.getElementById(this._renderAt)._layout = this;\n }\n //-----\n this._layoutDefinition = calLayOutDef(this);\n this._layoutDef.layoutDefinition(this._layoutDefinition);\n this._layoutDefinition = this._layoutDef.sanitizedDefinition();\n this._layout = new LayoutModel({\n width: this._dimension.width,\n height: this._dimension.height\n },\n this._layoutDefinition);\n this.tree = this._layout.negotiate().tree();\n this._layout.broadcast();\n this._drawingManager = new DrawingManager({\n tree: this.tree,\n componentMap: this._layoutDef.componentMap(),\n layoutClassName: this._layoutClassName\n }, this._skeletonType, this._renderAt);\n\n if (this._rootNodeID) {\n this.tree.id(this._rootNodeID);\n } else {\n this._rootNodeID = this.tree.id();\n }\n // this will draw all the components by calling their draw method\n this._drawingManager.draw();\n }\n\n getRootNodeId () {\n return this._rootNodeID;\n }\n\n /**\n * This function takes the LayoutComponents and Register them in component store\n * @param {Array} layoutComponents\n */\n registerComponents (layoutComponents) {\n this._prioritySequence.length = 0;\n this._layoutDef.resetComponentMap();\n layoutComponents.forEach((container) => {\n if (container) {\n this._prioritySequence.push(container.name());\n this.addComponent(container);\n if (container.name() === 'grid') {\n container.component.forEach((componentArr) => {\n componentArr.forEach((compo) => {\n this.addComponent(compo);\n });\n });\n }\n }\n });\n return this;\n }\n\n getComponent (componentName) {\n return this._layoutDef.componentMap().get(componentName);\n }\n\n deleteElement (component, elementName) {\n this._layoutDef.componentMap().delete(elementName);\n const deleteElementId = component.renderAt();\n return removeElement(deleteElementId);\n }\n\n removeComponent (name) {\n const component = this.getComponent(name);\n if (component) {\n if (name === GRID) {\n return component.component.map(comp => comp.map(\n co => this.deleteElement(co, co.name())\n ));\n }\n return this.deleteElement(component, name);\n }\n return this;\n }\n\n renderAt (mount) {\n if (mount) {\n this._renderAt = mount;\n }\n return this._renderAt;\n }\n}\n","import { isEqual, STATE_NAMESPACES, selectElement, getValueParser } from 'muze-utils';\nimport { VisualGroup } from '@chartshq/visual-group';\nimport { ROWS, COLUMNS, COLOR, SHAPE, SIZE, DETAIL, DATA, CONFIG, GRID }\n from '../constants';\nimport { canvasOptions } from './local-options';\nimport { LayoutManager } from '../../../layout/src/tree-layout';\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.} Arrays of Title, visualGroup, Legend\n */\nexport const initCanvas = (context) => {\n const reg = context._registry.components;\n\n return [new reg.VisualGroup(context._registry, Object.assign({\n throwback: context._throwback\n }, context.dependencies()))];\n};\n\nexport const fixScrollBarConfig = (config) => {\n config.scrollBar.thickness = Math.min(50, Math.max(10, config.scrollBar.thickness));\n return config;\n};\n\nexport const setLayoutInfForUnits = (context) => {\n const layoutManager = context._layoutManager;\n const gridLayout = layoutManager.getComponent(GRID);\n const boundBox = gridLayout && gridLayout.getBoundBox();\n const valueMatrix = context.composition().visualGroup.matrixInstance().value;\n const parentContainer = selectElement(`#${layoutManager.getRootNodeId()}`).node();\n valueMatrix.each((cell) => {\n cell.valueOf().parentContainerInf({\n el: parentContainer,\n dimensions: boundBox\n });\n });\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 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 const { invalidValues } = context.config();\n\n visualGroup.valueParser(getValueParser(invalidValues));\n visualGroup.createMatrices();\n context._cachedProps = {};\n lifeCycleManager.notify({ client: context, action: 'initialized' });\n lifeCycleManager.notify({ client: context, action: 'updated' });\n};\n\nconst equalityChecker = (props, params) => {\n let checker = () => false;\n return !props.every((option, i) => {\n switch (option) {\n case ROWS:\n case COLUMNS:\n case DETAIL:\n checker = isEqual('Array');\n break;\n\n case SHAPE:\n case SIZE:\n case COLOR:\n case DATA:\n case CONFIG:\n checker = isEqual('Object');\n break;\n default:\n checker = () => true;\n break;\n }\n const oldVal = params[i][0];\n const newVal = params[i][1];\n\n return checker(oldVal, newVal);\n });\n};\n\nconst updateChecker = (props, params) => props.every((option, i) => {\n const val = params[i][1];\n switch (option) {\n case ROWS:\n case COLUMNS:\n return val !== null;\n\n case DATA:\n return val && !val.isEmpty();\n\n default:\n return true;\n\n }\n});\n\nexport const notifyAnimationEnd = (context) => {\n const viewInfo = context.layout().viewInfo();\n const centerMatrix = viewInfo && viewInfo.viewMatricesInfo.matrices.center[1] || [];\n const promises = [];\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n promises.push(cell.valueOf().done());\n });\n });\n const lifeCycleManager = context.lifeCycle();\n if (promises.length) {\n Promise.all(promises).then(() => {\n // Update life cycle\n lifeCycleManager.notify({ client: context, action: 'drawn' });\n const animDonePromises = [];\n\n centerMatrix.forEach((cellArr) => {\n cellArr.forEach((cell) => {\n cell.valueOf().layers().forEach((layer) => {\n animDonePromises.push(layer.animationDone());\n });\n });\n });\n\n [context.xAxes(), context.yAxes()].forEach((axisArr) => {\n axisArr = axisArr || [];\n axisArr.forEach((axes) => {\n axes.forEach((axisInst) => {\n animDonePromises.push(axisInst.animationDone());\n });\n });\n });\n\n Promise.all(animDonePromises).then(() => {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n });\n });\n } else {\n lifeCycleManager.notify({ client: context, action: 'animationend' });\n }\n};\n\nexport const setupChangeListener = (context) => {\n const store = context._store;\n\n const allOptions = Object.keys(context._allOptions);\n const props = [...allOptions, ...Object.keys(canvasOptions)];\n const nameSpaceProps = [...allOptions, ...Object.keys(canvasOptions)].map(prop =>\n `${STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE}.${prop}`);\n store.registerChangeListener(nameSpaceProps, (...params) => {\n const equalityProps = equalityChecker(props, params);\n const updateProps = updateChecker(props, params);\n // inform attached board to rerender\n if (equalityProps && context.mount()) {\n if (updateProps) {\n dispatchProps(context);\n } else {\n context.composition().visualGroup.remove();\n }\n context.render();\n }\n notifyAnimationEnd(context);\n }, true);\n};\n\nexport const applyInteractionPolicy = (firebolt) => {\n const canvas = firebolt.context;\n const visualGroup = canvas.composition().visualGroup;\n if (visualGroup) {\n const valueMatrix = visualGroup.matrixInstance().value;\n const interactionPolicy = firebolt._interactionPolicy;\n interactionPolicy(valueMatrix, firebolt);\n const crossInteractionPolicy = firebolt._crossInteractionPolicy;\n const behaviours = crossInteractionPolicy.behaviours;\n const sideEffects = crossInteractionPolicy.sideEffects;\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/**\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 */\nexport const 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 const rotationVal = xAxes[i][j].renderConfig().labels.rotation;\n if (rotationVal && rotationVal !== 0) {\n rotation = rotationVal;\n return;\n }\n }\n }\n })();\n\n if (rotation) {\n xAxes.forEach((axes) => {\n axes.forEach((axis) => {\n axis.renderConfig({ labels: { rotation } });\n axis.smartTicks(axis.setTickConfig());\n });\n });\n }\n};\n\nexport const createGroupState = (context) => {\n const [globalState, localState] = VisualGroup.getState();\n const store = context._store;\n store.append('app.group', globalState);\n store.append('local.group', localState);\n};\n\nexport const removeChild = (mount) => {\n while (mount.firstChild) {\n mount.removeChild(mount.firstChild);\n }\n};\n\nexport const createLayoutManager = () => {\n const layoutManager = new LayoutManager({\n className: 'muze-group-container'\n });\n return layoutManager;\n};\n","/**\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 * @module GlobalOptions\n */\n\nimport { intSanitizer, mergeRecursive, DataModel } from 'muze-utils';\nimport { fixScrollBarConfig } from './canvas/helper';\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 // Reset the configuration when null is passed\n const oldConf = mergeRecursive({}, config === null ? {} : oldConfig);\n const defConfig = mergeRecursive(oldConf, DEFAULT_CONFIG);\n let newConf = mergeRecursive(defConfig, config);\n newConf = fixScrollBarConfig(newConf);\n\n return newConf;\n }\n\n }\n }\n};\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 *\n * @memberof GenericLayout\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 this._config.border.width = Math.max(0, this._config.border.width);\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.PAGINATION]: 'scroll',\n [FieldNames.BUFFER]: 20,\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","/**\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 *\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 *\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.setAvailableSpace();\n const space = placeholder.getLogicalSpace();\n const minSecondMeasure = placeholder.getMinMeasures(minMeasures[secondMeasure]);\n\n sMeasure = Math.max(sMeasure, +space[secondMeasure], minSecondMeasure);\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\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\n // Set logical space for second measure\n logicalSpace[secondMeasure] += +space[secondMeasure];\n });\n item.space = logicalSpace;\n return logicalSpace;\n }\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, ERROR_MSG } from 'muze-utils';\nimport {\n createTree,\n combineMatrices,\n createMatrixInstances\n } from '../utils';\nimport { PROPS } from './props';\nimport { 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._layoutMatrix = combineMatrices([matrix[0] || [], matrix[1] || []], this.config());\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 computeLogicalSpace () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n computeViewableSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n *\n *\n * @return\n * @memberof VisualMatrix\n */\n removeExtraCells () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n getPriorityDistribution () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 redistributeSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions () {\n throw new Error(ERROR_MSG.INTERFACE_IMPL);\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 secondaryMatrix (...params) {\n if (params.length) {\n return this;\n }\n return this._secondaryMatrix;\n }\n\n tree (...params) {\n if (params.length) {\n return this;\n }\n return this._tree;\n }\n\n static defaultConfig () {\n return defaultConfig;\n }\n\n createTree () {\n const { tree, lastLevelKey } = createTree(this);\n this._lastLevelKey = lastLevelKey;\n return tree;\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.redistributeSpaces(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 * 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 getViewableMatrices () {\n return this.viewableMatrix;\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","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n combineMatrices,\n spaceTakenByColumn,\n getDistributedHeight,\n computeLogicalSpace,\n createMatrixEachLevel\n } from '../utils';\nimport { ROW_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class RowVisualMatrix extends 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 super(matrix, config);\n\n this._breakPointer = (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: ROW_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\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 computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, false);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height\n } = measures;\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i };\n const { widths, rowHeights, columnWidths } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = [height, height];\n const columnMeasures = widths;\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\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 tree.matrix = extraCellsRemover(tree.matrix, begCellLen, endCellLen);\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n let remainingAvailWidth;\n let remainingWidth;\n let cWidths = [];\n let conditions = [];\n let maxPrioritySpace = 0;\n const {\n matrix,\n width: availableWidth,\n maxMeasures: maxWidths,\n maxWidth: currentWidth,\n height\n } = measures;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length ? this.primaryMatrix()[0].length : 0;\n\n const dist = [];\n\n remainingAvailWidth = availableWidth;\n remainingWidth = currentWidth;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n // divider = Math.min(2, matrixLen);\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n // divider = Math.min(1, matrixLen);\n }\n conditions.forEach((i) => {\n dist[i] = maxWidths[i];\n maxPrioritySpace += maxWidths[i];\n remainingAvailWidth -= dist[i];\n remainingWidth -= dist[i];\n });\n matrix[0].forEach((e, i) => {\n if (conditions.indexOf(i) === -1) {\n dist[i] = remainingAvailWidth * (maxWidths[i] / remainingWidth);\n }\n });\n matrix.forEach(row => row.forEach((col, cIdx) => {\n if (conditions.indexOf(cIdx) === -1) {\n col.setAvailableSpace(dist[cIdx], height);\n\n cWidths[cIdx] = Math.max(cWidths[cIdx] || 0, Math.floor(col.getLogicalSpace().width));\n } else {\n cWidths[cIdx] = 0;\n }\n }));\n\n const prioritySpace = availableWidth - cWidths.reduce((t, n) => t + n);\n if (prioritySpace < 0) {\n cWidths = cWidths.map(() => 0);\n } else {\n conditions.forEach((i) => {\n cWidths[i] = Math.floor(prioritySpace * (dist[i] / maxPrioritySpace || 1));\n });\n }\n return cWidths;\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 const { height } = this.availableSpace();\n\n for (i = 0; i < heightMeasures.length; i++) {\n if (heightMeasures[i] <= height) break;\n }\n\n return Math.min(widthMeasures.length - 1, i);\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 redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n const maxMeasures = this.maxMeasures();\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n const logicalWidths = this.getPriorityDistribution({\n matrix: this._layoutMatrix,\n maxWidth,\n maxMeasures,\n width,\n height\n });\n\n this.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, logicalWidths };\n const measures = this.redistributeViewSpaces(options);\n maxWidths = measures.maxWidths;\n maxHeights = measures.maxHeights;\n });\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space row wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let cWidths = [];\n let rHeights = [];\n let mHeight = 0;\n const maxMeasures = this.maxMeasures();\n\n const {\n isDistributionEqual,\n distribution,\n isTransposed,\n gutter\n } = this.config();\n const { matrix, height, maxHeights, maxWidths, logicalWidths } = measures;\n mHeight = spaceTakenByColumn(matrix, this._lastLevelKey).height;\n\n const maxWidth = maxMeasures.reduce((t, n) => {\n t += n;\n return t;\n });\n measures.maxMeasures = maxMeasures;\n measures.maxWidth = maxWidth;\n if (maxWidth > 0) {\n cWidths = logicalWidths;\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 if (maxWidths.length > 0) {\n cWidths = cWidths.map((e, i) => Math.max(e, maxWidths[0][i] || 0));\n }\n maxWidths.push(cWidths);\n for (let x = 0; x < maxWidths.length; x++) {\n maxWidths[x] = cWidths;\n }\n maxHeights.push(rHeights);\n return { maxWidths, maxHeights };\n }\n\n /**\n * Dispatch the calculated cell dimensions to all the cells\n *\n * @param {Object} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, maxWidths, maxHeights, matrixIndex } = measures;\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 cell.setAvailableSpace(colWidth, colHeight - borderWidth);\n\n if (rIdx === 0 && cIdx < breakPointer) {\n columnWidths[0][cIdx] = colWidth;\n widths[0] = (widths[0] || 0) + colWidth;\n } else if (rIdx === 0 && cIdx >= breakPointer) {\n columnWidths[1][cIdx - breakPointer] = colWidth;\n widths[1] = (widths[1] || 0) + colWidth;\n }\n if (cIdx === this._lastLevelKey) {\n rowHeights[0][rIdx] = colHeight;\n rowHeights[1][rIdx] = colHeight;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import { mergeRecursive } from 'muze-utils';\nimport {\n extraCellsRemover,\n getDistributedWidth,\n spaceTakenByRow,\n createMatrixEachLevel,\n computeLogicalSpace\n } from '../utils';\nimport { COLUMN_ROOT } from '../enums/constants';\nimport VisualMatrix from './visual-matrix';\n\n/**\n * This class used to create column / row matrix for GridLayout\n *\n * @class VisualMatrix\n */\nexport default class ColumnVisualMatrix extends 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 super(matrix, config);\n\n this._breakPointer = matrix[0].length;\n\n // Create Tree\n this._tree = {\n key: COLUMN_ROOT,\n values: this.createTree()\n };\n this._logicalSpace = this.computeLogicalSpace();\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 computeLogicalSpace () {\n const matrixTree = this.tree();\n createMatrixEachLevel(matrixTree, true);\n return computeLogicalSpace(matrixTree, this.config(), this.maxMeasures());\n }\n\n computeViewableSpaces (measures) {\n const {\n maxHeights,\n maxWidths,\n height,\n width\n } = measures;\n\n return this.viewableMatrix.map((matrixInst, i) => {\n const cellDimOptions = { matrixInst, maxWidths, maxHeights, matrixIndex: i, height };\n const {\n heights,\n rowHeights,\n columnWidths\n } = this.getCellDimensions(cellDimOptions);\n const heightMeasures = heights;\n const 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\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\n tree.matrix = tree.matrix.map(e => extraCellsRemover(e, begCellLen, endCellLen));\n\n return {\n tree,\n layoutMatrix\n };\n }\n\n getPriorityDistribution (measures) {\n const {\n height,\n maxHeights\n } = measures;\n let remainingHeight = height;\n let heightDist = [];\n let conditions = [];\n let divider = 2;\n const priority = this.config().priority;\n const primaryMatrixLength = this.primaryMatrix().length;\n\n if (priority === 2) {\n conditions = [primaryMatrixLength - 1, primaryMatrixLength];\n divider = 2;\n } else {\n conditions = priority === 0 ? [primaryMatrixLength - 1] : [primaryMatrixLength];\n divider = 1;\n }\n maxHeights.forEach((heights, index) => {\n if (conditions.indexOf(index) === -1) {\n heightDist[index] = heights;\n remainingHeight -= heights;\n }\n });\n if (remainingHeight < 0) {\n heightDist = heightDist.map(() => 0);\n } else {\n conditions.forEach((condition) => {\n heightDist[condition] = Math.min(maxHeights[condition], (remainingHeight) / divider);\n });\n }\n return heightDist;\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) {\n let j;\n const { width } = this.availableSpace();\n\n for (j = 0; j < widthMeasures.length; j++) {\n if (widthMeasures[j] <= width) break;\n }\n return Math.min(widthMeasures.length - 1, 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 redistributeSpaces (width, height) {\n let maxHeights = [];\n let maxWidths = [];\n\n this.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 = this.redistributeViewSpaces(options);\n maxWidths = maxMeasures.maxWidths;\n maxHeights = maxMeasures.maxHeights;\n });\n\n return this.computeViewableSpaces({ height, width, maxHeights, maxWidths });\n }\n\n /**\n * Distibutes the given space column wisely\n *\n * @param {Object} measures Redistribution information\n * @memberof VisualMatrix\n */\n redistributeViewSpaces (measures) {\n let rHeights = [];\n const {\n matrix,\n width,\n maxHeights,\n maxWidths\n } = measures;\n const borderWidth = this.config().unitMeasures.border;\n\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();\n\n col.setAvailableSpace(cWidths[cIdx] - borderWidth, oldLogicalSpace.height);\n\n rHeights[rIdx] = Math.max(rHeights[rIdx] || 0, Math.floor(col.getLogicalSpace().height));\n }));\n if (maxHeights.length > 0) {\n rHeights = rHeights.map((e, i) => Math.max(e, maxHeights[0][i]));\n }\n maxHeights.push(rHeights);\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} measures cell dimension information\n * @return {Object} row and column heights / widths\n * @memberof VisualMatrix\n */\n getCellDimensions (measures) {\n const {\n unitMeasures\n } = this.config();\n const borderWidth = unitMeasures.border;\n const { matrixInst, height, maxWidths, maxHeights, matrixIndex } = measures;\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 const heightDistribution = this.getPriorityDistribution({ height, maxHeights: maxHeights[0] || [] });\n\n matrix.forEach((row, rIdx) => {\n row.forEach((cell, cIdx) => {\n const colHeight = heightDistribution[rIdx] || 0;\n const colWidth = maxWidths[matrixIndex][cIdx];\n\n cell.setAvailableSpace(colWidth - borderWidth, colHeight);\n\n if (cIdx === 0 && rIdx < breakPointer) {\n rowHeights[0][rIdx] = colHeight;\n heights[0] = (heights[0] || 0) + colHeight;\n } else if (cIdx === 0 && rIdx >= breakPointer) {\n rowHeights[1][rIdx - breakPointer] = colHeight;\n heights[1] = (heights[1] || 0) + colHeight;\n }\n if (rIdx === this._lastLevelKey) {\n columnWidths[0][cIdx] = colWidth;\n columnWidths[1][cIdx] = colWidth;\n }\n });\n });\n return {\n heights,\n widths,\n rowHeights,\n columnWidths\n };\n }\n}\n\n","import {\n HEIGHT, WIDTH, COLUMN, ROW, HORIZONTAL, VERTICAL, HOLISTIC,\n MAX_WIDTH_AVAIL_FOR_COL_MATRIX, COLUMN_MATRIX, MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX, ROW_MATRIX, SCROLL\n} 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\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\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\nconst paginationDetailsMap = {\n column: {\n maxMeasure: MAX_WIDTH_AVAIL_FOR_COL_MATRIX,\n matrix: COLUMN_MATRIX,\n measureType: WIDTH,\n scrollType: HORIZONTAL\n },\n row: {\n maxMeasure: MAX_HEIGHT_AVAIL_FOR_ROW_MATRIX,\n matrix: ROW_MATRIX,\n measureType: HEIGHT,\n scrollType: VERTICAL\n }\n};\n\n/**\n * This method provides the required width/height in the different pagination stages.\n * If the pagination is holistic, then only the max width/height will be provided for layouting\n * If scroll is enabled, then the entire width/height shall be provided for layouting\n * Note: width is required for scrolling the columns while height is required for scrolling rows\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {Object} measureDetails different measure details for row/column\n * @param {number} maxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst getMatrixMeasureForPagination = (layout, measureDetails, maxMeasure, buffer) => {\n const {\n pagination\n } = layout.config();\n const {\n matrix,\n measureType,\n scrollType\n } = measureDetails;\n\n switch (pagination) {\n case HOLISTIC:\n return maxMeasure;\n default: {\n const actualMeasure = getMatrixMeasurement(layout[matrix](), measureType) + buffer;\n\n if (actualMeasure > maxMeasure) {\n layout.scrollInfo({ [scrollType]: true });\n }\n return Math.max(maxMeasure, actualMeasure);\n }\n }\n};\n\n/**\n * This method uses the getMatrixMeasureForPagination function to calculate maximum measure\n * depending on the layouting algorithm used\n *\n *\n * @param {Layout} layout Layout instance required for configuration details\n * @param {string} matrixType row/column\n * @param {number} relatedMaxMeasure maximum width/height present for column/row respectively\n * @return {number} Provides the width/height based on which further calculation can occur\n */\nconst paginationMeasureGetter = (layout, matrixType, relatedMaxMeasure, buffer) =>\n getMatrixMeasureForPagination(layout, paginationDetailsMap[matrixType], relatedMaxMeasure, buffer);\n\nconst getMatrixWidthDetails = (layout) => {\n const rowMatrix = layout.rowMatrix();\n const {\n width\n } = layout.measurement();\n const {\n border,\n buffer\n } = layout.config();\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get width of row matrix\n const rowMatrixWidth = getMatrixMeasurement(rowMatrix, WIDTH);\n\n // Get maximum width allowed for the row matrix\n const maxRowMatrixWidth = Math.min(rowMatrixWidth + buffer, width / 2);\n\n // Get maximum width available for the column matrix\n const maxWidthAvailableForColumnMatrix = width - maxRowMatrixWidth - borderWidth;\n\n // Set width for column matrix\n const columnMatrixWidth = paginationMeasureGetter(layout, COLUMN, maxWidthAvailableForColumnMatrix, 0);\n\n return {\n rowMatrixWidth,\n maxRowMatrixWidth,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\n };\n};\n\nconst getHeightRequiredByColMatrix = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const columnMatrix = layout.columnMatrix();\n\n // Get maximum allowed height for colum matrix\n const maxColumnMatrixHeight = Math.min(columnMatrix.getLogicalSpace().height, height / 2);\n\n // Set the computed width and max height to column matrix to determine the actual height\n // that will be taken by the column matrix\n columnMatrix.setAvailableSpace(columnMatrixWidth, maxColumnMatrixHeight);\n\n // Get the set of pages column view\n const columnViewPages = columnMatrix.getViewableSpaces();\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 return {\n columnMatrixHeight,\n maxColumnMatrixHeight\n };\n};\n\nconst getMatrixHeightDetails = (layout, columnMatrixWidth) => {\n const {\n height\n } = layout.measurement();\n const {\n buffer\n } = layout.config();\n\n // Get actual height required by column matrix\n const { columnMatrixHeight, maxColumnMatrixHeight } = getHeightRequiredByColMatrix(layout, columnMatrixWidth);\n\n // Based on column height, compute max height available for row matrix\n const maxHeightAvailableForRowMatrix = height - Math.min(maxColumnMatrixHeight, columnMatrixHeight);\n\n // Get height for row matrix\n const rowMatrixHeight = paginationMeasureGetter(layout, ROW, maxHeightAvailableForRowMatrix, buffer);\n\n return {\n columnMatrixHeight,\n maxColumnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n };\n};\n\nconst setValueMatrixMeasurements = (layout, rowViewableSpaces, columnViewableSpaces) => {\n const centerMatrix = layout.centerMatrix();\n\n const {\n border\n } = layout.config();\n const matrices = layout.matrices();\n const {\n top,\n bottom\n } = matrices;\n\n // Border adjustment for each cell in the central matrix\n const borderWidth = border.width;\n\n // Get the heights for each cell in the row matrix\n const rowHeights = [].concat(...rowViewableSpaces.map(e => e.rowHeights.primary));\n\n // Get the widths for each of the row matrix cells(primary and secondary)\n const rowWidthsPrimary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.primary));\n const rowWidthsSecondary = [].concat(...rowViewableSpaces.map(e => e.columnWidths.secondary));\n\n // Get the widths for each cell in the column matrix\n const columnWidths = [].concat(...columnViewableSpaces.map(e => e.columnWidths.primary));\n\n // Get the widths for each of the column matrix cells(primary and secondary)\n const columnHeightsPrimary = columnViewableSpaces[0].rowHeights.primary;\n const columnHeightsSecondary = [].concat(...columnViewableSpaces.map(e => e.rowHeights.secondary));\n\n // Setting the available space for each cell in the centre matrix computed throught the row and\n // column matrices\n centerMatrix.forEach((matrix, rIdx) => {\n matrix.forEach((placeholder, cIdx) => {\n placeholder.setAvailableSpace(columnWidths[cIdx] - borderWidth, rowHeights[rIdx] - borderWidth);\n });\n });\n\n // Set the heights and widths for the corner matrices namely:\n // TOP_LEFT\n setAvailableSpace(top[0], rowWidthsPrimary, columnHeightsPrimary);\n // TOP_RIGHT\n setAvailableSpace(top[2], rowWidthsSecondary, columnHeightsPrimary);\n // BOTTOM_LEFT\n setAvailableSpace(bottom[0], rowWidthsPrimary, columnHeightsSecondary);\n // BOTTOM_RIGHT\n setAvailableSpace(bottom[2], rowWidthsSecondary, columnHeightsSecondary);\n};\n\nconst bufferCondition = {\n isScroll: true,\n pagination: SCROLL\n};\n\nconst getBufferFromCondition = (layout, type) => {\n const scrollInfo = layout.scrollInfo();\n const {\n pagination\n } = layout.config();\n\n const currentBufferType = {\n pagination,\n isScroll: scrollInfo[type]\n };\n\n return Object.keys(bufferCondition).every(e => bufferCondition[e] === currentBufferType[e]);\n};\n\nconst getActualBufferFromConfig = (layout) => {\n const {\n buffer\n } = layout.config();\n const [horizontalBuffer, verticalBuffer] = [HORIZONTAL, VERTICAL].map((type) => {\n if (getBufferFromCondition(layout, type)) {\n return buffer;\n }\n return 0;\n });\n\n return {\n horizontalBuffer,\n verticalBuffer\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\n // Compute the widths of the row and column matrices\n const {\n rowMatrixWidth,\n maxRowMatrixWidth,\n maxWidthAvailableForColumnMatrix,\n columnMatrixWidth\n } = getMatrixWidthDetails(layout);\n\n // Compute the heights of the row and column matrices\n const {\n columnMatrixHeight,\n rowMatrixHeight,\n maxHeightAvailableForRowMatrix\n } = getMatrixHeightDetails(layout, columnMatrixWidth);\n\n const {\n horizontalBuffer,\n verticalBuffer\n } = getActualBufferFromConfig(layout);\n rowMatrix.setAvailableSpace(maxRowMatrixWidth - verticalBuffer, rowMatrixHeight - horizontalBuffer);\n\n // Get row and columns viewable spaces\n const rowViewableSpaces = rowMatrix.getViewableSpaces();\n const columnViewableSpaces = columnMatrix.getViewableSpaces();\n\n // Set view spaces for row and columns\n setViewSpaces(layout, ROW, rowViewableSpaces);\n setViewSpaces(layout, COLUMN, columnViewableSpaces);\n\n // Set measures for each cell of the value matrix\n setValueMatrixMeasurements(layout, rowViewableSpaces, columnViewableSpaces);\n\n return {\n rowMatrixHeight: rowMatrixHeight - horizontalBuffer,\n rowMatrixWidth: rowMatrixWidth - verticalBuffer,\n maxHeightAvailableForRowMatrix: maxHeightAvailableForRowMatrix - horizontalBuffer,\n\n columnMatrixHeight,\n columnMatrixWidth,\n maxWidthAvailableForColumnMatrix\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.getViewableMatrices();\n const columnMatrices = columnMatrix.getViewableMatrices();\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\nconst measureSum = measureArr => measureArr.reduce((total, measure) => total + measure, 0);\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, maxRowHeight, maxColWidth) => {\n const rowMatrix = layout.rowMatrix();\n const columnMatrix = layout.columnMatrix();\n const {\n columnPointer,\n rowPointer\n } = layout.config();\n\n const rowSpaces = rowMatrix.getViewableSpaces()[rowPointer];\n const colSpaces = columnMatrix.getViewableSpaces()[columnPointer];\n\n const {\n rowHeights,\n width: rowMatrixWidth\n } = rowSpaces;\n const {\n columnWidths,\n height: columnMatrixHeight\n } = colSpaces;\n\n const { primary: leftWidth, secondary: rightWidth } = rowMatrixWidth;\n const { primary: topHeight, secondary: bottomHeight } = columnMatrixHeight;\n\n const centerHeight = measureSum(rowHeights.primary);\n const centerWidth = measureSum(columnWidths.primary);\n const viewWidth = [leftWidth, Math.min(centerWidth, maxColWidth), rightWidth];\n const viewHeight = [topHeight, Math.min(centerHeight, maxRowHeight), bottomHeight];\n\n return {\n viewWidth,\n viewHeight,\n actualCenterMeasures: {\n height: centerHeight,\n width: centerWidth\n },\n totalMeasures: {\n width: measureSum(viewWidth),\n height: measureSum(viewHeight)\n },\n unitHeights: rowHeights,\n unitWidths: columnWidths\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, mergeRecursive } from 'muze-utils';\nimport GenericLayout from '../generic-layout';\nimport { DEFAULT_CONFIGURATION, DEFAULT_MEASUREMENTS } from './defaults';\nimport { generateVisualMatrices } from './layout-helper';\nimport { computeLayoutMeasurements } from './computations';\nimport { getViewMeasurements, getViewMatrices } from './view-info-getter';\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 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 this._scrollInfo = { horizontal: false, vertical: false };\n }\n\n static defaultViewInfo () {\n return Object.assign({}, {\n layoutDimensions: {\n border: this.defaultConfig().border,\n viewHeight: [0, 0, 0],\n viewWidth: [0, 0, 0]\n },\n viewMatricesInfo: {\n columnPages: 0,\n rowPages: 0,\n matrices: { top: [], center: [], bottom: [] }\n }\n });\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 this.scrollInfo({ horizontal: false, vertical: false });\n const {\n maxHeightAvailableForRowMatrix,\n maxWidthAvailableForColumnMatrix\n } = computeLayoutMeasurements(this);\n\n this.setViewInformation(maxHeightAvailableForRowMatrix, maxWidthAvailableForColumnMatrix);\n return this;\n }\n\n gotoPage (type, pageNumber) {\n const pageType = type.toLowerCase();\n const { viewMatricesInfo } = this.viewInfo();\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 pages (type) {\n const { viewMatricesInfo } = this.viewInfo();\n const pageType = type.toLowerCase();\n return {\n totalPages: viewMatricesInfo[`${pageType}Pages`],\n currentPage: this.config()[`${pageType}Pointer`] + 1\n };\n }\n\n viewInfo (...viewInfo) {\n if (viewInfo.length) {\n this._viewInfo = viewInfo[0];\n return this;\n }\n return this._viewInfo;\n }\n\n scrollInfo (...scrollInfo) {\n if (scrollInfo.length) {\n this._scrollInfo = mergeRecursive(this._scrollInfo, scrollInfo[0]);\n return this;\n }\n return this._scrollInfo;\n }\n\n /**\n *\n *\n * @returns\n * @memberof GridLayout\n */\n setViewInformation (maxRowHeight, maxColWidth) {\n const {\n rowPointer,\n columnPointer,\n border\n } = this.config();\n const viewMatricesInfo = getViewMatrices(this, rowPointer, columnPointer);\n const layoutDimensions = getViewMeasurements(this, maxRowHeight, maxColWidth);\n layoutDimensions.border = border;\n this.viewInfo({\n viewMatricesInfo,\n layoutDimensions\n });\n return this;\n }\n}\n","import RowMatrix from '../visual-matrix/row-matrix';\nimport ColumnMatrix from '../visual-matrix/column-matrix';\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 priority\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\n context.rowMatrix(new RowMatrix([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 priority: priority.row,\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 ColumnMatrix([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 priority: priority.col,\n breakPage: breakPage.columns,\n extraCellLengths: [begColCells, endColCells]\n }));\n context.centerMatrix(valueMatrix);\n\n return matrices;\n};\n","import {\n TOP, BOTTOM, LEFT, RIGHT, CENTER, BLANK_BORDERS, COLUMN, ROW,\n VIEW_INDEX, ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, MIDDLE, NO_BORDERS\n} from '../enums/constants';\n\nconst borderMap = {\n [`${TOP}-${LEFT}`]: NO_BORDERS,\n [`${TOP}-${MIDDLE}`]: COLUMN,\n [`${TOP}-${RIGHT}`]: NO_BORDERS,\n [`${CENTER}-${LEFT}`]: ROW,\n [`${CENTER}-${MIDDLE}`]: CENTER,\n [`${CENTER}-${RIGHT}`]: ROW,\n [`${BOTTOM}-${LEFT}`]: NO_BORDERS,\n [`${BOTTOM}-${MIDDLE}`]: COLUMN,\n [`${BOTTOM}-${RIGHT}`]: NO_BORDERS\n};\n\nconst applySpecificBorder = (cells, color, type, style) => {\n cells.style(`border-${type}`, `${style} ${color}`);\n};\n\nconst specificBorderApplier = (borderTypes, showBorders, cells, borderInfo) => {\n const {\n color,\n width,\n style\n } = borderInfo;\n const borderStyle = `${width}px ${style}`;\n\n borderTypes.forEach((borderType) => {\n applySpecificBorder(cells, showBorders[borderType] ? color : BLANK_BORDERS, borderType, borderStyle);\n });\n};\n\nconst borderApplier = (cells, borderInfo) => {\n const {\n showRowBorders,\n showColBorders,\n showValueBorders\n } = borderInfo;\n return {\n row: () => specificBorderApplier([TOP, BOTTOM], showRowBorders, cells, borderInfo),\n column: () => specificBorderApplier([LEFT, RIGHT], showColBorders, cells, borderInfo),\n center: () => specificBorderApplier([LEFT, RIGHT, TOP, BOTTOM], showValueBorders, cells, borderInfo)\n };\n};\n\nexport const applyBorders = (cells, border, row, column) => {\n const borderApplierFn = borderApplier(cells, border);\n const borderMapVal = borderMap[`${ROW_MATRIX_INDEX[VIEW_INDEX[row]]}-${COLUMN_MATRIX_INDEX[column]}`];\n if (borderMapVal) {\n borderApplierFn[borderMapVal]();\n }\n};\n","import { selectElement } from 'muze-utils';\nimport {\n TOP, BOTTOM, ROW_SPAN, COL_SPAN, CENTER, ROW, COLUMN\n} from '../enums/constants';\n\nconst orderMaker = arr => Array.from(Array(arr.length).keys());\n\nconst nestByStack = (stack, updateArr, optionalParams = {}) => {\n let {\n order,\n keyFn\n } = optionalParams;\n const arr = updateArr.slice();\n const currStack = stack.slice();\n const prevStack = currStack.slice();\n // Order in which element are to be checked for nesting, default normal looping\n // Order is always in the order of nest, i.e., left to right\n order = order || Array.from(Array(arr.length).keys());\n\n // Key function, if array of objects\n keyFn = keyFn || (v => v);\n\n // Return same array if stack is empty\n if (currStack.length === 0) {\n const newArr = [];\n order.forEach((e) => {\n newArr.push(arr[e]);\n });\n return { prevStack, currStack: arr, arr: newArr };\n }\n\n let arrVal = '';\n let stackVal = '';\n const newArr = [];\n\n // Loop in order\n for (let i = order.length - 1; i >= 0; i--) {\n // Get current element index from the order given\n const currElemIndex = order[i];\n\n // Crete a hashmap for the hierarchy by joining strings of the array for both stack and input array\n arrVal += keyFn(arr[currElemIndex]);\n stackVal += keyFn(currStack[currElemIndex]);\n\n // If the current value and value in stack is same, convert it to null\n if (arrVal === stackVal) {\n newArr[currElemIndex] = null;\n } else {\n stackVal = '';\n // Loop from the current index in order to the last element in order to change the\n // whole hierarchy\n for (let j = i; j < order.length; j++) {\n const newElem = order[j];\n const arrElem = arr[newElem];\n\n newArr[newElem] = arrElem;\n\n // Reset stack to new stack\n currStack[newElem] = arrElem;\n stackVal = arrVal;\n }\n }\n }\n const returnArr = [];\n order.forEach((e) => {\n returnArr.push(newArr[e]);\n });\n return { prevStack, currStack, arr: returnArr };\n};\n\nconst spanCalculator = (colData, colIdx, matrix, rIdx) => {\n // if data is not header cell then rowspan\n // has to be 1\n if (!colData) {\n return () => null;\n }\n\n const conditions = {\n row: count => matrix[rIdx + count] && matrix[rIdx + count][colIdx],\n column: count => matrix[rIdx][colIdx + count]\n };\n\n return (type) => {\n let count = 1;\n let isNull = false;\n\n while (!isNull) {\n if (conditions[type](count) === null) {\n count += 1;\n } else {\n isNull = true;\n }\n }\n return count;\n };\n};\n\nconst maskCreator = (matrix, order) => ({\n row: () => {\n let stack = [];\n return matrix.map((e) => {\n const {\n currStack,\n arr\n } = nestByStack(stack, e, { keyFn: val => val.valueOf(), order });\n\n stack = currStack;\n return arr;\n });\n },\n column: () => {\n let stack = [];\n const viewMatrix = [];\n matrix.length && matrix[0].forEach((cell, colIndex) => {\n const hierarchy = [];\n matrix.forEach((row) => {\n hierarchy.push(row[colIndex]);\n });\n const {\n currStack,\n arr\n } = nestByStack(stack, hierarchy, { keyFn: val => val.valueOf(), order });\n stack = currStack;\n\n matrix.forEach((row, rowIndex) => {\n viewMatrix[rowIndex] = viewMatrix[rowIndex] || [];\n viewMatrix[rowIndex][colIndex] = arr[rowIndex];\n });\n });\n return viewMatrix;\n }\n});\n\nconst spanGenerator = viewMatrix => ({\n row: () => {\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 = spanCalculator(col, i, viewMatrix, ridx)('row');\n currSpan && spans[ridx].push(currSpan);\n }\n });\n });\n return spans;\n },\n column: () => viewMatrix.map((row, ridx) => row.map((col, i) => spanCalculator(col, i, viewMatrix, ridx)('column'))\n .filter(col => col !== null))\n});\n\nconst getOrder = () => ({\n row: matrix => orderMaker(matrix[0]),\n column: matrix => orderMaker(matrix)\n});\n\nconst matrixSpanGeneratorMap = {\n [`${TOP}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${BOTTOM}-1`]: {\n orderGetter: getOrder()[COLUMN],\n viewMatrixMaker: (...params) => maskCreator(...params)[COLUMN],\n spanMaker: (...params) => spanGenerator(...params)[COLUMN]\n },\n [`${CENTER}-0`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n },\n [`${CENTER}-2`]: {\n orderGetter: getOrder()[ROW],\n viewMatrixMaker: (...params) => maskCreator(...params)[ROW],\n spanMaker: (...params) => spanGenerator(...params)[ROW]\n }\n};\n\nconst matrixSpanGenerator = (type) => {\n const generator = matrixSpanGeneratorMap[type];\n if (generator) {\n return generator;\n }\n return {\n orderGetter: () => null,\n viewMatrixMaker: matrix => () => matrix,\n spanMaker: () => () => null\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 spans = null;\n let viewMatrix = matrix;\n const {\n orderGetter,\n viewMatrixMaker,\n spanMaker\n } = matrixSpanGenerator(`${type}-${index}`);\n\n if (matrix.length) {\n const order = orderGetter(matrix);\n viewMatrix = viewMatrixMaker(matrix, order)();\n spans = spanMaker(viewMatrix)();\n }\n return { viewMatrix, spans };\n}\n\nconst spaceAllocationDueToSpan = (span = 1, placeholder, config, index) => {\n const height = placeholder.availHeight();\n const width = placeholder.availWidth();\n const borderWidth = config.border.width;\n const { unitWidths } = config.dimensions;\n const { col } = index;\n\n return {\n [ROW_SPAN] () {\n placeholder.setAvailableSpace(width, height * span);\n if (span === 1) {\n selectElement(this).style('height', `${height * span + borderWidth}px`);\n }\n },\n [COL_SPAN] () {\n const primaryUnitWidth = unitWidths.primary[col];\n if (span > 1) {\n let cumulativeWidth = 0;\n for (let i = col; i < col + span; i++) {\n cumulativeWidth += unitWidths.primary[i] - borderWidth;\n }\n placeholder.setAvailableSpace(cumulativeWidth + borderWidth, height);\n } else if (primaryUnitWidth) {\n placeholder.setAvailableSpace(primaryUnitWidth - borderWidth, height);\n }\n selectElement(this).style('height', `${height}px`);\n }\n };\n};\n\nconst spanApplier = (cells, spans, config, type) => {\n let cellCounter = 0;\n cells.attr(type, function (cell, colIndex) {\n if (colIndex === 0) {\n cellCounter = 0;\n }\n const span = spans[cell.rowIndex][colIndex];\n const placeholder = cell.placeholder;\n const index = {\n row: cell.rowIndex,\n col: cellCounter\n };\n\n spaceAllocationDueToSpan(span, placeholder, config, index)[type].bind(this)();\n cellCounter += span;\n return span;\n });\n};\n\nconst spanApplierMap = {\n [`${TOP}-0`]: null,\n [`${TOP}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${TOP}-2`]: null,\n [`${CENTER}-0`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${CENTER}-1`]: null,\n [`${CENTER}-2`]: (...params) => spanApplier(...params, ROW_SPAN),\n [`${BOTTOM}-0`]: null,\n [`${BOTTOM}-1`]: (...params) => spanApplier(...params, COL_SPAN),\n [`${BOTTOM}-2`]: null\n};\n\nexport const applySpans = (cells, spans, config, type) => {\n const applier = spanApplierMap[type];\n if (applier) {\n applier(cells, spans, config);\n }\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 *\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';\nexport const MAX_LINES = 'maxLines';\nexport const MIN_CHARS = 'minCharacters';\nexport const ROTATION = 'rotation';\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 getMinMeasures (providedMinMeasure = 0) {\n return providedMinMeasure;\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]: null,\n [CONSTANTS.TEXT_ALIGN]: CONSTANTS.CENTER,\n [CONSTANTS.SHOW]: true,\n [CONSTANTS.MAX_LINES]: 0,\n [CONSTANTS.MIN_CHARS]: 0,\n [CONSTANTS.ROTATION]: null\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 minSpacing: {},\n source: {}\n};\n\nconst geomProps = {\n data: {},\n caption: {},\n config: {},\n axes: {},\n facetByFields: {},\n fields: {},\n transform: {},\n layerDef: {},\n detailFields: {}\n};\n\nconst textProps = {\n smartText: {}\n};\nexport const PROPS = {\n [GEOM]: mergeRecursive(geomProps, DEFAULT_PROPS),\n [TEXT]: mergeRecursive(textProps, 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, BOTTOM, TOP } 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\n if (width || height) {\n this.source().setAvailableSpace(width, height, margin, isOffset);\n this.source().logicalSpace(null);\n } else {\n this.source().resetLogicalSpace();\n }\n this.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 let actualWidth = 0;\n let actualHeight = 0;\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 orientation\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 selection.classed(`${CLASSPREFIX}-axis-container-${orientation}`, true);\n\n this.mount(mount);\n if (!availWidth) {\n selection.attr(WIDTH, `${0}px`);\n }\n if (!availHeight) {\n selection.attr(HEIGHT, `${0}px`);\n }\n actualWidth = availWidth;\n actualHeight = availHeight;\n if (!show) {\n actualWidth = (orientation === TOP || orientation === BOTTOM) ? availWidth : 0;\n actualHeight = (orientation === TOP || orientation === BOTTOM) ? 0 : availHeight;\n }\n wrapperDiv.style(WIDTH, `${actualWidth}px`)\n .style(HEIGHT, `${actualHeight}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\n getMinMeasures () {\n return 0;\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\nconst setSmartText = (context) => {\n const source = context.source();\n const {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n rotation\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const labelManager = context.dependencies().labelManager;\n\n labelManager.setStyle(context._computedStyle);\n\n !rotation && context.smartText(labelManager.getSmartText(source, availWidth, availHeight, false));\n rotation && context.smartText(labelManager.getSmartText(source, availHeight, availWidth, true));\n\n return context;\n};\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 {\n height: minHeightSpace,\n width: minWidthSpace\n } = context.minSpacing();\n const {\n margin,\n show,\n maxLines,\n minCharacters\n } = context.config();\n const {\n left,\n right,\n top,\n bottom\n } = margin;\n const paddedHeight = top + bottom + minHeightSpace;\n const paddedWidth = left + right + minWidthSpace;\n const availHeight = context.availHeight() - paddedHeight;\n const availWidth = context.availWidth() - paddedWidth;\n const source = context.source();\n const space = context.smartText();\n const minText = new Array(minCharacters).fill('W').join('');\n const _minTextSpace = labelManager.getOriSize(minText);\n\n context.config({ rotation: false });\n if (space.width > (availWidth || 0) && maxLines) {\n space.height = space.oriTextHeight * maxLines;\n }\n if (availWidth && availWidth < space.width) {\n space.width = _minTextSpace.width;\n }\n if (availWidth && availWidth < Math.min(_minTextSpace.width, space.oriTextWidth)) {\n const smartSpace = labelManager.getSmartText(source, availHeight, _minTextSpace.height, true);\n space.width = smartSpace.height;\n space.height = smartSpace.width;\n context.config({ rotation: true });\n context.smartText(smartSpace);\n }\n\n if (show) {\n return {\n width: Math.ceil(space.width) + paddedWidth,\n height: Math.ceil(space.height) + paddedHeight\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 generateGetterSetters(this, PROPS[TEXT]);\n const space = this._dependencies.labelManager.getOriSize('w');\n this.minSpacing({ width: Math.floor(space.width * 3 / 4), height: Math.floor(space.height / 2) });\n setSmartText(this);\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 setSmartText(this);\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 availHeight = this.availHeight();\n const {\n margin,\n show,\n verticalAlign,\n textAlign,\n rotation\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 const vAlign = verticalAlign || rotation ? 'middle' : 'top';\n const {\n width,\n height\n } = this.smartText();\n const {\n height: minHeightSpace\n } = this.minSpacing();\n const translation = {\n top: width + minHeightSpace / 2,\n middle: width / 2 + minHeightSpace,\n bottom: minHeightSpace\n };\n\n container.style('vertical-align', vAlign);\n\n // Set class name\n elem.classed(this._className, true);\n\n // Apply styles\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n elem.style('transform', rotation ? `translate(${height / 2}px,\n ${translation[vAlign]}px) rotate(-90deg)` : '');\n elem.style(WIDTH, availWidth ? `${availWidth}px` : '100%');\n [TOP, BOTTOM, LEFT, RIGHT].forEach((type) => {\n container.style(`margin-${type}`, `${margin[type]}px`);\n });\n elem.style('text-align', textAlign);\n elem.style('display', 'inline');\n // set the text as the innerHTML\n this._dependencies.labelManager.setStyle(this._computedStyle);\n elem.html(this._dependencies.labelManager.getSmartText(this.source(), availWidth, availHeight, true).text);\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.clearCaching();\n [LAYER_DEF, TRANSFORM, AXES, FIELDS, CONFIG, DATA, AXES, FACET_BY_FIELDS, DETAIL_FIELDS].forEach((prop) => {\n this[prop]() && unit[prop](this[prop]());\n });\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 .width(width).height(height - this.getCaptionSpace().height)\n .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';\nimport { TOP } from '../constants';\n\n/**\n *\n *\n * @param {*} rawContent\n *\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 *\n */\nconst headerCreator = (config, cellType, labelManager, prevCell) => {\n let margin = {};\n const {\n content,\n classPrefix,\n maxLines\n } = config;\n const cell = prevCell || new TextCell(\n {\n type: cellType === 'title' ? 'header' : 'text',\n className: `${classPrefix}-${cellType}-cell`\n }, {\n labelManager\n })\n .config({ maxLines }).minSpacing({ width: 0, height: 0 });\n\n cell.source(content);\n cell._minTickDiff = { height: 0, width: 0 };\n\n if (config.position === TOP) {\n margin = { top: 0, bottom: config.padding };\n } else {\n margin = { top: config.padding, bottom: 0 };\n }\n cell.config({ margin });\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 *\n */\nconst createHeading = (config, type, labelManager, prevCell) => {\n if (!config) { return ''; }\n\n return headerCreator(\n config,\n type,\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 const subtitle = context.subtitle();\n const isSubtitle = resolveTitleSubTitleContent(subtitle[0]);\n\n canvasHeight >= 200 && canvasWidth >= 200 && ['title', 'subtitle'].forEach((type) => {\n const headerOptions = context[type]();\n const content = resolveTitleSubTitleContent(headerOptions[0]);\n if (content) {\n const config = headerOptions[1];\n\n config.width = context.width();\n config.height = context.height();\n config.classPrefix = context.config().classPrefix;\n config.content = content;\n config.padding = (type === 'title' && !isSubtitle.length) ? subtitle[1].padding : config.padding;\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;\n }\n });\n return { headerHeight, headers };\n};\n\n","import { TextCell, AxisCell } from '@chartshq/visual-cell';\nimport { getValueParser, retrieveFieldDisplayName, DataModel, getObjProp } from 'muze-utils';\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 *\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 && scale) {\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({\n scale,\n canvas,\n fieldName: scaleProps.field,\n title: retrieveFieldDisplayName(canvas.data(), scaleProps.field),\n LegendCls,\n scaleType\n });\n }\n });\n\n return dataset;\n};\n\n/**\n *\n *\n * @param {*} legendConfig\n * @param {*} canvases\n * @param {*} measurement\n * @param {*} prevLegends\n *\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 const { invalidValues } = canvas.config();\n\n const parser = getValueParser(invalidValues);\n legendInfo.forEach((dataInfo, index) => {\n const legendMeasures = {};\n const {\n LegendCls,\n scale,\n fieldName,\n title: titleText,\n scaleType\n } = dataInfo;\n const config = legendConfig[scaleType] || {};\n const title = config.title || {};\n title.text = title.text || titleText;\n if (config.show) {\n config.position = position;\n config.align = align;\n let legend = getObjProp(prevLegends[scaleType], index);\n if (!legend) {\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 const metaData = legend.metaData();\n if (metaData instanceof DataModel) {\n metaData.dispose();\n }\n legend.scale(scale)\n .valueParser(parser)\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 *\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 *\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.composition().legend || {});\n};\n","import { LayoutComponent } from '../../../../layout/src/tree-layout';\n\nexport default class MuzeComponent extends LayoutComponent {\n getLogicalSpace () {\n const { width, height } = this.boundBox();\n return { width, height };\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y, left: conf.x });\n this.newDimensions = {\n width: conf.width,\n height: conf.height\n };\n this.renderAt(conf.renderAt);\n }\n\n getBoundBox () {\n return this.boundBox();\n }\n\n updateWrapper () {\n throw Error('Update is not implemented');\n }\n\n setParams () {\n throw Error('set params is not implemented');\n }\n}\n","import { selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport { LEFT } from '../../constants';\n\nexport default class HeaderComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n renderHeader (container) {\n const layoutConfig = this.params.config;\n container = selectElement(container);\n const { align } = layoutConfig;\n const sel = container\n .selectAll(`.${layoutConfig.classPrefix}-inner-container`)\n .data([this.name]);\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 const { height, width } = this.boundBox();\n this.component.setAvailableSpace(width, height);\n\n this.component && this.component.render(cont.node());\n\n cont.selectAll('div').classed(`${layoutConfig.classPrefix}-inner-content`, true);\n cont.style('width', `${100}%`);\n\n if (layoutConfig && this.component) {\n cont.style('float', LEFT)\n .style('text-align', align);\n // .style(`padding-${position === TOP ? BOTTOM : TOP}`, `${padding}px`);\n }\n }\n\n draw (container) {\n this.renderHeader(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.setParams(params);\n this.name(params.name);\n this.boundBox(params.component.getLogicalSpace());\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n setSpatialConfig (conf) {\n this.boundBox({ top: conf.y,\n left: conf.x,\n width: conf.width,\n height: conf.height });\n this.renderAt(conf.renderAt);\n }\n}\n","import { makeElement, selectElement } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport {\n LEFT, RIGHT, VERTICAL, HORIZONTAL, TOP, BOTTOM, HORIZONTAL_CENTER, VERTICAL_CENTER\n} from '../../constants';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\n\nfunction defaultAlignmentHelper (position) {\n let alignment = null;\n const alignWith = `${ROW_MATRIX_INDEX[1]}-${COLUMN_MATRIX_INDEX[1]}`;\n switch (position) {\n case TOP:\n case BOTTOM:\n alignment = HORIZONTAL_CENTER;\n break;\n case LEFT:\n case RIGHT:\n alignment = VERTICAL_CENTER;\n break;\n default:\n alignment = VERTICAL_CENTER;\n }\n return { alignment, alignWith };\n}\nexport default class LegendComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.measurement.legendSpace, 0);\n this.setParams(params);\n }\n\n renderLegend (container) {\n container = selectElement(container);\n const sectionComponents = [];\n const { position, classPrefix } = this.params.config;\n const legendMount = makeElement(container, 'div', [this.components],\n `${classPrefix}-inner-content`, {}, d => d);\n legendMount.classed(`${classPrefix}-legend`, true);\n const align = (position === LEFT || position === RIGHT) ? VERTICAL : HORIZONTAL;\n const legWidth = this.newDimensions.width;\n const legHeight = this.newDimensions.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 this.components.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 // mount.each((d, i) => selectElement(this).classed(`${classPrefix}-legend-section-${i}`, true));\n mount.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 mount.classed(`${classPrefix}-legend-horizontal-section`, true);\n mount.classed(`${classPrefix}-legend-section-${0}`, true)\n .style('width', `${legWidth}px`);\n\n makeElement(mount, 'div', this.components, `${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 draw (container) {\n this.renderLegend(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.measurement.legendSpace);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.components = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n const { alignWith, alignment } = defaultAlignmentHelper(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith || alignWith);\n this.alignment(params.config.alignment || alignment);\n }\n\n}\n","import {\n selectElement,\n makeElement,\n getD3Drag,\n getEvent,\n getWindow,\n hasTouch\n} from 'muze-utils';\nimport './scroll-bar.scss';\nimport { WIDTH, HEIGHT } from '../../../constants';\n\nconst d3Drag = getD3Drag();\n\nconst arrowSizeMap = {\n left: WIDTH,\n right: WIDTH,\n top: HEIGHT,\n bottom: HEIGHT\n};\n\nexport const getUnitPositions = (unitMeasures, totalLength, viewLength) => {\n let currentLen = 0;\n const measures = unitMeasures.primary && unitMeasures.primary.length ?\n unitMeasures.primary : unitMeasures.secondary;\n\n return measures.map((e) => {\n const unitPosition = currentLen * 100 / (totalLength - viewLength);\n currentLen += e;\n return unitPosition;\n });\n};\n\nexport const createScrollBarArrow = (mount, type, config) => {\n const {\n classPrefix,\n thickness\n } = config;\n const arrow = makeElement(mount, 'div', [type], `${classPrefix}-scroll-arrow-${type}`);\n\n arrow.classed(`${classPrefix}-scroll-arrow`, true);\n arrow.style(arrowSizeMap[type], `${thickness}px`);\n\n const chevron = makeElement(arrow, 'div', [1], `${classPrefix}-scroll-arrow-chevron`);\n\n chevron.attr('id', `${classPrefix}-scroll-arrow-chevron-${type}`);\n\n return arrow;\n};\n\nexport const createScrollBarRect = (mount, config) => {\n const {\n classPrefix\n } = config;\n const rect = makeElement(mount, 'div', [1], `${classPrefix}-scroll-rect`);\n const mover = makeElement(rect, 'div', [1], `${classPrefix}-scroll-mover`);\n\n return { rect, mover };\n};\n\nexport const applyRectClick = (scrollMaker, moverRect) => {\n const {\n rect\n } = moverRect;\n\n rect.on('click', () => {\n const event = getEvent();\n scrollMaker.emptyScrollAreaClick(event);\n });\n};\n\nconst applyMoverDrag = (scrollMaker, moverRect) => {\n let startPos = {};\n let moverStartPos = 0;\n let rectStartPos = 0;\n let endPos = {};\n const {\n mover,\n rect\n } = moverRect;\n\n mover.call(d3Drag()\n .on('start', () => {\n const event = getEvent();\n\n moverStartPos = mover.node().getBoundingClientRect();\n rectStartPos = rect.node().getBoundingClientRect();\n startPos = {\n x: event.x,\n y: event.y\n };\n })\n .on('drag', () => {\n const event = getEvent();\n const window = getWindow();\n\n endPos = {\n x: event.x,\n y: event.y\n };\n const distanceMoved = {\n x: endPos.x - startPos.x,\n y: endPos.y - startPos.y\n };\n const actualPosition = {\n x: moverStartPos.x + distanceMoved.x - rectStartPos.x + window.pageXOffset,\n y: moverStartPos.y + distanceMoved.y - rectStartPos.y + window.pageYOffset\n };\n\n scrollMaker.changeMoverPosition(actualPosition);\n }));\n};\n\nconst applyScrollMouseDownAction = (moverRect, scrollMaker, speed) => {\n const {\n mover,\n rect\n } = moverRect;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n scrollMaker.changeMoverPosition({ x: x - rectX + speed, y: y - rectY + speed });\n};\n\nconst registerListenerOnArrow = (scrollMaker, moverRect, arrowType, speed) => {\n let timer = '';\n const arrow = scrollMaker._components[arrowType];\n const isTouchDevice = hasTouch();\n\n arrow.on(isTouchDevice ? 'touchstart' : 'mousedown', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n timer = setInterval(() => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n }, 100);\n }).on(isTouchDevice ? 'touchend' : 'mouseup', () => {\n const event = getEvent();\n\n event.preventDefault();\n\n clearInterval(timer);\n }).on('click', () => {\n applyScrollMouseDownAction(moverRect, scrollMaker, speed);\n });\n};\n\nexport const registerListeners = (scrollMaker) => {\n const {\n moverRect\n } = scrollMaker._components;\n\n const speed = scrollMaker.config().speed;\n\n registerListenerOnArrow(scrollMaker, moverRect, 'prevArrow', -speed);\n applyMoverDrag(scrollMaker, moverRect);\n applyRectClick(scrollMaker, moverRect);\n registerListenerOnArrow(scrollMaker, moverRect, 'nextArrow', speed);\n};\n\nexport const scrollContainerHelper = (mountPoint, config, dimensions, type) => {\n const {\n classPrefix\n } = config;\n const scrollBarContainer = makeElement(selectElement(mountPoint), 'div', [1], `#${classPrefix}-scroll-bar-${type}`);\n\n scrollBarContainer.classed(`${classPrefix}-scroll-bar`, true);\n scrollBarContainer.style(WIDTH, `${dimensions.width}px`);\n scrollBarContainer.style(HEIGHT, `${dimensions.height}px`);\n return scrollBarContainer;\n};\n\n","import { mergeRecursive } from 'muze-utils';\n\nexport const PROPS = {\n\n config: {\n sanitization: (context, value) => {\n value = mergeRecursive(context._config, value);\n return value;\n }\n },\n manager: {},\n unitPositions: {},\n logicalSpace: {}\n};\n\n","import { ERROR_MSG, generateGetterSetters } from 'muze-utils';\nimport {\n scrollContainerHelper,\n registerListeners\n} from './helper';\nimport { PROPS } from './props';\n\nexport class ScrollMaker {\n\n constructor () {\n this._components = {};\n this._logicalSpace = {};\n this._attachedScrollAction = () => {};\n this._config = {\n thickness: 10,\n speed: 2\n };\n this._unitPositions = null;\n\n generateGetterSetters(this, PROPS);\n }\n\n static type () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n emptyScrollAreaClick () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n changeMoverPosition () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n scrollDeltaTo () {\n throw new ERROR_MSG('Method not implemented');\n }\n\n createScroll (mountPoint) {\n const config = this.config();\n\n return {\n scrollBarContainer: scrollContainerHelper(mountPoint, config, this.logicalSpace(), this.constructor.type())\n };\n }\n\n attachScrollAction (externalScrollAction) {\n this._attachedScrollAction = externalScrollAction;\n return this;\n }\n\n detachScrollAction () {\n this._attachedScrollAction = () => {};\n return this;\n }\n\n getLogicalSpace () {\n return this.logicalSpace();\n }\n\n registerListeners () {\n registerListeners(this);\n return this;\n }\n\n remove () {\n this._components.scrollBarContainer.remove();\n return this;\n }\n}\n\n","import MuzeComponent from './muze-chart-component';\nimport { HorizontalScrollMaker } from './scroll-bar-maker/horizontal-scroll-maker';\nimport { VerticalScrollMaker } from './scroll-bar-maker/vertical-scroll-maker';\n\nconst scrollMakerMap = {\n horizontal: HorizontalScrollMaker,\n vertical: VerticalScrollMaker\n};\n\n/**\n * Scroll Component acts as a wrapper over the scoll bars created using the respective Scroll Makers\n * This provides a consistent API for layouting using the tree layout system.\n *\n *\n * @class\n * @public\n * @module ScrollComponent\n */\nexport default class ScrollComponent extends MuzeComponent {\n\n constructor (params) {\n const ScrollMaker = scrollMakerMap[params.config.type];\n\n params.component = new ScrollMaker();\n params.component.config(params.config.scrollBarComponentConfig);\n params.component.logicalSpace(params.dimensions);\n super(params.name, params.component.getLogicalSpace(), 0);\n this.setParams(params);\n }\n\n manager (...manager) {\n if (manager.length) {\n this.component.manager(manager[0]);\n return this;\n }\n return this.component.manager();\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollDeltaTo (delta) {\n this.component.scrollDeltaTo(delta);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollTo (scrollPercentage) {\n this.component.scrollTo(scrollPercentage);\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page based on the unit index.\n * The input is provided as a number represting the index for the unit.\n * For vertical scroll, it's the row index that will be required.\n * For horizontal scroll, it's the column index that will be required\n *\n * @public\n *\n * @param {number} unitIndex Index of the unit appearing in the grid\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n scrollToUnitIndex (unitIndex) {\n const unitPositions = this.component.unitPositions();\n const sanitizedUnitIndex = Math.min(Math.max(0, unitIndex), unitPositions.length - 1);\n this.component.scrollTo(unitPositions[sanitizedUnitIndex]);\n return this;\n }\n\n /**\n * Provides the positions of the units(either horizontal or vertical based on the type\n * of scroll bar it wraps) relative to it's container. The position of the first unit starts at 0\n *\n *\n * @public\n *\n * @return {Array} Positions of units either horizontal or vertical\n */\n getScrollPositionsForUnits () {\n return this.component.unitPositions();\n }\n\n draw (container) {\n this.component.createScroll(container || document.getElementById(this.renderAt()));\n return this;\n }\n\n /**\n * Can be used to attach a scroll action whenever scrolling occurs in the canvas\n *\n * @public\n * @param {number} externalAction Action to be attached during scroll\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n attachScrollAction (externalAction) {\n this.component.attachScrollAction(externalAction);\n return this;\n }\n\n /**\n * Can be used to detach the scroll action already bound to the scroll bar\n *\n * @public\n * @return {ScrollComponent} Instance of the ScrollComponent\n */\n detachScrollAction () {\n this.component.detachScrollAction();\n return this;\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.component.config(params.config.scrollBarComponentConfig);\n this.component.logicalSpace(params.dimensions);\n this.boundBox(this.component.getLogicalSpace());\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component || this.component;\n this.params = params;\n this.target(params.config.target);\n this.position(params.config.position);\n this.className(params.config.className);\n this.alignWith(params.config.alignWith);\n this.alignment(params.config.alignment);\n }\n\n remove () {\n this.component.remove();\n }\n}\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { HORIZONTAL, HEIGHT, WIDTH, LEFT } from '../../../constants';\n\nexport class HorizontalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: horizontal\n */\n static type () {\n return HORIZONTAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, config, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'left', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'right', config);\n const {\n mover,\n rect\n } = moverRect;\n\n const { height, width, totalLength, viewLength, unitWidths } = this.logicalSpace();\n const scrollBarWithouArrowLength = width - height * 2;\n\n rect.style(WIDTH, `${dimensions.width - height * 2}px`);\n rect.style(HEIGHT, `${100}%`);\n mover.style(WIDTH, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(HEIGHT, `${100}%`);\n mover.style(LEFT, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n this.unitPositions(getUnitPositions(unitWidths, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n let positionAdjuster = speed * 10;\n if (event.x < x) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n const {\n totalLength\n } = this.logicalSpace();\n\n if (newPosition.x < 0) {\n currentPos = 0;\n } else if (newPosition.x + moverPos.width > rectStartPos.width) {\n currentPos = rectStartPos.width - moverPos.width;\n } else {\n currentPos = newPosition.x;\n }\n\n mover.style(LEFT, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: 0, x: moverPos.x - rectStartPos.x - delta });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {HorizontalScrollMaker} Instance of the HorizontalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.width)) / 100;\n\n this.changeMoverPosition({ y: 0, x: movement });\n return this;\n }\n\n}\n\n","import { ScrollMaker } from './scroll-maker';\nimport { createScrollBarRect, createScrollBarArrow, getUnitPositions } from './helper';\nimport { VERTICAL, TOP, HEIGHT, WIDTH } from '../../../constants';\n\nexport class VerticalScrollMaker extends ScrollMaker {\n\n /**\n * Describes the type of the ScrollMaker\n *\n * @public\n *\n * @return {String} Returns the type of scroll maker: vertical\n */\n static type () {\n return VERTICAL;\n }\n\n createScroll (mountPoint, dimensions = this.logicalSpace()) {\n const config = this.config();\n const { scrollBarContainer } = super.createScroll(mountPoint, dimensions);\n const prevArrow = createScrollBarArrow(scrollBarContainer, 'top', config);\n const moverRect = createScrollBarRect(scrollBarContainer, config);\n const nextArrow = createScrollBarArrow(scrollBarContainer, 'bottom', config);\n const {\n mover,\n rect\n } = moverRect;\n const { height, width, totalLength, viewLength, unitHeights } = this.logicalSpace();\n const scrollBarWithouArrowLength = height - width * 2;\n\n rect.style(HEIGHT, `${scrollBarWithouArrowLength}px`);\n rect.style(WIDTH, `${100}%`);\n mover.style(WIDTH, `${100}%`);\n mover.style(HEIGHT, `${(viewLength * scrollBarWithouArrowLength) / totalLength}px`);\n mover.style(TOP, `${0}px`);\n\n this._components = {\n prevArrow,\n nextArrow,\n moverRect,\n scrollBarContainer\n };\n this._scrollBarWithouArrowLength = scrollBarWithouArrowLength;\n\n this.unitPositions(getUnitPositions(unitHeights, totalLength, viewLength));\n this.registerListeners();\n }\n\n emptyScrollAreaClick (event) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const speed = this.config().speed;\n const { x, y } = mover.node().getBoundingClientRect();\n const { x: rectX, y: rectY } = rect.node().getBoundingClientRect();\n\n let positionAdjuster = speed * 10;\n if (event.y < y) {\n positionAdjuster = -speed * 10;\n }\n this.changeMoverPosition({ x: x - rectX + positionAdjuster, y: y - rectY + positionAdjuster });\n }\n\n changeMoverPosition (newPosition) {\n let currentPos;\n const {\n mover,\n rect\n } = this._components.moverRect;\n const {\n totalLength\n } = this.logicalSpace();\n const rectStartPos = rect.node().getBoundingClientRect();\n const moverPos = mover.node().getBoundingClientRect();\n\n if (newPosition.y < 0) {\n currentPos = 0;\n } else if (newPosition.y + moverPos.height > rectStartPos.height) {\n currentPos = rectStartPos.height - moverPos.height;\n } else {\n currentPos = newPosition.y;\n }\n mover.style(TOP, `${currentPos}px`);\n const totalDistance = this._scrollBarWithouArrowLength;\n const movedViewLength = (currentPos * totalLength) / totalDistance;\n\n this.manager().performAttachedScrollFunction(this.constructor.type(), movedViewLength);\n }\n\n /**\n * Scrolls based on the actual pixel value provided. Since it's a delta change, the input will be\n * a delta between (-Infinity, Infinity), based on which the scroll will occur. Only a delta movement in\n * scroll occurs\n *\n * @public\n *\n * @param {number} delta Based on which the scroll will have a delta change in position\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollDeltaTo (delta) {\n const {\n mover,\n rect\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const rectStartPos = rect.node().getBoundingClientRect();\n\n this.changeMoverPosition({ y: moverPos.y - rectStartPos.y - delta, x: 0 });\n return this;\n }\n\n /**\n * Scrolls to the specific point in the page. The input is provided as a percentage (0 - 100)\n *\n * @public\n *\n * @param {number} scrollPercentage Its the percentage based on which the scroll action will occur\n * @return {VerticalScrollMaker} Instance of the VerticalScrollMaker\n */\n scrollTo (scrollPercentage) {\n const {\n mover\n } = this._components.moverRect;\n const moverPos = mover.node().getBoundingClientRect();\n const movement = (scrollPercentage * (this._scrollBarWithouArrowLength - moverPos.height)) / 100;\n\n this.changeMoverPosition({ x: 0, y: movement });\n return this;\n }\n\n}\n","import { makeElement } from 'muze-utils';\nimport { cellSpanMaker, applySpans } from '../../../../layout/src/grid-layout/span-maker';\nimport { applyBorders } from '../../../../layout/src/grid-layout/border-helper';\n\nimport {\n TOP, CENTER\n} from '../../../../layout/src/enums/constants';\nimport MuzeComponent from './muze-chart-component';\nimport { WIDTH, HEIGHT, HIDDEN, OVERFLOW, AUTO, VISIBLE } from '../../constants';\n\nconst renderPlaceholders = (cells) => {\n // Rendering content within placeholders\n cells.each(function (cell) {\n cell.placeholder.render(this);\n });\n};\n\nexport default class MatrixComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n this.className(params.config.className);\n }\n\n applyScroll (container) {\n const row = this.params.config.row;\n const column = this.params.config.column;\n const { horizontal, vertical } = this.params.config.scrollInfo;\n container.style(OVERFLOW, VISIBLE);\n container.style(WIDTH, AUTO);\n container.style(HEIGHT, AUTO);\n\n if (horizontal && column === 1) {\n container.style(OVERFLOW, HIDDEN);\n container.style(WIDTH, '100%');\n }\n\n if (vertical && row === CENTER) {\n container.style(OVERFLOW, HIDDEN);\n container.style(HEIGHT, '100%');\n }\n }\n\n renderMatrix (mountPoint) {\n // Creating containers for each matrix individually\n const classPrefix = this.params.config.classPrefix;\n const row = this.params.config.row;\n const column = this.params.config.column;\n const dimensions = this.params.config.dimensions;\n const border = this.params.config.border;\n\n // Creating containers for each matrix individually\n const containerForMatrix = makeElement(mountPoint, 'div', [1], `${classPrefix}-grid-${row}-${column + 1}`)\n .classed(`${classPrefix}-grid-${row}`, true)\n .classed(`${classPrefix}-grid`, true);\n\n this.applyScroll(containerForMatrix);\n\n const {\n viewMatrix,\n spans\n } = cellSpanMaker(this.component, row, column);\n\n // Rendering the table components\n const { cells } = this.renderTable(containerForMatrix, `${classPrefix}-grid`, viewMatrix);\n\n applySpans(cells, spans, { dimensions, border }, `${row}-${column}`);\n renderPlaceholders(cells);\n\n cells.exit().each((cell) => {\n cell.placeholder.remove();\n });\n\n applyBorders(cells, border, row, column);\n }\n\n 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\n draw (container) {\n this.renderMatrix(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.position(TOP);\n this.className(params.config.className);\n }\n}\n","import { selectElement, getEvent } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\nimport MatrixComponent from './matrix-component';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX } from '../../../../layout/src/enums/constants';\nimport { WHEEL_DELTA_MODIFIER } from '../../enums/constants';\n\n/**\n * Based on the type of scroll, it changes the scrollLeft/scrollTop property of the specific\n * elements based on the scroll distance provided\n *\n *\n */\nconst applyScrollAction = (elem, classPrefix, scollDistance, type) => {\n selectElement(elem)\n .selectAll(`.${classPrefix}-grid`)\n .property(type, scollDistance);\n};\n\n/**\n * Applies the action of the scroll by actually scrolling the respective matrices based on the\n * type of scroll. It returns a function which has both the scroll methods available\n *\n * @return {Object} contains the horizontal and vertical scroll actions on the grid component\n */\nconst scrollActionApplier = (movement, context) => {\n const classPrefix = context.params.config.classPrefix;\n\n return {\n horizontal: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[e][1].renderAt()}`, classPrefix, movement, 'scrollLeft'));\n },\n vertical: () => {\n [0, 1, 2].forEach(e =>\n applyScrollAction(`#${context.component[1][e].renderAt()}`, classPrefix, movement, 'scrollTop'));\n }\n };\n};\n\nexport default class GridComponent extends MuzeComponent {\n\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.gridComponents = [];\n this.setParams(params);\n }\n\n sanitizeGrid () {\n let height = 0;\n let width = 0;\n const { viewMatricesInfo, layoutDimensions } = this.component.viewInfo();\n const scrollInfo = this.component.scrollInfo();\n const {\n viewHeight,\n viewWidth,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n\n for (let i = 0; i < 3; i++) {\n if (!(this.gridComponents.length && this.gridComponents[i] instanceof Array)) {\n this.gridComponents[i] = [];\n }\n for (let j = 0; j < 3; j++) {\n const matrixDim = {\n height: viewHeight[i],\n width: viewWidth[j],\n unitHeights,\n unitWidths\n };\n const matrix = viewMatricesInfo.matrices[`${ROW_MATRIX_INDEX[i]}`][j];\n const matrixName = `${ROW_MATRIX_INDEX[i]}-${COLUMN_MATRIX_INDEX[j]}`;\n const matrixConfig = {\n dimensions: matrixDim,\n border: layoutDimensions.border,\n classPrefix: this.params.config.classPrefix,\n scrollInfo,\n row: ROW_MATRIX_INDEX[i],\n column: j\n };\n if (this.gridComponents[i][j] instanceof MuzeComponent) {\n this.gridComponents[i][j].updateWrapper({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n } else {\n const matrixWrapper = new MatrixComponent({\n name: matrixName,\n component: matrix,\n config: matrixConfig\n });\n this.gridComponents[i].push(matrixWrapper);\n }\n if (i === 0) {\n width += matrixDim.width;\n }\n if (j === 0) {\n height += matrixDim.height;\n }\n }\n }\n this.boundBox({ height, width });\n\n this.component = this.gridComponents;\n this.allComponents = this.gridComponents;\n }\n\n scrollBarManager (...manager) {\n if (manager.length) {\n this._scrollBarManager = manager[0];\n return this;\n }\n return this._scrollBarManager;\n }\n\n /**\n * Attaches a mousewheel listener to the center matrix, based on which the scrolling can occur.\n * It uses the scroll component to change the position of the scroller, which ultimately scrolls the center matrix\n *\n *\n * @return {GridComponent} Instance of the GridComponent\n */\n attachScrollListener () {\n const scrollBarManager = this.scrollBarManager();\n selectElement(`#${this.component[1][1].renderAt()}`)\n .on('wheel', () => {\n const event = getEvent();\n const {\n wheelDeltaX,\n wheelDeltaY\n } = event;\n\n // Scrolling horizontally\n if (wheelDeltaX !== 0 && Math.abs(wheelDeltaX) > Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('horizontal', event)\n .triggerScrollBarAction('horizontal', wheelDeltaX / WHEEL_DELTA_MODIFIER);\n }\n\n // Scrolling Vertically\n if (wheelDeltaY !== 0 && Math.abs(wheelDeltaX) < Math.abs(wheelDeltaY)) {\n scrollBarManager.preventBrowserScroll('vertical', event)\n .triggerScrollBarAction('vertical', wheelDeltaY / WHEEL_DELTA_MODIFIER);\n }\n });\n return this;\n }\n\n performScrollAction (direction, movedView) {\n scrollActionApplier(movedView, this)[direction]();\n return this;\n }\n\n getBoundBox () {\n const { top, left } = this.component[0][0].boundBox();\n const { height, width } = this.boundBox();\n\n return {\n top,\n left,\n height,\n width\n };\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n this.target(params.config.target);\n this.className(params.config.className);\n this.sanitizeGrid();\n return this;\n }\n\n attachListener () {\n this.attachScrollListener();\n return this;\n }\n}\n","export const SIDE_EFFECT_COMMON = 'common';\nexport const SIDE_EFFECT_INDIVIDUAL = 'individual';\nexport const TOOLTIP_CONSOLIDATED = 'consolidated';\nexport const TOOLTIP_FRAGMENTED = 'fragmented';\nexport const WHEEL_DELTA_MODIFIER = 30;\n","import { selectElement, makeElement, applyStyle } from 'muze-utils';\nimport MuzeComponent from './muze-chart-component';\n\nexport default class MessageComponent extends MuzeComponent {\n constructor (params) {\n super(params.name, params.config.dimensions, 0);\n this.setParams(params);\n }\n\n render (container) {\n const parent = selectElement(container);\n\n const { config } = this.params;\n const { className } = config.classPrefix;\n\n const node = makeElement(parent, 'div', [1], className);\n const { height, width } = config.dimensions;\n const { message } = config;\n\n applyStyle(node, { width: `${width}px`, height: `${height}px` });\n\n const child = makeElement(node, 'div', [1], `${className}-child`);\n const textElement = makeElement(child, 'text', [1]);\n\n textElement.html(message);\n }\n\n draw (container) {\n this.render(container || document.getElementById(this.renderAt()));\n }\n\n updateWrapper (params) {\n this.name(params.name);\n this.boundBox(params.config.dimensions);\n this.setParams(params);\n return this;\n }\n\n setParams (params) {\n this.component = params.component;\n this.params = params;\n const { target, className } = params.config;\n this.target(target);\n this.className(className);\n return this;\n }\n}\n","import {\n TITLE,\n SUB_TITLE,\n LEGEND, VERTICAL,\n HORIZONTAL,\n WIDTH,\n HEIGHT,\n TOP,\n LEFT,\n RIGHT,\n MESSAGE,\n GRID,\n NO_DATA_MESSAGE\n} from '../constants';\nimport HeaderComponent from './components/headerComponent';\nimport LegendComponent from './components/legendComponent';\nimport ScrollComponent from './components/scroll-component';\nimport GridComponent from './components/grid-component';\nimport MessageComponent from './components/message-component';\nimport { TITLE_CONFIG, SUB_TITLE_CONFIG, CANVAS, LAYOUT_ALIGN, MESSAGE_CONFIG } from './defaults';\nimport { ROW_MATRIX_INDEX, COLUMN_MATRIX_INDEX, CENTER } from '../../../layout/src/enums/constants';\n\n// Mapping between types of headers and their required configs for wrapper creation\nconst headerMap = {\n title: {\n headerCell: 'titleCell',\n configType: TITLE_CONFIG\n },\n subtitle: {\n headerCell: 'subtitleCell',\n configType: SUB_TITLE_CONFIG\n }\n};\n/**\n * returns if data is Valid\n *\n *\n * @param {Object} params object where data has to be checked for validity\n * @return {Boolean} Returns true if all of the params are valid\n */\nconst checkParamsValidation = params => Object.keys(params).every((param => params[param]));\n\n/**\n * returns if message Component is needed or not\n *\n *\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Boolean} Returns if grid is present\n */\nconst isGridPresent = (renderDetails) => {\n const { rows, columns, values } = renderDetails.components;\n return checkParamsValidation({ rows, columns, values });\n};\n\n/**\n * Creates the wrapper for the header, i.e., title and subtitle to be used in the tree layout\n *\n *\n * @param {string} headerType type of header: title/subtite\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createHeaderWrapper = (headerType, layoutManager, renderDetails) => {\n let wrapper = null;\n\n const { components, layoutConfig } = renderDetails;\n const { headerCell, configType } = headerMap[headerType];\n const target = { target: CANVAS };\n\n if (components.headers && components.headers[headerCell]) {\n let headerConfig = layoutConfig[headerType];\n const header = components.headers[headerCell];\n\n headerConfig = Object.assign({}, headerConfig, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n alignWith: `${ROW_MATRIX_INDEX[0]}-${COLUMN_MATRIX_INDEX[1]}`,\n alignment: LAYOUT_ALIGN.LEFT,\n className: configType.className\n });\n\n if (headerConfig.align === CENTER) {\n headerConfig.alignment = null;\n headerConfig.alignWith = null;\n }\n if (headerConfig.align === RIGHT) {\n headerConfig.alignment = RIGHT;\n }\n\n const wrapperParams = {\n name: headerType,\n component: header,\n config: headerConfig\n };\n\n const existingComponent = layoutManager.getComponent(headerType);\n if (existingComponent) {\n wrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n wrapper = new HeaderComponent(wrapperParams);\n }\n }\n return wrapper;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} canvas canvas instance\n * @return {Instance} Returns the respective wrappers\n */\nconst createMessageWrapper = (layoutManager, canvas, renderDetails, renderGrid) => {\n let messageWrapper = null;\n\n if (!renderGrid) {\n const defaultDimensions = { height: canvas.height(), width: canvas.width() };\n const gridComponent = layoutManager.getComponent(GRID);\n const { height, width } = (gridComponent && gridComponent.getBoundBox()) || defaultDimensions;\n const target = { target: CANVAS };\n const config = {\n ...target,\n dimensions: { height, width },\n message: NO_DATA_MESSAGE,\n classPrefix: MESSAGE_CONFIG\n };\n const wrapperParams = {\n name: MESSAGE,\n component: null,\n config\n };\n const existingComponent = layoutManager.getComponent(MESSAGE);\n\n if (existingComponent) {\n messageWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n messageWrapper = new MessageComponent(wrapperParams);\n }\n return messageWrapper;\n }\n return null;\n};\n\n// Mapping between types of scrollBars and their required configs for wrapper creation\nconst scrollBarMap = config => ({\n vertical: {\n componentName: 'verticalScrollBar',\n width: 'thickness',\n height: 'layoutBasedMeasure',\n layoutBasedMeasure: HEIGHT,\n viewMeasure: 'viewHeight',\n rowAlign: 1,\n colAlign: config.align === 'right' ? 2 : 0,\n position: config.align,\n alignment: TOP\n },\n horizontal: {\n componentName: 'horizontalScrollBar',\n width: 'layoutBasedMeasure',\n layoutBasedMeasure: WIDTH,\n viewMeasure: 'viewWidth',\n height: 'thickness',\n rowAlign: config.align === 'top' ? 0 : 2,\n colAlign: 1,\n position: config.align,\n alignment: LEFT\n }\n});\n\n/**\n * Creates the wrapper for the scroller, i.e., horizontal and vertical to be used in the tree layout\n *\n *\n * @param {string} scrollBarType type of scrollbar: horizontal/vertical\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst createScrollBarWrapper = (scrollBarType, layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let scrollBarWrapper = null;\n const { layoutConfig } = renderDetails;\n const target = { target: CANVAS };\n const { scrollBar } = layoutConfig;\n const { layoutDimensions } = grid.viewInfo();\n const {\n actualCenterMeasures,\n unitHeights,\n unitWidths\n } = layoutDimensions;\n const {\n componentName, layoutBasedMeasure, width, height, rowAlign, colAlign,\n viewMeasure, position, alignment\n } = scrollBarMap(scrollBar[scrollBarType])[scrollBarType];\n const dimensions = {\n thickness: scrollBar.thickness,\n layoutBasedMeasure: layoutDimensions[viewMeasure][1]\n };\n const isScroll = grid.scrollInfo()[scrollBarType];\n const totalLength = actualCenterMeasures[layoutBasedMeasure];\n const viewLength = layoutDimensions[viewMeasure][1];\n\n const scrollConfig = Object.assign({}, {\n classPrefix: layoutConfig.classPrefix,\n ...target,\n scrollBarComponentConfig: {\n ...scrollBar,\n classPrefix: layoutConfig.classPrefix\n },\n\n type: scrollBarType,\n alignWith: `${ROW_MATRIX_INDEX[rowAlign]}-${COLUMN_MATRIX_INDEX[colAlign]}`,\n alignment,\n position\n });\n\n const wrapperParams = {\n name: componentName,\n config: scrollConfig,\n dimensions: {\n width: dimensions[width],\n height: dimensions[height],\n totalLength,\n viewLength,\n unitHeights,\n unitWidths\n }\n };\n\n const existingComponent = layoutManager.getComponent(componentName);\n\n if (!isScroll) {\n existingComponent && existingComponent.remove();\n return null;\n }\n\n if (existingComponent) {\n scrollBarWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n scrollBarWrapper = new ScrollComponent(wrapperParams);\n }\n\n return scrollBarWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the legend to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers\n */\nconst createLegendWrapper = (layoutManager, renderDetails, renderGrid) => {\n if (renderGrid) {\n let legendWrapper = null;\n const { components, layoutConfig, measurement } = renderDetails;\n const target = { target: CANVAS };\n\n if (components.legends && components.legends.length) {\n const legendConfig = { ...layoutConfig.legend, ...target, measurement };\n const wrapperParams = {\n name: LEGEND,\n component: components.legends,\n config: legendConfig\n };\n\n const existingComponent = layoutManager.getComponent(LEGEND);\n\n if (existingComponent) {\n legendWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n legendWrapper = new LegendComponent(wrapperParams);\n }\n }\n return legendWrapper;\n }\n return null;\n};\n\n/**\n * Creates the wrapper for the grid layout to be used in the tree layout\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @param {GridLayout} grid Instance of the grid layout\n * @return {Instance} Returns the respective wrappers\n */\nconst gridLayoutWrapper = (layoutManager, renderDetails, grid, renderGrid) => {\n if (renderGrid) {\n let gridWrapper = null;\n const target = { target: CANVAS };\n const { layoutConfig } = renderDetails;\n\n const config = {\n ...target,\n pagination: layoutConfig.pagination,\n classPrefix: layoutConfig.classPrefix,\n dimensions: { height: 0, width: 0 }\n };\n const wrapperParams = {\n name: GRID,\n component: grid,\n config\n };\n const existingComponent = layoutManager.getComponent(GRID);\n if (existingComponent) {\n gridWrapper = existingComponent\n .updateWrapper(wrapperParams);\n } else {\n gridWrapper = new GridComponent(wrapperParams);\n }\n return gridWrapper;\n }\n return null;\n};\n/**\n * Responsible for providing the wrapper creators for every component in Muze.\n * This function, when called, returns the set of components and their respective wrappers.\n *\n *\n *\n * @param {LayoutManager} layoutManager instance of Layout Manager which manages the layouting of the components\n * @param {GridLayout} grid Instance of the grid layout\n * @param {Object} renderDetails Extra details required for rendering the headers\n * @return {Instance} Returns the respective wrappers for each component\n */\nexport const componentWrapperMaker = (canvas, grid, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const renderGrid = isGridPresent(renderDetails);\n return {\n title: createHeaderWrapper(TITLE, layoutManager, renderDetails),\n subtitle: createHeaderWrapper(SUB_TITLE, layoutManager, renderDetails),\n message: createMessageWrapper(layoutManager, canvas, renderDetails, renderGrid),\n legend: createLegendWrapper(layoutManager, renderDetails, renderGrid),\n grid: gridLayoutWrapper(layoutManager, renderDetails, grid, renderGrid),\n verticalScrollBar: createScrollBarWrapper(VERTICAL, layoutManager, renderDetails, grid, renderGrid),\n horizontalScrollBar: createScrollBarWrapper(HORIZONTAL, layoutManager, renderDetails, grid, renderGrid)\n };\n};\n","export class ScrollManager {\n\n constructor () {\n this._scrollBarComponents = {};\n this._attachedComponents = {};\n }\n\n scrollBarComponents (...sbc) {\n if (sbc.length) {\n this._scrollBarComponents = sbc[0];\n return this;\n }\n return this._scrollBarComponents;\n }\n\n attachedComponents (...abc) {\n if (abc.length) {\n this._attachedComponents = abc[0];\n return this;\n }\n return this._attachedComponents;\n }\n\n preventBrowserScroll (type, event) {\n if (this.scrollBarComponents()[type]) {\n // Prevent default behaviour and stop propagating\n event.preventDefault();\n event.stopPropagation();\n }\n return this;\n }\n\n performAttachedScrollFunction (type, movedViewLength) {\n Object.values(this.attachedComponents()).forEach((e) => {\n e.performScrollAction(type, movedViewLength);\n });\n return this;\n }\n\n triggerScrollBarAction (type, delta) {\n this.scrollBarComponents()[type] && this.scrollBarComponents()[type].scrollDeltaTo(delta);\n return this;\n }\n}\n","import { mergeRecursive } from 'muze-utils';\nimport { arrangeComponents } from './component-resolver';\nimport { createHeaders } from './title-maker';\nimport { createLegend, getLegendSpace } from './legend-maker';\nimport { componentWrapperMaker } from './component-wrapper-maker';\nimport {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT,\n TITLE,\n SUB_TITLE,\n LEGEND,\n VERTICAL_SCROLL_BAR,\n HORIZONTAL_SCROLL_BAR,\n GRID,\n MESSAGE\n} from '../constants';\nimport { ScrollManager } from './scroll-manager';\n\n/**\n *\n *\n * @param {*} context\n *\n */\nexport const prepareLayout = (layout, renderDetails) => {\n const { components, layoutConfig, measurement } = renderDetails;\n const {\n rows,\n columns,\n values,\n cornerMatrices\n } = components;\n const {\n topLeft,\n topRight,\n bottomLeft,\n bottomRight\n } = cornerMatrices;\n if (rows && columns) {\n layout.measurement(measurement)\n .config(layoutConfig)\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 *\n * @param {*} context\n * @param {*} mount\n *\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 priority,\n rows,\n columns,\n values\n } = visGroup.placeholderInfo();\n const {\n minWidth,\n minHeight,\n classPrefix,\n showHeaders,\n legend,\n pagination,\n scrollBar\n } = context.config();\n\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\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 buffer: scrollBar.thickness,\n pagination,\n title: titleConfig,\n subtitle: subtitleConfig,\n isColumnSizeEqual,\n isRowSizeEqual,\n mount,\n priority\n });\n return {\n layoutConfig,\n components,\n measurement\n };\n};\n\nconst componentIndexes = {\n title: 0,\n subtitle: 1,\n legend: 2,\n verticalScrollBar: 3,\n horizontalScrollBar: 4,\n grid: 5,\n message: 6\n};\n\nconst componentNames = {\n 0: TITLE,\n 1: SUB_TITLE,\n 2: LEGEND,\n 3: VERTICAL_SCROLL_BAR,\n 4: HORIZONTAL_SCROLL_BAR,\n 5: GRID,\n 6: MESSAGE\n};\n\nconst attachListeners = (componentWrappers) => {\n componentWrappers.forEach((componentWrapper) => {\n if (componentWrapper) {\n componentWrapper.attachListener();\n }\n });\n};\n\n/**\n * Responsible for creating a scroll manager that manages interactions between the grid\n * component and the scroll bar components\n *\n * @param {Array} componentWrappers Contains the wrappers for all the components\n * @param {Canvas} canvas Instance of the current canvas\n * @return {Array} Positions of units either horizontal or vertical\n */\nconst createScrollManager = (componentWrappers, canvas) => {\n const {\n horizontalScrollBar,\n verticalScrollBar,\n grid\n } = componentIndexes;\n\n const horizontalScrollWrapper = componentWrappers[horizontalScrollBar];\n const verticalScrollWrapper = componentWrappers[verticalScrollBar];\n const gridWrapper = componentWrappers[grid];\n const scrollBarManager = new ScrollManager();\n const scrollBarComponents = {};\n\n verticalScrollWrapper && (scrollBarComponents.vertical = verticalScrollWrapper);\n horizontalScrollWrapper && (scrollBarComponents.horizontal = horizontalScrollWrapper);\n\n scrollBarManager\n .scrollBarComponents(scrollBarComponents)\n .attachedComponents({\n grid: gridWrapper\n });\n canvas.composition().hScrollBar = horizontalScrollWrapper;\n canvas.composition().vScrollBar = verticalScrollWrapper;\n\n [horizontalScrollWrapper, verticalScrollWrapper].forEach((wrapper) => {\n wrapper && wrapper.manager(scrollBarManager);\n });\n\n gridWrapper.scrollBarManager(scrollBarManager);\n};\n\nexport const renderLayout = (canvas, renderDetails) => {\n const layoutManager = canvas._layoutManager;\n const gridLayout = canvas.layout();\n const {\n\n grid\n } = componentIndexes;\n\n // Get the component wrappers\n const compWrappers = componentWrapperMaker(canvas, gridLayout, renderDetails);\n const componentWrappers = Object.keys(componentIndexes).map(e => compWrappers[e]);\n const gridWrapper = componentWrappers[grid];\n if (gridWrapper) {\n createScrollManager(componentWrappers, canvas);\n }\n\n componentWrappers.forEach((componentWrapper, index) => {\n if (!componentWrapper) {\n const deleteElementName = componentNames[index];\n layoutManager.removeComponent(deleteElementName);\n }\n });\n layoutManager.registerComponents(componentWrappers).compute();\n attachListeners(componentWrappers);\n};\n","import {\n getDataModelFromIdentifiers,\n FieldType,\n mergeRecursive,\n isSimpleObject,\n CommonProps\n} from 'muze-utils';\nimport { Firebolt } from '@chartshq/muze-firebolt';\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 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 selectionBox: () => false\n }\n};\n\n/**\n * This class is responsible for dispatching any behavioural action to all the visual units housed by the canvas.\n * It is created by {@link Canvas}. This class does not handle any physical actions. Physical actions get triggered\n * in {@link VisualUnit} which is managed by it's own firebolt instance. The firebolt instance of canvas only\n * propagates the action to all the visual units in it's composition.\n *\n * To get the firebolt instance of {@link Canvas}\n * ```\n * const firebolt = canvas.firebolt();\n * ```\n *\n * @class GroupFireBolt\n * @public\n */\nexport default class GroupFireBolt extends Firebolt {\n constructor (...params) {\n super(...params);\n this._interactionPolicy = this.constructor.defaultInteractionPolicy();\n this.crossInteractionPolicy(this.constructor.defaultCrossInteractionPolicy());\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 const context = this.context;\n applyInteractionPolicy(this);\n context._throwback.registerImmediateListener([CommonProps.MATRIX_CREATED], () => {\n applyInteractionPolicy(this);\n });\n return this;\n }\n return this._crossInteractionPolicy;\n }\n\n /**\n * Dispatches a behavioural action with a payload. It takes the name of the behavioural action and a payload\n * object which contains the criteria aend an array of side effects which determines what side effects are\n * going to be shown in each visual unit of the canvas. It prepares the datamodel from the given criteria\n * and initiates a propagation from the datamodel of canvas. Then all the visual units of canvas which listens\n * to the propagation gets informed on which rows got selected and dispatches the behavioural action sent during\n * propagation.\n *\n * To dispatch a behavioural action on the canvas\n * ```\n * // Get the firebolt instance of the canvas\n * const firebolt = canvas.firebolt();\n * // Dispatch a brush behaviour\n * firebolt.dispatchBehaviour('brush', {\n * // Selects all the rows with Horsepower having range between 100 and 200.\n * criteria: {\n * Horsepower: [100, 200]\n * }\n * });\n * // On dispatch of this behavioural action, a selection box gets created and plots gets faded out which are the\n * // default side effects mapped to this behavioural action.\n * ```\n *\n * ```\n * Additionally, it can also be passed an array of side effects in the payload.\n * // Dispatch a select behaviour with only crossline as side effect.\n * firebolt.dispatchBehaviour('select', {\n * criteria: {\n * Cylinders: ['8']\n * },\n * sideEffects: ['crossline']\n * });\n * ```\n *\n * @public\n *\n * @param {string} behaviour Name of the behavioural action\n * @param {Object} payload Object which contains the interaction information.\n * @param {Object | Array.} payload.criteria Identifiers by which the selection happens.\n * @param {Array.} payload.sideEffects Side effects which needs to be shown.\n *\n * @return {GroupFireBolt} Instance of firebolt.\n */\n dispatchBehaviour (behaviour, payload) {\n const propPayload = Object.assign(payload);\n const criteria = propPayload.criteria;\n const data = this.context.composition().visualGroup.getGroupByData();\n const fieldsConfig = data.getFieldsConfig();\n const model = getDataModelFromIdentifiers(data, criteria);\n const behaviouralAction = this._actions.behavioural[behaviour];\n\n if (behaviouralAction) {\n const fields = isSimpleObject(criteria) ? Object.keys(criteria) : (criteria ? criteria[0] : []);\n const validFields = fields.filter(field => field in fieldsConfig);\n const mutates = behaviouralAction.constructor.mutates();\n const propConfig = {\n payload: propPayload,\n action: behaviour,\n criteria: model,\n sourceId: this.context.alias(),\n isMutableAction: mutates,\n propagateInterpolatedValues: validFields.every(field => fieldsConfig[field].def.type ===\n FieldType.MEASURE)\n };\n data.propagate(model, propConfig, true);\n }\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","import GroupFireBolt from './group-firebolt';\n\nexport default GroupFireBolt;\n","export const APP_INITIAL_STATE = {\n app: {\n group: {},\n units: {},\n layers: {},\n canvas: {}\n },\n local: {\n canvas: {},\n group: {},\n units: {},\n layers: {}\n }\n};\n\n","import { GridLayout } from '@chartshq/layout';\nimport { transactor, Store, getUniqueId, selectElement, STATE_NAMESPACES, CommonProps } from 'muze-utils';\nimport { physicalActions, sideEffects, behaviouralActions, behaviourEffectMap } from '@chartshq/muze-firebolt';\nimport { RETINAL } from '../constants';\nimport TransactionSupport from '../transaction-support';\nimport { getRenderDetails, prepareLayout, renderLayout } from './layout-maker';\nimport { localOptions, canvasOptions } from './local-options';\nimport GroupFireBolt from './firebolt';\nimport options from '../options';\nimport { APP_INITIAL_STATE } from './app-state';\nimport { initCanvas,\n setupChangeListener,\n setLabelRotationForAxes,\n createGroupState,\n createLayoutManager,\n setLayoutInfForUnits\n} from './helper';\n/**\n * Canvas is a logical component which houses a visualization by taking multiple variable in different encoding channel.\n * Canvas manages lifecycle of many other logical component and exposes one consistent interface for creation of chart.\n * Canvas is intialized from environment with settings from environment and singleton dependencies.\n *\n * To create an instance of canvas\n * ```\n * const env = Muze();\n * const canvas = env.canvas()\n * ```\n *\n *\n * @class\n * @public\n * @module Canvas\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(APP_INITIAL_STATE);\n\n this._throwback = new Store({\n [CommonProps.MATRIX_CREATED]: false,\n [CommonProps.ON_LAYER_DRAW]: null\n });\n\n // Setters and getters will be mounted on this. The object will be mutated.\n const namespace = STATE_NAMESPACES.CANVAS_LOCAL_NAMESPACE;\n const allOptions = Object.assign({}, options, localOptions, canvasOptions);\n\n transactor(this, allOptions, this._store, {\n namespace\n });\n\n this.dependencies(Object.assign({}, globalDependencies, this._dependencies));\n this.firebolt(new GroupFireBolt(this, {\n behavioural: behaviouralActions,\n physical: physicalActions,\n physicalBehaviouralMap: {}\n }, sideEffects, behaviourEffectMap));\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 // init layoutManager\n this._layoutManager = createLayoutManager();\n }\n\n /**\n * Retrieves an instance of layout which is responsible for layouting. Layout is responsible for creating faceted\n * presentation using table layout.\n *\n * @public\n *\n * @return {GridLayout} Instance of layout attached to canvas.\n */\n layout (...params) {\n if (params.length) {\n return this;\n }\n return this.composition().layout;\n }\n\n /**\n * Retrieves the composition for a canvas\n *\n * @public\n *\n * @return {object} Instances of the components which canvas requires to draw the full visualization.\n * ```\n * {\n * layout: // Instance of {@link GridLayout}\n * legend: // Instance of {@link Legend}\n * subtitle: // Instance of {@link TextCell} using which the title is rendered\n * title: // Instance of {@link TextCell} using which the title is rendered\n * visualGroup: // Instance of {@link visualGroup}\n * }\n * ```\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 * Sets or gets the alias of the canvas. Alias is a name by which the canvas can be referred.\n *\n * When setter\n * @param {string} alias Name of the alias.\n *\n * @return {Canvas} Instance of the canvas.\n *\n * When getter\n *\n * @return {string} Alias of canvas.\n *\n * @public\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 *\n * @memberof Canvas\n */\n static formalName () {\n return 'canvas';\n }\n\n /**\n * Returns the instance of firebolt associated with this canvas. The firebolt instance can be used to dispatch a\n * behaviour dynamically on the canvas. This firebolt does not handle any physical actions. It is just used to\n * propagate the action to all the visual units in it's composition.\n *\n * @public\n *\n * @return {GroupFireBolt} Instance of firebolt associated with 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 createGroupState(this);\n this.composition().visualGroup.alias(this.alias()).store(this._store);\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 *\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 * Returns a promise for various {@link LifecycleEvents} of the various components of canvas. The promise gets\n * resolved once the particular event gets completed.\n *\n * To use this,\n * ```\n * canvas.once('layer.drawn').then(() => {\n * // Do any post drawing work here.\n * });\n * ```\n * @public\n *\n * @param {string} eventName Name of the lifecycle event.\n *\n * @return {Promise} A pending promise waiting for resolve to be called.\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 // removeChild(mount);\n const lifeCycleManager = this.dependencies().lifeCycleManager;\n // Get render details including arrangement and measurement\n const renderDetails = getRenderDetails(this, mount);\n lifeCycleManager.notify({ client: this, action: 'beforedraw' });\n // Prepare the layout by triggering the matrix calculation\n prepareLayout(this.layout(), renderDetails);\n\n this._layoutManager.dimension({\n height: renderDetails.measurement.canvasHeight,\n width: renderDetails.measurement.canvasWidth\n });\n\n this._layoutManager.renderAt(mount);\n\n // Render each component\n renderLayout(this, renderDetails);\n\n setLayoutInfForUnits(this);\n\n // setLabelRotation\n setLabelRotationForAxes(this);\n }\n\n /**\n * Returns the instances of x axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the top axis and the second element represents the bottom\n * // axis.\n * [\n * [X1, X2],\n * [X3, X4]\n * ]\n * ```\n * @public\n *\n * @return {Array.} Instances of x axis.\n */\n xAxes () {\n return this.composition().visualGroup.getAxes('x');\n }\n\n /**\n * Returns the instances of y axis of the canvas. It returns the instances in a two dimensional array form.\n *\n * ```\n * // The first element in the sub array represents the left axis and the second element represents the right\n * // axis.\n * [\n * [Y1, Y2],\n * [Y3, Y4]\n * ]\n * ```\n * @public\n * @return {Array.} Instances of y axis.\n */\n yAxes () {\n return this.composition().visualGroup.getAxes('y');\n }\n\n /**\n * Returns all the retinal axis of the canvas. Color, shape and size axis are combinedly called retinal axis.\n *\n * @public\n * @return {Object} Instances of retinal axis.\n * ```\n * {\n * color: [ColorAxis], // Array of color axis.\n * shape: [ShapeAxis], // Array of shape axis.\n * size: [SizeAxis] // Array of size axis.\n * }\n * ```\n */\n getRetinalAxes () {\n const visualGroup = this.composition().visualGroup;\n return visualGroup.getAxes(RETINAL);\n }\n\n mount (...params) {\n if (params.length) {\n let value = params[0];\n if (typeof params[0] === 'string') {\n value = selectElement(params[0]).node();\n }\n this._mount = value;\n return this;\n }\n return this._mount;\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 Store\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};\nmuze.Model = new Store().model.constructor;\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 bcd194b9..830a4e85 100644 --- a/packages/muze/npm/package.json +++ b/packages/muze/npm/package.json @@ -1,13 +1,13 @@ { "name": "muze", - "version": "1.2.1", + "version": "1.2.2", "description": "Composable visualisation library for web with a data-first approach", "homepage": "https://muzejs.org", "license": "MIT", "author": "Muzejs.org (https://muzejs.org/)", "contributors": [ { - "name": "Akash Ghoswami", + "name": "Akash Goswami", "email": "akashgoswami90s@gmail.com" }, { @@ -28,12 +28,21 @@ }, { "name": "Rousan Ali", - "email": "rousanali786@gmail.com", + "email": "hello@rousan.io", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "duttaujjalkumar@live.com" + "email": "duttaujjal143@gmail.com" + }, + { + "name": "Adarsh Lilha", + "email": "adarshlilha@gmail.com", + "url": "https://adarshlilha.com" + }, + { + "name": "Swati Mukherjee", + "email": "swati@charts.com" } ], "main": "dist/muze.js", diff --git a/packages/muze/package.json b/packages/muze/package.json index b2f62304..bcbd07f1 100644 --- a/packages/muze/package.json +++ b/packages/muze/package.json @@ -1,7 +1,7 @@ { "name": "muze", "private": true, - "version": "1.2.1", + "version": "1.2.2", "description": "Composable visualisation library for web with a data-first approach", "homepage": "https://muzejs.org", "author": "Muzejs.org (https://muzejs.org/)", @@ -29,12 +29,21 @@ }, { "name": "Rousan Ali", - "email": "rousanali786@gmail.com", + "email": "hello@rousan.io", "url": "https://rousan.io" }, { "name": "Ujjal Kumar Dutta", - "email": "duttaujjalkumar@live.com" + "email": "duttaujjal143@gmail.com" + }, + { + "name": "Adarsh Lilha", + "email": "adarshlilha@gmail.com", + "url": "https://adarshlilha.com" + }, + { + "name": "Swati Mukherjee", + "email": "swati@charts.com" } ], "main": "src/index.js",